Annotation of src/external/gpl3/binutils.old/dist/opcodes/mcore-opc.h, Revision 1.6
1.1 christos 1: /* Assembler instructions for Motorola's Mcore processor
1.6 ! christos 2: Copyright (C) 1999-2018 Free Software Foundation, Inc.
1.1 christos 3:
4: This file is part of the GNU opcodes library.
5:
6: This library is free software; you can redistribute it and/or modify
7: it under the terms of the GNU General Public License as published by
8: the Free Software Foundation; either version 3, or (at your option)
9: any later version.
10:
11: It is distributed in the hope that it will be useful, but WITHOUT
12: ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
13: or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
14: License for more details.
15:
16: You should have received a copy of the GNU General Public License
17: along with this program; if not, write to the Free Software
18: Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
19: MA 02110-1301, USA. */
20:
21: #include "ansidecl.h"
22:
23: typedef enum
24: {
25: O0, OT, O1, OC, O2, X1, OI, OB,
26: OMa, SI, I7, LS, BR, BL, LR, LJ,
27: RM, RQ, JSR, JMP, OBRa, OBRb, OBRc, OBR2,
28: O1R1, OMb, OMc, SIa,
29: MULSH, OPSR,
30: JC, JU, JL, RSI, DO21, OB2
31: }
32: mcore_opclass;
33:
34: typedef struct inst
35: {
1.5 christos 36: const char * name;
1.1 christos 37: mcore_opclass opclass;
38: unsigned char transfer;
39: unsigned short inst;
40: }
41: mcore_opcode_info;
42:
43: #ifdef DEFINE_TABLE
44: const mcore_opcode_info mcore_table[] =
45: {
46: { "bkpt", O0, 0, 0x0000 },
47: { "sync", O0, 0, 0x0001 },
48: { "rte", O0, 1, 0x0002 },
49: { "rfe", O0, 1, 0x0002 },
50: { "rfi", O0, 1, 0x0003 },
51: { "stop", O0, 0, 0x0004 },
52: { "wait", O0, 0, 0x0005 },
53: { "doze", O0, 0, 0x0006 },
54: { "idly4", O0, 0, 0x0007 },
55: { "trap", OT, 0, 0x0008 },
56: /* SPACE: 0x000C - 0x000F */
57: /* SPACE: 0x0010 - 0x001F */
58: { "mvc", O1, 0, 0x0020 },
59: { "mvcv", O1, 0, 0x0030 },
60: { "ldq", RQ, 0, 0x0040 },
61: { "stq", RQ, 0, 0x0050 },
62: { "ldm", RM, 0, 0x0060 },
63: { "stm", RM, 0, 0x0070 },
64: { "dect", O1, 0, 0x0080 },
65: { "decf", O1, 0, 0x0090 },
66: { "inct", O1, 0, 0x00A0 },
67: { "incf", O1, 0, 0x00B0 },
68: { "jmp", JMP, 2, 0x00C0 },
69: #define MCORE_INST_JMP 0x00C0
70: { "jsr", JSR, 0, 0x00D0 },
71: #define MCORE_INST_JSR 0x00E0
72: { "ff1", O1, 0, 0x00E0 },
73: { "brev", O1, 0, 0x00F0 },
74: { "xtrb3", X1, 0, 0x0100 },
75: { "xtrb2", X1, 0, 0x0110 },
76: { "xtrb1", X1, 0, 0x0120 },
77: { "xtrb0", X1, 0, 0x0130 },
78: { "zextb", O1, 0, 0x0140 },
79: { "sextb", O1, 0, 0x0150 },
80: { "zexth", O1, 0, 0x0160 },
81: { "sexth", O1, 0, 0x0170 },
82: { "declt", O1, 0, 0x0180 },
83: { "tstnbz", O1, 0, 0x0190 },
84: { "decgt", O1, 0, 0x01A0 },
85: { "decne", O1, 0, 0x01B0 },
86: { "clrt", O1, 0, 0x01C0 },
87: { "clrf", O1, 0, 0x01D0 },
88: { "abs", O1, 0, 0x01E0 },
89: { "not", O1, 0, 0x01F0 },
90: { "movt", O2, 0, 0x0200 },
91: { "mult", O2, 0, 0x0300 },
92: { "loopt", BL, 0, 0x0400 },
93: { "subu", O2, 0, 0x0500 },
94: { "sub", O2, 0, 0x0500 }, /* Official alias. */
95: { "addc", O2, 0, 0x0600 },
96: { "subc", O2, 0, 0x0700 },
97: /* SPACE: 0x0800-0x08ff for a diadic operation */
98: /* SPACE: 0x0900-0x09ff for a diadic operation */
99: { "movf", O2, 0, 0x0A00 },
100: { "lsr", O2, 0, 0x0B00 },
101: { "cmphs", O2, 0, 0x0C00 },
102: { "cmplt", O2, 0, 0x0D00 },
103: { "tst", O2, 0, 0x0E00 },
104: { "cmpne", O2, 0, 0x0F00 },
105: { "mfcr", OC, 0, 0x1000 },
106: { "psrclr", OPSR, 0, 0x11F0 },
107: { "psrset", OPSR, 0, 0x11F8 },
108: { "mov", O2, 0, 0x1200 },
109: { "bgenr", O2, 0, 0x1300 },
110: { "rsub", O2, 0, 0x1400 },
111: { "ixw", O2, 0, 0x1500 },
112: { "and", O2, 0, 0x1600 },
113: { "xor", O2, 0, 0x1700 },
114: { "mtcr", OC, 0, 0x1800 },
115: { "asr", O2, 0, 0x1A00 },
116: { "lsl", O2, 0, 0x1B00 },
117: { "addu", O2, 0, 0x1C00 },
118: { "add", O2, 0, 0x1C00 }, /* Official alias. */
119: { "ixh", O2, 0, 0x1D00 },
120: { "or", O2, 0, 0x1E00 },
121: { "andn", O2, 0, 0x1F00 },
122: { "addi", OI, 0, 0x2000 },
123: #define MCORE_INST_ADDI 0x2000
124: { "cmplti", OI, 0, 0x2200 },
125: { "subi", OI, 0, 0x2400 },
126: /* SPACE: 0x2600-0x27ff open for a register+immediate operation */
127: { "rsubi", OB, 0, 0x2800 },
128: { "cmpnei", OB, 0, 0x2A00 },
129: { "bmaski", OMa, 0, 0x2C00 },
130: { "divu", O1R1, 0, 0x2C10 },
1.3 christos 131: /* SPACE: 0x2c20 - 0x2c7f */
1.1 christos 132: { "bmaski", OMb, 0, 0x2C80 },
133: { "bmaski", OMc, 0, 0x2D00 },
134: { "andi", OB, 0, 0x2E00 },
135: { "bclri", OB, 0, 0x3000 },
136: /* SPACE: 0x3200 - 0x320f */
137: { "divs", O1R1, 0, 0x3210 },
1.3 christos 138: /* SPACE: 0x3220 - 0x326f */
1.1 christos 139: { "bgeni", OBRa, 0, 0x3270 },
140: { "bgeni", OBRb, 0, 0x3280 },
141: { "bgeni", OBRc, 0, 0x3300 },
142: { "bseti", OB, 0, 0x3400 },
143: { "btsti", OB, 0, 0x3600 },
144: { "xsr", O1, 0, 0x3800 },
145: { "rotli", SIa, 0, 0x3800 },
146: { "asrc", O1, 0, 0x3A00 },
147: { "asri", SIa, 0, 0x3A00 },
148: { "lslc", O1, 0, 0x3C00 },
149: { "lsli", SIa, 0, 0x3C00 },
150: { "lsrc", O1, 0, 0x3E00 },
151: { "lsri", SIa, 0, 0x3E00 },
152: /* SPACE: 0x4000 - 0x5fff */
153: { "movi", I7, 0, 0x6000 },
154: #define MCORE_INST_BMASKI_ALT 0x6000
155: #define MCORE_INST_BGENI_ALT 0x6000
156: { "mulsh", MULSH, 0, 0x6800 },
157: { "muls.h", MULSH, 0, 0x6800 },
158: /* SPACE: 0x6900 - 0x6FFF */
159: { "jmpi", LJ, 1, 0x7000 },
160: { "jsri", LJ, 0, 0x7F00 },
161: #define MCORE_INST_JMPI 0x7000
162: { "lrw", LR, 0, 0x7000 },
163: #define MCORE_INST_JSRI 0x7F00
164: { "ld", LS, 0, 0x8000 },
165: { "ldw", LS, 0, 0x8000 },
166: { "ld.w", LS, 0, 0x8000 },
167: { "st", LS, 0, 0x9000 },
168: { "stw", LS, 0, 0x9000 },
169: { "st.w", LS, 0, 0x9000 },
170: { "ldb", LS, 0, 0xA000 },
171: { "ld.b", LS, 0, 0xA000 },
172: { "stb", LS, 0, 0xB000 },
173: { "st.b", LS, 0, 0xB000 },
174: { "ldh", LS, 0, 0xC000 },
175: { "ld.h", LS, 0, 0xC000 },
176: { "sth", LS, 0, 0xD000 },
177: { "st.h", LS, 0, 0xD000 },
178: { "bt", BR, 0, 0xE000 },
179: { "bf", BR, 0, 0xE800 },
180: { "br", BR, 1, 0xF000 },
181: #define MCORE_INST_BR 0xF000
182: { "bsr", BR, 0, 0xF800 },
183: #define MCORE_INST_BSR 0xF800
184:
185: /* The following are relaxable branches */
186: { "jbt", JC, 0, 0xE000 },
187: { "jbf", JC, 0, 0xE800 },
188: { "jbr", JU, 1, 0xF000 },
189: { "jbsr", JL, 0, 0xF800 },
190:
191: /* The following are aliases for other instructions */
192: { "rts", O0, 2, 0x00CF }, /* jmp r15 */
193: { "rolc", DO21, 0, 0x0600 }, /* addc rd,rd */
194: { "rotlc", DO21, 0, 0x0600 }, /* addc rd,rd */
195: { "setc", O0, 0, 0x0C00 }, /* cmphs r0,r0 */
196: { "clrc", O0, 0, 0x0F00 }, /* cmpne r0,r0 */
197: { "tstle", O1, 0, 0x2200 }, /* cmplti rd,1 */
198: { "cmplei", OB, 0, 0x2200 }, /* cmplei rd,X -> cmplti rd,X+1 */
199: { "neg", O1, 0, 0x2800 }, /* rsubi rd,0 */
200: { "tstne", O1, 0, 0x2A00 }, /* cmpnei rd,0 */
201: { "tstlt", O1, 0, 0x37F0 }, /* btsti rx,31 */
202: { "mclri", OB2, 0, 0x3000 }, /* bclri rx,log2(imm) */
203: { "mgeni", OBR2, 0, 0x3200 }, /* bgeni rx,log2(imm) */
204: { "mseti", OB2, 0, 0x3400 }, /* bseti rx,log2(imm) */
205: { "mtsti", OB2, 0, 0x3600 }, /* btsti rx,log2(imm) */
206: { "rori", RSI, 0, 0x3800 },
207: { "rotri", RSI, 0, 0x3800 },
208: { "nop", O0, 0, 0x1200 }, /* mov r0, r0 */
209: };
210: #endif
CVSweb <webmaster@jp.NetBSD.org>