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:     000000, /* 29 */
  39:     034203, /* ++pre */
  40:     034203, /* --pre */
  41:     034203, /* ++post */
  42:     034203, /* --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:     000000, /* 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: };
 127: 
 128: char    *opntab[] {
 129:     0,
 130:     0,
 131:     0,
 132:     0,
 133:     0,
 134:     0,
 135:     0,
 136:     0,
 137:     ":",
 138:     ",",
 139:     "field select",
 140:     0,
 141:     0,
 142:     "int->ptr",
 143:     "ptr->int",
 144:     "long->ptr",
 145:     "field assign",
 146:     ">>",
 147:     ">>",
 148:     0,
 149:     "name",
 150:     "short constant",
 151:     "string",
 152:     "float",
 153:     "double",
 154:     "long constant",
 155:     "long constant",
 156:     "*r++",
 157:     "*--r",
 158:     0,
 159:     "++pre",
 160:     "--pre",
 161:     "++post",
 162:     "--post",
 163:     "!un",
 164:     "&",
 165:     "*",
 166:     "-",
 167:     "~",
 168:     ".",
 169:     "+",
 170:     "-",
 171:     "*",
 172:     "/",
 173:     "%",
 174:     ">>",
 175:     "<<",
 176:     "&",
 177:     "|",
 178:     "^",
 179:     "->",
 180:     "int->double",
 181:     "double->int",
 182:     "&&",
 183:     "||",
 184:     "&~",
 185:     "double->long",
 186:     "long->double",
 187:     "integer->long",
 188:     "long->integer",
 189:     "==",
 190:     "!=",
 191:     "<=",
 192:     "<",
 193:     ">=",
 194:     ">",
 195:     "<p",
 196:     "<=p",
 197:     ">p",
 198:     ">=p",
 199:     "+=",
 200:     "-=",
 201:     "*=",
 202:     "/=",
 203:     "%=",
 204:     ">>=",
 205:     "<<=",
 206:     "&=",
 207:     "|=",
 208:     "^=",
 209:     "=",
 210:     "& for tests",
 211:     "*",
 212:     "/",
 213:     "%",
 214:     "&= ~",
 215:     "*=",
 216:     "/=",
 217:     "%=",
 218:     0,
 219:     "?",
 220:     "<<",
 221:     "<<=",
 222:     "\\/",
 223:     "\\/",
 224:     "/\\",
 225:     "/\\",
 226:     0,
 227:     "call",
 228:     "call",
 229:     "call",
 230:     0,
 231:     "goto",
 232:     "jump cond",
 233:     "branch cond",
 234:     "set nregs",
 235:     "load value",
 236:     0,
 237:     0,
 238:     "int->char",
 239:     "force register",
 240:     "",
 241:     "",
 242:     "",
 243:     "",
 244:     "=structure",
 245:     "= (struct setup)",
 246: };
 247: 
 248: /*
 249:  * Strings for instruction tables.
 250:  */
 251: char    mov[]   "mov";
 252: char    clr[]   "clr";
 253: char    cmp[]   "cmp";
 254: char    tst[]   "tst";
 255: char    add[]   "add";
 256: char    sub[]   "sub";
 257: char    inc[]   "inc";
 258: char    dec[]   "dec";
 259: char    mul[]   "mul";
 260: char    div[]   "div";
 261: char    asr[]   "asr";
 262: char    ash[]   "ash";
 263: char    asl[]   "asl";
 264: char    bic[]   "bic";
 265: char    bic1[]  "bic $1,";
 266: char    bit[]   "bit";
 267: char    bit1[]  "bit $1,";
 268: char    bis[]   "bis";
 269: char    bis1[]  "bis $1,";
 270: char    xor[]   "xor";
 271: char    neg[]   "neg";
 272: char    com[]   "com";
 273: char    stdol[] "*$";
 274: char    ashc[]  "ashc";
 275: char    slmul[] "lmul";
 276: char    sldiv[] "ldiv";
 277: char    slrem[] "lrem";
 278: char    almul[] "almul";
 279: char    aldiv[] "aldiv";
 280: char    alrem[] "alrem";
 281: char    jeq[]   "jeq";
 282: char    jne[]   "jne";
 283: char    jle[]   "jle";
 284: char    jgt[]   "jgt";
 285: char    jlt[]   "jlt";
 286: char    jge[]   "jge";
 287: char    jlos[]  "jlos";
 288: char    jhi[]   "jhi";
 289: char    jlo[]   "jlo";
 290: char    jhis[]  "jhis";
 291: char    nop[]   "/nop";
 292: char    jbr[]   "jbr";
 293: 
 294: /*
 295:  * Instruction tables, accessed by
 296:  * I (first operand) or I' (second) macros.
 297:  */
 298: 
 299: struct instab instab[] {
 300:     LOAD,   mov,    tst,
 301:     ASSIGN, mov,    clr,
 302:     EQUAL,  cmp,    tst,
 303:     NEQUAL, cmp,    tst,
 304:     LESSEQ, cmp,    tst,
 305:     LESS,   cmp,    tst,
 306:     GREATEQ,cmp,    tst,
 307:     GREAT,  cmp,    tst,
 308:     LESSEQP,cmp,    tst,
 309:     LESSP,  cmp,    tst,
 310:     GREATQP,cmp,    tst,
 311:     GREATP, cmp,    tst,
 312:     PLUS,   add,    inc,
 313:     ASPLUS, add,    inc,
 314:     MINUS,  sub,    dec,
 315:     ASMINUS,sub,    dec,
 316:     INCBEF, add,    inc,
 317:     DECBEF, sub,    dec,
 318:     INCAFT, add,    inc,
 319:     DECAFT, sub,    dec,
 320:     TIMES,  mul,    mul,
 321:     ASTIMES,mul,    mul,
 322:     DIVIDE, div,    div,
 323:     ASDIV,  div,    div,
 324:     MOD,    div,    div,
 325:     ASMOD,  div,    div,
 326:     PTOI,   div,    div,
 327:     RSHIFT, ash,    asr,
 328:     ASRSH,  ash,    asr,
 329:     LSHIFT, ash,    asl,
 330:     ASLSH,  ash,    asl,
 331:     AND,    bic,    bic1,
 332:     ANDN,   bic,    bic1,
 333:     ASANDN, bic,    bic1,
 334:     TAND,   bit,    bit1,
 335:     OR, bis,    bis1,
 336:     ASOR,   bis,    bis1,
 337:     EXOR,   xor,    xor,
 338:     ASXOR,  xor,    xor,
 339:     NEG,    neg,    neg,
 340:     COMPL,  com,    com,
 341:     CALL1,  stdol,  stdol,
 342:     CALL2,  "", "",
 343:     LLSHIFT,ashc,   ashc,
 344:     ASLSHL, ashc,   ashc,
 345:     LTIMES, slmul,  slmul,
 346:     LDIV,   sldiv,  sldiv,
 347:     LMOD,   slrem,  slrem,
 348:     LASTIMES,almul, almul,
 349:     LASDIV, aldiv,  aldiv,
 350:     LASMOD, alrem,  alrem,
 351:     ULSH,   ashc,   ashc,
 352:     ASULSH, ashc,   ashc,
 353:     0,  0,  0};
 354: 
 355: /*
 356:  * Similar table for relationals.
 357:  * The first string is for the positive
 358:  * test, the second for the inverted one.
 359:  * The '200+' entries are
 360:  * used in tests against 0 where a 'tst'
 361:  * instruction is used; it clears the c-bit
 362:  * the c-bit so ptr tests are funny.
 363:  */
 364: struct instab branchtab[] {
 365:     EQUAL,  jeq,    jne,
 366:     NEQUAL, jne,    jeq,
 367:     LESSEQ, jle,    jgt,
 368:     LESS,   jlt,    jge,
 369:     GREATEQ,jge,    jlt,
 370:     GREAT,  jgt,    jle,
 371:     LESSEQP,jlos,   jhi,
 372:     LESSP,  jlo,    jhis,
 373:     GREATQP,jhis,   jlo,
 374:     GREATP, jhi,    jlos,
 375:     200+EQUAL,  jeq,    jne,
 376:     200+NEQUAL, jne,    jeq,
 377:     200+LESSEQ, jle,    jgt,
 378:     200+LESS,   jlt,    jge,
 379:     200+GREATEQ,    jge,    jlt,
 380:     200+GREAT,  jgt,    jle,
 381:     200+LESSEQP,    jeq,    jne,
 382:     200+LESSP,  nop,    jbr,
 383:     200+GREATQP,    jbr,    nop,
 384:     200+GREATP, jne,    jeq,
 385:     0,  0,  0 };

