|
|
1.1 root 1: /* Print PN instructions for GDB, the GNU debugger.
2: Copyright (C) 1986, 1987 Free Software Foundation, Inc.
3:
4: GDB is distributed in the hope that it will be useful, but WITHOUT ANY
5: WARRANTY. No author or distributor accepts responsibility to anyone
6: for the consequences of using it or for whether it serves any
7: particular purpose or works at all, unless he says so in writing.
8: Refer to the GDB General Public License for full details.
9:
10: Everyone is granted permission to copy, modify and redistribute GDB,
11: but only under the conditions described in the GDB General Public
12: License. A copy of this license is supposed to have been given to you
13: along with GDB so you can know your rights and responsibilities. It
14: should be in a file named COPYING. Among other things, the copyright
15: notice and this notice must be preserved on all copies.
16:
17: In other words, go ahead and share GDB, but don't try to stop
18: anyone else from sharing it farther. Help stamp out software hoarding!
19: */
20:
21: struct gld_opcode
22: {
23: char *name;
24: unsigned long opcode;
25: unsigned long mask;
26: char *args;
27: int length;
28: };
29:
30: /* We store four bytes of opcode for all opcodes because that
31: is the most any of them need. The actual length of an instruction
32: is always at least 2 bytes, and at most four. The length of the
33: instruction is based on the opcode.
34:
35: The mask component is a mask saying which bits must match
36: particular opcode in order for an instruction to be an instance
37: of that opcode.
38:
39: The args component is a string containing characters
40: that are used to format the arguments to the instruction. */
41:
42: /* Kinds of operands:
43: r Register in first field
44: R Register in second field
45: b Base register in first field
46: B Base register in second field
47: v Vector register in first field
48: V Vector register in first field
49: A Optional address register (base register)
50: X Optional index register
51: I Immediate data (16bits signed)
52: O Offset field (16bits signed)
53: h Offset field (15bits signed)
54: d Offset field (14bits signed)
55: S Shift count field
56:
57: any other characters are printed as is...
58: */
59:
60: /* The assembler requires that this array be sorted as follows:
61: all instances of the same mnemonic must be consecutive.
62: All instances of the same mnemonic with the same number of operands
63: must be consecutive.
64: */
65: struct gld_opcode gld_opcodes[] =
66: {
67: { "abm", 0xa0080000, 0xfc080000, "f,xOA,X", 4 },
68: { "abr", 0x18080000, 0xfc0c0000, "r,f", 2 },
69: { "aci", 0xfc770000, 0xfc7f8000, "r,I", 4 },
70: { "adfd", 0xe0080002, 0xfc080002, "r,xOA,X", 4 },
71: { "adfw", 0xe0080000, 0xfc080000, "r,xOA,X", 4 },
72: { "adi", 0xc8010000, 0xfc7f0000, "r,I", 4 },
73: { "admb", 0xb8080000, 0xfc080000, "r,xOA,X", 4 },
74: { "admd", 0xb8000002, 0xfc080002, "r,xOA,X", 4 },
75: { "admh", 0xb8000001, 0xfc080001, "r,xOA,X", 4 },
76: { "admw", 0xb8000000, 0xfc080000, "r,xOA,X", 4 },
77: { "adr", 0x38000000, 0xfc0f0000, "r,R", 2 },
78: { "adrfd", 0x38090000, 0xfc0f0000, "r,R", 2 },
79: { "adrfw", 0x38010000, 0xfc0f0000, "r,R", 2 },
80: { "adrm", 0x38080000, 0xfc0f0000, "r,R", 2 },
81: { "ai", 0xfc030000, 0xfc07ffff, "I", 4 },
82: { "anmb", 0x84080000, 0xfc080000, "r,xOA,X", 4 },
83: { "anmd", 0x84000002, 0xfc080002, "r,xOA,X", 4 },
84: { "anmh", 0x84000001, 0xfc080001, "r,xOA,X", 4 },
85: { "anmw", 0x84000000, 0xfc080000, "r,xOA,X", 4 },
86: { "anr", 0x04000000, 0xfc0f0000, "r,R", 2 },
87: { "armb", 0xe8080000, 0xfc080000, "r,xOA,X", 4 },
88: { "armd", 0xe8000002, 0xfc080002, "r,xOA,X", 4 },
89: { "armh", 0xe8000001, 0xfc080001, "r,xOA,X", 4 },
90: { "armw", 0xe8000000, 0xfc080000, "r,xOA,X", 4 },
91: { "bcf", 0xf0000000, 0xfc080000, "I,xOA,X", 4 },
92: { "bct", 0xec000000, 0xfc080000, "I,xOA,X", 4 },
93: { "bei", 0x00060000, 0xffff0000, "", 2 },
94: { "bft", 0xf0000000, 0xff880000, "xOA,X", 4 },
95: { "bib", 0xf4000000, 0xfc780000, "r,xOA", 4 },
96: { "bid", 0xf4600000, 0xfc780000, "r,xOA", 4 },
97: { "bih", 0xf4200000, 0xfc780000, "r,xOA", 4 },
98: { "biw", 0xf4400000, 0xfc780000, "r,xOA", 4 },
99: { "bl", 0xf8800000, 0xff880000, "xOA,X", 4 },
100: { "bsub", 0x5c080000, 0xff8f0000, "", 2 },
101: { "bsubm", 0x28080000, 0xfc080000, "", 4 },
102: { "bu", 0xec000000, 0xff880000, "xOA,X", 4 },
103: { "call", 0x28080000, 0xfc0f0000, "", 2 },
104: { "callm", 0x5c080000, 0xff880000, "", 4 },
105: { "camb", 0x90080000, 0xfc080000, "r,xOA,X", 4 },
106: { "camd", 0x90000002, 0xfc080002, "r,xOA,X", 4 },
107: { "camh", 0x90000001, 0xfc080001, "r,xOA,X", 4 },
108: { "camw", 0x90000000, 0xfc080000, "r.xOA,X", 4 },
109: { "car", 0x10000000, 0xfc0f0000, "r,R", 2 },
110: { "cd", 0xfc060000, 0xfc070000, "r,f", 4 },
111: { "cea", 0x000f0000, 0xffff0000, "", 2 },
112: { "ci", 0xc8050000, 0xfc7f0000, "r,I", 4 },
113: { "cmc", 0x040a0000, 0xfc7f0000, "r", 2 },
114: { "cmmb", 0x94080000, 0xfc080000, "r,xOA,X", 4 },
115: { "cmmd", 0x94000002, 0xfc080002, "r,xOA,X", 4 },
116: { "cmmh", 0x94000001, 0xfc080001, "r,xOA,X", 4 },
117: { "cmmw", 0x94000000, 0xfc080000, "r,xOA,X", 4 },
118: { "cmr", 0x14000000, 0xfc0f0000, "r,R", 2 },
119: { "daci", 0xfc7f0000, 0xfc7f8000, "r,I", 4 },
120: { "dae", 0x000e0000, 0xffff0000, "", 2 },
121: { "dai", 0xfc040000, 0xfc07ffff, "I", 4 },
122: { "dci", 0xfc6f0000, 0xfc7f8000, "r,I", 4 },
123: { "di", 0xfc010000, 0xfc07ffff, "I", 4 },
124: { "dvfd", 0xe4000002, 0xfc080002, "r,xOA,X", 4 },
125: { "dvfw", 0xe4000000, 0xfc080000, "r,xOA,X", 4 },
126: { "dvi", 0xc8040000, 0xfc7f0000, "r,I", 4 },
127: { "dvmb", 0xc4080000, 0xfc080000, "r,xOA,X", 4 },
128: { "dvmh", 0xc4000001, 0xfc080001, "r,xOA,X", 4 },
129: { "dvmw", 0xc4000000, 0xfc080000, "r,xOA,X", 4 },
130: { "dvr", 0x380a0000, 0xfc0f0000, "r,R", 2 },
131: { "dvrfd", 0x380c0000, 0xfc0f0000, "r,R", 4 },
132: { "dvrfw", 0x38040000, 0xfc0f0000, "r,xOA,X", 4 },
133: { "eae", 0x00080000, 0xffff0000, "", 2 },
134: { "eci", 0xfc670000, 0xfc7f8080, "r,I", 4 },
135: { "ecwcs", 0xfc4f0000, 0xfc7f8000, "", 4 },
136: { "ei", 0xfc000000, 0xfc07ffff, "I", 4 },
137: { "eomb", 0x8c080000, 0xfc080000, "r,xOA,X", 4 },
138: { "eomd", 0x8c000002, 0xfc080002, "r,xOA,X", 4 },
139: { "eomh", 0x8c000001, 0xfc080001, "r,xOA,X", 4 },
140: { "eomw", 0x8c000000, 0xfc080000, "r,xOA,X", 4 },
141: { "eor", 0x0c000000, 0xfc0f0000, "r,R", 2 },
142: { "eorm", 0x0c080000, 0xfc0f0000, "r,R", 2 },
143: { "es", 0x00040000, 0xfc7f0000, "r", 2 },
144: { "exm", 0xa8000000, 0xff880000, "xOA,X", 4 },
145: { "exr", 0xc8070000, 0xfc7f0000, "r", 2 },
146: { "exrr", 0xc8070002, 0xfc7f0002, "r", 2 },
147: { "fixd", 0x380d0000, 0xfc0f0000, "r,R", 2 },
148: { "fixw", 0x38050000, 0xfc0f0000, "r,R", 2 },
149: { "fltd", 0x380f0000, 0xfc0f0000, "r,R", 2 },
150: { "fltw", 0x38070000, 0xfc0f0000, "r,R", 2 },
151: { "grio", 0xfc3f0000, 0xfc7f8000, "r,I", 4 },
152: { "halt", 0x00000000, 0xffff0000, "", 2 },
153: { "hio", 0xfc370000, 0xfc7f8000, "r,I", 4 },
154: { "jwcs", 0xfa080000, 0xff880000, "xOA,X", 4 },
155: { "la", 0x50000000, 0xfc000000, "r,xOA,X", 4 },
156: { "labr", 0x58080000, 0xfc080000, "b,xOA,X", 4 },
157: { "lb", 0xac080000, 0xfc080000, "r,xOA,X", 4 },
158: { "lcs", 0x00030000, 0xfc7f0000, "r", 2 },
159: { "ld", 0xac000002, 0xfc080002, "r,xOA,X", 4 },
160: { "lear", 0x80000000, 0xfc080000, "r,xOA,X", 4 },
161: { "lf", 0xcc000000, 0xfc080000, "r,xOA,X", 4 },
162: { "lfbr", 0xcc080000, 0xfc080000, "b,xOA,X", 4 },
163: { "lh", 0xac000001, 0xfc080001, "r,xOA,X", 4 },
164: { "li", 0xc8000000, 0xfc7f0000, "r,I", 4 },
165: { "lmap", 0x2c070000, 0xfc7f0000, "r", 2 },
166: { "lmb", 0xb0080000, 0xfc080000, "r,xOA,X", 4 },
167: { "lmd", 0xb0000002, 0xfc080002, "r,xOA,X", 4 },
168: { "lmh", 0xb0000001, 0xfc080001, "r,xOA,X", 4 },
169: { "lmw", 0xb0000000, 0xfc080000, "r,xOA,X", 4 },
170: { "lnb", 0xb4080000, 0xfc080000, "r,xOA,X", 4 },
171: { "lnd", 0xb4000002, 0xfc080002, "r,xOA,X", 4 },
172: { "lnh", 0xb4000001, 0xfc080001, "r,xOA,X", 4 },
173: { "lnw", 0xb4000000, 0xfc080000, "r,xOA,X", 4 },
174: { "lpsd", 0xf9800000, 0xff880000, "r,xOA,X", 4 },
175: { "lpsdcm", 0xfa800000, 0xff880000, "r,xOA,X", 4 },
176: { "lw", 0xac000000, 0xfc080000, "r,xOA,X", 4 },
177: { "lwbr", 0x5c000000, 0xfc080000, "b,xOA,X", 4 },
178: { "mpfd", 0xe4080002, 0xfc080002, "r,xOA,X", 4 },
179: { "mpfw", 0xe4080000, 0xfc080000, "r,xOA,X", 4 },
180: { "mpi", 0xc8030000, 0xfc7f0000, "r,I", 4 },
181: { "mpmb", 0xc0080000, 0xfc080000, "r,xOA,X", 4 },
182: { "mpmh", 0xc0000001, 0xfc080001, "r,xOA,X", 4 },
183: { "mpmw", 0xc0000000, 0xfc080000, "r,xOA,X", 4 },
184: { "mpr", 0x38020000, 0xfc0f0000, "r,R", 2 },
185: { "mprfd", 0x380e0000, 0xfc0f0000, "r,R", 2 },
186: { "mprfw", 0x38060000, 0xfc0f0000, "r,R", 2 },
187: { "nop", 0x00020000, 0xffff0000, "", 2 },
188: { "ormb", 0x88080000, 0xfc080000, "r,xOA,X", 4 },
189: { "ormd", 0x88000002, 0xfc080002, "r,xOA,X", 4 },
190: { "ormh", 0x88000001, 0xfc080001, "r,xOA,X", 4 },
191: { "ormw", 0x88000000, 0xfc080000, "r,xOA,X", 4 },
192: { "orr", 0x08000000, 0xfc0f0000, "r,R", 2 },
193: { "orrm", 0x08080000, 0xfc0f0000, "r,R", 2 },
194: { "rdsts", 0x00090000, 0xfc7f0000, "r", 2 },
195: { "return", 0x280e0000, 0xfc7f0000, "", 2 },
196: { "ri", 0xfc020000, 0xfc07ffff, "I", 4 },
197: { "rnd", 0x00050000, 0xfc7f0000, "r", 2 },
198: { "rpswt", 0x040b0000, 0xfc7f0000, "r", 2 },
199: { "rschnl", 0xfc2f0000, 0xfc7f8000, "r,I", 4 },
200: { "rsctl", 0xfc470000, 0xfc7f8000, "r,I", 4 },
201: { "rwcs", 0x000b0000, 0xfc0f0000, "r,R", 2 },
202: { "sacz", 0x10080000, 0xfc0f0000, "r,R", 2 },
203: { "sbm", 0x98080000, 0xfc080000, "f,xOA,X", 4 },
204: { "sbr", 0x18000000, 0xfc0c0000, "r,f", 4 },
205: { "sea", 0x000d0000, 0xffff0000, "", 2 },
206: { "setcpu", 0x2c090000, 0xfc7f0000, "r", 2 },
207: { "sio", 0xfc170000, 0xfc7f8000, "r,I", 4 },
208: { "sipu", 0x000a0000, 0xffff0000, "", 2 },
209: { "sla", 0x1c400000, 0xfc600000, "r,S", 2 },
210: { "slad", 0x20400000, 0xfc600000, "r,S", 2 },
211: { "slc", 0x24400000, 0xfc600000, "r,S", 2 },
212: { "sll", 0x1c600000, 0xfc600000, "r,S", 2 },
213: { "slld", 0x20600000, 0xfc600000, "r,S", 2 },
214: { "smc", 0x04070000, 0xfc070000, "", 2 },
215: { "sra", 0x1c000000, 0xfc600000, "r,S", 2 },
216: { "srad", 0x20000000, 0xfc600000, "r,S", 2 },
217: { "src", 0x24000000, 0xfc600000, "r,S", 2 },
218: { "srl", 0x1c200000, 0xfc600000, "r,S", 2 },
219: { "srld", 0x20200000, 0xfc600000, "r,S", 2 },
220: { "stb", 0xd4080000, 0xfc080000, "r,xOA,X", 4 },
221: { "std", 0xd4000002, 0xfc080002, "r,xOA,X", 4 },
222: { "stf", 0xdc000000, 0xfc080000, "r,xOA,X", 4 },
223: { "stfbr", 0x54000000, 0xfc080000, "b,xOA,X", 4 },
224: { "sth", 0xd4000001, 0xfc080001, "r,xOA,X", 4 },
225: { "stmb", 0xd8080000, 0xfc080000, "r,xOA,X", 4 },
226: { "stmd", 0xd8000002, 0xfc080002, "r,xOA,X", 4 },
227: { "stmh", 0xd8000001, 0xfc080001, "r,xOA,X", 4 },
228: { "stmw", 0xd8000000, 0xfc080000, "r,xOA,X", 4 },
229: { "stpio", 0xfc270000, 0xfc7f8000, "r,I", 4 },
230: { "stw", 0xd4000000, 0xfc080000, "r,xOA,X", 4 },
231: { "stwbr", 0x54000000, 0xfc080000, "b,xOA,X", 4 },
232: { "suabr", 0x58000000, 0xfc080000, "b,xOA,X", 4 },
233: { "sufd", 0xe0000002, 0xfc080002, "r,xOA,X", 4 },
234: { "sufw", 0xe0000000, 0xfc080000, "r,xOA,X", 4 },
235: { "sui", 0xc8020000, 0xfc7f0000, "r,I", 4 },
236: { "sumb", 0xbc080000, 0xfc080000, "r,xOA,X", 4 },
237: { "sumd", 0xbc000002, 0xfc080002, "r,xOA,X", 4 },
238: { "sumh", 0xbc000001, 0xfc080001, "r,xOA,X", 4 },
239: { "sumw", 0xbc000000, 0xfc080000, "r,xOA,X", 4 },
240: { "sur", 0x3c000000, 0xfc0f0000, "r,R", 2 },
241: { "surfd", 0x380b0000, 0xfc0f0000, "r,xOA,X", 4 },
242: { "surfw", 0x38030000, 0xfc0f0000, "r,R", 2 },
243: { "surm", 0x3c080000, 0xfc0f0000, "r,R", 2 },
244: { "svc", 0xc8060000, 0xffff0000, "", 4 },
245: { "tbm", 0xa4080000, 0xfc080000, "f,xOA,X", 4 },
246: { "tbr", 0x180c0000, 0xfc0c0000, "r,f", 2 },
247: { "tbrr", 0x2c020000, 0xfc0f0000, "r,B", 2 },
248: { "tccr", 0x28040000, 0xfc7f0000, "", 2 },
249: { "td", 0xfc050000, 0xfc070000, "r,f", 4 },
250: { "tio", 0xfc1f0000, 0xfc7f8000, "r,I", 4 },
251: { "tmapr", 0x2c0a0000, 0xfc0f0000, "r,R", 2 },
252: { "tpcbr", 0x280c0000, 0xfc7f0000, "r", 2 },
253: { "trbr", 0x2c010000, 0xfc0f0000, "b,R", 2 },
254: { "trc", 0x2c030000, 0xfc0f0000, "r,R", 2 },
255: { "trcc", 0x28050000, 0xfc7f0000, "", 2 },
256: { "trcm", 0x2c0b0000, 0xfc0f0000, "r,R", 2 },
257: { "trn", 0x2c040000, 0xfc0f0000, "r,R", 2 },
258: { "trnm", 0x2c0c0000, 0xfc0f0000, "r,R", 2 },
259: { "trr", 0x2c000000, 0xfc0f0000, "r,R", 2 },
260: { "trrm", 0x2c080000, 0xfc0f0000, "r,R", 2 },
261: { "trsc", 0x2c0e0000, 0xfc0f0000, "r,R", 2 },
262: { "trsw", 0x28000000, 0xfc7f0000, "r", 2 },
263: { "tscr", 0x2c0f0000, 0xfc0f0000, "r,R", 2 },
264: { "uei", 0x00070000, 0xffff0000, "", 2 },
265: { "wait", 0x00010000, 0xffff0000, "", 2 },
266: { "wcwcs", 0xfc5f0000, 0xfc7f8000, "", 4 },
267: { "wwcs", 0x000c0000, 0xfc0f0000, "r,R", 2 },
268: { "xcbr", 0x28020000, 0xfc0f0000, "b,B", 2 },
269: { "xcr", 0x2c050000, 0xfc0f0000, "r,R", 2 },
270: { "xcrm", 0x2c0d0000, 0xfc0f0000, "r,R", 2 },
271: { "zbm", 0x9c080000, 0xfc080000, "f,xOA,X", 4 },
272: { "zbr", 0x18040000, 0xfc0c0000, "r,f", 2 },
273: { "zmb", 0xf8080000, 0xfc080000, "r,xOA,X", 4 },
274: { "zmd", 0xf8000002, 0xfc080002, "r,xOA,X", 4 },
275: { "zmh", 0xf8000001, 0xfc080001, "r,xOA,X", 4 },
276: { "zmw", 0xf8000000, 0xfc080000, "r,xOA,X", 4 },
277: { "zr", 0x0c000000, 0xfc0f0000, "r", 2 },
278: };
279:
280: int numopcodes = sizeof(gld_opcodes) / sizeof(gld_opcodes[0]);
281:
282: struct gld_opcode *endop = gld_opcodes + sizeof(gld_opcodes) /
283: sizeof(gld_opcodes[0]);
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.