Annotation of researchv10no/cmd/adb/cray/das.c, revision 1.1

1.1     ! root        1: /*
        !             2:  * cray disassembler
        !             3:  */
        !             4: 
        !             5: #include "defs.h"
        !             6: #include "space.h"
        !             7: 
        !             8: #define        FBIG    1
        !             9: #define        FPAR    2
        !            10: #define        FWRD    4
        !            11: 
        !            12: static struct optab {
        !            13:        int op;
        !            14:        int mask;
        !            15:        int mbnz;
        !            16:        int flag;
        !            17:        char *name;
        !            18: } optab[] = {
        !            19:        0000000, 0177777, 0, 0, "err",
        !            20:        0001000, 0177707, 0, 0, "%ca,%a$j\t1",
        !            21:        0001100, 0177707, 0, 0, "%cl,%a$j\t1",
        !            22:        0001000, 0177700, 0, 0, "%ca,%a$j\t%a$k",
        !            23:        0001100, 0177700, 0, 0, "%cl,%a$j\t%a$k",
        !            24:        0001200, 0177707, 0, 0, "%ci,%a$j",
        !            25:        0001201, 0177707, 0, 0, "%mc,%a$j",
        !            26:        0001300, 0177777, 0, 0, "%xa\t0",
        !            27:        0001300, 0177707, 0, 0, "%xa\t%a$j",
        !            28:        0001400, 0177777, 0, 0, "%rt\t0",
        !            29:        0001400, 0177707, 0, 0, "%rt\t%s$j",
        !            30:        0001401, 0177777, 0, 0, "%ip\t1",
        !            31:        0001402, 0177777, 0, 0, "%ip\t0",
        !            32:        0001403, 0177777, 0, 0, "%cln\t0",
        !            33:        0001413, 0177777, 0, 0, "%cln\t1",
        !            34:        0001423, 0177777, 0, 0, "%cln\t2",
        !            35:        0001433, 0177777, 0, 0, "%cln\t3",
        !            36:        0001404, 0177777, 0, 0, "%pci\t0",
        !            37:        0001404, 0177707, 0, 0, "%pci\t%s$j",
        !            38:        0001405, 0177777, 0, 0, "cci",
        !            39:        0001406, 0177777, 0, 0, "eci",
        !            40:        0001407, 0177777, 0, 0, "dci",
        !            41:        0002000, 0177777, 0, 0, "%vl\t1",
        !            42:        0002000, 0177770, 0, 0, "%vl\t%a$k",
        !            43:        0002100, 0177777, 0, 0, "efi",
        !            44:        0002200, 0177777, 0, 0, "dfi",
        !            45:        0002300, 0177777, 0, 0, "eri",
        !            46:        0002400, 0177777, 0, 0, "dri",
        !            47:        0002500, 0177777, 0, 0, "dbm",
        !            48:        0002600, 0177777, 0, 0, "ebm",
        !            49:        0002700, 0177777, 0, 0, "cmr",
        !            50:        0003000, 0177777, 0, 0, "%vm\t0",
        !            51:        0003000, 0177707, 0, 0, "%vm\t%s$j",
        !            52:        0003400, 0177700, 0, 0, "%sm$j$k\t1,ts",
        !            53:        0003600, 0177700, 0, 0, "%sm$j$k\t0",
        !            54:        0003700, 0177700, 0, 0, "%sm$j$k\t1",
        !            55:        0004000, 0177777, 0, 0, "ex",
        !            56:        0005000, 0177700, 0, 0, "j\t%b$j$k",
        !            57:        0006000, 0177000, 0, FBIG|FPAR, "j\t$X",
        !            58:        0007000, 0177000, 0, FBIG|FPAR, "r\t$X",
        !            59:        0010000, 0177000, 0, FBIG|FPAR, "jaz\t$X",
        !            60:        0011000, 0177000, 0, FBIG|FPAR, "jan\t$X",
        !            61:        0012000, 0177000, 0, FBIG|FPAR, "jap\t$X",
        !            62:        0013000, 0177000, 0, FBIG|FPAR, "jam\t$X",
        !            63:        0014000, 0177000, 0, FBIG|FPAR, "jsz\t$X",
        !            64:        0015000, 0177000, 0, FBIG|FPAR, "jsn\t$X",
        !            65:        0016000, 0177000, 0, FBIG|FPAR, "jsp\t$X",
        !            66:        0017000, 0177000, 0, FBIG|FPAR, "jsm\t$X",
        !            67:        0020000, 0177000, 0, FBIG|FWRD, "%a$i\t$x",
        !            68:        0021000, 0177000, 0, FBIG|FWRD, "%a$i\t~$x",
        !            69:        0022000, 0177000, 0, FWRD, "%a$i\t$y",
        !            70:        0023000, 0177077, 0, 0, "%a$i\t0",
        !            71:        0023000, 0177007, 0, 0, "%a$i\t%s$j",
        !            72:        0023001, 0177077, 0, 0, "%a$i\tvl",
        !            73:        0024000, 0177000, 0, 0, "%a$i\t%b$j$k",
        !            74:        0025000, 0177000, 0, 0, "%b$j$k\t%a$i",
        !            75:        0026000, 0177007, 0, 0, "%a$i\t%ps$j",
        !            76:        0026001, 0177007, 0, 0, "%a$i\t%qs$j",
        !            77:        0026007, 0177007, 0, 0, "%a$i\t%sb$j",
        !            78:        0027000, 0177007, 0, 0, "%a$i\t%zs$j",
        !            79:        0027007, 0177007, 0, 0, "%zs$j\t%a$i",
        !            80:        0030000, 0177070, 07, 0, "%a$i\t%a$k",
        !            81:        0030000, 0177007, 070, 0, "%a$i\t%a$j+1",
        !            82:        0030000, 0177000, 0, 0, "%a$i\t%a$j+%a$k",
        !            83:        0031000, 0177077, 0, 0, "%a$i\t-1",
        !            84:        0031000, 0177070, 07, 0, "%a$i\t-%a$k",
        !            85:        0031000, 0177007, 070, 0, "%a$i\t%a$j-1",
        !            86:        0031000, 0177000, 0, 0, "%a$i\t%a$j-%a$k",
        !            87:        0032000, 0177070, 07, 0, "%a$i\t0*%a$k",
        !            88:        0032000, 0177007, 070, 0, "%a$i\t%a$j*1",
        !            89:        0032000, 0177000, 0, 0, "%a$i\t%a$j*%a$k",
        !            90:        0033000, 0177077, 0, 0, "%a$i\t%ci",
        !            91:        0033000, 0177007, 0, 0, "%a$i\t%ca,%a$j",
        !            92:        0033001, 0177007, 0, 0, "%a$i\t%ce,%a$j",
        !            93:        0034000, 0177000, 0, 0, "%b$j$k,%a$i\t,%a0",
        !            94:        0035000, 0177000, 0, 0, ",%a0\t%b$j$k,%a$i",
        !            95:        0036000, 0177000, 0, 0, "%t$j$k,%a$i\t,%a0",
        !            96:        0037000, 0177000, 0, 0, ",%a0\t%t$j$k,%a$i",
        !            97:        0040000, 0177000, 0, FBIG, "%s$i\t$x",
        !            98:        0041000, 0177000, 0, FBIG, "%s$i\t~$x",
        !            99:        0042000, 0177077, 0, 0, "%s$i\t-1",
        !           100:        0042077, 0177077, 0, 0, "%s$i\t1",
        !           101:        0042000, 0177000, 0, 0, "%s$i\t<$x",
        !           102:        0043000, 0177077, 0, 0, "%s$i\t0",
        !           103:        0043000, 0177000, 0, 0, "%s$i\t>$x",
        !           104:        0044000, 0177007, 0, 0, "%s$i\t%s$j&%sb",
        !           105:        0044000, 0177000, 0, 0, "%s$i\t%s$j&%s$k",
        !           106:        0045000, 0177007, 0, 0, "%s$i\t%s$j&~%sb",
        !           107:        0045000, 0177000, 0, 0, "%s$i\t%s$j&~%s$k",
        !           108:        0046000, 0177007, 0, 0, "%s$i\t%s$j^%sb",
        !           109:        0046000, 0177000, 0, 0, "%s$i\t%s$j^%s$k",
        !           110:        0047000, 0177007, 0, 0, "%s$i\t%s$j^~%sb",
        !           111:        0047000, 0177000, 0, 0, "%s$i\t%s$j^~%s$k",
        !           112:        0050000, 0177007, 0, 0, "%s$i\t%s$j!%s$i&%sb",
        !           113:        0050000, 0177000, 0, 0, "%s$i\t%s$j!%s$i&%s$k",
        !           114:        0051000, 0177077, 0, 0, "%s$i\t%sb",
        !           115:        0051000, 0177007, 070, 0, "%s$i\t%s$j|%sb",
        !           116:        0051000, 0177070, 07, 0, "%s$i\t%s$k|0",
        !           117:        0051000, 0177000, 0, 0, "%s$i\t%s$j|%s$k",
        !           118:        0052000, 0177000, 0, 0, "%s0\t%s$i<<$y",
        !           119:        0053000, 0177000, 0, 0, "%s0\t%s$i>>$z",
        !           120:        0054000, 0177000, 0, 0, "%s$i\t%s$i<<$y",
        !           121:        0055000, 0177000, 0, 0, "%s$i\t%s$i>>$z",
        !           122:        0056000, 0177007, 070, 0, "%s$i\t%s$i,$s$j<<1",
        !           123:        0056000, 0177070, 07, 0, "%s$i\t%s$i<<%a$k",
        !           124:        0056000, 0177000, 0, 0, "%s$i\t%s$i,%s$j<<%a$k",
        !           125:        0057000, 0177007, 070, 0, "%s$i\t%s$i,$s$j>>1",
        !           126:        0057000, 0177070, 07, 0, "%s$i\t%s$i>>%a$k",
        !           127:        0057000, 0177000, 0, 0, "%s$i\t%s$i,%s$j>>%a$k",
        !           128:        0060000, 0177070, 07, 0, "%s$i\t0+%s$k",
        !           129:        0060000, 0177007, 070, 0, "%s$i\t%s$j^%sb",
        !           130:        0060000, 0177000, 0, 0, "%s$i\t%s$j+%s$k",
        !           131:        0061000, 0177070, 0, 0, "%s$i\t-%s$k",
        !           132:        0061000, 0177000, 0, 0, "%s$i\t%s$j-%s$k",
        !           133:        0062000, 0177070, 0, 0, "%s$i\t+%fs$k",
        !           134:        0062000, 0177000, 0, 0, "%s$i\t%s$j+%fs$k",
        !           135:        0063000, 0177070, 0, 0, "%s$i\t-%fs$k",
        !           136:        0063000, 0177000, 0, 0, "%s$i\t%s$j-%fs$k",
        !           137:        0064000, 0177000, 0, 0, "%s$i\t%s$j*%fs$k",
        !           138:        0065000, 0177000, 0, 0, "%s$i\t%s$j*%hs$k",
        !           139:        0066000, 0177000, 0, 0, "%s$i\t%s$j*%rs$k",
        !           140:        0067000, 0177000, 0, 0, "%s$i\t%s$j*%is$k",
        !           141:        0070000, 0177007, 0, 0, "%s$i\t/%hs$j",
        !           142:        0071000, 0177070, 0, 0, "%s$i\t%a$k",
        !           143:        0071010, 0177070, 0, 0, "%s$i\t+%a$k",
        !           144:        0071020, 0177070, 0, 0, "%s$i\t+%fa%k",
        !           145:        0071030, 0177077, 0, 0, "%s$i\t0.75*2**48",
        !           146:        0071040, 0177077, 0, 0, "%s$i\t0.5",
        !           147:        0071050, 0177077, 0, 0, "%s$i\t1.0",
        !           148:        0071060, 0177077, 0, 0, "%s$i\t2.0",
        !           149:        0071070, 0177077, 0, 0, "%s$i\t4.0",
        !           150:        0072000, 0177077, 0, 0, "%s$i\t%rt",
        !           151:        0072002, 0177077, 0, 0, "%s$i\t%sm",
        !           152:        0072003, 0177007, 0, 0, "%s$i\t%st$j",
        !           153:        0073000, 0177077, 0, 0, "%s$i\t%vm",
        !           154:        0073001, 0177007, 0, 0, "%s$i\t%sr$j",
        !           155:        0073002, 0177077, 0, 0, "%sm\t%s$i",
        !           156:        0073003, 0177007, 0, 0, "%st$j\t%s$i",
        !           157:        0074000, 0177000, 0, 0, "%s$i\t%t$j$k",
        !           158:        0075000, 0177000, 0, 0, "%t$j$k\t%s$i",
        !           159:        0076000, 0177000, 0, 0, "%s$i\t%v$j,%a$k",
        !           160:        0077000, 0177077, 0, 0, "%v$i,1\t0",
        !           161:        0077000, 0177070, 07, 0, "%v$i,%a$k\t0",
        !           162:        0077000, 0177007, 070, 0, "%v$i,1\t%s$j",
        !           163:        0077000, 0177000, 0, 0, "%v$i,%a$k\t%s$j",
        !           164:        0100000, 0177000, 0, FBIG|FWRD, "%a$i\t$x,0",
        !           165:        0100000, 0170000, 0, FBIG|FWRD, "%a$i\t$x,%a$h",
        !           166:        0110000, 0177000, 0, FBIG|FWRD, "$x,0\t%a$i",
        !           167:        0110000, 0170000, 0, FBIG|FWRD, "$x,%a$h\t%a$i",
        !           168:        0120000, 0177000, 0, FBIG|FWRD, "%s$i\t$x,0",
        !           169:        0120000, 0170000, 0, FBIG|FWRD, "%s$i\t$x,%a$h",
        !           170:        0130000, 0177000, 0, FBIG|FWRD, "$x,0\t%s$i",
        !           171:        0130000, 0170000, 0, FBIG|FWRD, "$x,%a$h\t%s$i",
        !           172:        0140000, 0177000, 0, 0, "%v$i\t%s$j&%v$k",
        !           173:        0141000, 0177000, 0, 0, "%v$i\t%v$j&%v$k",
        !           174:        0142000, 0177070, 0, 0, "%v$i\t%v$k",
        !           175:        0142000, 0177000, 0, 0, "%v$i\t%s$j|%v$k",
        !           176:        0143000, 0177000, 0, 0, "%v$i\t%v$j|%v$k",
        !           177:        0144000, 0177000, 0, 0, "%v$i\t%s$j^%v$k",
        !           178:        0145000, 0177000, 0, 0, "%v$i\t%v$j^%v$k",
        !           179:        0146000, 0177070, 0, 0, "%v$i\t#%vm&%v$k",
        !           180:        0146000, 0177000, 0, 0, "%v$i\t%s$j!%v$k&%vm",
        !           181:        0147000, 0177000, 0, 0, "%v$i\t%v$j!%v$k&%vm",
        !           182:        0150000, 0177007, 0, 0, "%v$i\t%v$j<<1",
        !           183:        0150000, 0177000, 0, 0, "%v$i\t%v$j<<%a$k",
        !           184:        0151000, 0177007, 0, 0, "%v$i\t%v$j>>1",
        !           185:        0151000, 0177000, 0, 0, "%v$i\t%v$j>>%a$k",
        !           186:        0152000, 0177007, 0, 0, "%v$i\t%v$j,%v$j<<1",
        !           187:        0152000, 0177000, 0, 0, "%v$i\t%v$j,%v$j<<%a$k",
        !           188:        0153000, 0177007, 0, 0, "%v$i\t%v$j,%v$j>>1",
        !           189:        0153000, 0177000, 0, 0, "%v$i\t%v$j,%v$j>>%a$k",
        !           190:        0154000, 0177000, 0, 0, "%v$i\t%s$j+%v$k",
        !           191:        0155000, 0177000, 0, 0, "%v$i\t%v$j+%v$k",
        !           192:        0156000, 0177070, 0, 0, "%v$i\t-%v$k",
        !           193:        0156000, 0177000, 0, 0, "%v$i\t%s$j-%v$k",
        !           194:        0157000, 0177000, 0, 0, "%v$i\t%v$j-%v$k",
        !           195:        0160000, 0177000, 0, 0, "%v$i\t%s$j*%fv$k",
        !           196:        0161000, 0177000, 0, 0, "%v$i\t%v$j*%fv$k",
        !           197:        0162000, 0177000, 0, 0, "%v$i\t%s$j*%hv$k",
        !           198:        0163000, 0177000, 0, 0, "%v$i\t%v$j*%hv$k",
        !           199:        0164000, 0177000, 0, 0, "%v$i\t%s$j*%rv$k",
        !           200:        0165000, 0177000, 0, 0, "%v$i\t%v$j*%rv$k",
        !           201:        0166000, 0177000, 0, 0, "%v$i\t%s$j*%iv$k",
        !           202:        0167000, 0177000, 0, 0, "%v$i\t%v$j*%iv$k",
        !           203:        0170000, 0177070, 0, 0, "%v$i\t+%fv$k",
        !           204:        0170000, 0177000, 0, 0, "%v$i\t%s$j+%fv$k",
        !           205:        0171000, 0177000, 0, 0, "%v$i\t%v$j+%fv$k",
        !           206:        0172000, 0177070, 0, 0, "%v$i\t-%fv$k",
        !           207:        0172000, 0177000, 0, 0, "%v$i\t%s$j-%fv$k",
        !           208:        0173000, 0177000, 0, 0, "%v$i\t%v$j-%fv$k",
        !           209:        0174000, 0177007, 0, 0, "%v$i\t/%hv$j",
        !           210:        0174001, 0177007, 0, 0, "%v$i\t/%pv$j",
        !           211:        0174002, 0177007, 0, 0, "%v$i\t/%qv$j",
        !           212:        0175000, 0177707, 0, 0, "%vm\t%v$j,z",
        !           213:        0175001, 0177707, 0, 0, "%vm\t%v$j,n",
        !           214:        0175002, 0177707, 0, 0, "%vm\t%v$j,p",
        !           215:        0175003, 0177707, 0, 0, "%vm\t%v$j,m",
        !           216:        0176000, 0177077, 0, 0, "%v$i\t,%a0,1",
        !           217:        0176000, 0177070, 0, 0, "%v$i\t,%a0,%a$k",
        !           218:        0177000, 0177707, 0, 0, ",%a0,1\t%v$j",
        !           219:        0177000, 0177700, 0, 0, ",%a0,%a$k\t%v$j",
        !           220:        0, 0, 0, 0, 0, 0, NULL
        !           221: };
        !           222: 
        !           223: printins(isp)
        !           224: int isp;
        !           225: {
        !           226:        register WORD ins;
        !           227:        register struct optab *op;
        !           228:        register char *p;
        !           229:        int oh, oi, oj, ok, om;
        !           230:        WORD val, xval;
        !           231:        static char oct[] = "01234567";
        !           232: 
        !           233:        ins = stow(sget(dot, isp));
        !           234:        ins &= 0177777;         /* hack */
        !           235:        for (op = optab; op->name; op++) {
        !           236:                if ((ins & op->mask) != op->op)
        !           237:                        continue;
        !           238:                if (op->mbnz == 0
        !           239:                ||  (ins & op->mbnz) != 0)
        !           240:                        break;
        !           241:        }
        !           242:        dotinc = 2;
        !           243:        if (op->name == NULL) {
        !           244:                printf("gok\t%R", ins);
        !           245:                return;
        !           246:        }
        !           247:        om = 0;
        !           248:        if (op->flag & FBIG) {
        !           249:                dotinc += 2;
        !           250:                om = stow(sget(dot+2, isp)) & 0177777;
        !           251:        }
        !           252:        oh = (ins >> 9) & 07;
        !           253:        oi = (ins >> 6) & 07;
        !           254:        oj = (ins >> 3) & 07;
        !           255:        ok = ins & 07;
        !           256:        for (p = op->name; *p; p++) {
        !           257:                if (*p != '$') {
        !           258:                        printc(*p);
        !           259:                        continue;
        !           260:                }
        !           261:                switch (*++p) {
        !           262:                case 0:
        !           263:                        --p;
        !           264:                        break;
        !           265: 
        !           266:                case 'h':
        !           267:                        printc(oct[oh]);
        !           268:                        break;
        !           269: 
        !           270:                case 'i':
        !           271:                        printc(oct[oi]);
        !           272:                        break;
        !           273: 
        !           274:                case 'j':
        !           275:                        printc(oct[oj]);
        !           276:                        break;
        !           277: 
        !           278:                case 'k':
        !           279:                        printc(oct[ok]);
        !           280:                        break;
        !           281: 
        !           282:                case 'y':       /* jk */
        !           283:                        val = ok|(oj<<3);
        !           284:                        if (op->flag & FPAR) {
        !           285:                                printf("p.");
        !           286:                                val *= 2;
        !           287:                        }
        !           288:                        if (op->flag & FWRD) {
        !           289:                                printf("w.");
        !           290:                                val *= 8;
        !           291:                        }
        !           292:                        psymoff(val, (op->flag & FPAR) ? INSTSP : DATASP, "");
        !           293:                        break;
        !           294: 
        !           295:                case 'z':       /* jk, special case for >> */
        !           296:                        val = 0100 - (ok|(oj<<3));
        !           297:                        psymoff(val, DATASP, "");
        !           298:                        break;
        !           299: 
        !           300:                case 'x':       /* jkm */
        !           301:                        val = om|(ok<<16)|(oj<<19);
        !           302:                        if (op->flag & FPAR) {
        !           303:                                printf("p.");
        !           304:                                val *= 2;
        !           305:                        }
        !           306:                        if (op->flag & FWRD) {
        !           307:                                printf("w.");
        !           308:                                val *= 8;
        !           309:                        }
        !           310:                        psymoff(val, (op->flag & FPAR) ? INSTSP : DATASP, "");
        !           311:                        break;
        !           312: 
        !           313:                case 'X':       /* ijkm */
        !           314:                        val = om|(ok<<16)|(oj<<19)|(oi<<22);
        !           315:                        if (op->flag & FPAR) {
        !           316:                                printf("p.");
        !           317:                                val *= 2;
        !           318:                        }
        !           319:                        if (op->flag & FWRD) {
        !           320:                                printf("w.");
        !           321:                                val *= 8;
        !           322:                        }
        !           323:                        psymoff(val, (op->flag & FPAR) ? INSTSP : DATASP, "");
        !           324:                        break;
        !           325:                }
        !           326:        }
        !           327: }

unix.superglobalmegacorp.com

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