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

1.1       root        1: /*
                      2:  * C second pass -- tables
                      3:  */
                      4: #include "c1.h"
                      5: /*
                      6:  * Operator dope table-- see description in c0.
                      7:  */
                      8: int opdope[] = {
                      9:        000000, /* EOFC */
                     10:        000000, /* ; */
                     11:        000000, /* { */
                     12:        000000, /* } */
                     13:        036000, /* [ */
                     14:        002000, /* ] */
                     15:        036000, /* ( */
                     16:        002000, /* ) */
                     17:        014201, /* : */
                     18:        007001, /* , */
                     19:        000000, /* field selection */
                     20:        000000, /* reverse field selection */
                     21:        000001, /* temporary field selection */
                     22:        000001, /* int->ptr */
                     23:        000001, /* ptr->int */
                     24:        000001, /* long->ptr */
                     25:        000001, /* field assignment */
                     26:        000001, /* >> unsigned */
                     27:        000001, /* >> unsigned */
                     28:        000000, /* 19 */
                     29:        000400, /* name */
                     30:        000400, /* short constant */
                     31:        000400, /* string */
                     32:        000400, /* float */
                     33:        000400, /* double */
                     34:        0000400,        /* long const */
                     35:        000400, /* long const <= 16 bits */
                     36:        000400, /* autoi, *r++ */
                     37:        000400, /* autod, *--r */
                     38:        000400, /* () empty arglist */
                     39:        034213, /* ++pre */
                     40:        034213, /* --pre */
                     41:        034213, /* ++post */
                     42:        034213, /* --post */
                     43:        034220, /* !un */
                     44:        034202, /* &un */
                     45:        034220, /* *un */
                     46:        034200, /* -un */
                     47:        034220, /* ~un */
                     48:        036001, /* . (structure reference) */
                     49:        030101, /* + */
                     50:        030001, /* - */
                     51:        032101, /* * */
                     52:        032001, /* / */
                     53:        032001, /* % */
                     54:        026061, /* >> */
                     55:        026061, /* << */
                     56:        020161, /* & */
                     57:        016161, /* | */
                     58:        016161, /* ^ */
                     59:        036001, /* -> */
                     60:        001000, /* int -> double */
                     61:        001000, /* double -> int */
                     62:        000001, /* && */
                     63:        000001, /* || */
                     64:        030001, /* &~ */
                     65:        001000, /* double -> long */
                     66:        001000, /* long -> double */
                     67:        001000, /* integer -> long */
                     68:        000000, /* long -> integer */
                     69:        022005, /* == */
                     70:        022005, /* != */
                     71:        024005, /* <= */
                     72:        024005, /* < */
                     73:        024005, /* >= */
                     74:        024005, /* > */
                     75:        024005, /* <p */
                     76:        024005, /* <=p */
                     77:        024005, /* >p */
                     78:        024005, /* >=p */
                     79:        012213, /* += */
                     80:        012213, /* -= */
                     81:        012213, /* *= */
                     82:        012213, /* /= */
                     83:        012213, /* %= */
                     84:        012253, /* >>= */
                     85:        012253, /* <<= */
                     86:        012253, /* &= */
                     87:        012253, /* |= */
                     88:        012253, /* ^= */
                     89:        012213, /* = */
                     90:        030001, /* & for tests */
                     91:        032001, /*  * (long) */
                     92:        032001, /*  / (long) */
                     93:        032001, /* % (long) */
                     94:        012253, /* &= ~ */
                     95:        012213, /* *= (long) */
                     96:        012213, /* / (long) */
                     97:        012213, /* % (long) */
                     98:        000000, /* 89 */
                     99:        014201, /* ? */
                    100:        026061, /* long << */
                    101:        012253, /* long <<= */
                    102:        000101, /* max */
                    103:        000101, /* maxp */
                    104:        000101, /* min */
                    105:        000101, /* minp */
                    106:        000001, /* , */
                    107:        000000, /* 98 */
                    108:        000000, /* 99 */
                    109:        036001, /* call */
                    110:        036000, /* mcall */
                    111:        000000, /* goto */
                    112:        000000, /* jump cond */
                    113:        000000, /* branch cond */
                    114:        000400, /* set nregs */
                    115:        000000, /* 106 */
                    116:        030001, /* 107 */
                    117:        000000, /* 108 */
                    118:        000000, /* int->char */
                    119:        000000, /* force r0 */
                    120:        000000, /* 111 */
                    121:        000000, /* 112 */
                    122:        000000, /* 113 */
                    123:        000000, /* 114 */
                    124:        000000, /* structure assign */
                    125:        000001, /* struct assignment setup */
                    126:        032001, /* unsigned / */
                    127:        032001, /* unsigned % */
                    128:        012213, /* unsigned /= */
                    129:        012213, /* unsigned %= */
                    130: };
                    131: 
                    132: char   *opntab[] = {
                    133:        0,
                    134:        0,
                    135:        0,
                    136:        0,
                    137:        0,
                    138:        0,
                    139:        0,
                    140:        0,
                    141:        ":",
                    142:        ",",
                    143:        "field select",
                    144:        0,
                    145:        0,
                    146:        "int->ptr",
                    147:        "ptr->int",
                    148:        "long->ptr",
                    149:        "field assign",
                    150:        ">>",
                    151:        ">>",
                    152:        0,
                    153:        "name",
                    154:        "short constant",
                    155:        "string",
                    156:        "float",
                    157:        "double",
                    158:        "long constant",
                    159:        "long constant",
                    160:        "*r++",
                    161:        "*--r",
                    162:        "()",
                    163:        "++pre",
                    164:        "--pre",
                    165:        "++post",
                    166:        "--post",
                    167:        "!un",
                    168:        "&",
                    169:        "*",
                    170:        "-",
                    171:        "~",
                    172:        ".",
                    173:        "+",
                    174:        "-",
                    175:        "*",
                    176:        "/",
                    177:        "%",
                    178:        ">>",
                    179:        "<<",
                    180:        "&",
                    181:        "|",
                    182:        "^",
                    183:        "->",
                    184:        "int->double",
                    185:        "double->int",
                    186:        "&&",
                    187:        "||",
                    188:        "&~",
                    189:        "double->long",
                    190:        "long->double",
                    191:        "integer->long",
                    192:        "long->integer",
                    193:        "==",
                    194:        "!=",
                    195:        "<=",
                    196:        "<",
                    197:        ">=",
                    198:        ">",
                    199:        "<p",
                    200:        "<=p",
                    201:        ">p",
                    202:        ">=p",
                    203:        "+=",
                    204:        "-=",
                    205:        "*=",
                    206:        "/=",
                    207:        "%=",
                    208:        ">>=",
                    209:        "<<=",
                    210:        "&=",
                    211:        "|=",
                    212:        "^=",
                    213:        "=",
                    214:        "& for tests",
                    215:        "*",
                    216:        "/",
                    217:        "%",
                    218:        "&= ~",
                    219:        "*=",
                    220:        "/=",
                    221:        "%=",
                    222:        0,
                    223:        "?",
                    224:        "<<",
                    225:        "<<=",
                    226:        "\\/",
                    227:        "\\/",
                    228:        "/\\",
                    229:        "/\\",
                    230:        0,
                    231:        "call",
                    232:        "call",
                    233:        "call",
                    234:        0,
                    235:        "goto",
                    236:        "jump cond",
                    237:        "branch cond",
                    238:        "set nregs",
                    239:        "load value",
                    240:        "ptr->integer",
                    241:        0,
                    242:        "int->char",
                    243:        "force register",
                    244:        "",
                    245:        "",
                    246:        "",
                    247:        "",
                    248:        "=structure",
                    249:        "= (struct setup)",
                    250:        "/",
                    251:        "%",
                    252:        "/=",
                    253:        "%=",
                    254: };
                    255: 
                    256: /*
                    257:  * Strings for instruction tables.
                    258:  */
                    259: char   mov[]   = "mov";
                    260: char   clr[]   = "clr";
                    261: char   cmp[]   = "cmp";
                    262: char   tst[]   = "tst";
                    263: char   add[]   = "add";
                    264: char   sub[]   = "sub";
                    265: char   inc[]   = "inc";
                    266: char   dec[]   = "dec";
                    267: char   mul[]   = "mul";
                    268: char   div[]   = "div";
                    269: char   asr[]   = "asr";
                    270: char   ash[]   = "ash";
                    271: char   asl[]   = "asl";
                    272: char   bic[]   = "bic";
                    273: char   bic1[]  = "bic $1,";
                    274: char   bit[]   = "bit";
                    275: char   bit1[]  = "bit $1,";
                    276: char   bis[]   = "bis";
                    277: char   bis1[]  = "bis $1,";
                    278: char   xor[]   = "xor";
                    279: char   neg[]   = "neg";
                    280: char   com[]   = "com";
                    281: char   stdol[] = "*$";
                    282: char   ashc[]  = "ashc";
                    283: char   slmul[] = "lmul";
                    284: char   sldiv[] = "ldiv";
                    285: char   slrem[] = "lrem";
                    286: char   almul[] = "almul";
                    287: char   aldiv[] = "aldiv";
                    288: char   alrem[] = "alrem";
                    289: char   udiv[]  = "udiv";
                    290: char   urem[]  = "urem";
                    291: char   jeq[]   = "jeq";
                    292: char   jne[]   = "jne";
                    293: char   jle[]   = "jle";
                    294: char   jgt[]   = "jgt";
                    295: char   jlt[]   = "jlt";
                    296: char   jge[]   = "jge";
                    297: char   jlos[]  = "jlos";
                    298: char   jhi[]   = "jhi";
                    299: char   jlo[]   = "jlo";
                    300: char   jhis[]  = "jhis";
                    301: char   nop[]   = "/nop";
                    302: char   jbr[]   = "jbr";
                    303: 
                    304: /*
                    305:  * Instruction tables, accessed by
                    306:  * I (first operand) or I' (second) macros.
                    307:  */
                    308: 
                    309: struct instab instab[] = {
                    310:        LOAD,   mov,    tst,
                    311:        ASSIGN, mov,    clr,
                    312:        EQUAL,  cmp,    tst,
                    313:        NEQUAL, cmp,    tst,
                    314:        LESSEQ, cmp,    tst,
                    315:        LESS,   cmp,    tst,
                    316:        GREATEQ,cmp,    tst,
                    317:        GREAT,  cmp,    tst,
                    318:        LESSEQP,cmp,    tst,
                    319:        LESSP,  cmp,    tst,
                    320:        GREATQP,cmp,    tst,
                    321:        GREATP, cmp,    tst,
                    322:        PLUS,   add,    inc,
                    323:        ASPLUS, add,    inc,
                    324:        MINUS,  sub,    dec,
                    325:        ASMINUS,sub,    dec,
                    326:        INCBEF, add,    inc,
                    327:        DECBEF, sub,    dec,
                    328:        INCAFT, add,    inc,
                    329:        DECAFT, sub,    dec,
                    330:        TIMES,  mul,    mul,
                    331:        ASTIMES,mul,    mul,
                    332:        DIVIDE, div,    div,
                    333:        ASDIV,  div,    div,
                    334:        MOD,    div,    div,
                    335:        ASMOD,  div,    div,
                    336:        PTOI,   div,    div,
                    337:        RSHIFT, ash,    asr,
                    338:        ASRSH,  ash,    asr,
                    339:        LSHIFT, ash,    asl,
                    340:        ASLSH,  ash,    asl,
                    341:        AND,    bic,    bic1,
                    342:        ANDN,   bic,    bic1,
                    343:        ASANDN, bic,    bic1,
                    344:        TAND,   bit,    bit1,
                    345:        OR,     bis,    bis1,
                    346:        ASOR,   bis,    bis1,
                    347:        EXOR,   xor,    xor,
                    348:        ASXOR,  xor,    xor,
                    349:        NEG,    neg,    neg,
                    350:        COMPL,  com,    com,
                    351:        CALL1,  stdol,  stdol,
                    352:        CALL2,  "",     "",
                    353:        LLSHIFT,ashc,   ashc,
                    354:        ASLSHL, ashc,   ashc,
                    355:        LTIMES, slmul,  slmul,
                    356:        LDIV,   sldiv,  sldiv,
                    357:        LMOD,   slrem,  slrem,
                    358:        LASTIMES,almul, almul,
                    359:        LASDIV, aldiv,  aldiv,
                    360:        LASMOD, alrem,  alrem,
                    361:        ULSH,   ashc,   ashc,
                    362:        ASULSH, ashc,   ashc,
                    363:        UDIV,   udiv,   udiv,
                    364:        UMOD,   urem,   urem,
                    365:        ASUDIV, udiv,   udiv,
                    366:        ASUMOD, urem,   urem,
                    367:        0,      0,      0};
                    368: 
                    369: /*
                    370:  * Similar table for relationals.
                    371:  * The first string is for the positive
                    372:  * test, the second for the inverted one.
                    373:  * The '200+' entries are 
                    374:  * used in tests against 0 where a 'tst'
                    375:  * instruction is used; it clears the c-bit
                    376:  * the c-bit so ptr tests are funny.
                    377:  */
                    378: struct instab branchtab[] = {
                    379:        EQUAL,  jeq,    jne,
                    380:        NEQUAL, jne,    jeq,
                    381:        LESSEQ, jle,    jgt,
                    382:        LESS,   jlt,    jge,
                    383:        GREATEQ,jge,    jlt,
                    384:        GREAT,  jgt,    jle,
                    385:        LESSEQP,jlos,   jhi,
                    386:        LESSP,  jlo,    jhis,
                    387:        GREATQP,jhis,   jlo,
                    388:        GREATP, jhi,    jlos,
                    389:        200+EQUAL,      jeq,    jne,
                    390:        200+NEQUAL,     jne,    jeq,
                    391:        200+LESSEQ,     jle,    jgt,
                    392:        200+LESS,       jlt,    jge,
                    393:        200+GREATEQ,    jge,    jlt,
                    394:        200+GREAT,      jgt,    jle,
                    395:        200+LESSEQP,    jeq,    jne,
                    396:        200+LESSP,      nop,    jbr,
                    397:        200+GREATQP,    jbr,    nop,
                    398:        200+GREATP,     jne,    jeq,
                    399:        0,      0,      0 };

unix.superglobalmegacorp.com

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