|
|
1.1 ! root 1: /* ! 2: * static char *tables_ID = "@(#) tables.c: 1.2 12/14/83"; ! 3: */ ! 4: #include "dis.h" ! 5: ! 6: #define INVALID {"",UNKNOWN} ! 7: ! 8: ! 9: /* ! 10: * Address modes table for operand processing. The first two ! 11: * nibbles will be used as an index into the table. The first ! 12: * nibble usually determines the address mod and the second ! 13: * nibble usually determines the register. The immediate and ! 14: * extended modes are exceptions. ! 15: * The first sub-field is the part or all of the string to ! 16: * be printed for the address. The second sub-field names ! 17: * the address mode type (for use in case statement). ! 18: */ ! 19: ! 20: struct formtable adrmodtbl[256] = { ! 21: ! 22: /* [0,0] */ {"&0x0",IM6}, {"&0x1",IM6}, {"&0x2",IM6}, {"&0x3",IM6}, ! 23: /* [0,4] */ {"&0x4",IM6}, {"&0x5",IM6}, {"&0x6",IM6}, {"&0x7",IM6}, ! 24: /* [0,8] */ {"&0x8",IM6}, {"&0x9",IM6}, {"&0xa",IM6}, {"&0xb",IM6}, ! 25: /* [0,C] */ {"&0xc",IM6}, {"&0xd",IM6}, {"&0xe",IM6}, {"&0xf",IM6}, ! 26: ! 27: /* [1,0] */ {"&0x10",IM6}, {"&0x11",IM6}, {"&0x12",IM6}, {"&0x13",IM6}, ! 28: /* [1,4] */ {"&0x14",IM6}, {"&0x15",IM6}, {"&0x16",IM6}, {"&0x17",IM6}, ! 29: /* [1,8] */ {"&0x18",IM6}, {"&0x19",IM6}, {"&0x1a",IM6}, {"&0x1b",IM6}, ! 30: /* [1,C] */ {"&0x1c",IM6}, {"&0x1d",IM6}, {"&0x1e",IM6}, {"&0x1f",IM6}, ! 31: ! 32: /* [2,0] */ {"&0x20",IM6}, {"&0x21",IM6}, {"&0x22",IM6}, {"&0x23",IM6}, ! 33: /* [2,4] */ {"&0x24",IM6}, {"&0x25",IM6}, {"&0x26",IM6}, {"&0x27",IM6}, ! 34: /* [2,8] */ {"&0x28",IM6}, {"&0x29",IM6}, {"&0x2a",IM6}, {"&0x2b",IM6}, ! 35: /* [2,C] */ {"&0x2c",IM6}, {"&0x2d",IM6}, {"&0x2e",IM6}, {"&0x2f",IM6}, ! 36: ! 37: /* [3,0] */ {"&0x30",IM6}, {"&0x31",IM6}, {"&0x32",IM6}, {"&0x33",IM6}, ! 38: /* [3,4] */ {"&0x34",IM6}, {"&0x35",IM6}, {"&0x36",IM6}, {"&0x37",IM6}, ! 39: /* [3,8] */ {"&0x38",IM6}, {"&0x39",IM6}, {"&0x3a",IM6}, {"&0x3b",IM6}, ! 40: /* [3,C] */ {"&0x3c",IM6}, {"&0x3d",IM6}, {"&0x3e",IM6}, {"&0x3f",IM6}, ! 41: ! 42: /* [4,0] */ {"%r0",R}, {"%r1",R}, {"%r2",R}, {"%r3",R}, ! 43: /* [4,4] */ {"%r4",R}, {"%r5",R}, {"%r6",R}, {"%r7",R}, ! 44: /* [4,8] */ {"%r8",R}, {"%fp",R}, {"%ap",R}, {"%psw",R}, ! 45: /* [4,C] */ {"%sp",R}, {"%pcbp",R}, {"%isp",R}, {"",IMW}, ! 46: ! 47: /* [5,0] */ {"0(%r0)",R}, {"0(%r1)",R}, {"0(%r2)",R}, {"0(%r3)",R}, ! 48: /* [5,4] */ {"0(%r4)",R}, {"0(%r5)",R}, {"0(%r6)",R}, {"0(%r7)",R}, ! 49: /* [5,8] */ {"0(%r8)",R}, {"0(%fp)",R}, {"0(%ap)",R}, {"0(%psw)",R}, ! 50: /* [5,C] */ {"0(%sp)",R}, {"0(%pcbp)",R}, {"0(%isp)",R}, {"",IMH}, ! 51: ! 52: /* [6,0] */ {"0x0(%fp)",R4}, {"0x1(%fp)",R4}, {"0x2(%fp)",R4}, {"0x3(%fp)",R4}, ! 53: /* [6,4] */ {"0x4(%fp)",R4}, {"0x5(%fp)",R4}, {"0x6(%fp)",R4}, {"0x7(%fp)",R4}, ! 54: /* [6,8] */ {"0x8(%fp)",R4}, {"0x9(%fp)",R4}, {"0xa(%fp)",R4}, {"0xb(%fp)",R4}, ! 55: /* [6,C] */ {"0xc(%fp)",R4}, {"0xd(%fp)",R4}, {"0xe(%fp)",R4}, {"",IMB}, ! 56: ! 57: /* [7,0] */ {"0x0(%ap)",R4}, {"0x1(%ap)",R4}, {"0x2(%ap)",R4}, {"0x3(%ap)",R4}, ! 58: /* [7,4] */ {"0x4(%ap)",R4}, {"0x5(%ap)",R4}, {"0x6(%ap)",R4}, {"0x7(%ap)",R4}, ! 59: /* [7,8] */ {"0x8(%ap)",R4}, {"0x9(%ap)",R4}, {"0xa(%ap)",R4}, {"0xb(%ap)",R4}, ! 60: /* [7,C] */ {"0xc(%ap)",R4}, {"0xd(%ap)",R4}, {"0xe(%ap)",R4}, {"",ABAD}, ! 61: ! 62: /* [8,0] */ {"(%r0)",BDW}, {"(%r1)",BDW}, {"(%r2)",BDW}, {"(%r3)",BDW}, ! 63: /* [8,4] */ {"(%r4)",BDW}, {"(%r5)",BDW}, {"(%r6)",BDW}, {"(%r7)",BDW}, ! 64: /* [8,8] */ {"(%r8)",BDW}, {"(%fp)",BDW}, {"(%ap)",BDW}, {"(%psw)",BDW}, ! 65: /* [8,C] */ {"(%sp)",BDW}, {"(%pcbp)",BDW}, {"(%isp)",BDW}, {"(%pc)",BDW}, ! 66: ! 67: /* [9,0] */ {"(%r0)",BDWDF}, {"(%r1)",BDWDF}, {"(%r2)",BDWDF}, {"(%r3)",BDWDF}, ! 68: /* [9,4] */ {"(%r4)",BDWDF}, {"(%r5)",BDWDF}, {"(%r6)",BDWDF}, {"(%r7)",BDWDF}, ! 69: /* [9,8] */ {"(%r8)",BDWDF}, {"(%fp)",BDWDF}, {"(%ap)",BDWDF}, {"(%psw)",BDWDF}, ! 70: /* [9,C] */ {"(%sp)",BDWDF}, {"(%pcbp)",BDWDF}, {"(%isp)",BDWDF}, {"(%pc)",BDWDF}, ! 71: ! 72: /* [A,0] */ {"(%r0)",BDH}, {"(%r1)",BDH}, {"(%r2)",BDH}, {"(%r3)",BDH}, ! 73: /* [A,4] */ {"(%r4)",BDH}, {"(%r5)",BDH}, {"(%r6)",BDH}, {"(%r7)",BDH}, ! 74: /* [A,8] */ {"(%r8)",BDH}, {"(%fp)",BDH}, {"(%ap)",BDH}, {"(%psw)",BDH}, ! 75: /* [A,C] */ {"(%sp)",BDH}, {"(%pcbp)",BDH}, {"(%isp)",BDH}, {"(%pc)",BDH}, ! 76: ! 77: /* [B,0] */ {"(%r0)",BDHDF}, {"(%r1)",BDHDF}, {"(%r2)",BDHDF}, {"(%r3)",BDHDF}, ! 78: /* [B,4] */ {"(%r4)",BDHDF}, {"(%r5)",BDHDF}, {"(%r6)",BDHDF}, {"(%r7)",BDHDF}, ! 79: /* [B,8] */ {"(%r8)",BDHDF}, {"(%fp)",BDHDF}, {"(%ap)",BDHDF}, {"(%psw)",BDHDF}, ! 80: /* [B,C] */ {"(%sp)",BDHDF}, {"(%pcbp)",BDHDF}, {"(%isp)",BDHDF}, {"(%pc)",BDHDF}, ! 81: ! 82: /* [C,0] */ {"(%r0)",BDB}, {"(%r1)",BDB}, {"(%r2)",BDB}, {"(%r3)",BDB}, ! 83: /* [C,4] */ {"(%r4)",BDB}, {"(%r5)",BDB}, {"(%r6)",BDB}, {"(%r7)",BDB}, ! 84: /* [C,8] */ {"(%r8)",BDB}, {"(%fp)",BDB}, {"(%ap)",BDB}, {"(%psw)",BDB}, ! 85: /* [C,C] */ {"(%sp)",BDB}, {"(%pcbp)",BDB}, {"(%isp)",BDB}, {"(%pc)",IMD}, ! 86: ! 87: /* [D,0] */ {"(%r0)",BDBDF}, {"(%r1)",BDBDF}, {"(%r2)",BDBDF}, {"(%r3)",BDBDF}, ! 88: /* [D,4] */ {"(%r4)",BDBDF}, {"(%r5)",BDBDF}, {"(%r6)",BDBDF}, {"(%r7)",BDBDF}, ! 89: /* [D,8] */ {"(%r8)",BDBDF}, {"(%fp)",BDBDF}, {"(%ap)",BDBDF}, {"(%psw)",BDBDF}, ! 90: /* [D,C] */ {"(%sp)",BDBDF}, {"(%pcbp)",BDBDF}, {"(%isp)",BDBDF}, {"(%pc)",BDBDF}, ! 91: ! 92: /* [E,0] */ {"{uword}",EXPUW}, INVALID, {"{uhalf}",EXPUH}, {"{ubyte}",EXPUB}, ! 93: /* [E,4] */ {"{sword}",EXPSW}, INVALID, {"{shalf}",EXPSH}, {"{sbyte}",EXPSB}, ! 94: /* [E,8] */ INVALID, INVALID, INVALID, INVALID, ! 95: /* [E,C] */ INVALID, INVALID, INVALID, {"",ABADDF}, ! 96: ! 97: /* [F,0] */ {"&-0x10",IM4}, {"&-0xf",IM4}, {"&-0xe",IM4}, {"&-0xd",IM4}, ! 98: /* [F,4] */ {"&-0xc",IM4}, {"&-0xb",IM4}, {"&-0xa",IM4}, {"&-0x9",IM4}, ! 99: /* [F,8] */ {"&-0x8",IM4}, {"&-0x7",IM4}, {"&-0x6",IM4}, {"&-0x5",IM4}, ! 100: /* [F,C] */ {"&-0x4",IM4}, {"&-0x3",IM4}, {"&-0x2",IM4}, {"&-0x1",IM4}, ! 101: }; ! 102: /* ! 103: * Main decode table for the op codes. The first two nibbles ! 104: * will be used as an index into the table. All op codes ! 105: * are exactly two nibbles. The first sub-field is the op code ! 106: * mnemonic name. The second sub-field is the op code class. ! 107: */ ! 108: ! 109: struct instable opcodetbl[256] = { ! 110: ! 111: /* [0,0] */ {"halt",OPRNDS0}, {"getsm",OPRNDS0}, {"SPOPRD",SPRTOP1}, {"SPOPD2",SPRTOP2}, ! 112: /* [0,4] */ {"MOVAW",OPRNDS2}, INVALID, {"SPOPRT",SPRTOP1}, {"SPOPT2",SPRTOP2}, ! 113: /* [0,8] */ {"RET",OPRNDS0}, INVALID, INVALID, INVALID, ! 114: /* [0,C] */ {"MOVTRW",OPRNDS2}, INVALID, INVALID, INVALID, ! 115: ! 116: /* [1,0] */ {"SAVE",OPRNDS1}, {"putsm",OPRNDS0}, INVALID, {"SPOPWD",SPRTOP1}, ! 117: /* [1,4] */ {"EXTOP",EXT}, INVALID, INVALID, {"SPOPWT",SPRTOP1}, ! 118: /* [1,8] */ {"RESTORE",OPRNDS1}, INVALID, INVALID, INVALID, ! 119: /* [1,C] */ {"SWAPWI",OPRNDS1}, INVALID, {"SWAPHI",OPRNDS1}, {"SWAPBI",OPRNDS1}, ! 120: ! 121: /* [2,0] */ {"POPW",OPRNDS1}, {"ungetsm",OPRNDS0}, {"SPOPRS",SPRTOP1}, {"SPOPS2",SPRTOP2}, ! 122: /* [2,4] */ {"JMP",JUMP}, INVALID, INVALID, {"CFLUSH",OPRNDS0}, ! 123: /* [2,8] */ {"TSTW",OPRNDS1}, INVALID, {"TSTH",OPRNDS1}, {"TSTB",OPRNDS1}, ! 124: /* [2,C] */ {"CALL",OPRNDS2}, INVALID, {"BPT",OPRNDS0}, {"WAIT",OPRNDS0}, ! 125: ! 126: /* [3,0] */ {"",MACRO}, {"FADDS2",SFPOPS2}, {"SPOP",SPRTOP0}, {"SPOPWS",SPRTOP1}, ! 127: /* [3,4] */ {"JSB",JUMP}, {"FADDD2",DFPOPS2}, {"BSBH",JUMP2}, {"BSBB",JUMP1}, ! 128: /* [3,8] */ {"BITW",OPRNDS2}, {"FADDS3",SFPOPS3}, {"BITH",OPRNDS2}, {"BITB",OPRNDS2}, ! 129: /* [3,C] */ {"CMPW",OPRNDS2}, INVALID, {"CMPH",OPRNDS2}, {"CMPB",OPRNDS2}, ! 130: ! 131: /* [4,0] */ {"RGEQ",OPRNDS0}, {"FSUBS2",SFPOPS2}, {"BGEH",JUMP2}, {"BGEB",JUMP1}, ! 132: /* [4,4] */ {"RGTR",OPRNDS0}, {"FSUBD2",DFPOPS2}, {"BGH",JUMP2}, {"BGB",JUMP1}, ! 133: /* [4,8] */ {"RLSS",OPRNDS0}, {"FSUBS3",SFPOPS3}, {"BLH",JUMP2}, {"BLB",JUMP1}, ! 134: /* [4,C] */ {"RLEQ",OPRNDS0}, INVALID, {"BLEH",JUMP2}, {"BLEB",JUMP1}, ! 135: ! 136: /* [5,0] */ {"RCC",OPRNDS0}, {"FMULS2",SFPOPS2}, {"BGEUH",JUMP2}, {"BGEUB",JUMP1}, ! 137: /* [5,4] */ {"RGTRU",OPRNDS0}, {"FMULD2",DFPOPS2}, {"BGUH",JUMP2}, {"BGUB",JUMP1}, ! 138: /* [5,8] */ {"RCS",OPRNDS0}, {"FMULS3",SFPOPS3}, {"BLUH",JUMP2}, {"BLUB",JUMP1}, ! 139: /* [5,C] */ {"RLEQU",OPRNDS0}, INVALID, {"BLEUH",JUMP2}, {"BLEUB",JUMP1}, ! 140: ! 141: /* [6,0] */ {"RVC",OPRNDS0}, {"FDIVS2",SFPOPS2}, {"BVCH",JUMP2}, {"BVCB",JUMP1}, ! 142: /* [6,4] */ {"RNEQ",OPRNDS0}, {"FDIVD2",DFPOPS2}, {"BNEH",JUMP2}, {"BNEB",JUMP1}, ! 143: /* [6,8] */ {"RVS",OPRNDS0}, {"FDIVS3",SFPOPS3}, {"BVSH",JUMP2}, {"BVSB",JUMP1}, ! 144: /* [6,C] */ {"REQL",OPRNDS0}, INVALID, {"BEH",JUMP2}, {"BEB",JUMP1}, ! 145: ! 146: /* [7,0] */ {"NOP",OPRNDS0}, {"MOVHS",SFPOPS2}, {"NOP3",NOOP16}, {"NOP2",NOOP8}, ! 147: /* [7,4] */ {"RNEQ",OPRNDS0}, {"MOVHD",DFPOPS2}, {"BNEH",JUMP2}, {"BNEB",JUMP1}, ! 148: /* [7,8] */ {"RSB",OPRNDS0}, {"FADDD3",DFPOPS3}, {"BRH",JUMP2}, {"BRB",JUMP1}, ! 149: /* [7,C] */ {"REQL",OPRNDS0}, INVALID, {"BEH",JUMP2}, {"BEB",JUMP1}, ! 150: ! 151: /* [8,0] */ {"CLRW",OPRNDS1}, {"MOVWS",SFPOPS2}, {"CLRH",OPRNDS1}, {"CLRB",OPRNDS1}, ! 152: /* [8,4] */ {"MOVW",OPRNDS2}, {"MOVWD",DFPOPS2}, {"MOVH",OPRNDS2}, {"MOVB",OPRNDS2}, ! 153: /* [8,8] */ {"MCOMW",OPRNDS2}, {"FSUBD3",DFPOPS3}, {"MCOMH",OPRNDS2}, {"MCOMB",OPRNDS2}, ! 154: /* [8,C] */ {"MNEGW",OPRNDS2}, INVALID, {"MNEGH",OPRNDS2}, {"MNEGB",OPRNDS2}, ! 155: ! 156: /* [9,0] */ {"INCW",OPRNDS1}, {"MOVSS",SFPOPS2}, {"INCH",OPRNDS1}, {"INCB",OPRNDS1}, ! 157: /* [9,4] */ {"DECW",OPRNDS1}, {"MOVDS",DFPOPS2}, {"DECH",OPRNDS1}, {"DECB",OPRNDS1}, ! 158: /* [9,8] */ INVALID, {"FMULD3",DFPOPS3}, INVALID, INVALID, ! 159: /* [9,C] */ {"ADDW2",OPRNDS2}, INVALID, {"ADDH2",OPRNDS2}, {"ADDB2",OPRNDS2}, ! 160: ! 161: /* [A,0] */ {"PUSHW",OPRNDS1}, {"MOVSD",SFPOPS2}, INVALID, INVALID, ! 162: /* [A,4] */ {"MODW2",OPRNDS2}, {"MOVDD",DFPOPS2}, {"MODH2",OPRNDS2}, {"MODB2",OPRNDS2}, ! 163: /* [A,8] */ {"MULW2",OPRNDS2}, {"FDIVD3",DFPOPS3}, {"MULH2",OPRNDS2}, {"MULB2",OPRNDS2}, ! 164: /* [A,C] */ {"DIVW2",OPRNDS2}, INVALID, {"DIVH2",OPRNDS2}, {"DIVB2",OPRNDS2}, ! 165: ! 166: /* [B,0] */ {"ORW2",OPRNDS2}, {"MOVSH",SFPOPS2}, {"ORH2",OPRNDS2}, {"ORB2",OPRNDS2}, ! 167: /* [B,4] */ {"XORW2",OPRNDS2}, {"MOVDH",DFPOPS2}, {"XORH2",OPRNDS2}, {"XORB2",OPRNDS2}, ! 168: /* [B,8] */ {"ANDW2",OPRNDS2}, INVALID, {"ANDH2",OPRNDS2}, {"ANDB2",OPRNDS2}, ! 169: /* [B,C] */ {"SUBW2",OPRNDS2}, INVALID, {"SUBH2",OPRNDS2}, {"SUBB2",OPRNDS2}, ! 170: ! 171: /* [C,0] */ {"ALSW3",OPRNDS3}, {"MOVTSH",SFPOPS2}, INVALID, INVALID, ! 172: /* [C,4] */ {"ARSW3",OPRNDS3}, {"MOVTDH",DFPOPS2}, {"ARSH3",OPRNDS3}, {"ARSB3",OPRNDS3}, ! 173: /* [C,8] */ {"INSFW",OPRNDS4}, INVALID, {"INSFH",OPRNDS4}, {"INSFB",OPRNDS4}, ! 174: /* [C,C] */ {"EXTFW",OPRNDS4}, INVALID, {"EXTFH",OPRNDS4}, {"EXTFB",OPRNDS4}, ! 175: ! 176: /* [D,0] */ {"LLSW3",OPRNDS3}, {"MOVSW",SFPOPS2}, {"LLSH3",OPRNDS3}, {"LLSB3",OPRNDS3}, ! 177: /* [D,4] */ {"LRSW3",OPRNDS3}, {"MOVDW",DFPOPS2}, INVALID, INVALID, ! 178: /* [D,8] */ {"ROTW",OPRNDS3}, INVALID, INVALID, INVALID, ! 179: /* [D,C] */ {"ADDW3",OPRNDS3}, INVALID, {"ADDH3",OPRNDS3}, {"ADDB3",OPRNDS3}, ! 180: ! 181: /* [E,0] */ {"PUSHAW",OPRNDS1}, {"MOVTSW",SFPOPS2}, INVALID, INVALID, ! 182: /* [E,4] */ {"MODW3",OPRNDS3}, {"MOVTDW",DFPOPS2}, {"MODH3",OPRNDS3}, {"MODB3",OPRNDS3}, ! 183: /* [E,8] */ {"MULW3",OPRNDS3}, INVALID, {"MULH3",OPRNDS3}, {"MULB3",OPRNDS3}, ! 184: /* [E,C] */ {"DIVW3",OPRNDS3}, INVALID, {"DIVH3",OPRNDS3}, {"DIVB3",OPRNDS3}, ! 185: ! 186: /* [F,0] */ {"ORW3",OPRNDS3}, {"FCMPS",SFPOPS2}, {"ORH3",OPRNDS3}, {"ORB3",OPRNDS3}, ! 187: /* [F,4] */ {"XORW3",OPRNDS3}, {"FCMPD",DFPOPS2}, {"XORH3",OPRNDS3}, {"XORB3",OPRNDS3}, ! 188: /* [F,8] */ {"ANDW3",OPRNDS3}, INVALID, {"ANDH3",OPRNDS3}, {"ANDB3",OPRNDS3}, ! 189: /* [F,C] */ {"SUBW3",OPRNDS3}, INVALID, {"SUBH3",OPRNDS3}, {"SUBB3",OPRNDS3}, ! 190: };
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.