Annotation of researchv10no/cmd/adb/cray/das.c, revision 1.1.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.