|
|
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: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.