Defined variables

add defined in line 255; used 4 times
aldiv defined in line 279; used 2 times
  • in line 349(2)
almul defined in line 278; used 2 times
  • in line 348(2)
alrem defined in line 280; used 2 times
  • in line 350(2)
ash defined in line 262; used 4 times
ashc defined in line 274; used 8 times
asl defined in line 263; used 2 times
asr defined in line 261; used 2 times
bic defined in line 264; used 3 times
bic1 defined in line 265; used 3 times
bis defined in line 268; used 2 times
bis1 defined in line 269; used 2 times
bit defined in line 266; used 1 times
bit1 defined in line 267; used 1 times
branchtab defined in line 364; never used
clr defined in line 252; used 1 times
cmp defined in line 253; used 10 times
com defined in line 272; used 2 times
  • in line 340(2)
dec defined in line 258; used 4 times
div defined in line 260; used 10 times
inc defined in line 257; used 4 times
instab defined in line 299; never used
jbr defined in line 292; used 2 times
jeq defined in line 281; used 6 times
jge defined in line 286; used 4 times
jgt defined in line 284; used 4 times
jhi defined in line 288; used 2 times
jhis defined in line 290; used 2 times
jle defined in line 283; used 4 times
jlo defined in line 289; used 2 times
jlos defined in line 287; used 2 times
jlt defined in line 285; used 4 times
jne defined in line 282; used 6 times
mov defined in line 251; used 2 times
mul defined in line 259; used 4 times
neg defined in line 271; used 2 times
  • in line 339(2)
nop defined in line 291; used 2 times
opdope defined in line 8; never used
opntab defined in line 128; never used
sldiv defined in line 276; used 2 times
  • in line 346(2)
slmul defined in line 275; used 2 times
  • in line 345(2)
slrem defined in line 277; used 2 times
  • in line 347(2)
stdol defined in line 273; used 2 times
  • in line 341(2)
sub defined in line 256; used 4 times
tst defined in line 254; used 11 times
xor defined in line 270; used 4 times
Last modified: 1979-01-10
Generated: 2016-12-26
Generated by src2html V0.67
page hit count: 986
Valid CSS Valid XHTML 1.0 Strict