Annotation of researchv10no/cmd/PDP11/11as/as19.c, revision 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.