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

1.1       root        1: /* a9 -- pdp-11 assembler pass 1 */
                      2: #include "as1.h"
                      3: 
                      4: /* key to types
                      5: /*
                      6: /*     T_UNDEF 0 undefined
                      7: /*     T_ABS   1 absolute
                      8: /*     T_TEXT  2 text
                      9: /*     T_DATA  3 data
                     10: /*     T_BSS   4 bss
                     11: /*     T_FLOPD 5 flop freg,dst (movfo, = stcfd)
                     12: /*     T_BRANCH        6 branch
                     13: /*     T_JSR   7 jsr
                     14: /*     T_RTS   010 rts
                     15: /*     T_SYS   011 sys
                     16: /*     T_MOVF  012 movf (=ldf,stf)
                     17: /*     T_DOUBLE        013 double operand (mov)
                     18: /*     T_FLOPF 014 flop fsrc,freg (addf)
                     19: /*     T_SINGLE        015 single operand (clr)
                     20: /*     T_BYTE  016 .byte
                     21: /*     T_STRING        017 string (.ascii, "<")
                     22: /*     T_EVEN  020 .even
                     23: /*     T_IF    021 .if
                     24: /*     T_ENDIF 022 .endif
                     25: /*     T_GLOBL 023 .globl
                     26: /*     T_REG   024 register
                     27: /*     T__TEXT 025 .text
                     28: /*     T__DATA 026 .data
                     29: /*     T__BSS  027 .bss
                     30: /*     T_MUL   030 mul,div, etc
                     31: /*     T_SOB   031 sob
                     32: /*     T_COMM  032 .comm
                     33: /*     T_ESTTXT        033 estimated text
                     34: /*     T_ESTDAT        034 estimated data
                     35: /*     T_JBR   035 jbr
                     36: /*     T_JXX   036 jeq, jne, etc
                     37: */
                     38: 
                     39: struct symtab symtab[] = {
                     40: 
                     41:        {".", T_TEXT, 000000},
                     42:        {"..", T_ABS, 000000},
                     43: 
                     44:        {"r0", T_REG, 000000},
                     45:        {"r1", T_REG, 000001},
                     46:        {"r2", T_REG, 000002},
                     47:        {"r3", T_REG, 000003},
                     48:        {"r4", T_REG, 000004},
                     49:        {"r5", T_REG, 000005},
                     50:        {"sp", T_REG, 000006},
                     51:        {"pc", T_REG, 000007},
                     52: 
                     53: #if eae!=0
                     54:        {"csw", T_ABS, 0177570},
                     55:        {"div", T_ABS, 0177300},
                     56:        {"ac",  T_ABS, 0177302},
                     57:        {"mq",  T_ABS, 0177304},
                     58:        {"mul", T_ABS, 0177306},
                     59:        {"sc",  T_ABS, 0177310},
                     60:        {"sr",  T_ABS, 0177311},
                     61:        {"nor", T_ABS, 0177312},
                     62:        {"lsh", T_ABS, 0177314},
                     63:        {"ash", T_ABS, 0177316},
                     64: #endif
                     65: 
                     66:        {"mov",  T_DOUBLE, 0010000},
                     67:        {"movb", T_DOUBLE, 0110000},
                     68:        {"cmp",  T_DOUBLE, 0020000},
                     69:        {"cmpb", T_DOUBLE, 0120000},
                     70:        {"bit",  T_DOUBLE, 0030000},
                     71:        {"bitb", T_DOUBLE, 0130000},
                     72:        {"bic",  T_DOUBLE, 0040000},
                     73:        {"bicb", T_DOUBLE, 0140000},
                     74:        {"bis",  T_DOUBLE, 0050000},
                     75:        {"bisb", T_DOUBLE, 0150000},
                     76:        {"add",  T_DOUBLE, 0060000},
                     77:        {"sub",  T_DOUBLE, 0160000},
                     78: 
                     79:        {"br",   T_BRANCH, 0000400},
                     80:        {"bne",  T_BRANCH, 0001000},
                     81:        {"beq",  T_BRANCH, 0001400},
                     82:        {"bge",  T_BRANCH, 0002000},
                     83:        {"blt",  T_BRANCH, 0002400},
                     84:        {"bgt",  T_BRANCH, 0003000},
                     85:        {"ble",  T_BRANCH, 0003400},
                     86:        {"bpl",  T_BRANCH, 0100000},
                     87:        {"bmi",  T_BRANCH, 0100400},
                     88:        {"bhi",  T_BRANCH, 0101000},
                     89:        {"blos", T_BRANCH, 0101400},
                     90:        {"bvc",  T_BRANCH, 0102000},
                     91:        {"bvs",  T_BRANCH, 0102400},
                     92:        {"bhis", T_BRANCH, 0103000},
                     93:        {"bec",  T_BRANCH, 0103000},
                     94:        {"bcc",  T_BRANCH, 0103000},
                     95:        {"blo",  T_BRANCH, 0103400},
                     96:        {"bcs",  T_BRANCH, 0103400},
                     97:        {"bes",  T_BRANCH, 0103400},
                     98: 
                     99:        {"jbr",  T_JBR, 0000400},
                    100:        {"jne",  T_JXX, 0001000},
                    101:        {"jeq",  T_JXX, 0001400},
                    102:        {"jge",  T_JXX, 0002000},
                    103:        {"jlt",  T_JXX, 0002400},
                    104:        {"jgt",  T_JXX, 0003000},
                    105:        {"jle",  T_JXX, 0003400},
                    106:        {"jpl",  T_JXX, 0100000},
                    107:        {"jmi",  T_JXX, 0100400},
                    108:        {"jhi",  T_JXX, 0101000},
                    109:        {"jlos", T_JXX, 0101400},
                    110:        {"jvc",  T_JXX, 0102000},
                    111:        {"jvs",  T_JXX, 0102400},
                    112:        {"jhis", T_JXX, 0103000},
                    113:        {"jec",  T_JXX, 0103000},
                    114:        {"jcc",  T_JXX, 0103000},
                    115:        {"jlo",  T_JXX, 0103400},
                    116:        {"jcs",  T_JXX, 0103400},
                    117:        {"jes",  T_JXX, 0103400},
                    118: 
                    119:        {"clr",  T_SINGLE, 0005000},
                    120:        {"clrb", T_SINGLE, 0105000},
                    121:        {"com",  T_SINGLE, 0005100},
                    122:        {"comb", T_SINGLE, 0105100},
                    123:        {"inc",  T_SINGLE, 0005200},
                    124:        {"incb", T_SINGLE, 0105200},
                    125:        {"dec",  T_SINGLE, 0005300},
                    126:        {"decb", T_SINGLE, 0105300},
                    127:        {"neg",  T_SINGLE, 0005400},
                    128:        {"negb", T_SINGLE, 0105400},
                    129:        {"adc",  T_SINGLE, 0005500},
                    130:        {"adcb", T_SINGLE, 0105500},
                    131:        {"sbc",  T_SINGLE, 0005600},
                    132:        {"sbcb", T_SINGLE, 0105600},
                    133:        {"tst",  T_SINGLE, 0005700},
                    134:        {"tstb", T_SINGLE, 0105700},
                    135:        {"ror",  T_SINGLE, 0006000},
                    136:        {"rorb", T_SINGLE, 0106000},
                    137:        {"rol",  T_SINGLE, 0006100},
                    138:        {"rolb", T_SINGLE, 0106100},
                    139:        {"asr",  T_SINGLE, 0006200},
                    140:        {"asrb", T_SINGLE, 0106200},
                    141:        {"asl",  T_SINGLE, 0006300},
                    142:        {"aslb", T_SINGLE, 0106300},
                    143:        {"jmp",  T_SINGLE, 0000100},
                    144:        {"swab", T_SINGLE, 0000300},
                    145: 
                    146:        {"jsr", T_JSR, 0004000},
                    147: 
                    148:        {"rts", T_RTS, 000200},
                    149: 
                    150:        {"sys", T_SYS, 0104400},
                    151: 
                    152:        {"clc", T_ABS, 0000241},
                    153:        {"clv", T_ABS, 0000242},
                    154:        {"clz", T_ABS, 0000244},
                    155:        {"cln", T_ABS, 0000250},
                    156:        {"sec", T_ABS, 0000261},
                    157:        {"sev", T_ABS, 0000262},
                    158:        {"sez", T_ABS, 0000264},
                    159:        {"sen", T_ABS, 0000270},
                    160: 
                    161:        {"cfcc", T_ABS, 0170000},
                    162:        {"setf", T_ABS, 0170001},
                    163:        {"setd", T_ABS, 0170011},
                    164:        {"seti", T_ABS, 0170002},
                    165:        {"setl", T_ABS, 0170012},
                    166:        {"clrf", T_SINGLE, 0170400},
                    167:        {"negf", T_SINGLE, 0170700},
                    168:        {"absf", T_SINGLE, 0170600},
                    169:        {"tstf", T_SINGLE, 0170500},
                    170:        {"movf", T_MOVF, 0172400},
                    171:        {"movif", T_FLOPF, 0177000},
                    172:        {"movfi", T_FLOPD, 0175400},
                    173:        {"movof", T_FLOPF, 0177400},
                    174:        {"movfo", T_FLOPD, 0176000},
                    175:        {"addf", T_FLOPF, 0172000},
                    176:        {"subf", T_FLOPF, 0173000},
                    177:        {"mulf", T_FLOPF, 0171000},
                    178:        {"divf", T_FLOPF, 0174400},
                    179:        {"cmpf", T_FLOPF, 0173400},
                    180:        {"modf", T_FLOPF, 0171400},
                    181:        {"movie", T_FLOPF, 0176400},
                    182:        {"movei", T_FLOPD, 0175000},
                    183:        {"ldfps", T_SINGLE, 0170100},
                    184:        {"stfps", T_SINGLE, 0170200},
                    185:        {"fr0", T_REG, 000000},
                    186:        {"fr1", T_REG, 000001},
                    187:        {"fr2", T_REG, 000002},
                    188:        {"fr3", T_REG, 000003},
                    189:        {"fr4", T_REG, 000004},
                    190:        {"fr5", T_REG, 000005},
                    191: 
                    192:        {"als",  T_MUL, 072000},
                    193:        {"alsc", T_MUL, 073000},
                    194:        {"mpy",  T_MUL, 070000},
                    195: #if (eae-1)!=0
                    196:        {"mul", T_MUL, 070000},
                    197:        {"div", T_MUL, 071000},
                    198:        {"ash", T_MUL, 072000},
                    199:        {"ashc", T_MUL, 073000},
                    200: #endif
                    201:        {"dvd", T_MUL, 071000},
                    202:        {"xor", T_JSR, 074000},
                    203:        {"sxt", T_SINGLE, 006700},
                    204:        {"mark", T_SYS, 006400},
                    205:        {"sob", T_SOB, 077000},
                    206: 
                    207:        {".byte", T_BYTE, 000000},
                    208:        {".even", T_EVEN, 000000},
                    209:        {".if", T_IF, 000000},
                    210:        {".endif", T_ENDIF, 000000},
                    211:        {".globl", T_GLOBL, 000000},
                    212:        {".text", T__TEXT, 000000},
                    213:        {".data", T__DATA, 000000},
                    214:        {".bss", T__BSS, 000000},
                    215:        {".comm", T_COMM, 000000},
                    216: };
                    217: 
                    218: short *dotrel = &symtab[0].sval.typ;
                    219: short *dot    = &symtab[0].sval.val;
                    220: 
                    221: setup()
                    222: {
                    223:        register int i,h;
                    224:        register char *cp;
                    225:        register struct symtab *sp, **hp;
                    226: 
                    227:        for (sp=symtab; sp<&symtab[sizeof(symtab)/sizeof(*sp)]; sp++) {
                    228:                h=0; cp= &sp->name[0];
                    229:                for (i=NCPS; --i>=0; ) {
                    230:                        if (*cp==0) break;
                    231:                        h+= *cp++; h=((h&0377)<<8)|((h>>8)&0377);
                    232:                }
                    233:                hp=hshtab+(((long)(unsigned short)h)%HSHSIZ);
                    234:                h= ((long)(unsigned short)h)/HSHSIZ;
                    235:                for (;;) {
                    236:                        if ((hp-=h)<=hshtab) hp+=HSHSIZ;
                    237:                        if (*--hp==0) break;
                    238:                }
                    239:                *hp=sp;
                    240:        }
                    241:        symend=usymtab=(struct symtab *)sbrk(0);
                    242: }
                    243: 
                    244: 

unix.superglobalmegacorp.com

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