1fddef416Sniklas /* Assemble Matsushita MN10200 instructions.
2*5f210c2aSfgsch    Copyright 1996, 1997, 2000 Free Software Foundation, Inc.
3fddef416Sniklas 
4fddef416Sniklas This program is free software; you can redistribute it and/or modify
5fddef416Sniklas it under the terms of the GNU General Public License as published by
6fddef416Sniklas the Free Software Foundation; either version 2 of the License, or
7fddef416Sniklas (at your option) any later version.
8fddef416Sniklas 
9fddef416Sniklas This program is distributed in the hope that it will be useful,
10fddef416Sniklas but WITHOUT ANY WARRANTY; without even the implied warranty of
11fddef416Sniklas MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12fddef416Sniklas GNU General Public License for more details.
13fddef416Sniklas 
14fddef416Sniklas You should have received a copy of the GNU General Public License
15fddef416Sniklas along with this program; if not, write to the Free Software
16fddef416Sniklas Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
17fddef416Sniklas 
18f7cc78ecSespie #include "sysdep.h"
19fddef416Sniklas #include "opcode/mn10200.h"
20fddef416Sniklas 
21fddef416Sniklas 
22fddef416Sniklas const struct mn10200_operand mn10200_operands[] = {
23fddef416Sniklas #define UNUSED	0
24fddef416Sniklas   {0, 0, 0},
25fddef416Sniklas 
26fddef416Sniklas /* dn register in the first register operand position.  */
27fddef416Sniklas #define DN0      (UNUSED+1)
28fddef416Sniklas   {2, 0, MN10200_OPERAND_DREG},
29fddef416Sniklas 
30fddef416Sniklas /* dn register in the second register operand position.  */
31fddef416Sniklas #define DN1      (DN0+1)
32fddef416Sniklas   {2, 2, MN10200_OPERAND_DREG},
33fddef416Sniklas 
34fddef416Sniklas /* dm register in the first register operand position.  */
35fddef416Sniklas #define DM0      (DN1+1)
36fddef416Sniklas   {2, 0, MN10200_OPERAND_DREG},
37fddef416Sniklas 
38fddef416Sniklas /* dm register in the second register operand position.  */
39fddef416Sniklas #define DM1      (DM0+1)
40fddef416Sniklas   {2, 2, MN10200_OPERAND_DREG},
41fddef416Sniklas 
42fddef416Sniklas /* an register in the first register operand position.  */
43fddef416Sniklas #define AN0      (DM1+1)
44fddef416Sniklas   {2, 0, MN10200_OPERAND_AREG},
45fddef416Sniklas 
46fddef416Sniklas /* an register in the second register operand position.  */
47fddef416Sniklas #define AN1      (AN0+1)
48fddef416Sniklas   {2, 2, MN10200_OPERAND_AREG},
49fddef416Sniklas 
50fddef416Sniklas /* am register in the first register operand position.  */
51fddef416Sniklas #define AM0      (AN1+1)
52fddef416Sniklas   {2, 0, MN10200_OPERAND_AREG},
53fddef416Sniklas 
54fddef416Sniklas /* am register in the second register operand position.  */
55fddef416Sniklas #define AM1      (AM0+1)
56fddef416Sniklas   {2, 2, MN10200_OPERAND_AREG},
57fddef416Sniklas 
58fddef416Sniklas /* 8 bit unsigned immediate which may promote to a 16bit
59fddef416Sniklas    unsigned immediate.  */
60fddef416Sniklas #define IMM8    (AM1+1)
61fddef416Sniklas   {8, 0, MN10200_OPERAND_PROMOTE},
62fddef416Sniklas 
63fddef416Sniklas /* 16 bit unsigned immediate which may promote to a 32bit
64fddef416Sniklas    unsigned immediate.  */
65fddef416Sniklas #define IMM16    (IMM8+1)
66fddef416Sniklas   {16, 0, MN10200_OPERAND_PROMOTE},
67fddef416Sniklas 
68fddef416Sniklas /* 16 bit pc-relative immediate which may promote to a 16bit
69fddef416Sniklas    pc-relative immediate.  */
70fddef416Sniklas #define IMM16_PCREL    (IMM16+1)
71fddef416Sniklas   {16, 0, MN10200_OPERAND_PCREL | MN10200_OPERAND_RELAX | MN10200_OPERAND_SIGNED},
72fddef416Sniklas 
73fddef416Sniklas /* 16bit unsigned dispacement in a memory operation which
74fddef416Sniklas    may promote to a 32bit displacement.  */
75fddef416Sniklas #define IMM16_MEM    (IMM16_PCREL+1)
76fddef416Sniklas   {16, 0, MN10200_OPERAND_PROMOTE | MN10200_OPERAND_MEMADDR},
77fddef416Sniklas 
78fddef416Sniklas /* 24 immediate, low 16 bits in the main instruction
79fddef416Sniklas    word, 8 in the extension word.  */
80fddef416Sniklas 
81fddef416Sniklas #define IMM24    (IMM16_MEM+1)
82fddef416Sniklas   {24, 0, MN10200_OPERAND_EXTENDED},
83fddef416Sniklas 
84fddef416Sniklas /* 32bit pc-relative offset.  */
85fddef416Sniklas #define IMM24_PCREL    (IMM24+1)
86fddef416Sniklas   {24, 0, MN10200_OPERAND_EXTENDED | MN10200_OPERAND_PCREL | MN10200_OPERAND_SIGNED},
87fddef416Sniklas 
88fddef416Sniklas /* 32bit memory offset.  */
89fddef416Sniklas #define IMM24_MEM    (IMM24_PCREL+1)
90fddef416Sniklas   {24, 0, MN10200_OPERAND_EXTENDED | MN10200_OPERAND_MEMADDR},
91fddef416Sniklas 
92fddef416Sniklas /* Processor status word.  */
93fddef416Sniklas #define PSW    (IMM24_MEM+1)
94fddef416Sniklas   {0, 0, MN10200_OPERAND_PSW},
95fddef416Sniklas 
96fddef416Sniklas /* MDR register.  */
97fddef416Sniklas #define MDR    (PSW+1)
98fddef416Sniklas   {0, 0, MN10200_OPERAND_MDR},
99fddef416Sniklas 
100fddef416Sniklas /* Index register.  */
101fddef416Sniklas #define DI (MDR+1)
102fddef416Sniklas   {2, 4, MN10200_OPERAND_DREG},
103fddef416Sniklas 
104fddef416Sniklas /* 8 bit signed displacement, may promote to 16bit signed dispacement.  */
105fddef416Sniklas #define SD8    (DI+1)
106fddef416Sniklas   {8, 0, MN10200_OPERAND_SIGNED | MN10200_OPERAND_PROMOTE},
107fddef416Sniklas 
108fddef416Sniklas /* 16 bit signed displacement, may promote to 32bit dispacement.  */
109fddef416Sniklas #define SD16    (SD8+1)
110fddef416Sniklas   {16, 0, MN10200_OPERAND_SIGNED | MN10200_OPERAND_PROMOTE},
111fddef416Sniklas 
112fddef416Sniklas /* 8 bit pc-relative displacement.  */
113fddef416Sniklas #define SD8N_PCREL    (SD16+1)
114fddef416Sniklas   {8, 0, MN10200_OPERAND_SIGNED | MN10200_OPERAND_PCREL | MN10200_OPERAND_RELAX},
115fddef416Sniklas 
116fddef416Sniklas /* 8 bit signed immediate which may promote to 16bit signed immediate.  */
117fddef416Sniklas #define SIMM8    (SD8N_PCREL+1)
118fddef416Sniklas   {8, 0, MN10200_OPERAND_SIGNED | MN10200_OPERAND_PROMOTE},
119fddef416Sniklas 
120fddef416Sniklas /* 16 bit signed immediate which may promote to 32bit  immediate.  */
121fddef416Sniklas #define SIMM16    (SIMM8+1)
122fddef416Sniklas   {16, 0, MN10200_OPERAND_SIGNED | MN10200_OPERAND_PROMOTE},
123fddef416Sniklas 
124fddef416Sniklas /* 16 bit signed immediate which may not promote.  */
125fddef416Sniklas #define SIMM16N    (SIMM16+1)
126fddef416Sniklas   {16, 0, MN10200_OPERAND_SIGNED | MN10200_OPERAND_NOCHECK},
127fddef416Sniklas 
128fddef416Sniklas /* Either an open paren or close paren.  */
129fddef416Sniklas #define PAREN	(SIMM16N+1)
130fddef416Sniklas   {0, 0, MN10200_OPERAND_PAREN},
131fddef416Sniklas 
132fddef416Sniklas /* dn register that appears in the first and second register positions.  */
133fddef416Sniklas #define DN01     (PAREN+1)
134fddef416Sniklas   {2, 0, MN10200_OPERAND_DREG | MN10200_OPERAND_REPEATED},
135fddef416Sniklas 
136fddef416Sniklas /* an register that appears in the first and second register positions.  */
137fddef416Sniklas #define AN01     (DN01+1)
138fddef416Sniklas   {2, 0, MN10200_OPERAND_AREG | MN10200_OPERAND_REPEATED},
139fddef416Sniklas } ;
140fddef416Sniklas 
141fddef416Sniklas #define MEM(ADDR) PAREN, ADDR, PAREN
142fddef416Sniklas #define MEM2(ADDR1,ADDR2) PAREN, ADDR1, ADDR2, PAREN
143fddef416Sniklas 
144fddef416Sniklas /* The opcode table.
145fddef416Sniklas 
146fddef416Sniklas    The format of the opcode table is:
147fddef416Sniklas 
148fddef416Sniklas    NAME		OPCODE		MASK		{ OPERANDS }
149fddef416Sniklas 
150fddef416Sniklas    NAME is the name of the instruction.
151fddef416Sniklas    OPCODE is the instruction opcode.
152fddef416Sniklas    MASK is the opcode mask; this is used to tell the disassembler
153fddef416Sniklas      which bits in the actual opcode must match OPCODE.
154fddef416Sniklas    OPERANDS is the list of operands.
155fddef416Sniklas 
156fddef416Sniklas    The disassembler reads the table in order and prints the first
157fddef416Sniklas    instruction which matches, so this table is sorted to put more
158fddef416Sniklas    specific instructions before more general instructions.  It is also
159fddef416Sniklas    sorted by major opcode.  */
160fddef416Sniklas 
161fddef416Sniklas const struct mn10200_opcode mn10200_opcodes[] = {
162fddef416Sniklas { "mov",	0x8000,		0xf000,		FMT_2, {SIMM8, DN01}},
163fddef416Sniklas { "mov",	0x80,		0xf0,		FMT_1, {DN1, DM0}},
164fddef416Sniklas { "mov",	0xf230,		0xfff0,		FMT_4, {DM1, AN0}},
165fddef416Sniklas { "mov",	0xf2f0,		0xfff0,		FMT_4, {AN1, DM0}},
166fddef416Sniklas { "mov",	0xf270,		0xfff0,		FMT_4, {AN1, AM0}},
167fddef416Sniklas { "mov",	0xf3f0,		0xfffc,		FMT_4, {PSW, DN0}},
168fddef416Sniklas { "mov",	0xf3d0,		0xfff3,		FMT_4, {DN1, PSW}},
169fddef416Sniklas { "mov",	0xf3e0,		0xfffc,		FMT_4, {MDR, DN0}},
170fddef416Sniklas { "mov",	0xf3c0,		0xfff3,		FMT_4, {DN1, MDR}},
171fddef416Sniklas { "mov",	0x20,		0xf0,		FMT_1, {MEM(AN1), DM0}},
172fddef416Sniklas { "mov",	0x6000,		0xf000,		FMT_2, {MEM2(SD8, AN1), DM0}},
173fddef416Sniklas { "mov",	0xf7c00000,	0xfff00000,	FMT_6, {MEM2(SD16, AN1), DM0}},
174fddef416Sniklas { "mov",	0xf4800000,	0xfff00000,	FMT_7, {MEM2(IMM24,AN1), DM0}},
175fddef416Sniklas { "mov",	0xf140,		0xffc0,		FMT_4, {MEM2(DI, AN1), DM0}},
176fddef416Sniklas { "mov",	0xc80000,	0xfc0000,	FMT_3, {MEM(IMM16_MEM), DN0}},
177fddef416Sniklas { "mov",	0xf4c00000,	0xfffc0000,	FMT_7, {MEM(IMM24_MEM), DN0}},
178fddef416Sniklas { "mov",	0x7000,		0xf000,		FMT_2, {MEM2(SD8,AN1), AM0}},
179fddef416Sniklas { "mov",	0x7000,		0xf000,		FMT_2, {MEM(AN1), AM0}},
180fddef416Sniklas { "mov",	0xf7b00000,	0xfff00000,	FMT_6, {MEM2(SD16, AN1), AM0}},
181fddef416Sniklas { "mov",	0xf4f00000,	0xfff00000,	FMT_7, {MEM2(IMM24,AN1), AM0}},
182fddef416Sniklas { "mov",	0xf100,		0xffc0,		FMT_4, {MEM2(DI, AN1), AM0}},
183fddef416Sniklas { "mov",	0xf7300000,	0xfffc0000,	FMT_6, {MEM(IMM16_MEM), AN0}},
184fddef416Sniklas { "mov",	0xf4d00000,	0xfffc0000,	FMT_7, {MEM(IMM24_MEM), AN0}},
185fddef416Sniklas { "mov",	0x00,		0xf0,		FMT_1, {DM0, MEM(AN1)}},
186fddef416Sniklas { "mov",	0x4000,		0xf000,		FMT_2, {DM0, MEM2(SD8, AN1)}},
187fddef416Sniklas { "mov",	0xf7800000,	0xfff00000,	FMT_6, {DM0, MEM2(SD16, AN1)}},
188fddef416Sniklas { "mov",	0xf4000000,	0xfff00000,	FMT_7, {DM0, MEM2(IMM24, AN1)}},
189fddef416Sniklas { "mov",	0xf1c0,		0xffc0,		FMT_4, {DM0, MEM2(DI, AN1)}},
190fddef416Sniklas { "mov",	0xc00000,	0xfc0000,	FMT_3, {DN0, MEM(IMM16_MEM)}},
191fddef416Sniklas { "mov",	0xf4400000,	0xfffc0000,	FMT_7, {DN0, MEM(IMM24_MEM)}},
192fddef416Sniklas { "mov",	0x5000,		0xf000,		FMT_2, {AM0, MEM2(SD8, AN1)}},
193fddef416Sniklas { "mov",	0x5000,		0xf000,		FMT_2, {AM0, MEM(AN1)}},
194fddef416Sniklas { "mov",	0xf7a00000,	0xfff00000,	FMT_6, {AM0, MEM2(SD16, AN1)}},
195fddef416Sniklas { "mov",	0xf4100000,	0xfff00000,	FMT_7, {AM0, MEM2(IMM24,AN1)}},
196fddef416Sniklas { "mov",	0xf180,		0xffc0,		FMT_4, {AM0, MEM2(DI, AN1)}},
197fddef416Sniklas { "mov",	0xf7200000,	0xfffc0000,	FMT_6, {AN0, MEM(IMM16_MEM)}},
198fddef416Sniklas { "mov",	0xf4500000,	0xfffc0000,	FMT_7, {AN0, MEM(IMM24_MEM)}},
199fddef416Sniklas { "mov",	0xf80000,	0xfc0000,	FMT_3, {SIMM16, DN0}},
200fddef416Sniklas { "mov",	0xf4700000,	0xfffc0000,	FMT_7, {IMM24, DN0}},
201fddef416Sniklas { "mov",	0xdc0000,	0xfc0000,	FMT_3, {IMM16, AN0}},
202fddef416Sniklas { "mov",	0xf4740000,	0xfffc0000,	FMT_7, {IMM24, AN0}},
203fddef416Sniklas 
204fddef416Sniklas { "movx",	0xf57000,	0xfff000,	FMT_5, {MEM2(SD8, AN1), DM0}},
205fddef416Sniklas { "movx",	0xf7700000,	0xfff00000,	FMT_6, {MEM2(SD16, AN1), DM0}},
206fddef416Sniklas { "movx",	0xf4b00000,	0xfff00000,	FMT_7, {MEM2(IMM24,AN1), DM0}},
207fddef416Sniklas { "movx",	0xf55000,	0xfff000,	FMT_5, {DM0, MEM2(SD8, AN1)}},
208fddef416Sniklas { "movx",	0xf7600000,	0xfff00000,	FMT_6, {DM0, MEM2(SD16, AN1)}},
209fddef416Sniklas { "movx",	0xf4300000,	0xfff00000,	FMT_7, {DM0, MEM2(IMM24, AN1)}},
210fddef416Sniklas 
211fddef416Sniklas { "movb",	0xf52000,	0xfff000,	FMT_5, {MEM2(SD8, AN1), DM0}},
212fddef416Sniklas { "movb",	0xf7d00000,	0xfff00000,	FMT_6, {MEM2(SD16, AN1), DM0}},
213fddef416Sniklas { "movb",	0xf4a00000,	0xfff00000,	FMT_7, {MEM2(IMM24,AN1), DM0}},
214fddef416Sniklas { "movb",	0xf040,		0xffc0,		FMT_4, {MEM2(DI, AN1), DM0}},
215fddef416Sniklas { "movb",	0xf4c40000,	0xfffc0000,	FMT_7, {MEM(IMM24_MEM), DN0}},
216fddef416Sniklas { "movb",	0x10,		0xf0,		FMT_1, {DM0, MEM(AN1)}},
217fddef416Sniklas { "movb",	0xf51000,	0xfff000,	FMT_5, {DM0, MEM2(SD8, AN1)}},
218fddef416Sniklas { "movb",	0xf7900000,	0xfff00000,	FMT_6, {DM0, MEM2(SD16, AN1)}},
219fddef416Sniklas { "movb",	0xf4200000,	0xfff00000,	FMT_7, {DM0, MEM2(IMM24, AN1)}},
220fddef416Sniklas { "movb",	0xf0c0,		0xffc0,		FMT_4, {DM0, MEM2(DI, AN1)}},
221fddef416Sniklas { "movb",	0xc40000,	0xfc0000,	FMT_3, {DN0, MEM(IMM16_MEM)}},
222fddef416Sniklas { "movb",	0xf4440000,	0xfffc0000,	FMT_7, {DN0, MEM(IMM24_MEM)}},
223fddef416Sniklas 
224fddef416Sniklas { "movbu",	0x30,		0xf0,		FMT_1, {MEM(AN1), DM0}},
225fddef416Sniklas { "movbu",	0xf53000,	0xfff000,	FMT_5, {MEM2(SD8, AN1), DM0}},
226fddef416Sniklas { "movbu",	0xf7500000,	0xfff00000,	FMT_6, {MEM2(SD16, AN1), DM0}},
227fddef416Sniklas { "movbu",	0xf4900000,	0xfff00000,	FMT_7, {MEM2(IMM24,AN1), DM0}},
228fddef416Sniklas { "movbu",	0xf080,		0xffc0,		FMT_4, {MEM2(DI, AN1), DM0}},
229fddef416Sniklas { "movbu",	0xcc0000,	0xfc0000,	FMT_3, {MEM(IMM16_MEM), DN0}},
230fddef416Sniklas { "movbu",	0xf4c80000,	0xfffc0000,	FMT_7, {MEM(IMM24_MEM), DN0}},
231fddef416Sniklas 
232fddef416Sniklas { "ext",	0xf3c1,		0xfff3,		FMT_4, {DN1}},
233fddef416Sniklas { "extx",	0xb0, 		0xfc,		FMT_1, {DN0}},
234fddef416Sniklas { "extxu",	0xb4,		0xfc,		FMT_1, {DN0}},
235fddef416Sniklas { "extxb",	0xb8,		0xfc,		FMT_1, {DN0}},
236fddef416Sniklas { "extxbu",	0xbc,		0xfc,		FMT_1, {DN0}},
237fddef416Sniklas 
238fddef416Sniklas { "add",	0x90,		0xf0,		FMT_1, {DN1, DM0}},
239fddef416Sniklas { "add",	0xf200,		0xfff0,		FMT_4, {DM1, AN0}},
240fddef416Sniklas { "add",	0xf2c0,		0xfff0,		FMT_4, {AN1, DM0}},
241fddef416Sniklas { "add",	0xf240,		0xfff0,		FMT_4, {AN1, AM0}},
242fddef416Sniklas { "add",	0xd400,		0xfc00,		FMT_2, {SIMM8, DN0}},
243fddef416Sniklas { "add",	0xf7180000,	0xfffc0000,	FMT_6, {SIMM16, DN0}},
244fddef416Sniklas { "add",	0xf4600000,	0xfffc0000,	FMT_7, {IMM24, DN0}},
245fddef416Sniklas { "add",	0xd000,		0xfc00,		FMT_2, {SIMM8, AN0}},
246fddef416Sniklas { "add",	0xf7080000,	0xfffc0000,	FMT_6, {SIMM16, AN0}},
247fddef416Sniklas { "add",	0xf4640000,	0xfffc0000,	FMT_7, {IMM24, AN0}},
248fddef416Sniklas { "addc",	0xf280,		0xfff0,		FMT_4, {DN1, DM0}},
249fddef416Sniklas { "addnf",	0xf50c00,	0xfffc00,	FMT_5, {SIMM8, AN0}},
250fddef416Sniklas 
251fddef416Sniklas { "sub",	0xa0,		0xf0,		FMT_1, {DN1, DM0}},
252fddef416Sniklas { "sub",	0xf210,		0xfff0,		FMT_4, {DN1, AN0}},
253fddef416Sniklas { "sub",	0xf2d0,		0xfff0,		FMT_4, {AN1, DM0}},
254fddef416Sniklas { "sub",	0xf250,		0xfff0,		FMT_4, {AN1, AM0}},
255fddef416Sniklas { "sub",	0xf71c0000,	0xfffc0000,	FMT_6, {IMM16, DN0}},
256fddef416Sniklas { "sub",	0xf4680000,	0xfffc0000,	FMT_7, {IMM24, DN0}},
257fddef416Sniklas { "sub",	0xf70c0000,	0xfffc0000,	FMT_6, {IMM16, AN0}},
258fddef416Sniklas { "sub",	0xf46c0000,	0xfffc0000,	FMT_7, {IMM24, AN0}},
259fddef416Sniklas { "subc",	0xf290,		0xfff0,		FMT_4, {DN1, DM0}},
260fddef416Sniklas 
261fddef416Sniklas { "mul",	0xf340,		0xfff0,		FMT_4, {DN1, DM0}},
262fddef416Sniklas { "mulu",	0xf350,		0xfff0,		FMT_4, {DN1, DM0}},
263fddef416Sniklas 
264fddef416Sniklas { "divu",	0xf360,		0xfff0,		FMT_4, {DN1, DM0}},
265fddef416Sniklas 
266fddef416Sniklas { "cmp",	0xf390,		0xfff0,		FMT_4, {DN1, DM0}},
267fddef416Sniklas { "cmp",	0xf220,		0xfff0,		FMT_4, {DM1, AN0}},
268fddef416Sniklas { "cmp",	0xf2e0,		0xfff0,		FMT_4, {AN1, DM0}},
269fddef416Sniklas { "cmp",	0xf260,		0xfff0,		FMT_4, {AN1, AM0}},
270fddef416Sniklas { "cmp",	0xd800,		0xfc00,		FMT_2, {SIMM8, DN0}},
271fddef416Sniklas { "cmp",	0xf7480000,	0xfffc0000,	FMT_6, {SIMM16, DN0}},
272fddef416Sniklas { "cmp",	0xf4780000,	0xfffc0000,	FMT_7, {IMM24, DN0}},
273fddef416Sniklas { "cmp",	0xec0000,	0xfc0000,	FMT_3, {IMM16, AN0}},
274fddef416Sniklas { "cmp",	0xf47c0000,	0xfffc0000,	FMT_7, {IMM24, AN0}},
275fddef416Sniklas 
276fddef416Sniklas { "and",	0xf300,		0xfff0,		FMT_4, {DN1, DM0}},
277fddef416Sniklas { "and",	0xf50000,	0xfffc00,	FMT_5, {IMM8, DN0}},
278fddef416Sniklas { "and",	0xf7000000,	0xfffc0000,	FMT_6, {SIMM16N, DN0}},
279fddef416Sniklas { "and",	0xf7100000,	0xffff0000,	FMT_6, {SIMM16N, PSW}},
280fddef416Sniklas { "or",		0xf310,		0xfff0,		FMT_4, {DN1, DM0}},
281fddef416Sniklas { "or",		0xf50800,	0xfffc00,	FMT_5, {IMM8, DN0}},
282fddef416Sniklas { "or",		0xf7400000,	0xfffc0000,	FMT_6, {SIMM16N, DN0}},
283fddef416Sniklas { "or",		0xf7140000,	0xffff0000,	FMT_6, {SIMM16N, PSW}},
284fddef416Sniklas { "xor",	0xf320,		0xfff0,		FMT_4, {DN1, DM0}},
285fddef416Sniklas { "xor",	0xf74c0000,	0xfffc0000,	FMT_6, {SIMM16N, DN0}},
286fddef416Sniklas { "not",	0xf3e4,		0xfffc,		FMT_4, {DN0}},
287fddef416Sniklas 
288fddef416Sniklas { "asr",	0xf338,		0xfffc,		FMT_4, {DN0}},
289fddef416Sniklas { "lsr",	0xf33c,		0xfffc,		FMT_4, {DN0}},
290fddef416Sniklas { "ror",	0xf334,		0xfffc,		FMT_4, {DN0}},
291fddef416Sniklas { "rol",	0xf330,		0xfffc,		FMT_4, {DN0}},
292fddef416Sniklas 
293fddef416Sniklas { "btst",	0xf50400,	0xfffc00,	FMT_5, {IMM8, DN0}},
294fddef416Sniklas { "btst",	0xf7040000,	0xfffc0000,	FMT_6, {SIMM16N, DN0}},
295fddef416Sniklas { "bset",	0xf020,		0xfff0,		FMT_4, {DM0, MEM(AN1)}},
296fddef416Sniklas { "bclr",	0xf030,		0xfff0,		FMT_4, {DM0, MEM(AN1)}},
297fddef416Sniklas 
298fddef416Sniklas { "beq",	0xe800,		0xff00,		FMT_2, {SD8N_PCREL}},
299fddef416Sniklas { "bne",	0xe900,		0xff00,		FMT_2, {SD8N_PCREL}},
300fddef416Sniklas { "blt",	0xe000,		0xff00,		FMT_2, {SD8N_PCREL}},
301fddef416Sniklas { "ble",	0xe300,		0xff00,		FMT_2, {SD8N_PCREL}},
302fddef416Sniklas { "bge",	0xe200,		0xff00,		FMT_2, {SD8N_PCREL}},
303fddef416Sniklas { "bgt",	0xe100,		0xff00,		FMT_2, {SD8N_PCREL}},
304fddef416Sniklas { "bcs",	0xe400,		0xff00,		FMT_2, {SD8N_PCREL}},
305fddef416Sniklas { "bls",	0xe700,		0xff00,		FMT_2, {SD8N_PCREL}},
306fddef416Sniklas { "bcc",	0xe600,		0xff00,		FMT_2, {SD8N_PCREL}},
307fddef416Sniklas { "bhi",	0xe500,		0xff00,		FMT_2, {SD8N_PCREL}},
308fddef416Sniklas { "bvc",	0xf5fc00,	0xffff00,	FMT_5, {SD8N_PCREL}},
309fddef416Sniklas { "bvs",	0xf5fd00,	0xffff00,	FMT_5, {SD8N_PCREL}},
310fddef416Sniklas { "bnc",	0xf5fe00,	0xffff00,	FMT_5, {SD8N_PCREL}},
311fddef416Sniklas { "bns",	0xf5ff00,	0xffff00,	FMT_5, {SD8N_PCREL}},
312fddef416Sniklas { "bra",	0xea00,		0xff00,		FMT_2, {SD8N_PCREL}},
313fddef416Sniklas 
314fddef416Sniklas { "beqx",	0xf5e800,	0xffff00,	FMT_5, {SD8N_PCREL}},
315fddef416Sniklas { "bnex",	0xf5e900,	0xffff00,	FMT_5, {SD8N_PCREL}},
316fddef416Sniklas { "bltx",	0xf5e000,	0xffff00,	FMT_5, {SD8N_PCREL}},
317fddef416Sniklas { "blex",	0xf5e300,	0xffff00,	FMT_5, {SD8N_PCREL}},
318fddef416Sniklas { "bgex",	0xf5e200,	0xffff00,	FMT_5, {SD8N_PCREL}},
319fddef416Sniklas { "bgtx",	0xf5e100,	0xffff00,	FMT_5, {SD8N_PCREL}},
320fddef416Sniklas { "bcsx",	0xf5e400,	0xffff00,	FMT_5, {SD8N_PCREL}},
321fddef416Sniklas { "blsx",	0xf5e700,	0xffff00,	FMT_5, {SD8N_PCREL}},
322fddef416Sniklas { "bccx",	0xf5e600,	0xffff00,	FMT_5, {SD8N_PCREL}},
323fddef416Sniklas { "bhix",	0xf5e500,	0xffff00,	FMT_5, {SD8N_PCREL}},
324fddef416Sniklas { "bvcx",	0xf5ec00,	0xffff00,	FMT_5, {SD8N_PCREL}},
325fddef416Sniklas { "bvsx",	0xf5ed00,	0xffff00,	FMT_5, {SD8N_PCREL}},
326fddef416Sniklas { "bncx",	0xf5ee00,	0xffff00,	FMT_5, {SD8N_PCREL}},
327fddef416Sniklas { "bnsx",	0xf5ef00,	0xffff00,	FMT_5, {SD8N_PCREL}},
328fddef416Sniklas 
329fddef416Sniklas { "jmp",	0xfc0000,	0xff0000,	FMT_3, {IMM16_PCREL}},
330fddef416Sniklas { "jmp",	0xf4e00000,	0xffff0000,	FMT_7, {IMM24_PCREL}},
331fddef416Sniklas { "jmp",	0xf000,		0xfff3,		FMT_4, {PAREN,AN1,PAREN}},
332fddef416Sniklas { "jsr",	0xfd0000,	0xff0000,	FMT_3, {IMM16_PCREL}},
333fddef416Sniklas { "jsr",	0xf4e10000,	0xffff0000,	FMT_7, {IMM24_PCREL}},
334fddef416Sniklas { "jsr",	0xf001,		0xfff3,		FMT_4, {PAREN,AN1,PAREN}},
335fddef416Sniklas 
336fddef416Sniklas { "nop",	0xf6,		0xff,		FMT_1, {UNUSED}},
337fddef416Sniklas 
338fddef416Sniklas { "rts",	0xfe,		0xff,		FMT_1, {UNUSED}},
339fddef416Sniklas { "rti",	0xeb,		0xff,		FMT_1, {UNUSED}},
340fddef416Sniklas 
341fddef416Sniklas /* Extension.  We need some instruction to trigger "emulated syscalls"
342fddef416Sniklas    for our simulator.  */
343fddef416Sniklas { "syscall",	0xf010,		0xffff,		FMT_4, {UNUSED}},
344fddef416Sniklas 
345fddef416Sniklas /* Extension.  When talking to the simulator, gdb requires some instruction
346fddef416Sniklas    that will trigger a "breakpoint" (really just an instruction that isn't
347fddef416Sniklas    otherwise used by the tools.  This instruction must be the same size
348fddef416Sniklas    as the smallest instruction on the target machine.  In the case of the
349fddef416Sniklas    mn10x00 the "break" instruction must be one byte.  0xff is available on
350fddef416Sniklas    both mn10x00 architectures.  */
351fddef416Sniklas { "break",      0xff,           0xff,           FMT_1, {UNUSED}},
352fddef416Sniklas 
353fddef416Sniklas { 0, 0, 0, 0, {0}},
354fddef416Sniklas 
355fddef416Sniklas } ;
356fddef416Sniklas 
357fddef416Sniklas const int mn10200_num_opcodes =
358fddef416Sniklas   sizeof (mn10200_opcodes) / sizeof (mn10200_opcodes[0]);
359fddef416Sniklas 
360fddef416Sniklas 
361