|
|
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.