Statistics
| Branch: | Revision:

root / sh4-dis.c @ 4581cbcd

History | View | Annotate | Download (82.9 kB)

1 fdf9b3e8 bellard
/* Disassemble SH instructions.
2 fdf9b3e8 bellard
   Copyright 1993, 1994, 1995, 1997, 1998, 2000, 2001, 2002, 2003, 2004
3 fdf9b3e8 bellard
   Free Software Foundation, Inc.
4 fdf9b3e8 bellard

5 fdf9b3e8 bellard
   This program is free software; you can redistribute it and/or modify
6 fdf9b3e8 bellard
   it under the terms of the GNU General Public License as published by
7 fdf9b3e8 bellard
   the Free Software Foundation; either version 2 of the License, or
8 fdf9b3e8 bellard
   (at your option) any later version.
9 fdf9b3e8 bellard

10 fdf9b3e8 bellard
   This program is distributed in the hope that it will be useful,
11 fdf9b3e8 bellard
   but WITHOUT ANY WARRANTY; without even the implied warranty of
12 fdf9b3e8 bellard
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13 fdf9b3e8 bellard
   GNU General Public License for more details.
14 fdf9b3e8 bellard

15 fdf9b3e8 bellard
   You should have received a copy of the GNU General Public License
16 8167ee88 Blue Swirl
   along with this program; if not, see <http://www.gnu.org/licenses/>.  */
17 fdf9b3e8 bellard
18 fdf9b3e8 bellard
#include <stdio.h>
19 fdf9b3e8 bellard
#include "dis-asm.h"
20 fdf9b3e8 bellard
21 fdf9b3e8 bellard
#define DEFINE_TABLE
22 fdf9b3e8 bellard
23 fdf9b3e8 bellard
typedef enum
24 fdf9b3e8 bellard
  {
25 fdf9b3e8 bellard
    HEX_0,
26 fdf9b3e8 bellard
    HEX_1,
27 fdf9b3e8 bellard
    HEX_2,
28 fdf9b3e8 bellard
    HEX_3,
29 fdf9b3e8 bellard
    HEX_4,
30 fdf9b3e8 bellard
    HEX_5,
31 fdf9b3e8 bellard
    HEX_6,
32 fdf9b3e8 bellard
    HEX_7,
33 fdf9b3e8 bellard
    HEX_8,
34 fdf9b3e8 bellard
    HEX_9,
35 fdf9b3e8 bellard
    HEX_A,
36 fdf9b3e8 bellard
    HEX_B,
37 fdf9b3e8 bellard
    HEX_C,
38 fdf9b3e8 bellard
    HEX_D,
39 fdf9b3e8 bellard
    HEX_E,
40 fdf9b3e8 bellard
    HEX_F,
41 fdf9b3e8 bellard
    HEX_XX00,
42 fdf9b3e8 bellard
    HEX_00YY,
43 fdf9b3e8 bellard
    REG_N,
44 fdf9b3e8 bellard
    REG_N_D,     /* nnn0 */
45 fdf9b3e8 bellard
    REG_N_B01,   /* nn01 */
46 fdf9b3e8 bellard
    REG_M,
47 fdf9b3e8 bellard
    SDT_REG_N,
48 fdf9b3e8 bellard
    REG_NM,
49 fdf9b3e8 bellard
    REG_B,
50 fdf9b3e8 bellard
    BRANCH_12,
51 fdf9b3e8 bellard
    BRANCH_8,
52 fdf9b3e8 bellard
    IMM0_4,
53 fdf9b3e8 bellard
    IMM0_4BY2,
54 fdf9b3e8 bellard
    IMM0_4BY4,
55 fdf9b3e8 bellard
    IMM1_4,
56 fdf9b3e8 bellard
    IMM1_4BY2,
57 fdf9b3e8 bellard
    IMM1_4BY4,
58 fdf9b3e8 bellard
    PCRELIMM_8BY2,
59 fdf9b3e8 bellard
    PCRELIMM_8BY4,
60 fdf9b3e8 bellard
    IMM0_8,
61 fdf9b3e8 bellard
    IMM0_8BY2,
62 fdf9b3e8 bellard
    IMM0_8BY4,
63 fdf9b3e8 bellard
    IMM1_8,
64 fdf9b3e8 bellard
    IMM1_8BY2,
65 fdf9b3e8 bellard
    IMM1_8BY4,
66 fdf9b3e8 bellard
    PPI,
67 fdf9b3e8 bellard
    NOPX,
68 fdf9b3e8 bellard
    NOPY,
69 fdf9b3e8 bellard
    MOVX,
70 fdf9b3e8 bellard
    MOVY,
71 fdf9b3e8 bellard
    MOVX_NOPY,
72 fdf9b3e8 bellard
    MOVY_NOPX,
73 fdf9b3e8 bellard
    PSH,
74 fdf9b3e8 bellard
    PMUL,
75 fdf9b3e8 bellard
    PPI3,
76 fdf9b3e8 bellard
    PPI3NC,
77 fdf9b3e8 bellard
    PDC,
78 fdf9b3e8 bellard
    PPIC,
79 fdf9b3e8 bellard
    REPEAT,
80 fdf9b3e8 bellard
    IMM0_3c,        /* xxxx 0iii */
81 fdf9b3e8 bellard
    IMM0_3s,        /* xxxx 1iii */
82 fdf9b3e8 bellard
    IMM0_3Uc,        /* 0iii xxxx */
83 fdf9b3e8 bellard
    IMM0_3Us,        /* 1iii xxxx */
84 fdf9b3e8 bellard
    IMM0_20_4,
85 fdf9b3e8 bellard
    IMM0_20,        /* follows IMM0_20_4 */
86 fdf9b3e8 bellard
    IMM0_20BY8,        /* follows IMM0_20_4 */
87 fdf9b3e8 bellard
    DISP0_12,
88 fdf9b3e8 bellard
    DISP0_12BY2,
89 fdf9b3e8 bellard
    DISP0_12BY4,
90 fdf9b3e8 bellard
    DISP0_12BY8,
91 fdf9b3e8 bellard
    DISP1_12,
92 fdf9b3e8 bellard
    DISP1_12BY2,
93 fdf9b3e8 bellard
    DISP1_12BY4,
94 fdf9b3e8 bellard
    DISP1_12BY8
95 fdf9b3e8 bellard
  }
96 fdf9b3e8 bellard
sh_nibble_type;
97 fdf9b3e8 bellard
98 fdf9b3e8 bellard
typedef enum
99 fdf9b3e8 bellard
  {
100 fdf9b3e8 bellard
    A_END,
101 fdf9b3e8 bellard
    A_BDISP12,
102 fdf9b3e8 bellard
    A_BDISP8,
103 fdf9b3e8 bellard
    A_DEC_M,
104 fdf9b3e8 bellard
    A_DEC_N,
105 fdf9b3e8 bellard
    A_DISP_GBR,
106 fdf9b3e8 bellard
    A_PC,
107 fdf9b3e8 bellard
    A_DISP_PC,
108 fdf9b3e8 bellard
    A_DISP_PC_ABS,
109 fdf9b3e8 bellard
    A_DISP_REG_M,
110 fdf9b3e8 bellard
    A_DISP_REG_N,
111 fdf9b3e8 bellard
    A_GBR,
112 fdf9b3e8 bellard
    A_IMM,
113 fdf9b3e8 bellard
    A_INC_M,
114 fdf9b3e8 bellard
    A_INC_N,
115 fdf9b3e8 bellard
    A_IND_M,
116 fdf9b3e8 bellard
    A_IND_N,
117 fdf9b3e8 bellard
    A_IND_R0_REG_M,
118 fdf9b3e8 bellard
    A_IND_R0_REG_N,
119 fdf9b3e8 bellard
    A_MACH,
120 fdf9b3e8 bellard
    A_MACL,
121 fdf9b3e8 bellard
    A_PR,
122 fdf9b3e8 bellard
    A_R0,
123 fdf9b3e8 bellard
    A_R0_GBR,
124 fdf9b3e8 bellard
    A_REG_M,
125 fdf9b3e8 bellard
    A_REG_N,
126 fdf9b3e8 bellard
    A_REG_B,
127 fdf9b3e8 bellard
    A_SR,
128 fdf9b3e8 bellard
    A_VBR,
129 fdf9b3e8 bellard
    A_TBR,
130 fdf9b3e8 bellard
    A_DISP_TBR,
131 fdf9b3e8 bellard
    A_DISP2_TBR,
132 fdf9b3e8 bellard
    A_DEC_R15,
133 fdf9b3e8 bellard
    A_INC_R15,
134 fdf9b3e8 bellard
    A_MOD,
135 fdf9b3e8 bellard
    A_RE,
136 fdf9b3e8 bellard
    A_RS,
137 fdf9b3e8 bellard
    A_DSR,
138 fdf9b3e8 bellard
    DSP_REG_M,
139 fdf9b3e8 bellard
    DSP_REG_N,
140 fdf9b3e8 bellard
    DSP_REG_X,
141 fdf9b3e8 bellard
    DSP_REG_Y,
142 fdf9b3e8 bellard
    DSP_REG_E,
143 fdf9b3e8 bellard
    DSP_REG_F,
144 fdf9b3e8 bellard
    DSP_REG_G,
145 fdf9b3e8 bellard
    DSP_REG_A_M,
146 fdf9b3e8 bellard
    DSP_REG_AX,
147 fdf9b3e8 bellard
    DSP_REG_XY,
148 fdf9b3e8 bellard
    DSP_REG_AY,
149 fdf9b3e8 bellard
    DSP_REG_YX,
150 fdf9b3e8 bellard
    AX_INC_N,
151 fdf9b3e8 bellard
    AY_INC_N,
152 fdf9b3e8 bellard
    AXY_INC_N,
153 fdf9b3e8 bellard
    AYX_INC_N,
154 fdf9b3e8 bellard
    AX_IND_N,
155 fdf9b3e8 bellard
    AY_IND_N,
156 fdf9b3e8 bellard
    AXY_IND_N,
157 fdf9b3e8 bellard
    AYX_IND_N,
158 fdf9b3e8 bellard
    AX_PMOD_N,
159 fdf9b3e8 bellard
    AXY_PMOD_N,
160 fdf9b3e8 bellard
    AY_PMOD_N,
161 fdf9b3e8 bellard
    AYX_PMOD_N,
162 fdf9b3e8 bellard
    AS_DEC_N,
163 fdf9b3e8 bellard
    AS_INC_N,
164 fdf9b3e8 bellard
    AS_IND_N,
165 fdf9b3e8 bellard
    AS_PMOD_N,
166 fdf9b3e8 bellard
    A_A0,
167 fdf9b3e8 bellard
    A_X0,
168 fdf9b3e8 bellard
    A_X1,
169 fdf9b3e8 bellard
    A_Y0,
170 fdf9b3e8 bellard
    A_Y1,
171 fdf9b3e8 bellard
    A_SSR,
172 fdf9b3e8 bellard
    A_SPC,
173 fdf9b3e8 bellard
    A_SGR,
174 fdf9b3e8 bellard
    A_DBR,
175 fdf9b3e8 bellard
    F_REG_N,
176 fdf9b3e8 bellard
    F_REG_M,
177 fdf9b3e8 bellard
    D_REG_N,
178 fdf9b3e8 bellard
    D_REG_M,
179 fdf9b3e8 bellard
    X_REG_N, /* Only used for argument parsing.  */
180 fdf9b3e8 bellard
    X_REG_M, /* Only used for argument parsing.  */
181 fdf9b3e8 bellard
    DX_REG_N,
182 fdf9b3e8 bellard
    DX_REG_M,
183 fdf9b3e8 bellard
    V_REG_N,
184 fdf9b3e8 bellard
    V_REG_M,
185 fdf9b3e8 bellard
    XMTRX_M4,
186 fdf9b3e8 bellard
    F_FR0,
187 fdf9b3e8 bellard
    FPUL_N,
188 fdf9b3e8 bellard
    FPUL_M,
189 fdf9b3e8 bellard
    FPSCR_N,
190 fdf9b3e8 bellard
    FPSCR_M
191 fdf9b3e8 bellard
  }
192 fdf9b3e8 bellard
sh_arg_type;
193 fdf9b3e8 bellard
194 fdf9b3e8 bellard
typedef enum
195 fdf9b3e8 bellard
  {
196 fdf9b3e8 bellard
    A_A1_NUM =   5,
197 fdf9b3e8 bellard
    A_A0_NUM =   7,
198 fdf9b3e8 bellard
    A_X0_NUM, A_X1_NUM, A_Y0_NUM, A_Y1_NUM,
199 fdf9b3e8 bellard
    A_M0_NUM, A_A1G_NUM, A_M1_NUM, A_A0G_NUM
200 fdf9b3e8 bellard
  }
201 fdf9b3e8 bellard
sh_dsp_reg_nums;
202 fdf9b3e8 bellard
203 fdf9b3e8 bellard
#define arch_sh1_base        0x0001
204 fdf9b3e8 bellard
#define arch_sh2_base        0x0002
205 fdf9b3e8 bellard
#define arch_sh3_base        0x0004
206 fdf9b3e8 bellard
#define arch_sh4_base        0x0008
207 fdf9b3e8 bellard
#define arch_sh4a_base        0x0010
208 fdf9b3e8 bellard
#define arch_sh2a_base  0x0020
209 fdf9b3e8 bellard
210 fdf9b3e8 bellard
/* This is an annotation on instruction types, but we abuse the arch
211 fdf9b3e8 bellard
   field in instructions to denote it.  */
212 fdf9b3e8 bellard
#define arch_op32       0x00100000 /* This is a 32-bit opcode.  */
213 fdf9b3e8 bellard
214 fdf9b3e8 bellard
#define arch_sh_no_mmu        0x04000000
215 fdf9b3e8 bellard
#define arch_sh_has_mmu 0x08000000
216 fdf9b3e8 bellard
#define arch_sh_no_co        0x10000000 /* neither FPU nor DSP co-processor */
217 fdf9b3e8 bellard
#define arch_sh_sp_fpu        0x20000000 /* single precision FPU */
218 fdf9b3e8 bellard
#define arch_sh_dp_fpu        0x40000000 /* double precision FPU */
219 fdf9b3e8 bellard
#define arch_sh_has_dsp        0x80000000
220 fdf9b3e8 bellard
221 fdf9b3e8 bellard
222 fdf9b3e8 bellard
#define arch_sh_base_mask 0x0000003f
223 fdf9b3e8 bellard
#define arch_opann_mask   0x00100000
224 fdf9b3e8 bellard
#define arch_sh_mmu_mask  0x0c000000
225 fdf9b3e8 bellard
#define arch_sh_co_mask   0xf0000000
226 fdf9b3e8 bellard
227 fdf9b3e8 bellard
228 fdf9b3e8 bellard
#define arch_sh1        (arch_sh1_base|arch_sh_no_mmu|arch_sh_no_co)
229 fdf9b3e8 bellard
#define arch_sh2        (arch_sh2_base|arch_sh_no_mmu|arch_sh_no_co)
230 fdf9b3e8 bellard
#define arch_sh2a        (arch_sh2a_base|arch_sh_no_mmu|arch_sh_dp_fpu)
231 fdf9b3e8 bellard
#define arch_sh2a_nofpu        (arch_sh2a_base|arch_sh_no_mmu|arch_sh_no_co)
232 fdf9b3e8 bellard
#define arch_sh2e        (arch_sh2_base|arch_sh2a_base|arch_sh_no_mmu|arch_sh_sp_fpu)
233 fdf9b3e8 bellard
#define arch_sh_dsp        (arch_sh2_base|arch_sh_no_mmu|arch_sh_has_dsp)
234 fdf9b3e8 bellard
#define arch_sh3_nommu        (arch_sh3_base|arch_sh_no_mmu|arch_sh_no_co)
235 fdf9b3e8 bellard
#define arch_sh3        (arch_sh3_base|arch_sh_has_mmu|arch_sh_no_co)
236 fdf9b3e8 bellard
#define arch_sh3e        (arch_sh3_base|arch_sh_has_mmu|arch_sh_sp_fpu)
237 fdf9b3e8 bellard
#define arch_sh3_dsp        (arch_sh3_base|arch_sh_has_mmu|arch_sh_has_dsp)
238 fdf9b3e8 bellard
#define arch_sh4        (arch_sh4_base|arch_sh_has_mmu|arch_sh_dp_fpu)
239 fdf9b3e8 bellard
#define arch_sh4a        (arch_sh4a_base|arch_sh_has_mmu|arch_sh_dp_fpu)
240 fdf9b3e8 bellard
#define arch_sh4al_dsp        (arch_sh4a_base|arch_sh_has_mmu|arch_sh_has_dsp)
241 fdf9b3e8 bellard
#define arch_sh4_nofpu        (arch_sh4_base|arch_sh_has_mmu|arch_sh_no_co)
242 fdf9b3e8 bellard
#define arch_sh4a_nofpu        (arch_sh4a_base|arch_sh_has_mmu|arch_sh_no_co)
243 fdf9b3e8 bellard
#define arch_sh4_nommu_nofpu (arch_sh4_base|arch_sh_no_mmu|arch_sh_no_co)
244 fdf9b3e8 bellard
245 fdf9b3e8 bellard
#define SH_MERGE_ARCH_SET(SET1, SET2) ((SET1) & (SET2))
246 fdf9b3e8 bellard
#define SH_VALID_BASE_ARCH_SET(SET) (((SET) & arch_sh_base_mask) != 0)
247 fdf9b3e8 bellard
#define SH_VALID_MMU_ARCH_SET(SET)  (((SET) & arch_sh_mmu_mask) != 0)
248 fdf9b3e8 bellard
#define SH_VALID_CO_ARCH_SET(SET)   (((SET) & arch_sh_co_mask) != 0)
249 fdf9b3e8 bellard
#define SH_VALID_ARCH_SET(SET) \
250 fdf9b3e8 bellard
  (SH_VALID_BASE_ARCH_SET (SET) \
251 fdf9b3e8 bellard
   && SH_VALID_MMU_ARCH_SET (SET) \
252 fdf9b3e8 bellard
   && SH_VALID_CO_ARCH_SET (SET))
253 fdf9b3e8 bellard
#define SH_MERGE_ARCH_SET_VALID(SET1, SET2) \
254 fdf9b3e8 bellard
  SH_VALID_ARCH_SET (SH_MERGE_ARCH_SET (SET1, SET2))
255 fdf9b3e8 bellard
256 fdf9b3e8 bellard
#define SH_ARCH_SET_HAS_FPU(SET) \
257 fdf9b3e8 bellard
  (((SET) & (arch_sh_sp_fpu | arch_sh_dp_fpu)) != 0)
258 fdf9b3e8 bellard
#define SH_ARCH_SET_HAS_DSP(SET) \
259 fdf9b3e8 bellard
  (((SET) & arch_sh_has_dsp) != 0)
260 fdf9b3e8 bellard
261 fdf9b3e8 bellard
/* This is returned from the functions below when an error occurs
262 fdf9b3e8 bellard
   (in addition to a call to BFD_FAIL). The value should allow
263 fdf9b3e8 bellard
   the tools to continue to function in most cases - there may
264 fdf9b3e8 bellard
   be some confusion between DSP and FPU etc.  */
265 fdf9b3e8 bellard
#define SH_ARCH_UNKNOWN_ARCH 0xffffffff
266 fdf9b3e8 bellard
267 fdf9b3e8 bellard
/* These are defined in bfd/cpu-sh.c .  */
268 fdf9b3e8 bellard
unsigned int sh_get_arch_from_bfd_mach (unsigned long mach);
269 fdf9b3e8 bellard
unsigned int sh_get_arch_up_from_bfd_mach (unsigned long mach);
270 fdf9b3e8 bellard
unsigned long sh_get_bfd_mach_from_arch_set (unsigned int arch_set);
271 fdf9b3e8 bellard
/* bfd_boolean sh_merge_bfd_arch (bfd *ibfd, bfd *obfd); */
272 fdf9b3e8 bellard
273 fdf9b3e8 bellard
/* Below are the 'architecture sets'.
274 fdf9b3e8 bellard
   They describe the following inheritance graph:
275 fdf9b3e8 bellard

276 fdf9b3e8 bellard
                SH1
277 fdf9b3e8 bellard
                 |
278 fdf9b3e8 bellard
                SH2
279 fdf9b3e8 bellard
   .------------'|`--------------------.
280 fdf9b3e8 bellard
  /              |                      \
281 fdf9b3e8 bellard
SH-DSP          SH3-nommu               SH2E
282 fdf9b3e8 bellard
 |               |`--------.             |
283 fdf9b3e8 bellard
 |               |          \            |
284 fdf9b3e8 bellard
 |              SH3     SH4-nommu-nofpu  |
285 fdf9b3e8 bellard
 |               |           |           |
286 fdf9b3e8 bellard
 | .------------'|`----------+---------. |
287 fdf9b3e8 bellard
 |/                         /           \|
288 fdf9b3e8 bellard
 |               | .-------'             |
289 fdf9b3e8 bellard
 |               |/                      |
290 fdf9b3e8 bellard
SH3-dsp         SH4-nofpu               SH3E
291 fdf9b3e8 bellard
 |               |`--------------------. |
292 fdf9b3e8 bellard
 |               |                      \|
293 fdf9b3e8 bellard
 |              SH4A-nofpu              SH4
294 fdf9b3e8 bellard
 | .------------' `--------------------. |
295 fdf9b3e8 bellard
 |/                                     \|
296 fdf9b3e8 bellard
SH4AL-dsp                               SH4A
297 fdf9b3e8 bellard

298 fdf9b3e8 bellard
*/
299 fdf9b3e8 bellard
300 fdf9b3e8 bellard
/* Central branches */
301 fdf9b3e8 bellard
#define arch_sh1_up       (arch_sh1 | arch_sh2_up)
302 fdf9b3e8 bellard
#define arch_sh2_up       (arch_sh2 | arch_sh2e_up | arch_sh2a_nofpu_up | arch_sh3_nommu_up | arch_sh_dsp_up)
303 fdf9b3e8 bellard
#define arch_sh3_nommu_up (arch_sh3_nommu | arch_sh3_up | arch_sh4_nommu_nofpu_up)
304 fdf9b3e8 bellard
#define arch_sh3_up       (arch_sh3 | arch_sh3e_up | arch_sh3_dsp_up | arch_sh4_nofp_up)
305 fdf9b3e8 bellard
#define arch_sh4_nommu_nofpu_up (arch_sh4_nommu_nofpu | arch_sh4_nofp_up)
306 fdf9b3e8 bellard
#define arch_sh4_nofp_up  (arch_sh4_nofpu | arch_sh4_up | arch_sh4a_nofp_up)
307 fdf9b3e8 bellard
#define arch_sh4a_nofp_up (arch_sh4a_nofpu | arch_sh4a_up | arch_sh4al_dsp_up)
308 fdf9b3e8 bellard
309 fdf9b3e8 bellard
/* Right branch */
310 fdf9b3e8 bellard
#define arch_sh2e_up (arch_sh2e | arch_sh2a_up | arch_sh3e_up)
311 fdf9b3e8 bellard
#define arch_sh3e_up (arch_sh3e | arch_sh4_up)
312 fdf9b3e8 bellard
#define arch_sh4_up  (arch_sh4 | arch_sh4a_up)
313 fdf9b3e8 bellard
#define arch_sh4a_up (arch_sh4a)
314 fdf9b3e8 bellard
315 fdf9b3e8 bellard
/* Left branch */
316 fdf9b3e8 bellard
#define arch_sh_dsp_up    (arch_sh_dsp | arch_sh3_dsp_up)
317 fdf9b3e8 bellard
#define arch_sh3_dsp_up   (arch_sh3_dsp | arch_sh4al_dsp_up)
318 fdf9b3e8 bellard
#define arch_sh4al_dsp_up (arch_sh4al_dsp)
319 fdf9b3e8 bellard
320 fdf9b3e8 bellard
/* SH 2a branched off SH2e, adding a lot but not all of SH4 and SH4a.  */
321 fdf9b3e8 bellard
#define arch_sh2a_up        (arch_sh2a)
322 fdf9b3e8 bellard
#define arch_sh2a_nofpu_up  (arch_sh2a_nofpu | arch_sh2a_up)
323 fdf9b3e8 bellard
324 fdf9b3e8 bellard
325 fdf9b3e8 bellard
typedef struct
326 fdf9b3e8 bellard
{
327 7ccfb2eb blueswir1
  const char *name;
328 fdf9b3e8 bellard
  sh_arg_type arg[4];
329 fdf9b3e8 bellard
  sh_nibble_type nibbles[9];
330 fdf9b3e8 bellard
  unsigned int arch;
331 fdf9b3e8 bellard
} sh_opcode_info;
332 fdf9b3e8 bellard
333 fdf9b3e8 bellard
#ifdef DEFINE_TABLE
334 fdf9b3e8 bellard
335 fdf9b3e8 bellard
const sh_opcode_info sh_table[] =
336 fdf9b3e8 bellard
  {
337 fdf9b3e8 bellard
/* 0111nnnni8*1.... add #<imm>,<REG_N>  */{"add",{A_IMM,A_REG_N},{HEX_7,REG_N,IMM0_8}, arch_sh1_up},
338 fdf9b3e8 bellard
339 fdf9b3e8 bellard
/* 0011nnnnmmmm1100 add <REG_M>,<REG_N> */{"add",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_C}, arch_sh1_up},
340 fdf9b3e8 bellard
341 fdf9b3e8 bellard
/* 0011nnnnmmmm1110 addc <REG_M>,<REG_N>*/{"addc",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_E}, arch_sh1_up},
342 fdf9b3e8 bellard
343 fdf9b3e8 bellard
/* 0011nnnnmmmm1111 addv <REG_M>,<REG_N>*/{"addv",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_F}, arch_sh1_up},
344 fdf9b3e8 bellard
345 fdf9b3e8 bellard
/* 11001001i8*1.... and #<imm>,R0       */{"and",{A_IMM,A_R0},{HEX_C,HEX_9,IMM0_8}, arch_sh1_up},
346 fdf9b3e8 bellard
347 fdf9b3e8 bellard
/* 0010nnnnmmmm1001 and <REG_M>,<REG_N> */{"and",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_9}, arch_sh1_up},
348 fdf9b3e8 bellard
349 fdf9b3e8 bellard
/* 11001101i8*1.... and.b #<imm>,@(R0,GBR)*/{"and.b",{A_IMM,A_R0_GBR},{HEX_C,HEX_D,IMM0_8}, arch_sh1_up},
350 fdf9b3e8 bellard
351 fdf9b3e8 bellard
/* 1010i12......... bra <bdisp12>       */{"bra",{A_BDISP12},{HEX_A,BRANCH_12}, arch_sh1_up},
352 fdf9b3e8 bellard
353 fdf9b3e8 bellard
/* 1011i12......... bsr <bdisp12>       */{"bsr",{A_BDISP12},{HEX_B,BRANCH_12}, arch_sh1_up},
354 fdf9b3e8 bellard
355 fdf9b3e8 bellard
/* 10001001i8p1.... bt <bdisp8>         */{"bt",{A_BDISP8},{HEX_8,HEX_9,BRANCH_8}, arch_sh1_up},
356 fdf9b3e8 bellard
357 fdf9b3e8 bellard
/* 10001011i8p1.... bf <bdisp8>         */{"bf",{A_BDISP8},{HEX_8,HEX_B,BRANCH_8}, arch_sh1_up},
358 fdf9b3e8 bellard
359 fdf9b3e8 bellard
/* 10001101i8p1.... bt.s <bdisp8>       */{"bt.s",{A_BDISP8},{HEX_8,HEX_D,BRANCH_8}, arch_sh2_up},
360 fdf9b3e8 bellard
361 fdf9b3e8 bellard
/* 10001101i8p1.... bt/s <bdisp8>       */{"bt/s",{A_BDISP8},{HEX_8,HEX_D,BRANCH_8}, arch_sh2_up},
362 fdf9b3e8 bellard
363 fdf9b3e8 bellard
/* 10001111i8p1.... bf.s <bdisp8>       */{"bf.s",{A_BDISP8},{HEX_8,HEX_F,BRANCH_8}, arch_sh2_up},
364 fdf9b3e8 bellard
365 fdf9b3e8 bellard
/* 10001111i8p1.... bf/s <bdisp8>       */{"bf/s",{A_BDISP8},{HEX_8,HEX_F,BRANCH_8}, arch_sh2_up},
366 fdf9b3e8 bellard
367 fdf9b3e8 bellard
/* 0000000010001000 clrdmxy             */{"clrdmxy",{0},{HEX_0,HEX_0,HEX_8,HEX_8}, arch_sh4al_dsp_up},
368 fdf9b3e8 bellard
369 fdf9b3e8 bellard
/* 0000000000101000 clrmac              */{"clrmac",{0},{HEX_0,HEX_0,HEX_2,HEX_8}, arch_sh1_up},
370 fdf9b3e8 bellard
371 fdf9b3e8 bellard
/* 0000000001001000 clrs                */{"clrs",{0},{HEX_0,HEX_0,HEX_4,HEX_8}, arch_sh1_up},
372 fdf9b3e8 bellard
373 fdf9b3e8 bellard
/* 0000000000001000 clrt                */{"clrt",{0},{HEX_0,HEX_0,HEX_0,HEX_8}, arch_sh1_up},
374 fdf9b3e8 bellard
375 fdf9b3e8 bellard
/* 10001000i8*1.... cmp/eq #<imm>,R0    */{"cmp/eq",{A_IMM,A_R0},{HEX_8,HEX_8,IMM0_8}, arch_sh1_up},
376 fdf9b3e8 bellard
377 fdf9b3e8 bellard
/* 0011nnnnmmmm0000 cmp/eq <REG_M>,<REG_N>*/{"cmp/eq",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_0}, arch_sh1_up},
378 fdf9b3e8 bellard
379 fdf9b3e8 bellard
/* 0011nnnnmmmm0011 cmp/ge <REG_M>,<REG_N>*/{"cmp/ge",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_3}, arch_sh1_up},
380 fdf9b3e8 bellard
381 fdf9b3e8 bellard
/* 0011nnnnmmmm0111 cmp/gt <REG_M>,<REG_N>*/{"cmp/gt",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_7}, arch_sh1_up},
382 fdf9b3e8 bellard
383 fdf9b3e8 bellard
/* 0011nnnnmmmm0110 cmp/hi <REG_M>,<REG_N>*/{"cmp/hi",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_6}, arch_sh1_up},
384 fdf9b3e8 bellard
385 fdf9b3e8 bellard
/* 0011nnnnmmmm0010 cmp/hs <REG_M>,<REG_N>*/{"cmp/hs",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_2}, arch_sh1_up},
386 fdf9b3e8 bellard
387 fdf9b3e8 bellard
/* 0100nnnn00010101 cmp/pl <REG_N>      */{"cmp/pl",{A_REG_N},{HEX_4,REG_N,HEX_1,HEX_5}, arch_sh1_up},
388 fdf9b3e8 bellard
389 fdf9b3e8 bellard
/* 0100nnnn00010001 cmp/pz <REG_N>      */{"cmp/pz",{A_REG_N},{HEX_4,REG_N,HEX_1,HEX_1}, arch_sh1_up},
390 fdf9b3e8 bellard
391 fdf9b3e8 bellard
/* 0010nnnnmmmm1100 cmp/str <REG_M>,<REG_N>*/{"cmp/str",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_C}, arch_sh1_up},
392 fdf9b3e8 bellard
393 fdf9b3e8 bellard
/* 0010nnnnmmmm0111 div0s <REG_M>,<REG_N>*/{"div0s",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_7}, arch_sh1_up},
394 fdf9b3e8 bellard
395 fdf9b3e8 bellard
/* 0000000000011001 div0u               */{"div0u",{0},{HEX_0,HEX_0,HEX_1,HEX_9}, arch_sh1_up},
396 fdf9b3e8 bellard
397 fdf9b3e8 bellard
/* 0011nnnnmmmm0100 div1 <REG_M>,<REG_N>*/{"div1",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_4}, arch_sh1_up},
398 fdf9b3e8 bellard
399 fdf9b3e8 bellard
/* 0110nnnnmmmm1110 exts.b <REG_M>,<REG_N>*/{"exts.b",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_E}, arch_sh1_up},
400 fdf9b3e8 bellard
401 fdf9b3e8 bellard
/* 0110nnnnmmmm1111 exts.w <REG_M>,<REG_N>*/{"exts.w",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_F}, arch_sh1_up},
402 fdf9b3e8 bellard
403 fdf9b3e8 bellard
/* 0110nnnnmmmm1100 extu.b <REG_M>,<REG_N>*/{"extu.b",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_C}, arch_sh1_up},
404 fdf9b3e8 bellard
405 fdf9b3e8 bellard
/* 0110nnnnmmmm1101 extu.w <REG_M>,<REG_N>*/{"extu.w",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_D}, arch_sh1_up},
406 fdf9b3e8 bellard
407 fdf9b3e8 bellard
/* 0000nnnn11100011 icbi @<REG_N>       */{"icbi",{A_IND_N},{HEX_0,REG_N,HEX_E,HEX_3}, arch_sh4a_nofp_up},
408 fdf9b3e8 bellard
409 fdf9b3e8 bellard
/* 0100nnnn00101011 jmp @<REG_N>        */{"jmp",{A_IND_N},{HEX_4,REG_N,HEX_2,HEX_B}, arch_sh1_up},
410 fdf9b3e8 bellard
411 fdf9b3e8 bellard
/* 0100nnnn00001011 jsr @<REG_N>        */{"jsr",{A_IND_N},{HEX_4,REG_N,HEX_0,HEX_B}, arch_sh1_up},
412 fdf9b3e8 bellard
413 fdf9b3e8 bellard
/* 0100nnnn00001110 ldc <REG_N>,SR      */{"ldc",{A_REG_N,A_SR},{HEX_4,REG_N,HEX_0,HEX_E}, arch_sh1_up},
414 fdf9b3e8 bellard
415 fdf9b3e8 bellard
/* 0100nnnn00011110 ldc <REG_N>,GBR     */{"ldc",{A_REG_N,A_GBR},{HEX_4,REG_N,HEX_1,HEX_E}, arch_sh1_up},
416 fdf9b3e8 bellard
417 fdf9b3e8 bellard
/* 0100nnnn00111010 ldc <REG_N>,SGR     */{"ldc",{A_REG_N,A_SGR},{HEX_4,REG_N,HEX_3,HEX_A}, arch_sh4_nommu_nofpu_up},
418 fdf9b3e8 bellard
419 fdf9b3e8 bellard
/* 0100mmmm01001010 ldc <REG_M>,TBR     */{"ldc",{A_REG_M,A_TBR},{HEX_4,REG_M,HEX_4,HEX_A}, arch_sh2a_nofpu_up},
420 fdf9b3e8 bellard
421 fdf9b3e8 bellard
/* 0100nnnn00101110 ldc <REG_N>,VBR     */{"ldc",{A_REG_N,A_VBR},{HEX_4,REG_N,HEX_2,HEX_E}, arch_sh1_up},
422 fdf9b3e8 bellard
423 fdf9b3e8 bellard
/* 0100nnnn01011110 ldc <REG_N>,MOD     */{"ldc",{A_REG_N,A_MOD},{HEX_4,REG_N,HEX_5,HEX_E}, arch_sh_dsp_up},
424 fdf9b3e8 bellard
425 fdf9b3e8 bellard
/* 0100nnnn01111110 ldc <REG_N>,RE     */{"ldc",{A_REG_N,A_RE},{HEX_4,REG_N,HEX_7,HEX_E}, arch_sh_dsp_up},
426 fdf9b3e8 bellard
427 fdf9b3e8 bellard
/* 0100nnnn01101110 ldc <REG_N>,RS     */{"ldc",{A_REG_N,A_RS},{HEX_4,REG_N,HEX_6,HEX_E}, arch_sh_dsp_up},
428 fdf9b3e8 bellard
429 fdf9b3e8 bellard
/* 0100nnnn00111110 ldc <REG_N>,SSR     */{"ldc",{A_REG_N,A_SSR},{HEX_4,REG_N,HEX_3,HEX_E}, arch_sh3_nommu_up},
430 fdf9b3e8 bellard
431 fdf9b3e8 bellard
/* 0100nnnn01001110 ldc <REG_N>,SPC     */{"ldc",{A_REG_N,A_SPC},{HEX_4,REG_N,HEX_4,HEX_E}, arch_sh3_nommu_up},
432 fdf9b3e8 bellard
433 fdf9b3e8 bellard
/* 0100nnnn11111010 ldc <REG_N>,DBR     */{"ldc",{A_REG_N,A_DBR},{HEX_4,REG_N,HEX_F,HEX_A}, arch_sh4_nommu_nofpu_up},
434 fdf9b3e8 bellard
435 fdf9b3e8 bellard
/* 0100nnnn1xxx1110 ldc <REG_N>,Rn_BANK */{"ldc",{A_REG_N,A_REG_B},{HEX_4,REG_N,REG_B,HEX_E}, arch_sh3_nommu_up},
436 fdf9b3e8 bellard
437 fdf9b3e8 bellard
/* 0100nnnn00000111 ldc.l @<REG_N>+,SR  */{"ldc.l",{A_INC_N,A_SR},{HEX_4,REG_N,HEX_0,HEX_7}, arch_sh1_up},
438 fdf9b3e8 bellard
439 fdf9b3e8 bellard
/* 0100nnnn00010111 ldc.l @<REG_N>+,GBR */{"ldc.l",{A_INC_N,A_GBR},{HEX_4,REG_N,HEX_1,HEX_7}, arch_sh1_up},
440 fdf9b3e8 bellard
441 fdf9b3e8 bellard
/* 0100nnnn00100111 ldc.l @<REG_N>+,VBR */{"ldc.l",{A_INC_N,A_VBR},{HEX_4,REG_N,HEX_2,HEX_7}, arch_sh1_up},
442 fdf9b3e8 bellard
443 fdf9b3e8 bellard
/* 0100nnnn00110110 ldc.l @<REG_N>+,SGR */{"ldc.l",{A_INC_N,A_SGR},{HEX_4,REG_N,HEX_3,HEX_6}, arch_sh4_nommu_nofpu_up},
444 fdf9b3e8 bellard
445 fdf9b3e8 bellard
/* 0100nnnn01010111 ldc.l @<REG_N>+,MOD */{"ldc.l",{A_INC_N,A_MOD},{HEX_4,REG_N,HEX_5,HEX_7}, arch_sh_dsp_up},
446 fdf9b3e8 bellard
447 fdf9b3e8 bellard
/* 0100nnnn01110111 ldc.l @<REG_N>+,RE */{"ldc.l",{A_INC_N,A_RE},{HEX_4,REG_N,HEX_7,HEX_7}, arch_sh_dsp_up},
448 fdf9b3e8 bellard
449 fdf9b3e8 bellard
/* 0100nnnn01100111 ldc.l @<REG_N>+,RS */{"ldc.l",{A_INC_N,A_RS},{HEX_4,REG_N,HEX_6,HEX_7}, arch_sh_dsp_up},
450 fdf9b3e8 bellard
451 fdf9b3e8 bellard
/* 0100nnnn00110111 ldc.l @<REG_N>+,SSR */{"ldc.l",{A_INC_N,A_SSR},{HEX_4,REG_N,HEX_3,HEX_7}, arch_sh3_nommu_up},
452 fdf9b3e8 bellard
453 fdf9b3e8 bellard
/* 0100nnnn01000111 ldc.l @<REG_N>+,SPC */{"ldc.l",{A_INC_N,A_SPC},{HEX_4,REG_N,HEX_4,HEX_7}, arch_sh3_nommu_up},
454 fdf9b3e8 bellard
455 fdf9b3e8 bellard
/* 0100nnnn11110110 ldc.l @<REG_N>+,DBR */{"ldc.l",{A_INC_N,A_DBR},{HEX_4,REG_N,HEX_F,HEX_6}, arch_sh4_nommu_nofpu_up},
456 fdf9b3e8 bellard
457 fdf9b3e8 bellard
/* 0100nnnn1xxx0111 ldc.l <REG_N>,Rn_BANK */{"ldc.l",{A_INC_N,A_REG_B},{HEX_4,REG_N,REG_B,HEX_7}, arch_sh3_nommu_up},
458 fdf9b3e8 bellard
459 fdf9b3e8 bellard
/* 0100mmmm00110100 ldrc <REG_M>        */{"ldrc",{A_REG_M},{HEX_4,REG_M,HEX_3,HEX_4}, arch_sh4al_dsp_up},
460 fdf9b3e8 bellard
/* 10001010i8*1.... ldrc #<imm>         */{"ldrc",{A_IMM},{HEX_8,HEX_A,IMM0_8}, arch_sh4al_dsp_up},
461 fdf9b3e8 bellard
462 fdf9b3e8 bellard
/* 10001110i8p2.... ldre @(<disp>,PC)        */{"ldre",{A_DISP_PC},{HEX_8,HEX_E,PCRELIMM_8BY2}, arch_sh_dsp_up},
463 fdf9b3e8 bellard
464 fdf9b3e8 bellard
/* 10001100i8p2.... ldrs @(<disp>,PC)        */{"ldrs",{A_DISP_PC},{HEX_8,HEX_C,PCRELIMM_8BY2}, arch_sh_dsp_up},
465 fdf9b3e8 bellard
466 fdf9b3e8 bellard
/* 0100nnnn00001010 lds <REG_N>,MACH    */{"lds",{A_REG_N,A_MACH},{HEX_4,REG_N,HEX_0,HEX_A}, arch_sh1_up},
467 fdf9b3e8 bellard
468 fdf9b3e8 bellard
/* 0100nnnn00011010 lds <REG_N>,MACL    */{"lds",{A_REG_N,A_MACL},{HEX_4,REG_N,HEX_1,HEX_A}, arch_sh1_up},
469 fdf9b3e8 bellard
470 fdf9b3e8 bellard
/* 0100nnnn00101010 lds <REG_N>,PR      */{"lds",{A_REG_N,A_PR},{HEX_4,REG_N,HEX_2,HEX_A}, arch_sh1_up},
471 fdf9b3e8 bellard
472 fdf9b3e8 bellard
/* 0100nnnn01101010 lds <REG_N>,DSR        */{"lds",{A_REG_N,A_DSR},{HEX_4,REG_N,HEX_6,HEX_A}, arch_sh_dsp_up},
473 fdf9b3e8 bellard
474 fdf9b3e8 bellard
/* 0100nnnn01111010 lds <REG_N>,A0        */{"lds",{A_REG_N,A_A0},{HEX_4,REG_N,HEX_7,HEX_A}, arch_sh_dsp_up},
475 fdf9b3e8 bellard
476 fdf9b3e8 bellard
/* 0100nnnn10001010 lds <REG_N>,X0        */{"lds",{A_REG_N,A_X0},{HEX_4,REG_N,HEX_8,HEX_A}, arch_sh_dsp_up},
477 fdf9b3e8 bellard
478 fdf9b3e8 bellard
/* 0100nnnn10011010 lds <REG_N>,X1        */{"lds",{A_REG_N,A_X1},{HEX_4,REG_N,HEX_9,HEX_A}, arch_sh_dsp_up},
479 fdf9b3e8 bellard
480 fdf9b3e8 bellard
/* 0100nnnn10101010 lds <REG_N>,Y0        */{"lds",{A_REG_N,A_Y0},{HEX_4,REG_N,HEX_A,HEX_A}, arch_sh_dsp_up},
481 fdf9b3e8 bellard
482 fdf9b3e8 bellard
/* 0100nnnn10111010 lds <REG_N>,Y1        */{"lds",{A_REG_N,A_Y1},{HEX_4,REG_N,HEX_B,HEX_A}, arch_sh_dsp_up},
483 fdf9b3e8 bellard
484 fdf9b3e8 bellard
/* 0100nnnn01011010 lds <REG_N>,FPUL    */{"lds",{A_REG_M,FPUL_N},{HEX_4,REG_M,HEX_5,HEX_A}, arch_sh2e_up},
485 3b46e624 ths
486 fdf9b3e8 bellard
/* 0100nnnn01101010 lds <REG_M>,FPSCR   */{"lds",{A_REG_M,FPSCR_N},{HEX_4,REG_M,HEX_6,HEX_A}, arch_sh2e_up},
487 fdf9b3e8 bellard
488 fdf9b3e8 bellard
/* 0100nnnn00000110 lds.l @<REG_N>+,MACH*/{"lds.l",{A_INC_N,A_MACH},{HEX_4,REG_N,HEX_0,HEX_6}, arch_sh1_up},
489 fdf9b3e8 bellard
490 fdf9b3e8 bellard
/* 0100nnnn00010110 lds.l @<REG_N>+,MACL*/{"lds.l",{A_INC_N,A_MACL},{HEX_4,REG_N,HEX_1,HEX_6}, arch_sh1_up},
491 fdf9b3e8 bellard
492 fdf9b3e8 bellard
/* 0100nnnn00100110 lds.l @<REG_N>+,PR  */{"lds.l",{A_INC_N,A_PR},{HEX_4,REG_N,HEX_2,HEX_6}, arch_sh1_up},
493 fdf9b3e8 bellard
494 fdf9b3e8 bellard
/* 0100nnnn01100110 lds.l @<REG_N>+,DSR        */{"lds.l",{A_INC_N,A_DSR},{HEX_4,REG_N,HEX_6,HEX_6}, arch_sh_dsp_up},
495 fdf9b3e8 bellard
496 fdf9b3e8 bellard
/* 0100nnnn01110110 lds.l @<REG_N>+,A0        */{"lds.l",{A_INC_N,A_A0},{HEX_4,REG_N,HEX_7,HEX_6}, arch_sh_dsp_up},
497 fdf9b3e8 bellard
498 fdf9b3e8 bellard
/* 0100nnnn10000110 lds.l @<REG_N>+,X0        */{"lds.l",{A_INC_N,A_X0},{HEX_4,REG_N,HEX_8,HEX_6}, arch_sh_dsp_up},
499 fdf9b3e8 bellard
500 fdf9b3e8 bellard
/* 0100nnnn10010110 lds.l @<REG_N>+,X1        */{"lds.l",{A_INC_N,A_X1},{HEX_4,REG_N,HEX_9,HEX_6}, arch_sh_dsp_up},
501 fdf9b3e8 bellard
502 fdf9b3e8 bellard
/* 0100nnnn10100110 lds.l @<REG_N>+,Y0        */{"lds.l",{A_INC_N,A_Y0},{HEX_4,REG_N,HEX_A,HEX_6}, arch_sh_dsp_up},
503 fdf9b3e8 bellard
504 fdf9b3e8 bellard
/* 0100nnnn10110110 lds.l @<REG_N>+,Y1        */{"lds.l",{A_INC_N,A_Y1},{HEX_4,REG_N,HEX_B,HEX_6}, arch_sh_dsp_up},
505 fdf9b3e8 bellard
506 fdf9b3e8 bellard
/* 0100nnnn01010110 lds.l @<REG_M>+,FPUL*/{"lds.l",{A_INC_M,FPUL_N},{HEX_4,REG_M,HEX_5,HEX_6}, arch_sh2e_up},
507 3b46e624 ths
508 fdf9b3e8 bellard
/* 0100nnnn01100110 lds.l @<REG_M>+,FPSCR*/{"lds.l",{A_INC_M,FPSCR_N},{HEX_4,REG_M,HEX_6,HEX_6}, arch_sh2e_up},
509 fdf9b3e8 bellard
510 fdf9b3e8 bellard
/* 0000000000111000 ldtlb               */{"ldtlb",{0},{HEX_0,HEX_0,HEX_3,HEX_8}, arch_sh3_up},
511 fdf9b3e8 bellard
512 fdf9b3e8 bellard
/* 0100nnnnmmmm1111 mac.w @<REG_M>+,@<REG_N>+*/{"mac.w",{A_INC_M,A_INC_N},{HEX_4,REG_N,REG_M,HEX_F}, arch_sh1_up},
513 fdf9b3e8 bellard
514 fdf9b3e8 bellard
/* 1110nnnni8*1.... mov #<imm>,<REG_N>  */{"mov",{A_IMM,A_REG_N},{HEX_E,REG_N,IMM0_8}, arch_sh1_up},
515 fdf9b3e8 bellard
516 fdf9b3e8 bellard
/* 0110nnnnmmmm0011 mov <REG_M>,<REG_N> */{"mov",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_3}, arch_sh1_up},
517 fdf9b3e8 bellard
518 fdf9b3e8 bellard
/* 0000nnnnmmmm0100 mov.b <REG_M>,@(R0,<REG_N>)*/{"mov.b",{ A_REG_M,A_IND_R0_REG_N},{HEX_0,REG_N,REG_M,HEX_4}, arch_sh1_up},
519 fdf9b3e8 bellard
520 fdf9b3e8 bellard
/* 0010nnnnmmmm0100 mov.b <REG_M>,@-<REG_N>*/{"mov.b",{ A_REG_M,A_DEC_N},{HEX_2,REG_N,REG_M,HEX_4}, arch_sh1_up},
521 fdf9b3e8 bellard
522 fdf9b3e8 bellard
/* 0010nnnnmmmm0000 mov.b <REG_M>,@<REG_N>*/{"mov.b",{ A_REG_M,A_IND_N},{HEX_2,REG_N,REG_M,HEX_0}, arch_sh1_up},
523 fdf9b3e8 bellard
524 fdf9b3e8 bellard
/* 10000100mmmmi4*1 mov.b @(<disp>,<REG_M>),R0*/{"mov.b",{A_DISP_REG_M,A_R0},{HEX_8,HEX_4,REG_M,IMM0_4}, arch_sh1_up},
525 fdf9b3e8 bellard
526 fdf9b3e8 bellard
/* 11000100i8*1.... mov.b @(<disp>,GBR),R0*/{"mov.b",{A_DISP_GBR,A_R0},{HEX_C,HEX_4,IMM0_8}, arch_sh1_up},
527 fdf9b3e8 bellard
528 fdf9b3e8 bellard
/* 0000nnnnmmmm1100 mov.b @(R0,<REG_M>),<REG_N>*/{"mov.b",{A_IND_R0_REG_M,A_REG_N},{HEX_0,REG_N,REG_M,HEX_C}, arch_sh1_up},
529 fdf9b3e8 bellard
530 fdf9b3e8 bellard
/* 0110nnnnmmmm0100 mov.b @<REG_M>+,<REG_N>*/{"mov.b",{A_INC_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_4}, arch_sh1_up},
531 fdf9b3e8 bellard
532 fdf9b3e8 bellard
/* 0110nnnnmmmm0000 mov.b @<REG_M>,<REG_N>*/{"mov.b",{A_IND_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_0}, arch_sh1_up},
533 fdf9b3e8 bellard
534 fdf9b3e8 bellard
/* 10000000mmmmi4*1 mov.b R0,@(<disp>,<REG_M>)*/{"mov.b",{A_R0,A_DISP_REG_M},{HEX_8,HEX_0,REG_M,IMM1_4}, arch_sh1_up},
535 fdf9b3e8 bellard
536 fdf9b3e8 bellard
/* 11000000i8*1.... mov.b R0,@(<disp>,GBR)*/{"mov.b",{A_R0,A_DISP_GBR},{HEX_C,HEX_0,IMM1_8}, arch_sh1_up},
537 fdf9b3e8 bellard
538 fdf9b3e8 bellard
/* 0100nnnn10001011 mov.b R0,@<REG_N>+ */{"mov.b",{A_R0,A_INC_N},{HEX_4,REG_N,HEX_8,HEX_B}, arch_sh2a_nofpu_up},
539 fdf9b3e8 bellard
/* 0100nnnn11001011 mov.b @-<REG_M>,R0 */{"mov.b",{A_DEC_M,A_R0},{HEX_4,REG_M,HEX_C,HEX_B}, arch_sh2a_nofpu_up},
540 fdf9b3e8 bellard
/* 0011nnnnmmmm0001 0000dddddddddddd mov.b <REG_M>,@(<DISP12>,<REG_N>) */
541 fdf9b3e8 bellard
{"mov.b",{A_REG_M,A_DISP_REG_N},{HEX_3,REG_N,REG_M,HEX_1,HEX_0,DISP1_12}, arch_sh2a_nofpu_up | arch_op32},
542 fdf9b3e8 bellard
/* 0011nnnnmmmm0001 0100dddddddddddd mov.b @(<DISP12>,<REG_M>),<REG_N> */
543 fdf9b3e8 bellard
{"mov.b",{A_DISP_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_1,HEX_4,DISP0_12}, arch_sh2a_nofpu_up | arch_op32},
544 fdf9b3e8 bellard
/* 0001nnnnmmmmi4*4 mov.l <REG_M>,@(<disp>,<REG_N>)*/{"mov.l",{ A_REG_M,A_DISP_REG_N},{HEX_1,REG_N,REG_M,IMM1_4BY4}, arch_sh1_up},
545 fdf9b3e8 bellard
546 fdf9b3e8 bellard
/* 0000nnnnmmmm0110 mov.l <REG_M>,@(R0,<REG_N>)*/{"mov.l",{ A_REG_M,A_IND_R0_REG_N},{HEX_0,REG_N,REG_M,HEX_6}, arch_sh1_up},
547 fdf9b3e8 bellard
548 fdf9b3e8 bellard
/* 0010nnnnmmmm0110 mov.l <REG_M>,@-<REG_N>*/{"mov.l",{ A_REG_M,A_DEC_N},{HEX_2,REG_N,REG_M,HEX_6}, arch_sh1_up},
549 fdf9b3e8 bellard
550 fdf9b3e8 bellard
/* 0010nnnnmmmm0010 mov.l <REG_M>,@<REG_N>*/{"mov.l",{ A_REG_M,A_IND_N},{HEX_2,REG_N,REG_M,HEX_2}, arch_sh1_up},
551 fdf9b3e8 bellard
552 fdf9b3e8 bellard
/* 0101nnnnmmmmi4*4 mov.l @(<disp>,<REG_M>),<REG_N>*/{"mov.l",{A_DISP_REG_M,A_REG_N},{HEX_5,REG_N,REG_M,IMM0_4BY4}, arch_sh1_up},
553 fdf9b3e8 bellard
554 fdf9b3e8 bellard
/* 11000110i8*4.... mov.l @(<disp>,GBR),R0*/{"mov.l",{A_DISP_GBR,A_R0},{HEX_C,HEX_6,IMM0_8BY4}, arch_sh1_up},
555 fdf9b3e8 bellard
556 fdf9b3e8 bellard
/* 1101nnnni8p4.... mov.l @(<disp>,PC),<REG_N>*/{"mov.l",{A_DISP_PC,A_REG_N},{HEX_D,REG_N,PCRELIMM_8BY4}, arch_sh1_up},
557 fdf9b3e8 bellard
558 fdf9b3e8 bellard
/* 0000nnnnmmmm1110 mov.l @(R0,<REG_M>),<REG_N>*/{"mov.l",{A_IND_R0_REG_M,A_REG_N},{HEX_0,REG_N,REG_M,HEX_E}, arch_sh1_up},
559 fdf9b3e8 bellard
560 fdf9b3e8 bellard
/* 0110nnnnmmmm0110 mov.l @<REG_M>+,<REG_N>*/{"mov.l",{A_INC_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_6}, arch_sh1_up},
561 fdf9b3e8 bellard
562 fdf9b3e8 bellard
/* 0110nnnnmmmm0010 mov.l @<REG_M>,<REG_N>*/{"mov.l",{A_IND_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_2}, arch_sh1_up},
563 fdf9b3e8 bellard
564 fdf9b3e8 bellard
/* 11000010i8*4.... mov.l R0,@(<disp>,GBR)*/{"mov.l",{A_R0,A_DISP_GBR},{HEX_C,HEX_2,IMM1_8BY4}, arch_sh1_up},
565 fdf9b3e8 bellard
566 fdf9b3e8 bellard
/* 0100nnnn10101011 mov.l R0,@<REG_N>+ */{"mov.l",{A_R0,A_INC_N},{HEX_4,REG_N,HEX_A,HEX_B}, arch_sh2a_nofpu_up},
567 fdf9b3e8 bellard
/* 0100nnnn11001011 mov.l @-<REG_M>,R0 */{"mov.l",{A_DEC_M,A_R0},{HEX_4,REG_M,HEX_E,HEX_B}, arch_sh2a_nofpu_up},
568 fdf9b3e8 bellard
/* 0011nnnnmmmm0001 0010dddddddddddd mov.l <REG_M>,@(<DISP12>,<REG_N>) */
569 fdf9b3e8 bellard
{"mov.l",{A_REG_M,A_DISP_REG_N},{HEX_3,REG_N,REG_M,HEX_1,HEX_2,DISP1_12BY4}, arch_sh2a_nofpu_up | arch_op32},
570 fdf9b3e8 bellard
/* 0011nnnnmmmm0001 0110dddddddddddd mov.l @(<DISP12>,<REG_M>),<REG_N> */
571 fdf9b3e8 bellard
{"mov.l",{A_DISP_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_1,HEX_6,DISP0_12BY4}, arch_sh2a_nofpu_up | arch_op32},
572 fdf9b3e8 bellard
/* 0000nnnnmmmm0101 mov.w <REG_M>,@(R0,<REG_N>)*/{"mov.w",{ A_REG_M,A_IND_R0_REG_N},{HEX_0,REG_N,REG_M,HEX_5}, arch_sh1_up},
573 fdf9b3e8 bellard
574 fdf9b3e8 bellard
/* 0010nnnnmmmm0101 mov.w <REG_M>,@-<REG_N>*/{"mov.w",{ A_REG_M,A_DEC_N},{HEX_2,REG_N,REG_M,HEX_5}, arch_sh1_up},
575 fdf9b3e8 bellard
576 fdf9b3e8 bellard
/* 0010nnnnmmmm0001 mov.w <REG_M>,@<REG_N>*/{"mov.w",{ A_REG_M,A_IND_N},{HEX_2,REG_N,REG_M,HEX_1}, arch_sh1_up},
577 fdf9b3e8 bellard
578 fdf9b3e8 bellard
/* 10000101mmmmi4*2 mov.w @(<disp>,<REG_M>),R0*/{"mov.w",{A_DISP_REG_M,A_R0},{HEX_8,HEX_5,REG_M,IMM0_4BY2}, arch_sh1_up},
579 fdf9b3e8 bellard
580 fdf9b3e8 bellard
/* 11000101i8*2.... mov.w @(<disp>,GBR),R0*/{"mov.w",{A_DISP_GBR,A_R0},{HEX_C,HEX_5,IMM0_8BY2}, arch_sh1_up},
581 fdf9b3e8 bellard
582 fdf9b3e8 bellard
/* 1001nnnni8p2.... mov.w @(<disp>,PC),<REG_N>*/{"mov.w",{A_DISP_PC,A_REG_N},{HEX_9,REG_N,PCRELIMM_8BY2}, arch_sh1_up},
583 fdf9b3e8 bellard
584 fdf9b3e8 bellard
/* 0000nnnnmmmm1101 mov.w @(R0,<REG_M>),<REG_N>*/{"mov.w",{A_IND_R0_REG_M,A_REG_N},{HEX_0,REG_N,REG_M,HEX_D}, arch_sh1_up},
585 fdf9b3e8 bellard
586 fdf9b3e8 bellard
/* 0110nnnnmmmm0101 mov.w @<REG_M>+,<REG_N>*/{"mov.w",{A_INC_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_5}, arch_sh1_up},
587 fdf9b3e8 bellard
588 fdf9b3e8 bellard
/* 0110nnnnmmmm0001 mov.w @<REG_M>,<REG_N>*/{"mov.w",{A_IND_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_1}, arch_sh1_up},
589 fdf9b3e8 bellard
590 fdf9b3e8 bellard
/* 10000001mmmmi4*2 mov.w R0,@(<disp>,<REG_M>)*/{"mov.w",{A_R0,A_DISP_REG_M},{HEX_8,HEX_1,REG_M,IMM1_4BY2}, arch_sh1_up},
591 fdf9b3e8 bellard
592 fdf9b3e8 bellard
/* 11000001i8*2.... mov.w R0,@(<disp>,GBR)*/{"mov.w",{A_R0,A_DISP_GBR},{HEX_C,HEX_1,IMM1_8BY2}, arch_sh1_up},
593 fdf9b3e8 bellard
594 fdf9b3e8 bellard
/* 0100nnnn10011011 mov.w R0,@<REG_N>+ */{"mov.w",{A_R0,A_INC_N},{HEX_4,REG_N,HEX_9,HEX_B}, arch_sh2a_nofpu_up},
595 fdf9b3e8 bellard
/* 0100nnnn11011011 mov.w @-<REG_M>,R0 */{"mov.w",{A_DEC_M,A_R0},{HEX_4,REG_M,HEX_D,HEX_B}, arch_sh2a_nofpu_up},
596 fdf9b3e8 bellard
/* 0011nnnnmmmm0001 0001dddddddddddd mov.w <REG_M>,@(<DISP12>,<REG_N>) */
597 fdf9b3e8 bellard
{"mov.w",{A_REG_M,A_DISP_REG_N},{HEX_3,REG_N,REG_M,HEX_1,HEX_1,DISP1_12BY2}, arch_sh2a_nofpu_up | arch_op32},
598 fdf9b3e8 bellard
/* 0011nnnnmmmm0001 0101dddddddddddd mov.w @(<DISP12>,<REG_M>),<REG_N> */
599 fdf9b3e8 bellard
{"mov.w",{A_DISP_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_1,HEX_5,DISP0_12BY2}, arch_sh2a_nofpu_up | arch_op32},
600 fdf9b3e8 bellard
/* 11000111i8p4.... mova @(<disp>,PC),R0*/{"mova",{A_DISP_PC,A_R0},{HEX_C,HEX_7,PCRELIMM_8BY4}, arch_sh1_up},
601 fdf9b3e8 bellard
/* 0000nnnn11000011 movca.l R0,@<REG_N> */{"movca.l",{A_R0,A_IND_N},{HEX_0,REG_N,HEX_C,HEX_3}, arch_sh4_nommu_nofpu_up},
602 fdf9b3e8 bellard
603 fdf9b3e8 bellard
/* 0000nnnn01110011 movco.l r0,@<REG_N> */{"movco.l",{A_R0,A_IND_N},{HEX_0,REG_N,HEX_7,HEX_3}, arch_sh4a_nofp_up},
604 fdf9b3e8 bellard
/* 0000mmmm01100011 movli.l @<REG_M>,r0 */{"movli.l",{A_IND_M,A_R0},{HEX_0,REG_M,HEX_6,HEX_3}, arch_sh4a_nofp_up},
605 fdf9b3e8 bellard
606 fdf9b3e8 bellard
/* 0000nnnn00101001 movt <REG_N>        */{"movt",{A_REG_N},{HEX_0,REG_N,HEX_2,HEX_9}, arch_sh1_up},
607 fdf9b3e8 bellard
608 fdf9b3e8 bellard
/* 0100mmmm10101001 movua.l @<REG_M>,r0 */{"movua.l",{A_IND_M,A_R0},{HEX_4,REG_M,HEX_A,HEX_9}, arch_sh4a_nofp_up},
609 fdf9b3e8 bellard
/* 0100mmmm11101001 movua.l @<REG_M>+,r0 */{"movua.l",{A_INC_M,A_R0},{HEX_4,REG_M,HEX_E,HEX_9}, arch_sh4a_nofp_up},
610 fdf9b3e8 bellard
611 fdf9b3e8 bellard
/* 0010nnnnmmmm1111 muls.w <REG_M>,<REG_N>*/{"muls.w",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_F}, arch_sh1_up},
612 fdf9b3e8 bellard
/* 0010nnnnmmmm1111 muls <REG_M>,<REG_N>*/{"muls",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_F}, arch_sh1_up},
613 fdf9b3e8 bellard
614 fdf9b3e8 bellard
/* 0000nnnnmmmm0111 mul.l <REG_M>,<REG_N>*/{"mul.l",{ A_REG_M,A_REG_N},{HEX_0,REG_N,REG_M,HEX_7}, arch_sh2_up},
615 fdf9b3e8 bellard
616 fdf9b3e8 bellard
/* 0010nnnnmmmm1110 mulu.w <REG_M>,<REG_N>*/{"mulu.w",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_E}, arch_sh1_up},
617 fdf9b3e8 bellard
/* 0010nnnnmmmm1110 mulu <REG_M>,<REG_N>*/{"mulu",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_E}, arch_sh1_up},
618 fdf9b3e8 bellard
619 fdf9b3e8 bellard
/* 0110nnnnmmmm1011 neg <REG_M>,<REG_N> */{"neg",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_B}, arch_sh1_up},
620 fdf9b3e8 bellard
621 fdf9b3e8 bellard
/* 0110nnnnmmmm1010 negc <REG_M>,<REG_N>*/{"negc",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_A}, arch_sh1_up},
622 fdf9b3e8 bellard
623 fdf9b3e8 bellard
/* 0000000000001001 nop                 */{"nop",{0},{HEX_0,HEX_0,HEX_0,HEX_9}, arch_sh1_up},
624 fdf9b3e8 bellard
625 fdf9b3e8 bellard
/* 0110nnnnmmmm0111 not <REG_M>,<REG_N> */{"not",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_7}, arch_sh1_up},
626 fdf9b3e8 bellard
/* 0000nnnn10010011 ocbi @<REG_N>       */{"ocbi",{A_IND_N},{HEX_0,REG_N,HEX_9,HEX_3}, arch_sh4_nommu_nofpu_up},
627 fdf9b3e8 bellard
628 fdf9b3e8 bellard
/* 0000nnnn10100011 ocbp @<REG_N>       */{"ocbp",{A_IND_N},{HEX_0,REG_N,HEX_A,HEX_3}, arch_sh4_nommu_nofpu_up},
629 fdf9b3e8 bellard
630 fdf9b3e8 bellard
/* 0000nnnn10110011 ocbwb @<REG_N>      */{"ocbwb",{A_IND_N},{HEX_0,REG_N,HEX_B,HEX_3}, arch_sh4_nommu_nofpu_up},
631 fdf9b3e8 bellard
632 fdf9b3e8 bellard
633 fdf9b3e8 bellard
/* 11001011i8*1.... or #<imm>,R0        */{"or",{A_IMM,A_R0},{HEX_C,HEX_B,IMM0_8}, arch_sh1_up},
634 fdf9b3e8 bellard
635 fdf9b3e8 bellard
/* 0010nnnnmmmm1011 or <REG_M>,<REG_N>  */{"or",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_B}, arch_sh1_up},
636 fdf9b3e8 bellard
637 fdf9b3e8 bellard
/* 11001111i8*1.... or.b #<imm>,@(R0,GBR)*/{"or.b",{A_IMM,A_R0_GBR},{HEX_C,HEX_F,IMM0_8}, arch_sh1_up},
638 fdf9b3e8 bellard
639 fdf9b3e8 bellard
/* 0000nnnn10000011 pref @<REG_N>       */{"pref",{A_IND_N},{HEX_0,REG_N,HEX_8,HEX_3}, arch_sh4_nommu_nofpu_up | arch_sh2a_nofpu_up},
640 fdf9b3e8 bellard
641 fdf9b3e8 bellard
/* 0000nnnn11010011 prefi @<REG_N>      */{"prefi",{A_IND_N},{HEX_0,REG_N,HEX_D,HEX_3}, arch_sh4a_nofp_up},
642 fdf9b3e8 bellard
643 fdf9b3e8 bellard
/* 0100nnnn00100100 rotcl <REG_N>       */{"rotcl",{A_REG_N},{HEX_4,REG_N,HEX_2,HEX_4}, arch_sh1_up},
644 fdf9b3e8 bellard
645 fdf9b3e8 bellard
/* 0100nnnn00100101 rotcr <REG_N>       */{"rotcr",{A_REG_N},{HEX_4,REG_N,HEX_2,HEX_5}, arch_sh1_up},
646 fdf9b3e8 bellard
647 fdf9b3e8 bellard
/* 0100nnnn00000100 rotl <REG_N>        */{"rotl",{A_REG_N},{HEX_4,REG_N,HEX_0,HEX_4}, arch_sh1_up},
648 fdf9b3e8 bellard
649 fdf9b3e8 bellard
/* 0100nnnn00000101 rotr <REG_N>        */{"rotr",{A_REG_N},{HEX_4,REG_N,HEX_0,HEX_5}, arch_sh1_up},
650 fdf9b3e8 bellard
651 fdf9b3e8 bellard
/* 0000000000101011 rte                 */{"rte",{0},{HEX_0,HEX_0,HEX_2,HEX_B}, arch_sh1_up},
652 fdf9b3e8 bellard
653 fdf9b3e8 bellard
/* 0000000000001011 rts                 */{"rts",{0},{HEX_0,HEX_0,HEX_0,HEX_B}, arch_sh1_up},
654 fdf9b3e8 bellard
655 fdf9b3e8 bellard
/* 0000000010011000 setdmx              */{"setdmx",{0},{HEX_0,HEX_0,HEX_9,HEX_8}, arch_sh4al_dsp_up},
656 fdf9b3e8 bellard
/* 0000000011001000 setdmy              */{"setdmy",{0},{HEX_0,HEX_0,HEX_C,HEX_8}, arch_sh4al_dsp_up},
657 fdf9b3e8 bellard
658 fdf9b3e8 bellard
/* 0000000001011000 sets                */{"sets",{0},{HEX_0,HEX_0,HEX_5,HEX_8}, arch_sh1_up},
659 fdf9b3e8 bellard
/* 0000000000011000 sett                */{"sett",{0},{HEX_0,HEX_0,HEX_1,HEX_8}, arch_sh1_up},
660 fdf9b3e8 bellard
661 fdf9b3e8 bellard
/* 0100nnnn00010100 setrc <REG_N>       */{"setrc",{A_REG_N},{HEX_4,REG_N,HEX_1,HEX_4}, arch_sh_dsp_up},
662 fdf9b3e8 bellard
663 fdf9b3e8 bellard
/* 10000010i8*1.... setrc #<imm>        */{"setrc",{A_IMM},{HEX_8,HEX_2,IMM0_8}, arch_sh_dsp_up},
664 fdf9b3e8 bellard
665 fdf9b3e8 bellard
/* repeat start end <REG_N>               */{"repeat",{A_DISP_PC,A_DISP_PC,A_REG_N},{REPEAT,REG_N,HEX_1,HEX_4}, arch_sh_dsp_up},
666 fdf9b3e8 bellard
667 fdf9b3e8 bellard
/* repeat start end #<imm>                */{"repeat",{A_DISP_PC,A_DISP_PC,A_IMM},{REPEAT,HEX_2,IMM0_8,HEX_8}, arch_sh_dsp_up},
668 fdf9b3e8 bellard
669 fdf9b3e8 bellard
/* 0100nnnnmmmm1100 shad <REG_M>,<REG_N>*/{"shad",{ A_REG_M,A_REG_N},{HEX_4,REG_N,REG_M,HEX_C}, arch_sh3_nommu_up | arch_sh2a_nofpu_up},
670 fdf9b3e8 bellard
671 fdf9b3e8 bellard
/* 0100nnnnmmmm1101 shld <REG_M>,<REG_N>*/{"shld",{ A_REG_M,A_REG_N},{HEX_4,REG_N,REG_M,HEX_D}, arch_sh3_nommu_up | arch_sh2a_nofpu_up},
672 fdf9b3e8 bellard
673 fdf9b3e8 bellard
/* 0100nnnn00100000 shal <REG_N>        */{"shal",{A_REG_N},{HEX_4,REG_N,HEX_2,HEX_0}, arch_sh1_up},
674 fdf9b3e8 bellard
675 fdf9b3e8 bellard
/* 0100nnnn00100001 shar <REG_N>        */{"shar",{A_REG_N},{HEX_4,REG_N,HEX_2,HEX_1}, arch_sh1_up},
676 fdf9b3e8 bellard
677 fdf9b3e8 bellard
/* 0100nnnn00000000 shll <REG_N>        */{"shll",{A_REG_N},{HEX_4,REG_N,HEX_0,HEX_0}, arch_sh1_up},
678 fdf9b3e8 bellard
679 fdf9b3e8 bellard
/* 0100nnnn00101000 shll16 <REG_N>      */{"shll16",{A_REG_N},{HEX_4,REG_N,HEX_2,HEX_8}, arch_sh1_up},
680 fdf9b3e8 bellard
681 fdf9b3e8 bellard
/* 0100nnnn00001000 shll2 <REG_N>       */{"shll2",{A_REG_N},{HEX_4,REG_N,HEX_0,HEX_8}, arch_sh1_up},
682 fdf9b3e8 bellard
683 fdf9b3e8 bellard
/* 0100nnnn00011000 shll8 <REG_N>       */{"shll8",{A_REG_N},{HEX_4,REG_N,HEX_1,HEX_8}, arch_sh1_up},
684 fdf9b3e8 bellard
685 fdf9b3e8 bellard
/* 0100nnnn00000001 shlr <REG_N>        */{"shlr",{A_REG_N},{HEX_4,REG_N,HEX_0,HEX_1}, arch_sh1_up},
686 fdf9b3e8 bellard
687 fdf9b3e8 bellard
/* 0100nnnn00101001 shlr16 <REG_N>      */{"shlr16",{A_REG_N},{HEX_4,REG_N,HEX_2,HEX_9}, arch_sh1_up},
688 fdf9b3e8 bellard
689 fdf9b3e8 bellard
/* 0100nnnn00001001 shlr2 <REG_N>       */{"shlr2",{A_REG_N},{HEX_4,REG_N,HEX_0,HEX_9}, arch_sh1_up},
690 fdf9b3e8 bellard
691 fdf9b3e8 bellard
/* 0100nnnn00011001 shlr8 <REG_N>       */{"shlr8",{A_REG_N},{HEX_4,REG_N,HEX_1,HEX_9}, arch_sh1_up},
692 fdf9b3e8 bellard
693 fdf9b3e8 bellard
/* 0000000000011011 sleep               */{"sleep",{0},{HEX_0,HEX_0,HEX_1,HEX_B}, arch_sh1_up},
694 fdf9b3e8 bellard
695 fdf9b3e8 bellard
/* 0000nnnn00000010 stc SR,<REG_N>      */{"stc",{A_SR,A_REG_N},{HEX_0,REG_N,HEX_0,HEX_2}, arch_sh1_up},
696 fdf9b3e8 bellard
697 fdf9b3e8 bellard
/* 0000nnnn00010010 stc GBR,<REG_N>     */{"stc",{A_GBR,A_REG_N},{HEX_0,REG_N,HEX_1,HEX_2}, arch_sh1_up},
698 fdf9b3e8 bellard
699 fdf9b3e8 bellard
/* 0000nnnn00100010 stc VBR,<REG_N>     */{"stc",{A_VBR,A_REG_N},{HEX_0,REG_N,HEX_2,HEX_2}, arch_sh1_up},
700 fdf9b3e8 bellard
701 fdf9b3e8 bellard
/* 0000nnnn01010010 stc MOD,<REG_N>     */{"stc",{A_MOD,A_REG_N},{HEX_0,REG_N,HEX_5,HEX_2}, arch_sh_dsp_up},
702 fdf9b3e8 bellard
703 fdf9b3e8 bellard
/* 0000nnnn01110010 stc RE,<REG_N>     */{"stc",{A_RE,A_REG_N},{HEX_0,REG_N,HEX_7,HEX_2}, arch_sh_dsp_up},
704 fdf9b3e8 bellard
705 fdf9b3e8 bellard
/* 0000nnnn01100010 stc RS,<REG_N>     */{"stc",{A_RS,A_REG_N},{HEX_0,REG_N,HEX_6,HEX_2}, arch_sh_dsp_up},
706 fdf9b3e8 bellard
707 fdf9b3e8 bellard
/* 0000nnnn00110010 stc SSR,<REG_N>     */{"stc",{A_SSR,A_REG_N},{HEX_0,REG_N,HEX_3,HEX_2}, arch_sh3_nommu_up},
708 fdf9b3e8 bellard
709 fdf9b3e8 bellard
/* 0000nnnn01000010 stc SPC,<REG_N>     */{"stc",{A_SPC,A_REG_N},{HEX_0,REG_N,HEX_4,HEX_2}, arch_sh3_nommu_up},
710 fdf9b3e8 bellard
711 fdf9b3e8 bellard
/* 0000nnnn00111010 stc SGR,<REG_N>     */{"stc",{A_SGR,A_REG_N},{HEX_0,REG_N,HEX_3,HEX_A}, arch_sh4_nommu_nofpu_up},
712 fdf9b3e8 bellard
713 fdf9b3e8 bellard
/* 0000nnnn11111010 stc DBR,<REG_N>     */{"stc",{A_DBR,A_REG_N},{HEX_0,REG_N,HEX_F,HEX_A}, arch_sh4_nommu_nofpu_up},
714 fdf9b3e8 bellard
715 fdf9b3e8 bellard
/* 0000nnnn1xxx0010 stc Rn_BANK,<REG_N> */{"stc",{A_REG_B,A_REG_N},{HEX_0,REG_N,REG_B,HEX_2}, arch_sh3_nommu_up},
716 fdf9b3e8 bellard
717 fdf9b3e8 bellard
/* 0000nnnn01001010 stc TBR,<REG_N> */ {"stc",{A_TBR,A_REG_N},{HEX_0,REG_N,HEX_4,HEX_A}, arch_sh2a_nofpu_up},
718 fdf9b3e8 bellard
719 fdf9b3e8 bellard
/* 0100nnnn00000011 stc.l SR,@-<REG_N>  */{"stc.l",{A_SR,A_DEC_N},{HEX_4,REG_N,HEX_0,HEX_3}, arch_sh1_up},
720 fdf9b3e8 bellard
721 fdf9b3e8 bellard
/* 0100nnnn00100011 stc.l VBR,@-<REG_N> */{"stc.l",{A_VBR,A_DEC_N},{HEX_4,REG_N,HEX_2,HEX_3}, arch_sh1_up},
722 fdf9b3e8 bellard
723 fdf9b3e8 bellard
/* 0100nnnn01010011 stc.l MOD,@-<REG_N> */{"stc.l",{A_MOD,A_DEC_N},{HEX_4,REG_N,HEX_5,HEX_3}, arch_sh_dsp_up},
724 fdf9b3e8 bellard
725 fdf9b3e8 bellard
/* 0100nnnn01110011 stc.l RE,@-<REG_N>  */{"stc.l",{A_RE,A_DEC_N},{HEX_4,REG_N,HEX_7,HEX_3}, arch_sh_dsp_up},
726 fdf9b3e8 bellard
727 fdf9b3e8 bellard
/* 0100nnnn01100011 stc.l RS,@-<REG_N>  */{"stc.l",{A_RS,A_DEC_N},{HEX_4,REG_N,HEX_6,HEX_3}, arch_sh_dsp_up},
728 fdf9b3e8 bellard
729 fdf9b3e8 bellard
/* 0100nnnn00110011 stc.l SSR,@-<REG_N> */{"stc.l",{A_SSR,A_DEC_N},{HEX_4,REG_N,HEX_3,HEX_3}, arch_sh3_nommu_up},
730 fdf9b3e8 bellard
731 fdf9b3e8 bellard
/* 0100nnnn01000011 stc.l SPC,@-<REG_N> */{"stc.l",{A_SPC,A_DEC_N},{HEX_4,REG_N,HEX_4,HEX_3}, arch_sh3_nommu_up},
732 fdf9b3e8 bellard
733 fdf9b3e8 bellard
/* 0100nnnn00010011 stc.l GBR,@-<REG_N> */{"stc.l",{A_GBR,A_DEC_N},{HEX_4,REG_N,HEX_1,HEX_3}, arch_sh1_up},
734 fdf9b3e8 bellard
735 fdf9b3e8 bellard
/* 0100nnnn00110010 stc.l SGR,@-<REG_N> */{"stc.l",{A_SGR,A_DEC_N},{HEX_4,REG_N,HEX_3,HEX_2}, arch_sh4_nommu_nofpu_up},
736 fdf9b3e8 bellard
737 fdf9b3e8 bellard
/* 0100nnnn11110010 stc.l DBR,@-<REG_N> */{"stc.l",{A_DBR,A_DEC_N},{HEX_4,REG_N,HEX_F,HEX_2}, arch_sh4_nommu_nofpu_up},
738 fdf9b3e8 bellard
739 fdf9b3e8 bellard
/* 0100nnnn1xxx0011 stc.l Rn_BANK,@-<REG_N> */{"stc.l",{A_REG_B,A_DEC_N},{HEX_4,REG_N,REG_B,HEX_3}, arch_sh3_nommu_up},
740 fdf9b3e8 bellard
741 fdf9b3e8 bellard
/* 0000nnnn00001010 sts MACH,<REG_N>    */{"sts",{A_MACH,A_REG_N},{HEX_0,REG_N,HEX_0,HEX_A}, arch_sh1_up},
742 fdf9b3e8 bellard
743 fdf9b3e8 bellard
/* 0000nnnn00011010 sts MACL,<REG_N>    */{"sts",{A_MACL,A_REG_N},{HEX_0,REG_N,HEX_1,HEX_A}, arch_sh1_up},
744 fdf9b3e8 bellard
745 fdf9b3e8 bellard
/* 0000nnnn00101010 sts PR,<REG_N>      */{"sts",{A_PR,A_REG_N},{HEX_0,REG_N,HEX_2,HEX_A}, arch_sh1_up},
746 fdf9b3e8 bellard
747 fdf9b3e8 bellard
/* 0000nnnn01101010 sts DSR,<REG_N>        */{"sts",{A_DSR,A_REG_N},{HEX_0,REG_N,HEX_6,HEX_A}, arch_sh_dsp_up},
748 fdf9b3e8 bellard
749 fdf9b3e8 bellard
/* 0000nnnn01111010 sts A0,<REG_N>        */{"sts",{A_A0,A_REG_N},{HEX_0,REG_N,HEX_7,HEX_A}, arch_sh_dsp_up},
750 fdf9b3e8 bellard
751 fdf9b3e8 bellard
/* 0000nnnn10001010 sts X0,<REG_N>        */{"sts",{A_X0,A_REG_N},{HEX_0,REG_N,HEX_8,HEX_A}, arch_sh_dsp_up},
752 fdf9b3e8 bellard
753 fdf9b3e8 bellard
/* 0000nnnn10011010 sts X1,<REG_N>        */{"sts",{A_X1,A_REG_N},{HEX_0,REG_N,HEX_9,HEX_A}, arch_sh_dsp_up},
754 fdf9b3e8 bellard
755 fdf9b3e8 bellard
/* 0000nnnn10101010 sts Y0,<REG_N>        */{"sts",{A_Y0,A_REG_N},{HEX_0,REG_N,HEX_A,HEX_A}, arch_sh_dsp_up},
756 fdf9b3e8 bellard
757 fdf9b3e8 bellard
/* 0000nnnn10111010 sts Y1,<REG_N>        */{"sts",{A_Y1,A_REG_N},{HEX_0,REG_N,HEX_B,HEX_A}, arch_sh_dsp_up},
758 fdf9b3e8 bellard
759 fdf9b3e8 bellard
/* 0000nnnn01011010 sts FPUL,<REG_N>    */{"sts",{FPUL_M,A_REG_N},{HEX_0,REG_N,HEX_5,HEX_A}, arch_sh2e_up},
760 3b46e624 ths
761 fdf9b3e8 bellard
/* 0000nnnn01101010 sts FPSCR,<REG_N>   */{"sts",{FPSCR_M,A_REG_N},{HEX_0,REG_N,HEX_6,HEX_A}, arch_sh2e_up},
762 fdf9b3e8 bellard
763 fdf9b3e8 bellard
/* 0100nnnn00000010 sts.l MACH,@-<REG_N>*/{"sts.l",{A_MACH,A_DEC_N},{HEX_4,REG_N,HEX_0,HEX_2}, arch_sh1_up},
764 fdf9b3e8 bellard
765 fdf9b3e8 bellard
/* 0100nnnn00010010 sts.l MACL,@-<REG_N>*/{"sts.l",{A_MACL,A_DEC_N},{HEX_4,REG_N,HEX_1,HEX_2}, arch_sh1_up},
766 fdf9b3e8 bellard
767 fdf9b3e8 bellard
/* 0100nnnn00100010 sts.l PR,@-<REG_N>  */{"sts.l",{A_PR,A_DEC_N},{HEX_4,REG_N,HEX_2,HEX_2}, arch_sh1_up},
768 fdf9b3e8 bellard
769 fdf9b3e8 bellard
/* 0100nnnn01100110 sts.l DSR,@-<REG_N>        */{"sts.l",{A_DSR,A_DEC_N},{HEX_4,REG_N,HEX_6,HEX_2}, arch_sh_dsp_up},
770 fdf9b3e8 bellard
771 fdf9b3e8 bellard
/* 0100nnnn01110110 sts.l A0,@-<REG_N>        */{"sts.l",{A_A0,A_DEC_N},{HEX_4,REG_N,HEX_7,HEX_2}, arch_sh_dsp_up},
772 fdf9b3e8 bellard
773 fdf9b3e8 bellard
/* 0100nnnn10000110 sts.l X0,@-<REG_N>        */{"sts.l",{A_X0,A_DEC_N},{HEX_4,REG_N,HEX_8,HEX_2}, arch_sh_dsp_up},
774 fdf9b3e8 bellard
775 fdf9b3e8 bellard
/* 0100nnnn10010110 sts.l X1,@-<REG_N>        */{"sts.l",{A_X1,A_DEC_N},{HEX_4,REG_N,HEX_9,HEX_2}, arch_sh_dsp_up},
776 fdf9b3e8 bellard
777 fdf9b3e8 bellard
/* 0100nnnn10100110 sts.l Y0,@-<REG_N>        */{"sts.l",{A_Y0,A_DEC_N},{HEX_4,REG_N,HEX_A,HEX_2}, arch_sh_dsp_up},
778 fdf9b3e8 bellard
779 fdf9b3e8 bellard
/* 0100nnnn10110110 sts.l Y1,@-<REG_N>        */{"sts.l",{A_Y1,A_DEC_N},{HEX_4,REG_N,HEX_B,HEX_2}, arch_sh_dsp_up},
780 fdf9b3e8 bellard
781 fdf9b3e8 bellard
/* 0100nnnn01010010 sts.l FPUL,@-<REG_N>*/{"sts.l",{FPUL_M,A_DEC_N},{HEX_4,REG_N,HEX_5,HEX_2}, arch_sh2e_up},
782 3b46e624 ths
783 fdf9b3e8 bellard
/* 0100nnnn01100010 sts.l FPSCR,@-<REG_N>*/{"sts.l",{FPSCR_M,A_DEC_N},{HEX_4,REG_N,HEX_6,HEX_2}, arch_sh2e_up},
784 fdf9b3e8 bellard
785 fdf9b3e8 bellard
/* 0011nnnnmmmm1000 sub <REG_M>,<REG_N> */{"sub",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_8}, arch_sh1_up},
786 fdf9b3e8 bellard
787 fdf9b3e8 bellard
/* 0011nnnnmmmm1010 subc <REG_M>,<REG_N>*/{"subc",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_A}, arch_sh1_up},
788 fdf9b3e8 bellard
789 fdf9b3e8 bellard
/* 0011nnnnmmmm1011 subv <REG_M>,<REG_N>*/{"subv",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_B}, arch_sh1_up},
790 fdf9b3e8 bellard
791 fdf9b3e8 bellard
/* 0110nnnnmmmm1000 swap.b <REG_M>,<REG_N>*/{"swap.b",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_8}, arch_sh1_up},
792 fdf9b3e8 bellard
793 fdf9b3e8 bellard
/* 0110nnnnmmmm1001 swap.w <REG_M>,<REG_N>*/{"swap.w",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_9}, arch_sh1_up},
794 fdf9b3e8 bellard
795 fdf9b3e8 bellard
/* 0000000010101011 synco               */{"synco",{0},{HEX_0,HEX_0,HEX_A,HEX_B}, arch_sh4a_nofp_up},
796 fdf9b3e8 bellard
797 fdf9b3e8 bellard
/* 0100nnnn00011011 tas.b @<REG_N>      */{"tas.b",{A_IND_N},{HEX_4,REG_N,HEX_1,HEX_B}, arch_sh1_up},
798 fdf9b3e8 bellard
799 fdf9b3e8 bellard
/* 11000011i8*1.... trapa #<imm>        */{"trapa",{A_IMM},{HEX_C,HEX_3,IMM0_8}, arch_sh1_up},
800 fdf9b3e8 bellard
801 fdf9b3e8 bellard
/* 11001000i8*1.... tst #<imm>,R0       */{"tst",{A_IMM,A_R0},{HEX_C,HEX_8,IMM0_8}, arch_sh1_up},
802 fdf9b3e8 bellard
803 fdf9b3e8 bellard
/* 0010nnnnmmmm1000 tst <REG_M>,<REG_N> */{"tst",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_8}, arch_sh1_up},
804 fdf9b3e8 bellard
805 fdf9b3e8 bellard
/* 11001100i8*1.... tst.b #<imm>,@(R0,GBR)*/{"tst.b",{A_IMM,A_R0_GBR},{HEX_C,HEX_C,IMM0_8}, arch_sh1_up},
806 fdf9b3e8 bellard
807 fdf9b3e8 bellard
/* 11001010i8*1.... xor #<imm>,R0       */{"xor",{A_IMM,A_R0},{HEX_C,HEX_A,IMM0_8}, arch_sh1_up},
808 fdf9b3e8 bellard
809 fdf9b3e8 bellard
/* 0010nnnnmmmm1010 xor <REG_M>,<REG_N> */{"xor",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_A}, arch_sh1_up},
810 fdf9b3e8 bellard
811 fdf9b3e8 bellard
/* 11001110i8*1.... xor.b #<imm>,@(R0,GBR)*/{"xor.b",{A_IMM,A_R0_GBR},{HEX_C,HEX_E,IMM0_8}, arch_sh1_up},
812 fdf9b3e8 bellard
813 fdf9b3e8 bellard
/* 0010nnnnmmmm1101 xtrct <REG_M>,<REG_N>*/{"xtrct",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_D}, arch_sh1_up},
814 fdf9b3e8 bellard
815 fdf9b3e8 bellard
/* 0000nnnnmmmm0111 mul.l <REG_M>,<REG_N>*/{"mul.l",{ A_REG_M,A_REG_N},{HEX_0,REG_N,REG_M,HEX_7}, arch_sh1_up},
816 fdf9b3e8 bellard
817 fdf9b3e8 bellard
/* 0100nnnn00010000 dt <REG_N>          */{"dt",{A_REG_N},{HEX_4,REG_N,HEX_1,HEX_0}, arch_sh2_up},
818 fdf9b3e8 bellard
819 fdf9b3e8 bellard
/* 0011nnnnmmmm1101 dmuls.l <REG_M>,<REG_N>*/{"dmuls.l",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_D}, arch_sh2_up},
820 fdf9b3e8 bellard
821 fdf9b3e8 bellard
/* 0011nnnnmmmm0101 dmulu.l <REG_M>,<REG_N>*/{"dmulu.l",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_5}, arch_sh2_up},
822 fdf9b3e8 bellard
823 fdf9b3e8 bellard
/* 0000nnnnmmmm1111 mac.l @<REG_M>+,@<REG_N>+*/{"mac.l",{A_INC_M,A_INC_N},{HEX_0,REG_N,REG_M,HEX_F}, arch_sh2_up},
824 fdf9b3e8 bellard
825 fdf9b3e8 bellard
/* 0000nnnn00100011 braf <REG_N>       */{"braf",{A_REG_N},{HEX_0,REG_N,HEX_2,HEX_3}, arch_sh2_up},
826 fdf9b3e8 bellard
827 fdf9b3e8 bellard
/* 0000nnnn00000011 bsrf <REG_N>       */{"bsrf",{A_REG_N},{HEX_0,REG_N,HEX_0,HEX_3}, arch_sh2_up},
828 fdf9b3e8 bellard
829 fdf9b3e8 bellard
/* 111101nnmmmm0000 movs.w @-<REG_N>,<DSP_REG_M> */   {"movs.w",{A_DEC_N,DSP_REG_M},{HEX_F,SDT_REG_N,REG_M,HEX_0}, arch_sh_dsp_up},
830 fdf9b3e8 bellard
831 fdf9b3e8 bellard
/* 111101nnmmmm0001 movs.w @<REG_N>,<DSP_REG_M> */    {"movs.w",{A_IND_N,DSP_REG_M},{HEX_F,SDT_REG_N,REG_M,HEX_4}, arch_sh_dsp_up},
832 fdf9b3e8 bellard
833 fdf9b3e8 bellard
/* 111101nnmmmm0010 movs.w @<REG_N>+,<DSP_REG_M> */   {"movs.w",{A_INC_N,DSP_REG_M},{HEX_F,SDT_REG_N,REG_M,HEX_8}, arch_sh_dsp_up},
834 fdf9b3e8 bellard
835 fdf9b3e8 bellard
/* 111101nnmmmm0011 movs.w @<REG_N>+r8,<DSP_REG_M> */ {"movs.w",{AS_PMOD_N,DSP_REG_M},{HEX_F,SDT_REG_N,REG_M,HEX_C}, arch_sh_dsp_up},
836 fdf9b3e8 bellard
837 fdf9b3e8 bellard
/* 111101nnmmmm0100 movs.w <DSP_REG_M>,@-<REG_N> */   {"movs.w",{DSP_REG_M,A_DEC_N},{HEX_F,SDT_REG_N,REG_M,HEX_1}, arch_sh_dsp_up},
838 fdf9b3e8 bellard
839 fdf9b3e8 bellard
/* 111101nnmmmm0101 movs.w <DSP_REG_M>,@<REG_N> */    {"movs.w",{DSP_REG_M,A_IND_N},{HEX_F,SDT_REG_N,REG_M,HEX_5}, arch_sh_dsp_up},
840 fdf9b3e8 bellard
841 fdf9b3e8 bellard
/* 111101nnmmmm0110 movs.w <DSP_REG_M>,@<REG_N>+ */   {"movs.w",{DSP_REG_M,A_INC_N},{HEX_F,SDT_REG_N,REG_M,HEX_9}, arch_sh_dsp_up},
842 fdf9b3e8 bellard
843 fdf9b3e8 bellard
/* 111101nnmmmm0111 movs.w <DSP_REG_M>,@<REG_N>+r8 */ {"movs.w",{DSP_REG_M,AS_PMOD_N},{HEX_F,SDT_REG_N,REG_M,HEX_D}, arch_sh_dsp_up},
844 fdf9b3e8 bellard
845 fdf9b3e8 bellard
/* 111101nnmmmm1000 movs.l @-<REG_N>,<DSP_REG_M> */   {"movs.l",{A_DEC_N,DSP_REG_M},{HEX_F,SDT_REG_N,REG_M,HEX_2}, arch_sh_dsp_up},
846 fdf9b3e8 bellard
847 fdf9b3e8 bellard
/* 111101nnmmmm1001 movs.l @<REG_N>,<DSP_REG_M> */    {"movs.l",{A_IND_N,DSP_REG_M},{HEX_F,SDT_REG_N,REG_M,HEX_6}, arch_sh_dsp_up},
848 fdf9b3e8 bellard
849 fdf9b3e8 bellard
/* 111101nnmmmm1010 movs.l @<REG_N>+,<DSP_REG_M> */   {"movs.l",{A_INC_N,DSP_REG_M},{HEX_F,SDT_REG_N,REG_M,HEX_A}, arch_sh_dsp_up},
850 fdf9b3e8 bellard
851 fdf9b3e8 bellard
/* 111101nnmmmm1011 movs.l @<REG_N>+r8,<DSP_REG_M> */ {"movs.l",{AS_PMOD_N,DSP_REG_M},{HEX_F,SDT_REG_N,REG_M,HEX_E}, arch_sh_dsp_up},
852 fdf9b3e8 bellard
853 fdf9b3e8 bellard
/* 111101nnmmmm1100 movs.l <DSP_REG_M>,@-<REG_N> */   {"movs.l",{DSP_REG_M,A_DEC_N},{HEX_F,SDT_REG_N,REG_M,HEX_3}, arch_sh_dsp_up},
854 fdf9b3e8 bellard
855 fdf9b3e8 bellard
/* 111101nnmmmm1101 movs.l <DSP_REG_M>,@<REG_N> */    {"movs.l",{DSP_REG_M,A_IND_N},{HEX_F,SDT_REG_N,REG_M,HEX_7}, arch_sh_dsp_up},
856 fdf9b3e8 bellard
857 fdf9b3e8 bellard
/* 111101nnmmmm1110 movs.l <DSP_REG_M>,@<REG_N>+ */   {"movs.l",{DSP_REG_M,A_INC_N},{HEX_F,SDT_REG_N,REG_M,HEX_B}, arch_sh_dsp_up},
858 fdf9b3e8 bellard
859 fdf9b3e8 bellard
/* 111101nnmmmm1111 movs.l <DSP_REG_M>,@<REG_N>+r8 */ {"movs.l",{DSP_REG_M,AS_PMOD_N},{HEX_F,SDT_REG_N,REG_M,HEX_F}, arch_sh_dsp_up},
860 fdf9b3e8 bellard
861 fdf9b3e8 bellard
/* 0*0*0*00** nopx */ {"nopx",{0},{PPI,NOPX}, arch_sh_dsp_up},
862 fdf9b3e8 bellard
/* *0*0*0**00 nopy */ {"nopy",{0},{PPI,NOPY}, arch_sh_dsp_up},
863 fdf9b3e8 bellard
/* n*m*0*01** movx.w @<REG_N>,<DSP_REG_X> */    {"movx.w",{AX_IND_N,DSP_REG_X},{PPI,MOVX,HEX_1}, arch_sh_dsp_up},
864 fdf9b3e8 bellard
/* n*m*0*10** movx.w @<REG_N>+,<DSP_REG_X> */   {"movx.w",{AX_INC_N,DSP_REG_X},{PPI,MOVX,HEX_2}, arch_sh_dsp_up},
865 fdf9b3e8 bellard
/* n*m*0*11** movx.w @<REG_N>+r8,<DSP_REG_X> */ {"movx.w",{AX_PMOD_N,DSP_REG_X},{PPI,MOVX,HEX_3}, arch_sh_dsp_up},
866 fdf9b3e8 bellard
/* n*m*1*01** movx.w <DSP_REG_M>,@<REG_N> */    {"movx.w",{DSP_REG_A_M,AX_IND_N},{PPI,MOVX,HEX_9}, arch_sh_dsp_up},
867 fdf9b3e8 bellard
/* n*m*1*10** movx.w <DSP_REG_M>,@<REG_N>+ */   {"movx.w",{DSP_REG_A_M,AX_INC_N},{PPI,MOVX,HEX_A}, arch_sh_dsp_up},
868 fdf9b3e8 bellard
/* n*m*1*11** movx.w <DSP_REG_M>,@<REG_N>+r8 */ {"movx.w",{DSP_REG_A_M,AX_PMOD_N},{PPI,MOVX,HEX_B}, arch_sh_dsp_up},
869 fdf9b3e8 bellard
870 fdf9b3e8 bellard
/* nnmm000100 movx.w @<REG_Axy>,<DSP_REG_XY> */ {"movx.w",{AXY_IND_N,DSP_REG_XY},{PPI,MOVX_NOPY,HEX_0,HEX_4}, arch_sh4al_dsp_up},
871 fdf9b3e8 bellard
/* nnmm001000 movx.w @<REG_Axy>+,<DSP_REG_XY> */{"movx.w",{AXY_INC_N,DSP_REG_XY},{PPI,MOVX_NOPY,HEX_0,HEX_8}, arch_sh4al_dsp_up},
872 fdf9b3e8 bellard
/* nnmm001100 movx.w @<REG_Axy>+r8,<DSP_REG_XY> */{"movx.w",{AXY_PMOD_N,DSP_REG_XY},{PPI,MOVX_NOPY,HEX_0,HEX_C}, arch_sh4al_dsp_up},
873 fdf9b3e8 bellard
/* nnmm100100 movx.w <DSP_REG_AX>,@<REG_Axy> */ {"movx.w",{DSP_REG_AX,AXY_IND_N},{PPI,MOVX_NOPY,HEX_2,HEX_4}, arch_sh4al_dsp_up},
874 fdf9b3e8 bellard
/* nnmm101000 movx.w <DSP_REG_AX>,@<REG_Axy>+ */{"movx.w",{DSP_REG_AX,AXY_INC_N},{PPI,MOVX_NOPY,HEX_2,HEX_8}, arch_sh4al_dsp_up},
875 fdf9b3e8 bellard
/* nnmm101100 movx.w <DSP_REG_AX>,@<REG_Axy>+r8 */{"movx.w",{DSP_REG_AX,AXY_PMOD_N},{PPI,MOVX_NOPY,HEX_2,HEX_C}, arch_sh4al_dsp_up},
876 fdf9b3e8 bellard
877 fdf9b3e8 bellard
/* nnmm010100 movx.l @<REG_Axy>,<DSP_REG_XY> */ {"movx.l",{AXY_IND_N,DSP_REG_XY},{PPI,MOVX_NOPY,HEX_1,HEX_4}, arch_sh4al_dsp_up},
878 fdf9b3e8 bellard
/* nnmm011000 movx.l @<REG_Axy>+,<DSP_REG_XY> */{"movx.l",{AXY_INC_N,DSP_REG_XY},{PPI,MOVX_NOPY,HEX_1,HEX_8}, arch_sh4al_dsp_up},
879 fdf9b3e8 bellard
/* nnmm011100 movx.l @<REG_Axy>+r8,<DSP_REG_XY> */{"movx.l",{AXY_PMOD_N,DSP_REG_XY},{PPI,MOVX_NOPY,HEX_1,HEX_C}, arch_sh4al_dsp_up},
880 fdf9b3e8 bellard
/* nnmm110100 movx.l <DSP_REG_AX>,@<REG_Axy> */ {"movx.l",{DSP_REG_AX,AXY_IND_N},{PPI,MOVX_NOPY,HEX_3,HEX_4}, arch_sh4al_dsp_up},
881 fdf9b3e8 bellard
/* nnmm111000 movx.l <DSP_REG_AX>,@<REG_Axy>+ */{"movx.l",{DSP_REG_AX,AXY_INC_N},{PPI,MOVX_NOPY,HEX_3,HEX_8}, arch_sh4al_dsp_up},
882 fdf9b3e8 bellard
/* nnmm111100 movx.l <DSP_REG_AX>,@<REG_Axy>+r8 */{"movx.l",{DSP_REG_AX,AXY_PMOD_N},{PPI,MOVX_NOPY,HEX_3,HEX_C}, arch_sh4al_dsp_up},
883 fdf9b3e8 bellard
884 fdf9b3e8 bellard
/* *n*m*0**01 movy.w @<REG_N>,<DSP_REG_Y> */    {"movy.w",{AY_IND_N,DSP_REG_Y},{PPI,MOVY,HEX_1}, arch_sh_dsp_up},
885 fdf9b3e8 bellard
/* *n*m*0**10 movy.w @<REG_N>+,<DSP_REG_Y> */   {"movy.w",{AY_INC_N,DSP_REG_Y},{PPI,MOVY,HEX_2}, arch_sh_dsp_up},
886 fdf9b3e8 bellard
/* *n*m*0**11 movy.w @<REG_N>+r9,<DSP_REG_Y> */ {"movy.w",{AY_PMOD_N,DSP_REG_Y},{PPI,MOVY,HEX_3}, arch_sh_dsp_up},
887 fdf9b3e8 bellard
/* *n*m*1**01 movy.w <DSP_REG_M>,@<REG_N> */    {"movy.w",{DSP_REG_A_M,AY_IND_N},{PPI,MOVY,HEX_9}, arch_sh_dsp_up},
888 fdf9b3e8 bellard
/* *n*m*1**10 movy.w <DSP_REG_M>,@<REG_N>+ */   {"movy.w",{DSP_REG_A_M,AY_INC_N},{PPI,MOVY,HEX_A}, arch_sh_dsp_up},
889 fdf9b3e8 bellard
/* *n*m*1**11 movy.w <DSP_REG_M>,@<REG_N>+r9 */ {"movy.w",{DSP_REG_A_M,AY_PMOD_N},{PPI,MOVY,HEX_B}, arch_sh_dsp_up},
890 fdf9b3e8 bellard
891 fdf9b3e8 bellard
/* nnmm000001 movy.w @<REG_Ayx>,<DSP_REG_YX> */ {"movy.w",{AYX_IND_N,DSP_REG_YX},{PPI,MOVY_NOPX,HEX_0,HEX_1}, arch_sh4al_dsp_up},
892 fdf9b3e8 bellard
/* nnmm000010 movy.w @<REG_Ayx>+,<DSP_REG_YX> */{"movy.w",{AYX_INC_N,DSP_REG_YX},{PPI,MOVY_NOPX,HEX_0,HEX_2}, arch_sh4al_dsp_up},
893 fdf9b3e8 bellard
/* nnmm000011 movy.w @<REG_Ayx>+r8,<DSP_REG_YX> */{"movy.w",{AYX_PMOD_N,DSP_REG_YX},{PPI,MOVY_NOPX,HEX_0,HEX_3}, arch_sh4al_dsp_up},
894 fdf9b3e8 bellard
/* nnmm010001 movy.w <DSP_REG_AY>,@<REG_Ayx> */ {"movy.w",{DSP_REG_AY,AYX_IND_N},{PPI,MOVY_NOPX,HEX_1,HEX_1}, arch_sh4al_dsp_up},
895 fdf9b3e8 bellard
/* nnmm010010 movy.w <DSP_REG_AY>,@<REG_Ayx>+ */{"movy.w",{DSP_REG_AY,AYX_INC_N},{PPI,MOVY_NOPX,HEX_1,HEX_2}, arch_sh4al_dsp_up},
896 fdf9b3e8 bellard
/* nnmm010011 movy.w <DSP_REG_AY>,@<REG_Ayx>+r8 */{"movy.w",{DSP_REG_AY,AYX_PMOD_N},{PPI,MOVY_NOPX,HEX_1,HEX_3}, arch_sh4al_dsp_up},
897 fdf9b3e8 bellard
898 fdf9b3e8 bellard
/* nnmm100001 movy.l @<REG_Ayx>,<DSP_REG_YX> */ {"movy.l",{AYX_IND_N,DSP_REG_YX},{PPI,MOVY_NOPX,HEX_2,HEX_1}, arch_sh4al_dsp_up},
899 fdf9b3e8 bellard
/* nnmm100010 movy.l @<REG_Ayx>+,<DSP_REG_YX> */{"movy.l",{AYX_INC_N,DSP_REG_YX},{PPI,MOVY_NOPX,HEX_2,HEX_2}, arch_sh4al_dsp_up},
900 fdf9b3e8 bellard
/* nnmm100011 movy.l @<REG_Ayx>+r8,<DSP_REG_YX> */{"movy.l",{AYX_PMOD_N,DSP_REG_YX},{PPI,MOVY_NOPX,HEX_2,HEX_3}, arch_sh4al_dsp_up},
901 fdf9b3e8 bellard
/* nnmm110001 movy.l <DSP_REG_AY>,@<REG_Ayx> */ {"movy.l",{DSP_REG_AY,AYX_IND_N},{PPI,MOVY_NOPX,HEX_3,HEX_1}, arch_sh4al_dsp_up},
902 fdf9b3e8 bellard
/* nnmm110010 movy.l <DSP_REG_AY>,@<REG_Ayx>+ */{"movy.l",{DSP_REG_AY,AYX_INC_N},{PPI,MOVY_NOPX,HEX_3,HEX_2}, arch_sh4al_dsp_up},
903 fdf9b3e8 bellard
/* nnmm110011 movy.l <DSP_REG_AY>,@<REG_Ayx>+r8 */{"movy.l",{DSP_REG_AY,AYX_PMOD_N},{PPI,MOVY_NOPX,HEX_3,HEX_3}, arch_sh4al_dsp_up},
904 fdf9b3e8 bellard
905 fdf9b3e8 bellard
/* 01aaeeffxxyyggnn pmuls Se,Sf,Dg */ {"pmuls",{DSP_REG_E,DSP_REG_F,DSP_REG_G},{PPI,PMUL}, arch_sh_dsp_up},
906 fdf9b3e8 bellard
/* 10100000xxyynnnn psubc <DSP_REG_X>,<DSP_REG_Y>,<DSP_REG_N> */
907 fdf9b3e8 bellard
{"psubc",{DSP_REG_X,DSP_REG_Y,DSP_REG_N},{PPI,PPI3,HEX_A,HEX_0}, arch_sh_dsp_up},
908 fdf9b3e8 bellard
/* 10110000xxyynnnn paddc <DSP_REG_X>,<DSP_REG_Y>,<DSP_REG_N> */
909 fdf9b3e8 bellard
{"paddc",{DSP_REG_X,DSP_REG_Y,DSP_REG_N},{PPI,PPI3,HEX_B,HEX_0}, arch_sh_dsp_up},
910 fdf9b3e8 bellard
/* 10000100xxyynnnn pcmp <DSP_REG_X>,<DSP_REG_Y> */
911 fdf9b3e8 bellard
{"pcmp", {DSP_REG_X,DSP_REG_Y},{PPI,PPI3,HEX_8,HEX_4}, arch_sh_dsp_up},
912 fdf9b3e8 bellard
/* 10100100xxyynnnn pwsb <DSP_REG_X>,<DSP_REG_Y>,<DSP_REG_N> */
913 fdf9b3e8 bellard
{"pwsb", {DSP_REG_X,DSP_REG_Y,DSP_REG_N},{PPI,PPI3,HEX_A,HEX_4}, arch_sh_dsp_up},
914 fdf9b3e8 bellard
/* 10110100xxyynnnn pwad <DSP_REG_X>,<DSP_REG_Y>,<DSP_REG_N> */
915 fdf9b3e8 bellard
{"pwad", {DSP_REG_X,DSP_REG_Y,DSP_REG_N},{PPI,PPI3,HEX_B,HEX_4}, arch_sh_dsp_up},
916 fdf9b3e8 bellard
/* 10001000xxyynnnn pabs <DSP_REG_X>,<DSP_REG_N> */
917 fdf9b3e8 bellard
{"pabs", {DSP_REG_X,DSP_REG_N},{PPI,PPI3NC,HEX_8,HEX_8}, arch_sh_dsp_up},
918 fdf9b3e8 bellard
/* 1000100!xx01nnnn pabs <DSP_REG_X>,<DSP_REG_N> */
919 fdf9b3e8 bellard
{"pabs", {DSP_REG_X,DSP_REG_N},{PPI,PPIC,HEX_8,HEX_9,HEX_1}, arch_sh4al_dsp_up},
920 fdf9b3e8 bellard
/* 10101000xxyynnnn pabs <DSP_REG_Y>,<DSP_REG_N> */
921 fdf9b3e8 bellard
{"pabs", {DSP_REG_Y,DSP_REG_N},{PPI,PPI3NC,HEX_A,HEX_8}, arch_sh_dsp_up},
922 fdf9b3e8 bellard
/* 1010100!01yynnnn pabs <DSP_REG_Y>,<DSP_REG_N> */
923 fdf9b3e8 bellard
{"pabs", {DSP_REG_Y,DSP_REG_N},{PPI,PPIC,HEX_A,HEX_9,HEX_4}, arch_sh4al_dsp_up},
924 fdf9b3e8 bellard
/* 10011000xxyynnnn prnd <DSP_REG_X>,<DSP_REG_N> */
925 fdf9b3e8 bellard
{"prnd", {DSP_REG_X,DSP_REG_N},{PPI,PPI3NC,HEX_9,HEX_8}, arch_sh_dsp_up},
926 fdf9b3e8 bellard
/* 1001100!xx01nnnn prnd <DSP_REG_X>,<DSP_REG_N> */
927 fdf9b3e8 bellard
{"prnd", {DSP_REG_X,DSP_REG_N},{PPI,PPIC,HEX_9,HEX_9,HEX_1}, arch_sh4al_dsp_up},
928 fdf9b3e8 bellard
/* 10111000xxyynnnn prnd <DSP_REG_Y>,<DSP_REG_N> */
929 fdf9b3e8 bellard
{"prnd", {DSP_REG_Y,DSP_REG_N},{PPI,PPI3NC,HEX_B,HEX_8}, arch_sh_dsp_up},
930 fdf9b3e8 bellard
/* 1011100!01yynnnn prnd <DSP_REG_Y>,<DSP_REG_N> */
931 fdf9b3e8 bellard
{"prnd", {DSP_REG_Y,DSP_REG_N},{PPI,PPIC,HEX_B,HEX_9,HEX_4}, arch_sh4al_dsp_up},
932 fdf9b3e8 bellard
933 fdf9b3e8 bellard
{"dct",{0},{PPI,PDC,HEX_1}, arch_sh_dsp_up},
934 fdf9b3e8 bellard
{"dcf",{0},{PPI,PDC,HEX_2}, arch_sh_dsp_up},
935 fdf9b3e8 bellard
936 fdf9b3e8 bellard
/* 10000001xxyynnnn pshl <DSP_REG_X>,<DSP_REG_Y>,<DSP_REG_N> */
937 fdf9b3e8 bellard
{"pshl", {DSP_REG_X,DSP_REG_Y,DSP_REG_N},{PPI,PPIC,HEX_8,HEX_1}, arch_sh_dsp_up},
938 fdf9b3e8 bellard
/* 00000iiiiiiinnnn pshl #<imm>,<DSP_REG_N> */ {"pshl",{A_IMM,DSP_REG_N},{PPI,PSH,HEX_0}, arch_sh_dsp_up},
939 fdf9b3e8 bellard
/* 10010001xxyynnnn psha <DSP_REG_X>,<DSP_REG_Y>,<DSP_REG_N> */
940 fdf9b3e8 bellard
{"psha", {DSP_REG_X,DSP_REG_Y,DSP_REG_N},{PPI,PPIC,HEX_9,HEX_1}, arch_sh_dsp_up},
941 fdf9b3e8 bellard
/* 00010iiiiiiinnnn psha #<imm>,<DSP_REG_N> */ {"psha",{A_IMM,DSP_REG_N},{PPI,PSH,HEX_1}, arch_sh_dsp_up},
942 fdf9b3e8 bellard
/* 10100001xxyynnnn psub <DSP_REG_X>,<DSP_REG_Y>,<DSP_REG_N> */
943 fdf9b3e8 bellard
{"psub", {DSP_REG_X,DSP_REG_Y,DSP_REG_N},{PPI,PPIC,HEX_A,HEX_1}, arch_sh_dsp_up},
944 fdf9b3e8 bellard
/* 10000101xxyynnnn psub <DSP_REG_Y>,<DSP_REG_X>,<DSP_REG_N> */
945 fdf9b3e8 bellard
{"psub", {DSP_REG_Y,DSP_REG_X,DSP_REG_N},{PPI,PPIC,HEX_8,HEX_5}, arch_sh4al_dsp_up},
946 fdf9b3e8 bellard
/* 10110001xxyynnnn padd <DSP_REG_X>,<DSP_REG_Y>,<DSP_REG_N> */
947 fdf9b3e8 bellard
{"padd", {DSP_REG_X,DSP_REG_Y,DSP_REG_N},{PPI,PPIC,HEX_B,HEX_1}, arch_sh_dsp_up},
948 fdf9b3e8 bellard
/* 10010101xxyynnnn pand <DSP_REG_X>,<DSP_REG_Y>,<DSP_REG_N> */
949 fdf9b3e8 bellard
{"pand", {DSP_REG_X,DSP_REG_Y,DSP_REG_N},{PPI,PPIC,HEX_9,HEX_5}, arch_sh_dsp_up},
950 fdf9b3e8 bellard
/* 10100101xxyynnnn pxor <DSP_REG_X>,<DSP_REG_Y>,<DSP_REG_N> */
951 fdf9b3e8 bellard
{"pxor", {DSP_REG_X,DSP_REG_Y,DSP_REG_N},{PPI,PPIC,HEX_A,HEX_5}, arch_sh_dsp_up},
952 fdf9b3e8 bellard
/* 10110101xxyynnnn por  <DSP_REG_X>,<DSP_REG_Y>,<DSP_REG_N> */
953 fdf9b3e8 bellard
{"por",  {DSP_REG_X,DSP_REG_Y,DSP_REG_N},{PPI,PPIC,HEX_B,HEX_5}, arch_sh_dsp_up},
954 fdf9b3e8 bellard
/* 10001001xxyynnnn pdec <DSP_REG_X>,<DSP_REG_N> */
955 fdf9b3e8 bellard
{"pdec", {DSP_REG_X,DSP_REG_N},{PPI,PPIC,HEX_8,HEX_9}, arch_sh_dsp_up},
956 fdf9b3e8 bellard
/* 10101001xxyynnnn pdec <DSP_REG_Y>,<DSP_REG_N> */
957 fdf9b3e8 bellard
{"pdec", {DSP_REG_Y,DSP_REG_N},{PPI,PPIC,HEX_A,HEX_9}, arch_sh_dsp_up},
958 fdf9b3e8 bellard
/* 10011001xx00nnnn pinc <DSP_REG_X>,<DSP_REG_N> */
959 fdf9b3e8 bellard
{"pinc", {DSP_REG_X,DSP_REG_N},{PPI,PPIC,HEX_9,HEX_9,HEX_XX00}, arch_sh_dsp_up},
960 fdf9b3e8 bellard
/* 1011100100yynnnn pinc <DSP_REG_Y>,<DSP_REG_N> */
961 fdf9b3e8 bellard
{"pinc", {DSP_REG_Y,DSP_REG_N},{PPI,PPIC,HEX_B,HEX_9,HEX_00YY}, arch_sh_dsp_up},
962 fdf9b3e8 bellard
/* 10001101xxyynnnn pclr <DSP_REG_N> */
963 fdf9b3e8 bellard
{"pclr", {DSP_REG_N},{PPI,PPIC,HEX_8,HEX_D}, arch_sh_dsp_up},
964 fdf9b3e8 bellard
/* 10011101xx00nnnn pdmsb <DSP_REG_X>,<DSP_REG_N> */
965 fdf9b3e8 bellard
{"pdmsb", {DSP_REG_X,DSP_REG_N},{PPI,PPIC,HEX_9,HEX_D,HEX_XX00}, arch_sh_dsp_up},
966 fdf9b3e8 bellard
/* 1011110100yynnnn pdmsb <DSP_REG_Y>,<DSP_REG_N> */
967 fdf9b3e8 bellard
{"pdmsb", {DSP_REG_Y,DSP_REG_N},{PPI,PPIC,HEX_B,HEX_D,HEX_00YY}, arch_sh_dsp_up},
968 fdf9b3e8 bellard
/* 11001001xxyynnnn pneg  <DSP_REG_X>,<DSP_REG_N> */
969 fdf9b3e8 bellard
{"pneg",  {DSP_REG_X,DSP_REG_N},{PPI,PPIC,HEX_C,HEX_9}, arch_sh_dsp_up},
970 fdf9b3e8 bellard
/* 11101001xxyynnnn pneg  <DSP_REG_Y>,<DSP_REG_N> */
971 fdf9b3e8 bellard
{"pneg",  {DSP_REG_Y,DSP_REG_N},{PPI,PPIC,HEX_E,HEX_9}, arch_sh_dsp_up},
972 fdf9b3e8 bellard
/* 11011001xxyynnnn pcopy <DSP_REG_X>,<DSP_REG_N> */
973 fdf9b3e8 bellard
{"pcopy", {DSP_REG_X,DSP_REG_N},{PPI,PPIC,HEX_D,HEX_9}, arch_sh_dsp_up},
974 fdf9b3e8 bellard
/* 11111001xxyynnnn pcopy <DSP_REG_Y>,<DSP_REG_N> */
975 fdf9b3e8 bellard
{"pcopy", {DSP_REG_Y,DSP_REG_N},{PPI,PPIC,HEX_F,HEX_9}, arch_sh_dsp_up},
976 fdf9b3e8 bellard
/* 11001101xxyynnnn psts MACH,<DSP_REG_N> */
977 fdf9b3e8 bellard
{"psts", {A_MACH,DSP_REG_N},{PPI,PPIC,HEX_C,HEX_D}, arch_sh_dsp_up},
978 fdf9b3e8 bellard
/* 11011101xxyynnnn psts MACL,<DSP_REG_N> */
979 fdf9b3e8 bellard
{"psts", {A_MACL,DSP_REG_N},{PPI,PPIC,HEX_D,HEX_D}, arch_sh_dsp_up},
980 fdf9b3e8 bellard
/* 11101101xxyynnnn plds <DSP_REG_N>,MACH */
981 fdf9b3e8 bellard
{"plds", {DSP_REG_N,A_MACH},{PPI,PPIC,HEX_E,HEX_D}, arch_sh_dsp_up},
982 fdf9b3e8 bellard
/* 11111101xxyynnnn plds <DSP_REG_N>,MACL */
983 fdf9b3e8 bellard
{"plds", {DSP_REG_N,A_MACL},{PPI,PPIC,HEX_F,HEX_D}, arch_sh_dsp_up},
984 fdf9b3e8 bellard
/* 10011101xx01zzzz pswap <DSP_REG_X>,<DSP_REG_N> */
985 fdf9b3e8 bellard
{"pswap", {DSP_REG_X,DSP_REG_N},{PPI,PPIC,HEX_9,HEX_D,HEX_1}, arch_sh4al_dsp_up},
986 fdf9b3e8 bellard
/* 1011110101yyzzzz pswap <DSP_REG_Y>,<DSP_REG_N> */
987 fdf9b3e8 bellard
{"pswap", {DSP_REG_Y,DSP_REG_N},{PPI,PPIC,HEX_B,HEX_D,HEX_4}, arch_sh4al_dsp_up},
988 fdf9b3e8 bellard
989 fdf9b3e8 bellard
/* 1111nnnn01011101 fabs <F_REG_N>     */{"fabs",{F_REG_N},{HEX_F,REG_N,HEX_5,HEX_D}, arch_sh2e_up},
990 fdf9b3e8 bellard
/* 1111nnn001011101 fabs <D_REG_N>     */{"fabs",{D_REG_N},{HEX_F,REG_N,HEX_5,HEX_D}, arch_sh4_up | arch_sh2a_up},
991 fdf9b3e8 bellard
992 fdf9b3e8 bellard
/* 1111nnnnmmmm0000 fadd <F_REG_M>,<F_REG_N>*/{"fadd",{F_REG_M,F_REG_N},{HEX_F,REG_N,REG_M,HEX_0}, arch_sh2e_up},
993 fdf9b3e8 bellard
/* 1111nnn0mmm00000 fadd <D_REG_M>,<D_REG_N>*/{"fadd",{D_REG_M,D_REG_N},{HEX_F,REG_N,REG_M,HEX_0}, arch_sh4_up | arch_sh2a_up},
994 fdf9b3e8 bellard
995 fdf9b3e8 bellard
/* 1111nnnnmmmm0100 fcmp/eq <F_REG_M>,<F_REG_N>*/{"fcmp/eq",{F_REG_M,F_REG_N},{HEX_F,REG_N,REG_M,HEX_4}, arch_sh2e_up},
996 fdf9b3e8 bellard
/* 1111nnn0mmm00100 fcmp/eq <D_REG_M>,<D_REG_N>*/{"fcmp/eq",{D_REG_M,D_REG_N},{HEX_F,REG_N,REG_M,HEX_4}, arch_sh4_up | arch_sh2a_up},
997 fdf9b3e8 bellard
998 fdf9b3e8 bellard
/* 1111nnnnmmmm0101 fcmp/gt <F_REG_M>,<F_REG_N>*/{"fcmp/gt",{F_REG_M,F_REG_N},{HEX_F,REG_N,REG_M,HEX_5}, arch_sh2e_up},
999 fdf9b3e8 bellard
/* 1111nnn0mmm00101 fcmp/gt <D_REG_M>,<D_REG_N>*/{"fcmp/gt",{D_REG_M,D_REG_N},{HEX_F,REG_N,REG_M,HEX_5}, arch_sh4_up | arch_sh2a_up},
1000 fdf9b3e8 bellard
1001 fdf9b3e8 bellard
/* 1111nnn010111101 fcnvds <D_REG_N>,FPUL*/{"fcnvds",{D_REG_N,FPUL_M},{HEX_F,REG_N_D,HEX_B,HEX_D}, arch_sh4_up | arch_sh2a_up},
1002 fdf9b3e8 bellard
1003 fdf9b3e8 bellard
/* 1111nnn010101101 fcnvsd FPUL,<D_REG_N>*/{"fcnvsd",{FPUL_M,D_REG_N},{HEX_F,REG_N_D,HEX_A,HEX_D}, arch_sh4_up | arch_sh2a_up},
1004 fdf9b3e8 bellard
1005 fdf9b3e8 bellard
/* 1111nnnnmmmm0011 fdiv <F_REG_M>,<F_REG_N>*/{"fdiv",{F_REG_M,F_REG_N},{HEX_F,REG_N,REG_M,HEX_3}, arch_sh2e_up},
1006 fdf9b3e8 bellard
/* 1111nnn0mmm00011 fdiv <D_REG_M>,<D_REG_N>*/{"fdiv",{D_REG_M,D_REG_N},{HEX_F,REG_N,REG_M,HEX_3}, arch_sh4_up | arch_sh2a_up},
1007 fdf9b3e8 bellard
1008 fdf9b3e8 bellard
/* 1111nnmm11101101 fipr <V_REG_M>,<V_REG_N>*/{"fipr",{V_REG_M,V_REG_N},{HEX_F,REG_NM,HEX_E,HEX_D}, arch_sh4_up},
1009 fdf9b3e8 bellard
1010 fdf9b3e8 bellard
/* 1111nnnn10001101 fldi0 <F_REG_N>    */{"fldi0",{F_REG_N},{HEX_F,REG_N,HEX_8,HEX_D}, arch_sh2e_up},
1011 fdf9b3e8 bellard
1012 fdf9b3e8 bellard
/* 1111nnnn10011101 fldi1 <F_REG_N>    */{"fldi1",{F_REG_N},{HEX_F,REG_N,HEX_9,HEX_D}, arch_sh2e_up},
1013 fdf9b3e8 bellard
1014 fdf9b3e8 bellard
/* 1111nnnn00011101 flds <F_REG_N>,FPUL*/{"flds",{F_REG_N,FPUL_M},{HEX_F,REG_N,HEX_1,HEX_D}, arch_sh2e_up},
1015 fdf9b3e8 bellard
1016 fdf9b3e8 bellard
/* 1111nnnn00101101 float FPUL,<F_REG_N>*/{"float",{FPUL_M,F_REG_N},{HEX_F,REG_N,HEX_2,HEX_D}, arch_sh2e_up},
1017 fdf9b3e8 bellard
/* 1111nnn000101101 float FPUL,<D_REG_N>*/{"float",{FPUL_M,D_REG_N},{HEX_F,REG_N,HEX_2,HEX_D}, arch_sh4_up | arch_sh2a_up},
1018 fdf9b3e8 bellard
1019 fdf9b3e8 bellard
/* 1111nnnnmmmm1110 fmac FR0,<F_REG_M>,<F_REG_N>*/{"fmac",{F_FR0,F_REG_M,F_REG_N},{HEX_F,REG_N,REG_M,HEX_E}, arch_sh2e_up},
1020 fdf9b3e8 bellard
1021 fdf9b3e8 bellard
/* 1111nnnnmmmm1100 fmov <F_REG_M>,<F_REG_N>*/{"fmov",{F_REG_M,F_REG_N},{HEX_F,REG_N,REG_M,HEX_C}, arch_sh2e_up},
1022 fdf9b3e8 bellard
/* 1111nnn1mmmm1100 fmov <DX_REG_M>,<DX_REG_N>*/{"fmov",{DX_REG_M,DX_REG_N},{HEX_F,REG_N,REG_M,HEX_C}, arch_sh4_up | arch_sh2a_up},
1023 fdf9b3e8 bellard
1024 fdf9b3e8 bellard
/* 1111nnnnmmmm1000 fmov @<REG_M>,<F_REG_N>*/{"fmov",{A_IND_M,F_REG_N},{HEX_F,REG_N,REG_M,HEX_8}, arch_sh2e_up},
1025 fdf9b3e8 bellard
/* 1111nnn1mmmm1000 fmov @<REG_M>,<DX_REG_N>*/{"fmov",{A_IND_M,DX_REG_N},{HEX_F,REG_N,REG_M,HEX_8}, arch_sh4_up | arch_sh2a_up},
1026 fdf9b3e8 bellard
1027 fdf9b3e8 bellard
/* 1111nnnnmmmm1010 fmov <F_REG_M>,@<REG_N>*/{"fmov",{F_REG_M,A_IND_N},{HEX_F,REG_N,REG_M,HEX_A}, arch_sh2e_up},
1028 fdf9b3e8 bellard
/* 1111nnnnmmm11010 fmov <DX_REG_M>,@<REG_N>*/{"fmov",{DX_REG_M,A_IND_N},{HEX_F,REG_N,REG_M,HEX_A}, arch_sh4_up | arch_sh2a_up},
1029 fdf9b3e8 bellard
1030 fdf9b3e8 bellard
/* 1111nnnnmmmm1001 fmov @<REG_M>+,<F_REG_N>*/{"fmov",{A_INC_M,F_REG_N},{HEX_F,REG_N,REG_M,HEX_9}, arch_sh2e_up},
1031 fdf9b3e8 bellard
/* 1111nnn1mmmm1001 fmov @<REG_M>+,<DX_REG_N>*/{"fmov",{A_INC_M,DX_REG_N},{HEX_F,REG_N,REG_M,HEX_9}, arch_sh4_up | arch_sh2a_up},
1032 fdf9b3e8 bellard
1033 fdf9b3e8 bellard
/* 1111nnnnmmmm1011 fmov <F_REG_M>,@-<REG_N>*/{"fmov",{F_REG_M,A_DEC_N},{HEX_F,REG_N,REG_M,HEX_B}, arch_sh2e_up},
1034 fdf9b3e8 bellard
/* 1111nnnnmmm11011 fmov <DX_REG_M>,@-<REG_N>*/{"fmov",{DX_REG_M,A_DEC_N},{HEX_F,REG_N,REG_M,HEX_B}, arch_sh4_up | arch_sh2a_up},
1035 fdf9b3e8 bellard
1036 fdf9b3e8 bellard
/* 1111nnnnmmmm0110 fmov @(R0,<REG_M>),<F_REG_N>*/{"fmov",{A_IND_R0_REG_M,F_REG_N},{HEX_F,REG_N,REG_M,HEX_6}, arch_sh2e_up},
1037 fdf9b3e8 bellard
/* 1111nnn1mmmm0110 fmov @(R0,<REG_M>),<DX_REG_N>*/{"fmov",{A_IND_R0_REG_M,DX_REG_N},{HEX_F,REG_N,REG_M,HEX_6}, arch_sh4_up | arch_sh2a_up},
1038 fdf9b3e8 bellard
1039 fdf9b3e8 bellard
/* 1111nnnnmmmm0111 fmov <F_REG_M>,@(R0,<REG_N>)*/{"fmov",{F_REG_M,A_IND_R0_REG_N},{HEX_F,REG_N,REG_M,HEX_7}, arch_sh2e_up},
1040 fdf9b3e8 bellard
/* 1111nnnnmmm10111 fmov <DX_REG_M>,@(R0,<REG_N>)*/{"fmov",{DX_REG_M,A_IND_R0_REG_N},{HEX_F,REG_N,REG_M,HEX_7}, arch_sh4_up | arch_sh2a_up},
1041 fdf9b3e8 bellard
1042 fdf9b3e8 bellard
/* 1111nnn1mmmm1000 fmov.d @<REG_M>,<DX_REG_N>*/{"fmov.d",{A_IND_M,DX_REG_N},{HEX_F,REG_N,REG_M,HEX_8}, arch_sh4_up | arch_sh2a_up},
1043 fdf9b3e8 bellard
1044 fdf9b3e8 bellard
/* 1111nnnnmmm11010 fmov.d <DX_REG_M>,@<REG_N>*/{"fmov.d",{DX_REG_M,A_IND_N},{HEX_F,REG_N,REG_M,HEX_A}, arch_sh4_up | arch_sh2a_up},
1045 fdf9b3e8 bellard
1046 fdf9b3e8 bellard
/* 1111nnn1mmmm1001 fmov.d @<REG_M>+,<DX_REG_N>*/{"fmov.d",{A_INC_M,DX_REG_N},{HEX_F,REG_N,REG_M,HEX_9}, arch_sh4_up | arch_sh2a_up},
1047 fdf9b3e8 bellard
1048 fdf9b3e8 bellard
/* 1111nnnnmmm11011 fmov.d <DX_REG_M>,@-<REG_N>*/{"fmov.d",{DX_REG_M,A_DEC_N},{HEX_F,REG_N,REG_M,HEX_B}, arch_sh4_up | arch_sh2a_up},
1049 fdf9b3e8 bellard
1050 fdf9b3e8 bellard
/* 1111nnn1mmmm0110 fmov.d @(R0,<REG_M>),<DX_REG_N>*/{"fmov.d",{A_IND_R0_REG_M,DX_REG_N},{HEX_F,REG_N,REG_M,HEX_6}, arch_sh4_up | arch_sh2a_up},
1051 fdf9b3e8 bellard
1052 fdf9b3e8 bellard
/* 1111nnnnmmm10111 fmov.d <DX_REG_M>,@(R0,<REG_N>)*/{"fmov.d",{DX_REG_M,A_IND_R0_REG_N},{HEX_F,REG_N,REG_M,HEX_7}, arch_sh4_up | arch_sh2a_up},
1053 fdf9b3e8 bellard
/* 0011nnnnmmmm0001 0011dddddddddddd fmov.d <F_REG_M>,@(<DISP12>,<REG_N>) */
1054 fdf9b3e8 bellard
{"fmov.d",{DX_REG_M,A_DISP_REG_N},{HEX_3,REG_N,REG_M,HEX_1,HEX_3,DISP1_12BY8}, arch_sh2a_up | arch_op32},
1055 fdf9b3e8 bellard
/* 0011nnnnmmmm0001 0111dddddddddddd fmov.d @(<DISP12>,<REG_M>),F_REG_N */
1056 fdf9b3e8 bellard
{"fmov.d",{A_DISP_REG_M,DX_REG_N},{HEX_3,REG_N,REG_M,HEX_1,HEX_7,DISP0_12BY8}, arch_sh2a_up | arch_op32},
1057 fdf9b3e8 bellard
1058 fdf9b3e8 bellard
/* 1111nnnnmmmm1000 fmov.s @<REG_M>,<F_REG_N>*/{"fmov.s",{A_IND_M,F_REG_N},{HEX_F,REG_N,REG_M,HEX_8}, arch_sh2e_up},
1059 fdf9b3e8 bellard
1060 fdf9b3e8 bellard
/* 1111nnnnmmmm1010 fmov.s <F_REG_M>,@<REG_N>*/{"fmov.s",{F_REG_M,A_IND_N},{HEX_F,REG_N,REG_M,HEX_A}, arch_sh2e_up},
1061 fdf9b3e8 bellard
1062 fdf9b3e8 bellard
/* 1111nnnnmmmm1001 fmov.s @<REG_M>+,<F_REG_N>*/{"fmov.s",{A_INC_M,F_REG_N},{HEX_F,REG_N,REG_M,HEX_9}, arch_sh2e_up},
1063 fdf9b3e8 bellard
1064 fdf9b3e8 bellard
/* 1111nnnnmmmm1011 fmov.s <F_REG_M>,@-<REG_N>*/{"fmov.s",{F_REG_M,A_DEC_N},{HEX_F,REG_N,REG_M,HEX_B}, arch_sh2e_up},
1065 fdf9b3e8 bellard
1066 fdf9b3e8 bellard
/* 1111nnnnmmmm0110 fmov.s @(R0,<REG_M>),<F_REG_N>*/{"fmov.s",{A_IND_R0_REG_M,F_REG_N},{HEX_F,REG_N,REG_M,HEX_6}, arch_sh2e_up},
1067 fdf9b3e8 bellard
1068 fdf9b3e8 bellard
/* 1111nnnnmmmm0111 fmov.s <F_REG_M>,@(R0,<REG_N>)*/{"fmov.s",{F_REG_M,A_IND_R0_REG_N},{HEX_F,REG_N,REG_M,HEX_7}, arch_sh2e_up},
1069 fdf9b3e8 bellard
/* 0011nnnnmmmm0001 0011dddddddddddd fmov.s <F_REG_M>,@(<DISP12>,<REG_N>) */
1070 fdf9b3e8 bellard
{"fmov.s",{F_REG_M,A_DISP_REG_N},{HEX_3,REG_N,REG_M,HEX_1,HEX_3,DISP1_12BY4}, arch_sh2a_up | arch_op32},
1071 fdf9b3e8 bellard
/* 0011nnnnmmmm0001 0111dddddddddddd fmov.s @(<DISP12>,<REG_M>),F_REG_N */
1072 fdf9b3e8 bellard
{"fmov.s",{A_DISP_REG_M,F_REG_N},{HEX_3,REG_N,REG_M,HEX_1,HEX_7,DISP0_12BY4}, arch_sh2a_up | arch_op32},
1073 fdf9b3e8 bellard
1074 fdf9b3e8 bellard
/* 1111nnnnmmmm0010 fmul <F_REG_M>,<F_REG_N>*/{"fmul",{F_REG_M,F_REG_N},{HEX_F,REG_N,REG_M,HEX_2}, arch_sh2e_up},
1075 fdf9b3e8 bellard
/* 1111nnn0mmm00010 fmul <D_REG_M>,<D_REG_N>*/{"fmul",{D_REG_M,D_REG_N},{HEX_F,REG_N,REG_M,HEX_2}, arch_sh4_up | arch_sh2a_up},
1076 fdf9b3e8 bellard
1077 fdf9b3e8 bellard
/* 1111nnnn01001101 fneg <F_REG_N>     */{"fneg",{F_REG_N},{HEX_F,REG_N,HEX_4,HEX_D}, arch_sh2e_up},
1078 fdf9b3e8 bellard
/* 1111nnn001001101 fneg <D_REG_N>     */{"fneg",{D_REG_N},{HEX_F,REG_N,HEX_4,HEX_D}, arch_sh4_up | arch_sh2a_up},
1079 fdf9b3e8 bellard
1080 fdf9b3e8 bellard
/* 1111011111111101 fpchg               */{"fpchg",{0},{HEX_F,HEX_7,HEX_F,HEX_D}, arch_sh4a_up},
1081 fdf9b3e8 bellard
1082 fdf9b3e8 bellard
/* 1111101111111101 frchg               */{"frchg",{0},{HEX_F,HEX_B,HEX_F,HEX_D}, arch_sh4_up},
1083 fdf9b3e8 bellard
1084 fdf9b3e8 bellard
/* 1111nnn011111101 fsca FPUL,<D_REG_N> */{"fsca",{FPUL_M,D_REG_N},{HEX_F,REG_N_D,HEX_F,HEX_D}, arch_sh4_up},
1085 fdf9b3e8 bellard
1086 fdf9b3e8 bellard
/* 1111001111111101 fschg               */{"fschg",{0},{HEX_F,HEX_3,HEX_F,HEX_D}, arch_sh4_up | arch_sh2a_up},
1087 fdf9b3e8 bellard
1088 fdf9b3e8 bellard
/* 1111nnnn01101101 fsqrt <F_REG_N>    */{"fsqrt",{F_REG_N},{HEX_F,REG_N,HEX_6,HEX_D}, arch_sh3e_up | arch_sh2a_up},
1089 fdf9b3e8 bellard
/* 1111nnn001101101 fsqrt <D_REG_N>    */{"fsqrt",{D_REG_N},{HEX_F,REG_N,HEX_6,HEX_D}, arch_sh4_up | arch_sh2a_up},
1090 fdf9b3e8 bellard
1091 fdf9b3e8 bellard
/* 1111nnnn01111101 fsrra <F_REG_N>    */{"fsrra",{F_REG_N},{HEX_F,REG_N,HEX_7,HEX_D}, arch_sh4_up},
1092 fdf9b3e8 bellard
1093 fdf9b3e8 bellard
/* 1111nnnn00001101 fsts FPUL,<F_REG_N>*/{"fsts",{FPUL_M,F_REG_N},{HEX_F,REG_N,HEX_0,HEX_D}, arch_sh2e_up},
1094 fdf9b3e8 bellard
1095 fdf9b3e8 bellard
/* 1111nnnnmmmm0001 fsub <F_REG_M>,<F_REG_N>*/{"fsub",{F_REG_M,F_REG_N},{HEX_F,REG_N,REG_M,HEX_1}, arch_sh2e_up},
1096 fdf9b3e8 bellard
/* 1111nnn0mmm00001 fsub <D_REG_M>,<D_REG_N>*/{"fsub",{D_REG_M,D_REG_N},{HEX_F,REG_N,REG_M,HEX_1}, arch_sh4_up | arch_sh2a_up},
1097 fdf9b3e8 bellard
1098 fdf9b3e8 bellard
/* 1111nnnn00111101 ftrc <F_REG_N>,FPUL*/{"ftrc",{F_REG_N,FPUL_M},{HEX_F,REG_N,HEX_3,HEX_D}, arch_sh2e_up},
1099 fdf9b3e8 bellard
/* 1111nnnn00111101 ftrc <D_REG_N>,FPUL*/{"ftrc",{D_REG_N,FPUL_M},{HEX_F,REG_N,HEX_3,HEX_D}, arch_sh4_up | arch_sh2a_up},
1100 fdf9b3e8 bellard
1101 fdf9b3e8 bellard
/* 1111nn0111111101 ftrv XMTRX_M4,<V_REG_n>*/{"ftrv",{XMTRX_M4,V_REG_N},{HEX_F,REG_N_B01,HEX_F,HEX_D}, arch_sh4_up},
1102 fdf9b3e8 bellard
1103 fdf9b3e8 bellard
  /* 10000110nnnn0iii bclr #<imm>, <REG_N> */  {"bclr",{A_IMM, A_REG_N},{HEX_8,HEX_6,REG_N,IMM0_3c}, arch_sh2a_nofpu_up},
1104 fdf9b3e8 bellard
  /* 0011nnnn0iii1001 0000dddddddddddd bclr.b #<imm>,@(<DISP12>,<REG_N>) */
1105 fdf9b3e8 bellard
{"bclr.b",{A_IMM,A_DISP_REG_N},{HEX_3,REG_N,IMM0_3Uc,HEX_9,HEX_0,DISP1_12}, arch_sh2a_nofpu_up | arch_op32},
1106 fdf9b3e8 bellard
  /* 10000111nnnn1iii bld #<imm>, <REG_N> */   {"bld",{A_IMM, A_REG_N},{HEX_8,HEX_7,REG_N,IMM0_3s}, arch_sh2a_nofpu_up},
1107 fdf9b3e8 bellard
  /* 0011nnnn0iii1001 0011dddddddddddd bld.b #<imm>,@(<DISP12>,<REG_N>) */
1108 fdf9b3e8 bellard
{"bld.b",{A_IMM,A_DISP_REG_N},{HEX_3,REG_N,IMM0_3Uc,HEX_9,HEX_3,DISP1_12}, arch_sh2a_nofpu_up | arch_op32},
1109 fdf9b3e8 bellard
  /* 10000110nnnn1iii bset #<imm>, <REG_N> */  {"bset",{A_IMM, A_REG_N},{HEX_8,HEX_6,REG_N,IMM0_3s}, arch_sh2a_nofpu_up},
1110 fdf9b3e8 bellard
  /* 0011nnnn0iii1001 0001dddddddddddd bset.b #<imm>,@(<DISP12>,<REG_N>) */
1111 fdf9b3e8 bellard
{"bset.b",{A_IMM,A_DISP_REG_N},{HEX_3,REG_N,IMM0_3Uc,HEX_9,HEX_1,DISP1_12}, arch_sh2a_nofpu_up | arch_op32},
1112 fdf9b3e8 bellard
  /* 10000111nnnn0iii bst #<imm>, <REG_N> */   {"bst",{A_IMM, A_REG_N},{HEX_8,HEX_7,REG_N,IMM0_3c}, arch_sh2a_nofpu_up},
1113 fdf9b3e8 bellard
  /* 0011nnnn0iii1001 0010dddddddddddd bst.b #<imm>,@(<DISP12>,<REG_N>) */
1114 fdf9b3e8 bellard
{"bst.b",{A_IMM,A_DISP_REG_N},{HEX_3,REG_N,IMM0_3Uc,HEX_9,HEX_2,DISP1_12}, arch_sh2a_nofpu_up | arch_op32},
1115 fdf9b3e8 bellard
  /* 0100nnnn10010001 clips.b <REG_N> */       {"clips.b",{A_REG_N},{HEX_4,REG_N,HEX_9,HEX_1}, arch_sh2a_nofpu_up},
1116 fdf9b3e8 bellard
  /* 0100nnnn10010101 clips.w <REG_N> */       {"clips.w",{A_REG_N},{HEX_4,REG_N,HEX_9,HEX_5}, arch_sh2a_nofpu_up},
1117 fdf9b3e8 bellard
  /* 0100nnnn10000001 clipu.b <REG_N> */       {"clipu.b",{A_REG_N},{HEX_4,REG_N,HEX_8,HEX_1}, arch_sh2a_nofpu_up},
1118 fdf9b3e8 bellard
  /* 0100nnnn10000101 clipu.w <REG_N> */       {"clipu.w",{A_REG_N},{HEX_4,REG_N,HEX_8,HEX_5}, arch_sh2a_nofpu_up},
1119 fdf9b3e8 bellard
  /* 0100nnnn10010100 divs R0,<REG_N> */       {"divs",{A_R0,A_REG_N},{HEX_4,REG_N,HEX_9,HEX_4}, arch_sh2a_nofpu_up},
1120 fdf9b3e8 bellard
  /* 0100nnnn10000100 divu R0,<REG_N> */       {"divu",{A_R0,A_REG_N},{HEX_4,REG_N,HEX_8,HEX_4}, arch_sh2a_nofpu_up},
1121 fdf9b3e8 bellard
  /* 0100mmmm01001011 jsr/n @<REG_M>  */       {"jsr/n",{A_IND_M},{HEX_4,REG_M,HEX_4,HEX_B}, arch_sh2a_nofpu_up},
1122 fdf9b3e8 bellard
  /* 10000011dddddddd jsr/n @@(<disp>,TBR) */  {"jsr/n",{A_DISP2_TBR},{HEX_8,HEX_3,IMM0_8BY4}, arch_sh2a_nofpu_up},
1123 fdf9b3e8 bellard
  /* 0100mmmm11100101 ldbank @<REG_M>,R0 */    {"ldbank",{A_IND_M,A_R0},{HEX_4,REG_M,HEX_E,HEX_5}, arch_sh2a_nofpu_up},
1124 fdf9b3e8 bellard
  /* 0100mmmm11110001 movml.l <REG_M>,@-R15 */ {"movml.l",{A_REG_M,A_DEC_R15},{HEX_4,REG_M,HEX_F,HEX_1}, arch_sh2a_nofpu_up},
1125 fdf9b3e8 bellard
  /* 0100mmmm11110101 movml.l @R15+,<REG_M> */ {"movml.l",{A_INC_R15,A_REG_M},{HEX_4,REG_M,HEX_F,HEX_5}, arch_sh2a_nofpu_up},
1126 fdf9b3e8 bellard
  /* 0100mmmm11110000 movml.l <REG_M>,@-R15 */ {"movmu.l",{A_REG_M,A_DEC_R15},{HEX_4,REG_M,HEX_F,HEX_0}, arch_sh2a_nofpu_up},
1127 fdf9b3e8 bellard
  /* 0100mmmm11110100 movml.l @R15+,<REG_M> */ {"movmu.l",{A_INC_R15,A_REG_M},{HEX_4,REG_M,HEX_F,HEX_4}, arch_sh2a_nofpu_up},
1128 fdf9b3e8 bellard
  /* 0000nnnn00111001 movrt <REG_N> */         {"movrt",{A_REG_N},{HEX_0,REG_N,HEX_3,HEX_9}, arch_sh2a_nofpu_up},
1129 fdf9b3e8 bellard
  /* 0100nnnn10000000 mulr R0,<REG_N> */       {"mulr",{A_R0,A_REG_N},{HEX_4,REG_N,HEX_8,HEX_0}, arch_sh2a_nofpu_up},
1130 fdf9b3e8 bellard
  /* 0000000001101000 nott */                  {"nott",{A_END},{HEX_0,HEX_0,HEX_6,HEX_8}, arch_sh2a_nofpu_up},
1131 fdf9b3e8 bellard
  /* 0000000001011011 resbank */               {"resbank",{A_END},{HEX_0,HEX_0,HEX_5,HEX_B}, arch_sh2a_nofpu_up},
1132 fdf9b3e8 bellard
  /* 0000000001101011 rts/n */                 {"rts/n",{A_END},{HEX_0,HEX_0,HEX_6,HEX_B}, arch_sh2a_nofpu_up},
1133 fdf9b3e8 bellard
  /* 0000mmmm01111011 rtv/n <REG_M>*/          {"rtv/n",{A_REG_M},{HEX_0,REG_M,HEX_7,HEX_B}, arch_sh2a_nofpu_up},
1134 fdf9b3e8 bellard
  /* 0100nnnn11100001 stbank R0,@<REG_N>*/     {"stbank",{A_R0,A_IND_N},{HEX_4,REG_N,HEX_E,HEX_1}, arch_sh2a_nofpu_up},
1135 fdf9b3e8 bellard
1136 fdf9b3e8 bellard
/* 0011nnnn0iii1001 0100dddddddddddd band.b #<imm>,@(<DISP12>,<REG_N>) */
1137 fdf9b3e8 bellard
{"band.b",{A_IMM,A_DISP_REG_N},{HEX_3,REG_N,IMM0_3Uc,HEX_9,HEX_4,DISP1_12}, arch_sh2a_nofpu_up | arch_op32},
1138 fdf9b3e8 bellard
/* 0011nnnn0iii1001 1100dddddddddddd bandnot.b #<imm>,@(<DISP12>,<REG_N>) */
1139 fdf9b3e8 bellard
{"bandnot.b",{A_IMM,A_DISP_REG_N},{HEX_3,REG_N,IMM0_3Uc,HEX_9,HEX_C,DISP1_12}, arch_sh2a_nofpu_up | arch_op32},
1140 fdf9b3e8 bellard
/* 0011nnnn0iii1001 1011dddddddddddd bldnot.b #<imm>,@(<DISP12>,<REG_N>) */
1141 fdf9b3e8 bellard
{"bldnot.b",{A_IMM,A_DISP_REG_N},{HEX_3,REG_N,IMM0_3Uc,HEX_9,HEX_B,DISP1_12}, arch_sh2a_nofpu_up | arch_op32},
1142 fdf9b3e8 bellard
/* 0011nnnn0iii1001 0101dddddddddddd bor.b #<imm>,@(<DISP12>,<REG_N>) */
1143 fdf9b3e8 bellard
{"bor.b",{A_IMM,A_DISP_REG_N},{HEX_3,REG_N,IMM0_3Uc,HEX_9,HEX_5,DISP1_12}, arch_sh2a_nofpu_up | arch_op32},
1144 fdf9b3e8 bellard
/* 0011nnnn0iii1001 1101dddddddddddd bornot.b #<imm>,@(<DISP12>,<REG_N>) */
1145 fdf9b3e8 bellard
{"bornot.b",{A_IMM,A_DISP_REG_N},{HEX_3,REG_N,IMM0_3Uc,HEX_9,HEX_D,DISP1_12}, arch_sh2a_nofpu_up | arch_op32},
1146 fdf9b3e8 bellard
/* 0011nnnn0iii1001 0110dddddddddddd bxor.b #<imm>,@(<DISP12>,<REG_N>) */
1147 fdf9b3e8 bellard
{"bxor.b",{A_IMM,A_DISP_REG_N},{HEX_3,REG_N,IMM0_3Uc,HEX_9,HEX_6,DISP1_12}, arch_sh2a_nofpu_up | arch_op32},
1148 fdf9b3e8 bellard
/* 0000nnnniiii0000 iiiiiiiiiiiiiiii movi20 #<imm>,<REG_N> */
1149 fdf9b3e8 bellard
{"movi20",{A_IMM,A_REG_N},{HEX_0,REG_N,IMM0_20_4,HEX_0,IMM0_20}, arch_sh2a_nofpu_up | arch_op32},
1150 fdf9b3e8 bellard
/* 0000nnnniiii0001 iiiiiiiiiiiiiiii movi20s #<imm>,<REG_N> */
1151 fdf9b3e8 bellard
{"movi20s",{A_IMM,A_REG_N},{HEX_0,REG_N,IMM0_20_4,HEX_1,IMM0_20BY8}, arch_sh2a_nofpu_up | arch_op32},
1152 fdf9b3e8 bellard
/* 0011nnnnmmmm0001 1000dddddddddddd movu.b @(<DISP12>,<REG_M>),<REG_N> */
1153 fdf9b3e8 bellard
{"movu.b",{A_DISP_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_1,HEX_8,DISP0_12}, arch_sh2a_nofpu_up | arch_op32},
1154 fdf9b3e8 bellard
/* 0011nnnnmmmm0001 1001dddddddddddd movu.w @(<DISP12>,<REG_M>),<REG_N> */
1155 fdf9b3e8 bellard
{"movu.w",{A_DISP_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_1,HEX_9,DISP0_12BY2}, arch_sh2a_nofpu_up | arch_op32},
1156 fdf9b3e8 bellard
1157 5fafdf24 ths
{ 0, {0}, {0}, 0 }
1158 fdf9b3e8 bellard
};
1159 fdf9b3e8 bellard
1160 fdf9b3e8 bellard
#endif
1161 fdf9b3e8 bellard
1162 fdf9b3e8 bellard
#ifdef ARCH_all
1163 fdf9b3e8 bellard
#define INCLUDE_SHMEDIA
1164 fdf9b3e8 bellard
#endif
1165 fdf9b3e8 bellard
1166 fdf9b3e8 bellard
static void print_movxy
1167 9262f384 Juan Quintela
  (const sh_opcode_info *, int, int, fprintf_ftype, void *);
1168 9262f384 Juan Quintela
static void print_insn_ddt (int, struct disassemble_info *);
1169 9262f384 Juan Quintela
static void print_dsp_reg (int, fprintf_ftype, void *);
1170 9262f384 Juan Quintela
static void print_insn_ppi (int, struct disassemble_info *);
1171 fdf9b3e8 bellard
1172 fdf9b3e8 bellard
static void
1173 668a38fc Juan Quintela
print_movxy (const sh_opcode_info *op, int rn, int rm,
1174 668a38fc Juan Quintela
             fprintf_ftype fprintf_fn, void *stream)
1175 fdf9b3e8 bellard
{
1176 fdf9b3e8 bellard
  int n;
1177 fdf9b3e8 bellard
1178 fdf9b3e8 bellard
  fprintf_fn (stream, "%s\t", op->name);
1179 fdf9b3e8 bellard
  for (n = 0; n < 2; n++)
1180 fdf9b3e8 bellard
    {
1181 fdf9b3e8 bellard
      switch (op->arg[n])
1182 fdf9b3e8 bellard
        {
1183 fdf9b3e8 bellard
        case A_IND_N:
1184 fdf9b3e8 bellard
        case AX_IND_N:
1185 fdf9b3e8 bellard
        case AXY_IND_N:
1186 fdf9b3e8 bellard
        case AY_IND_N:
1187 fdf9b3e8 bellard
        case AYX_IND_N:
1188 fdf9b3e8 bellard
          fprintf_fn (stream, "@r%d", rn);
1189 fdf9b3e8 bellard
          break;
1190 fdf9b3e8 bellard
        case A_INC_N:
1191 fdf9b3e8 bellard
        case AX_INC_N:
1192 fdf9b3e8 bellard
        case AXY_INC_N:
1193 fdf9b3e8 bellard
        case AY_INC_N:
1194 fdf9b3e8 bellard
        case AYX_INC_N:
1195 fdf9b3e8 bellard
          fprintf_fn (stream, "@r%d+", rn);
1196 fdf9b3e8 bellard
          break;
1197 fdf9b3e8 bellard
        case AX_PMOD_N:
1198 fdf9b3e8 bellard
        case AXY_PMOD_N:
1199 fdf9b3e8 bellard
          fprintf_fn (stream, "@r%d+r8", rn);
1200 fdf9b3e8 bellard
          break;
1201 fdf9b3e8 bellard
        case AY_PMOD_N:
1202 fdf9b3e8 bellard
        case AYX_PMOD_N:
1203 fdf9b3e8 bellard
          fprintf_fn (stream, "@r%d+r9", rn);
1204 fdf9b3e8 bellard
          break;
1205 fdf9b3e8 bellard
        case DSP_REG_A_M:
1206 fdf9b3e8 bellard
          fprintf_fn (stream, "a%c", '0' + rm);
1207 fdf9b3e8 bellard
          break;
1208 fdf9b3e8 bellard
        case DSP_REG_X:
1209 fdf9b3e8 bellard
          fprintf_fn (stream, "x%c", '0' + rm);
1210 fdf9b3e8 bellard
          break;
1211 fdf9b3e8 bellard
        case DSP_REG_Y:
1212 fdf9b3e8 bellard
          fprintf_fn (stream, "y%c", '0' + rm);
1213 fdf9b3e8 bellard
          break;
1214 fdf9b3e8 bellard
        case DSP_REG_AX:
1215 fdf9b3e8 bellard
          fprintf_fn (stream, "%c%c",
1216 fdf9b3e8 bellard
                      (rm & 1) ? 'x' : 'a',
1217 fdf9b3e8 bellard
                      (rm & 2) ? '1' : '0');
1218 fdf9b3e8 bellard
          break;
1219 fdf9b3e8 bellard
        case DSP_REG_XY:
1220 fdf9b3e8 bellard
          fprintf_fn (stream, "%c%c",
1221 fdf9b3e8 bellard
                      (rm & 1) ? 'y' : 'x',
1222 fdf9b3e8 bellard
                      (rm & 2) ? '1' : '0');
1223 fdf9b3e8 bellard
          break;
1224 fdf9b3e8 bellard
        case DSP_REG_AY:
1225 fdf9b3e8 bellard
          fprintf_fn (stream, "%c%c",
1226 fdf9b3e8 bellard
                      (rm & 2) ? 'y' : 'a',
1227 fdf9b3e8 bellard
                      (rm & 1) ? '1' : '0');
1228 fdf9b3e8 bellard
          break;
1229 fdf9b3e8 bellard
        case DSP_REG_YX:
1230 fdf9b3e8 bellard
          fprintf_fn (stream, "%c%c",
1231 fdf9b3e8 bellard
                      (rm & 2) ? 'x' : 'y',
1232 fdf9b3e8 bellard
                      (rm & 1) ? '1' : '0');
1233 fdf9b3e8 bellard
          break;
1234 fdf9b3e8 bellard
        default:
1235 fdf9b3e8 bellard
          abort ();
1236 fdf9b3e8 bellard
        }
1237 fdf9b3e8 bellard
      if (n == 0)
1238 fdf9b3e8 bellard
        fprintf_fn (stream, ",");
1239 fdf9b3e8 bellard
    }
1240 fdf9b3e8 bellard
}
1241 fdf9b3e8 bellard
1242 fdf9b3e8 bellard
/* Print a double data transfer insn.  INSN is just the lower three
1243 fdf9b3e8 bellard
   nibbles of the insn, i.e. field a and the bit that indicates if
1244 fdf9b3e8 bellard
   a parallel processing insn follows.
1245 fdf9b3e8 bellard
   Return nonzero if a field b of a parallel processing insns follows.  */
1246 fdf9b3e8 bellard
1247 fdf9b3e8 bellard
static void
1248 668a38fc Juan Quintela
print_insn_ddt (int insn, struct disassemble_info *info)
1249 fdf9b3e8 bellard
{
1250 fdf9b3e8 bellard
  fprintf_ftype fprintf_fn = info->fprintf_func;
1251 fdf9b3e8 bellard
  void *stream = info->stream;
1252 fdf9b3e8 bellard
1253 fdf9b3e8 bellard
  /* If this is just a nop, make sure to emit something.  */
1254 fdf9b3e8 bellard
  if (insn == 0x000)
1255 fdf9b3e8 bellard
    fprintf_fn (stream, "nopx\tnopy");
1256 fdf9b3e8 bellard
1257 fdf9b3e8 bellard
  /* If a parallel processing insn was printed before,
1258 fdf9b3e8 bellard
     and we got a non-nop, emit a tab.  */
1259 fdf9b3e8 bellard
  if ((insn & 0x800) && (insn & 0x3ff))
1260 fdf9b3e8 bellard
    fprintf_fn (stream, "\t");
1261 fdf9b3e8 bellard
1262 fdf9b3e8 bellard
  /* Check if either the x or y part is invalid.  */
1263 fdf9b3e8 bellard
  if (((insn & 0xc) == 0 && (insn & 0x2a0))
1264 fdf9b3e8 bellard
      || ((insn & 3) == 0 && (insn & 0x150)))
1265 fdf9b3e8 bellard
    if (info->mach != bfd_mach_sh_dsp
1266 fdf9b3e8 bellard
        && info->mach != bfd_mach_sh3_dsp)
1267 fdf9b3e8 bellard
      {
1268 fdf9b3e8 bellard
        static const sh_opcode_info *first_movx, *first_movy;
1269 fdf9b3e8 bellard
        const sh_opcode_info *op;
1270 fdf9b3e8 bellard
        int is_movy;
1271 fdf9b3e8 bellard
1272 fdf9b3e8 bellard
        if (! first_movx)
1273 fdf9b3e8 bellard
          {
1274 fdf9b3e8 bellard
            for (first_movx = sh_table; first_movx->nibbles[1] != MOVX_NOPY;)
1275 fdf9b3e8 bellard
              first_movx++;
1276 fdf9b3e8 bellard
            for (first_movy = first_movx; first_movy->nibbles[1] != MOVY_NOPX;)
1277 fdf9b3e8 bellard
              first_movy++;
1278 fdf9b3e8 bellard
          }
1279 fdf9b3e8 bellard
1280 fdf9b3e8 bellard
        is_movy = ((insn & 3) != 0);
1281 fdf9b3e8 bellard
1282 fdf9b3e8 bellard
        if (is_movy)
1283 fdf9b3e8 bellard
          op = first_movy;
1284 fdf9b3e8 bellard
        else
1285 fdf9b3e8 bellard
          op = first_movx;
1286 fdf9b3e8 bellard
1287 fdf9b3e8 bellard
        while (op->nibbles[2] != (unsigned) ((insn >> 4) & 3)
1288 fdf9b3e8 bellard
               || op->nibbles[3] != (unsigned) (insn & 0xf))
1289 fdf9b3e8 bellard
          op++;
1290 5fafdf24 ths
1291 fdf9b3e8 bellard
        print_movxy (op,
1292 fdf9b3e8 bellard
                     (4 * ((insn & (is_movy ? 0x200 : 0x100)) == 0)
1293 fdf9b3e8 bellard
                      + 2 * is_movy
1294 fdf9b3e8 bellard
                      + 1 * ((insn & (is_movy ? 0x100 : 0x200)) != 0)),
1295 fdf9b3e8 bellard
                     (insn >> 6) & 3,
1296 fdf9b3e8 bellard
                     fprintf_fn, stream);
1297 fdf9b3e8 bellard
      }
1298 fdf9b3e8 bellard
    else
1299 fdf9b3e8 bellard
      fprintf_fn (stream, ".word 0x%x", insn);
1300 fdf9b3e8 bellard
  else
1301 fdf9b3e8 bellard
    {
1302 fdf9b3e8 bellard
      static const sh_opcode_info *first_movx, *first_movy;
1303 fdf9b3e8 bellard
      const sh_opcode_info *opx, *opy;
1304 fdf9b3e8 bellard
      unsigned int insn_x, insn_y;
1305 fdf9b3e8 bellard
1306 fdf9b3e8 bellard
      if (! first_movx)
1307 fdf9b3e8 bellard
        {
1308 fdf9b3e8 bellard
          for (first_movx = sh_table; first_movx->nibbles[1] != MOVX;)
1309 fdf9b3e8 bellard
            first_movx++;
1310 fdf9b3e8 bellard
          for (first_movy = first_movx; first_movy->nibbles[1] != MOVY;)
1311 fdf9b3e8 bellard
            first_movy++;
1312 fdf9b3e8 bellard
        }
1313 fdf9b3e8 bellard
      insn_x = (insn >> 2) & 0xb;
1314 fdf9b3e8 bellard
      if (insn_x)
1315 fdf9b3e8 bellard
        {
1316 fdf9b3e8 bellard
          for (opx = first_movx; opx->nibbles[2] != insn_x;)
1317 fdf9b3e8 bellard
            opx++;
1318 fdf9b3e8 bellard
          print_movxy (opx, ((insn >> 9) & 1) + 4, (insn >> 7) & 1,
1319 fdf9b3e8 bellard
                       fprintf_fn, stream);
1320 fdf9b3e8 bellard
        }
1321 fdf9b3e8 bellard
      insn_y = (insn & 3) | ((insn >> 1) & 8);
1322 fdf9b3e8 bellard
      if (insn_y)
1323 fdf9b3e8 bellard
        {
1324 fdf9b3e8 bellard
          if (insn_x)
1325 fdf9b3e8 bellard
            fprintf_fn (stream, "\t");
1326 fdf9b3e8 bellard
          for (opy = first_movy; opy->nibbles[2] != insn_y;)
1327 fdf9b3e8 bellard
            opy++;
1328 fdf9b3e8 bellard
          print_movxy (opy, ((insn >> 8) & 1) + 6, (insn >> 6) & 1,
1329 fdf9b3e8 bellard
                       fprintf_fn, stream);
1330 fdf9b3e8 bellard
        }
1331 fdf9b3e8 bellard
    }
1332 fdf9b3e8 bellard
}
1333 fdf9b3e8 bellard
1334 fdf9b3e8 bellard
static void
1335 668a38fc Juan Quintela
print_dsp_reg (int rm, fprintf_ftype fprintf_fn, void *stream)
1336 fdf9b3e8 bellard
{
1337 fdf9b3e8 bellard
  switch (rm)
1338 fdf9b3e8 bellard
    {
1339 fdf9b3e8 bellard
    case A_A1_NUM:
1340 fdf9b3e8 bellard
      fprintf_fn (stream, "a1");
1341 fdf9b3e8 bellard
      break;
1342 fdf9b3e8 bellard
    case A_A0_NUM:
1343 fdf9b3e8 bellard
      fprintf_fn (stream, "a0");
1344 fdf9b3e8 bellard
      break;
1345 fdf9b3e8 bellard
    case A_X0_NUM:
1346 fdf9b3e8 bellard
      fprintf_fn (stream, "x0");
1347 fdf9b3e8 bellard
      break;
1348 fdf9b3e8 bellard
    case A_X1_NUM:
1349 fdf9b3e8 bellard
      fprintf_fn (stream, "x1");
1350 fdf9b3e8 bellard
      break;
1351 fdf9b3e8 bellard
    case A_Y0_NUM:
1352 fdf9b3e8 bellard
      fprintf_fn (stream, "y0");
1353 fdf9b3e8 bellard
      break;
1354 fdf9b3e8 bellard
    case A_Y1_NUM:
1355 fdf9b3e8 bellard
      fprintf_fn (stream, "y1");
1356 fdf9b3e8 bellard
      break;
1357 fdf9b3e8 bellard
    case A_M0_NUM:
1358 fdf9b3e8 bellard
      fprintf_fn (stream, "m0");
1359 fdf9b3e8 bellard
      break;
1360 fdf9b3e8 bellard
    case A_A1G_NUM:
1361 fdf9b3e8 bellard
      fprintf_fn (stream, "a1g");
1362 fdf9b3e8 bellard
      break;
1363 fdf9b3e8 bellard
    case A_M1_NUM:
1364 fdf9b3e8 bellard
      fprintf_fn (stream, "m1");
1365 fdf9b3e8 bellard
      break;
1366 fdf9b3e8 bellard
    case A_A0G_NUM:
1367 fdf9b3e8 bellard
      fprintf_fn (stream, "a0g");
1368 fdf9b3e8 bellard
      break;
1369 fdf9b3e8 bellard
    default:
1370 fdf9b3e8 bellard
      fprintf_fn (stream, "0x%x", rm);
1371 fdf9b3e8 bellard
      break;
1372 fdf9b3e8 bellard
    }
1373 fdf9b3e8 bellard
}
1374 fdf9b3e8 bellard
1375 fdf9b3e8 bellard
static void
1376 668a38fc Juan Quintela
print_insn_ppi (int field_b, struct disassemble_info *info)
1377 fdf9b3e8 bellard
{
1378 7ccfb2eb blueswir1
  static const char *sx_tab[] = { "x0", "x1", "a0", "a1" };
1379 7ccfb2eb blueswir1
  static const char *sy_tab[] = { "y0", "y1", "m0", "m1" };
1380 fdf9b3e8 bellard
  fprintf_ftype fprintf_fn = info->fprintf_func;
1381 fdf9b3e8 bellard
  void *stream = info->stream;
1382 fdf9b3e8 bellard
  unsigned int nib1, nib2, nib3;
1383 fdf9b3e8 bellard
  unsigned int altnib1, nib4;
1384 7ccfb2eb blueswir1
  const char *dc = NULL;
1385 fdf9b3e8 bellard
  const sh_opcode_info *op;
1386 fdf9b3e8 bellard
1387 fdf9b3e8 bellard
  if ((field_b & 0xe800) == 0)
1388 fdf9b3e8 bellard
    {
1389 fdf9b3e8 bellard
      fprintf_fn (stream, "psh%c\t#%d,",
1390 fdf9b3e8 bellard
                  field_b & 0x1000 ? 'a' : 'l',
1391 fdf9b3e8 bellard
                  (field_b >> 4) & 127);
1392 fdf9b3e8 bellard
      print_dsp_reg (field_b & 0xf, fprintf_fn, stream);
1393 fdf9b3e8 bellard
      return;
1394 fdf9b3e8 bellard
    }
1395 fdf9b3e8 bellard
  if ((field_b & 0xc000) == 0x4000 && (field_b & 0x3000) != 0x1000)
1396 fdf9b3e8 bellard
    {
1397 7ccfb2eb blueswir1
      static const char *du_tab[] = { "x0", "y0", "a0", "a1" };
1398 7ccfb2eb blueswir1
      static const char *se_tab[] = { "x0", "x1", "y0", "a1" };
1399 7ccfb2eb blueswir1
      static const char *sf_tab[] = { "y0", "y1", "x0", "a1" };
1400 7ccfb2eb blueswir1
      static const char *sg_tab[] = { "m0", "m1", "a0", "a1" };
1401 fdf9b3e8 bellard
1402 fdf9b3e8 bellard
      if (field_b & 0x2000)
1403 fdf9b3e8 bellard
        {
1404 fdf9b3e8 bellard
          fprintf_fn (stream, "p%s %s,%s,%s\t",
1405 fdf9b3e8 bellard
                      (field_b & 0x1000) ? "add" : "sub",
1406 fdf9b3e8 bellard
                      sx_tab[(field_b >> 6) & 3],
1407 fdf9b3e8 bellard
                      sy_tab[(field_b >> 4) & 3],
1408 fdf9b3e8 bellard
                      du_tab[(field_b >> 0) & 3]);
1409 fdf9b3e8 bellard
        }
1410 fdf9b3e8 bellard
      else if ((field_b & 0xf0) == 0x10
1411 fdf9b3e8 bellard
               && info->mach != bfd_mach_sh_dsp
1412 fdf9b3e8 bellard
               && info->mach != bfd_mach_sh3_dsp)
1413 fdf9b3e8 bellard
        {
1414 fdf9b3e8 bellard
          fprintf_fn (stream, "pclr %s \t", du_tab[(field_b >> 0) & 3]);
1415 fdf9b3e8 bellard
        }
1416 fdf9b3e8 bellard
      else if ((field_b & 0xf3) != 0)
1417 fdf9b3e8 bellard
        {
1418 fdf9b3e8 bellard
          fprintf_fn (stream, ".word 0x%x\t", field_b);
1419 fdf9b3e8 bellard
        }
1420 fdf9b3e8 bellard
      fprintf_fn (stream, "pmuls%c%s,%s,%s",
1421 fdf9b3e8 bellard
                  field_b & 0x2000 ? ' ' : '\t',
1422 fdf9b3e8 bellard
                  se_tab[(field_b >> 10) & 3],
1423 fdf9b3e8 bellard
                  sf_tab[(field_b >>  8) & 3],
1424 fdf9b3e8 bellard
                  sg_tab[(field_b >>  2) & 3]);
1425 fdf9b3e8 bellard
      return;
1426 fdf9b3e8 bellard
    }
1427 fdf9b3e8 bellard
1428 fdf9b3e8 bellard
  nib1 = PPIC;
1429 fdf9b3e8 bellard
  nib2 = field_b >> 12 & 0xf;
1430 fdf9b3e8 bellard
  nib3 = field_b >> 8 & 0xf;
1431 fdf9b3e8 bellard
  nib4 = field_b >> 4 & 0xf;
1432 fdf9b3e8 bellard
  switch (nib3 & 0x3)
1433 fdf9b3e8 bellard
    {
1434 fdf9b3e8 bellard
    case 0:
1435 fdf9b3e8 bellard
      dc = "";
1436 fdf9b3e8 bellard
      nib1 = PPI3;
1437 fdf9b3e8 bellard
      break;
1438 fdf9b3e8 bellard
    case 1:
1439 fdf9b3e8 bellard
      dc = "";
1440 fdf9b3e8 bellard
      break;
1441 fdf9b3e8 bellard
    case 2:
1442 fdf9b3e8 bellard
      dc = "dct ";
1443 fdf9b3e8 bellard
      nib3 -= 1;
1444 fdf9b3e8 bellard
      break;
1445 fdf9b3e8 bellard
    case 3:
1446 fdf9b3e8 bellard
      dc = "dcf ";
1447 fdf9b3e8 bellard
      nib3 -= 2;
1448 fdf9b3e8 bellard
      break;
1449 fdf9b3e8 bellard
    }
1450 fdf9b3e8 bellard
  if (nib1 == PPI3)
1451 fdf9b3e8 bellard
    altnib1 = PPI3NC;
1452 fdf9b3e8 bellard
  else
1453 fdf9b3e8 bellard
    altnib1 = nib1;
1454 fdf9b3e8 bellard
  for (op = sh_table; op->name; op++)
1455 fdf9b3e8 bellard
    {
1456 fdf9b3e8 bellard
      if ((op->nibbles[1] == nib1 || op->nibbles[1] == altnib1)
1457 fdf9b3e8 bellard
          && op->nibbles[2] == nib2
1458 fdf9b3e8 bellard
          && op->nibbles[3] == nib3)
1459 fdf9b3e8 bellard
        {
1460 fdf9b3e8 bellard
          int n;
1461 fdf9b3e8 bellard
1462 fdf9b3e8 bellard
          switch (op->nibbles[4])
1463 fdf9b3e8 bellard
            {
1464 fdf9b3e8 bellard
            case HEX_0:
1465 fdf9b3e8 bellard
              break;
1466 fdf9b3e8 bellard
            case HEX_XX00:
1467 fdf9b3e8 bellard
              if ((nib4 & 3) != 0)
1468 fdf9b3e8 bellard
                continue;
1469 fdf9b3e8 bellard
              break;
1470 fdf9b3e8 bellard
            case HEX_1:
1471 fdf9b3e8 bellard
              if ((nib4 & 3) != 1)
1472 fdf9b3e8 bellard
                continue;
1473 fdf9b3e8 bellard
              break;
1474 fdf9b3e8 bellard
            case HEX_00YY:
1475 fdf9b3e8 bellard
              if ((nib4 & 0xc) != 0)
1476 fdf9b3e8 bellard
                continue;
1477 fdf9b3e8 bellard
              break;
1478 fdf9b3e8 bellard
            case HEX_4:
1479 fdf9b3e8 bellard
              if ((nib4 & 0xc) != 4)
1480 fdf9b3e8 bellard
                continue;
1481 fdf9b3e8 bellard
              break;
1482 fdf9b3e8 bellard
            default:
1483 fdf9b3e8 bellard
              abort ();
1484 fdf9b3e8 bellard
            }
1485 fdf9b3e8 bellard
          fprintf_fn (stream, "%s%s\t", dc, op->name);
1486 fdf9b3e8 bellard
          for (n = 0; n < 3 && op->arg[n] != A_END; n++)
1487 fdf9b3e8 bellard
            {
1488 fdf9b3e8 bellard
              if (n && op->arg[1] != A_END)
1489 fdf9b3e8 bellard
                fprintf_fn (stream, ",");
1490 fdf9b3e8 bellard
              switch (op->arg[n])
1491 fdf9b3e8 bellard
                {
1492 fdf9b3e8 bellard
                case DSP_REG_N:
1493 fdf9b3e8 bellard
                  print_dsp_reg (field_b & 0xf, fprintf_fn, stream);
1494 fdf9b3e8 bellard
                  break;
1495 fdf9b3e8 bellard
                case DSP_REG_X:
1496 c8160fab Stefan Weil
                  fprintf_fn (stream, "%s", sx_tab[(field_b >> 6) & 3]);
1497 fdf9b3e8 bellard
                  break;
1498 fdf9b3e8 bellard
                case DSP_REG_Y:
1499 c8160fab Stefan Weil
                  fprintf_fn (stream, "%s", sy_tab[(field_b >> 4) & 3]);
1500 fdf9b3e8 bellard
                  break;
1501 fdf9b3e8 bellard
                case A_MACH:
1502 fdf9b3e8 bellard
                  fprintf_fn (stream, "mach");
1503 fdf9b3e8 bellard
                  break;
1504 fdf9b3e8 bellard
                case A_MACL:
1505 fdf9b3e8 bellard
                  fprintf_fn (stream, "macl");
1506 fdf9b3e8 bellard
                  break;
1507 fdf9b3e8 bellard
                default:
1508 fdf9b3e8 bellard
                  abort ();
1509 fdf9b3e8 bellard
                }
1510 fdf9b3e8 bellard
            }
1511 fdf9b3e8 bellard
          return;
1512 fdf9b3e8 bellard
        }
1513 fdf9b3e8 bellard
    }
1514 fdf9b3e8 bellard
  /* Not found.  */
1515 fdf9b3e8 bellard
  fprintf_fn (stream, ".word 0x%x", field_b);
1516 fdf9b3e8 bellard
}
1517 fdf9b3e8 bellard
1518 fdf9b3e8 bellard
/* FIXME mvs: movx insns print as ".word 0x%03x", insn & 0xfff
1519 fdf9b3e8 bellard
   (ie. the upper nibble is missing).  */
1520 fdf9b3e8 bellard
int
1521 668a38fc Juan Quintela
print_insn_sh (bfd_vma memaddr, struct disassemble_info *info)
1522 fdf9b3e8 bellard
{
1523 fdf9b3e8 bellard
  fprintf_ftype fprintf_fn = info->fprintf_func;
1524 fdf9b3e8 bellard
  void *stream = info->stream;
1525 fdf9b3e8 bellard
  unsigned char insn[4];
1526 fdf9b3e8 bellard
  unsigned char nibs[8];
1527 fdf9b3e8 bellard
  int status;
1528 fdf9b3e8 bellard
  bfd_vma relmask = ~(bfd_vma) 0;
1529 fdf9b3e8 bellard
  const sh_opcode_info *op;
1530 fdf9b3e8 bellard
  unsigned int target_arch;
1531 fdf9b3e8 bellard
  int allow_op32;
1532 fdf9b3e8 bellard
1533 fdf9b3e8 bellard
  switch (info->mach)
1534 fdf9b3e8 bellard
    {
1535 fdf9b3e8 bellard
    case bfd_mach_sh:
1536 fdf9b3e8 bellard
      target_arch = arch_sh1;
1537 fdf9b3e8 bellard
      break;
1538 fdf9b3e8 bellard
    case bfd_mach_sh4:
1539 fdf9b3e8 bellard
      target_arch = arch_sh4;
1540 fdf9b3e8 bellard
      break;
1541 fdf9b3e8 bellard
    case bfd_mach_sh5:
1542 fdf9b3e8 bellard
#ifdef INCLUDE_SHMEDIA
1543 fdf9b3e8 bellard
      status = print_insn_sh64 (memaddr, info);
1544 fdf9b3e8 bellard
      if (status != -2)
1545 fdf9b3e8 bellard
        return status;
1546 fdf9b3e8 bellard
#endif
1547 fdf9b3e8 bellard
      /* When we get here for sh64, it's because we want to disassemble
1548 fdf9b3e8 bellard
         SHcompact, i.e. arch_sh4.  */
1549 fdf9b3e8 bellard
      target_arch = arch_sh4;
1550 fdf9b3e8 bellard
      break;
1551 fdf9b3e8 bellard
    default:
1552 fdf9b3e8 bellard
      fprintf (stderr, "sh architecture not supported\n");
1553 fdf9b3e8 bellard
      return -1;
1554 fdf9b3e8 bellard
    }
1555 fdf9b3e8 bellard
1556 fdf9b3e8 bellard
  status = info->read_memory_func (memaddr, insn, 2, info);
1557 fdf9b3e8 bellard
1558 fdf9b3e8 bellard
  if (status != 0)
1559 fdf9b3e8 bellard
    {
1560 fdf9b3e8 bellard
      info->memory_error_func (status, memaddr, info);
1561 fdf9b3e8 bellard
      return -1;
1562 fdf9b3e8 bellard
    }
1563 fdf9b3e8 bellard
1564 fdf9b3e8 bellard
  if (info->endian == BFD_ENDIAN_LITTLE)
1565 fdf9b3e8 bellard
    {
1566 fdf9b3e8 bellard
      nibs[0] = (insn[1] >> 4) & 0xf;
1567 fdf9b3e8 bellard
      nibs[1] = insn[1] & 0xf;
1568 fdf9b3e8 bellard
1569 fdf9b3e8 bellard
      nibs[2] = (insn[0] >> 4) & 0xf;
1570 fdf9b3e8 bellard
      nibs[3] = insn[0] & 0xf;
1571 fdf9b3e8 bellard
    }
1572 fdf9b3e8 bellard
  else
1573 fdf9b3e8 bellard
    {
1574 fdf9b3e8 bellard
      nibs[0] = (insn[0] >> 4) & 0xf;
1575 fdf9b3e8 bellard
      nibs[1] = insn[0] & 0xf;
1576 fdf9b3e8 bellard
1577 fdf9b3e8 bellard
      nibs[2] = (insn[1] >> 4) & 0xf;
1578 fdf9b3e8 bellard
      nibs[3] = insn[1] & 0xf;
1579 fdf9b3e8 bellard
    }
1580 fdf9b3e8 bellard
  status = info->read_memory_func (memaddr + 2, insn + 2, 2, info);
1581 fdf9b3e8 bellard
  if (status != 0)
1582 fdf9b3e8 bellard
    allow_op32 = 0;
1583 fdf9b3e8 bellard
  else
1584 fdf9b3e8 bellard
    {
1585 fdf9b3e8 bellard
      allow_op32 = 1;
1586 fdf9b3e8 bellard
1587 fdf9b3e8 bellard
      if (info->endian == BFD_ENDIAN_LITTLE)
1588 fdf9b3e8 bellard
        {
1589 fdf9b3e8 bellard
          nibs[4] = (insn[3] >> 4) & 0xf;
1590 fdf9b3e8 bellard
          nibs[5] = insn[3] & 0xf;
1591 fdf9b3e8 bellard
1592 fdf9b3e8 bellard
          nibs[6] = (insn[2] >> 4) & 0xf;
1593 fdf9b3e8 bellard
          nibs[7] = insn[2] & 0xf;
1594 fdf9b3e8 bellard
        }
1595 fdf9b3e8 bellard
      else
1596 fdf9b3e8 bellard
        {
1597 fdf9b3e8 bellard
          nibs[4] = (insn[2] >> 4) & 0xf;
1598 fdf9b3e8 bellard
          nibs[5] = insn[2] & 0xf;
1599 fdf9b3e8 bellard
1600 fdf9b3e8 bellard
          nibs[6] = (insn[3] >> 4) & 0xf;
1601 fdf9b3e8 bellard
          nibs[7] = insn[3] & 0xf;
1602 fdf9b3e8 bellard
        }
1603 fdf9b3e8 bellard
    }
1604 fdf9b3e8 bellard
1605 fdf9b3e8 bellard
  if (nibs[0] == 0xf && (nibs[1] & 4) == 0
1606 fdf9b3e8 bellard
      && SH_MERGE_ARCH_SET_VALID (target_arch, arch_sh_dsp_up))
1607 fdf9b3e8 bellard
    {
1608 fdf9b3e8 bellard
      if (nibs[1] & 8)
1609 fdf9b3e8 bellard
        {
1610 fdf9b3e8 bellard
          int field_b;
1611 fdf9b3e8 bellard
1612 fdf9b3e8 bellard
          status = info->read_memory_func (memaddr + 2, insn, 2, info);
1613 fdf9b3e8 bellard
1614 fdf9b3e8 bellard
          if (status != 0)
1615 fdf9b3e8 bellard
            {
1616 fdf9b3e8 bellard
              info->memory_error_func (status, memaddr + 2, info);
1617 fdf9b3e8 bellard
              return -1;
1618 fdf9b3e8 bellard
            }
1619 fdf9b3e8 bellard
1620 fdf9b3e8 bellard
          if (info->endian == BFD_ENDIAN_LITTLE)
1621 fdf9b3e8 bellard
            field_b = insn[1] << 8 | insn[0];
1622 fdf9b3e8 bellard
          else
1623 fdf9b3e8 bellard
            field_b = insn[0] << 8 | insn[1];
1624 fdf9b3e8 bellard
1625 fdf9b3e8 bellard
          print_insn_ppi (field_b, info);
1626 fdf9b3e8 bellard
          print_insn_ddt ((nibs[1] << 8) | (nibs[2] << 4) | nibs[3], info);
1627 fdf9b3e8 bellard
          return 4;
1628 fdf9b3e8 bellard
        }
1629 fdf9b3e8 bellard
      print_insn_ddt ((nibs[1] << 8) | (nibs[2] << 4) | nibs[3], info);
1630 fdf9b3e8 bellard
      return 2;
1631 fdf9b3e8 bellard
    }
1632 fdf9b3e8 bellard
  for (op = sh_table; op->name; op++)
1633 fdf9b3e8 bellard
    {
1634 fdf9b3e8 bellard
      int n;
1635 fdf9b3e8 bellard
      int imm = 0;
1636 fdf9b3e8 bellard
      int rn = 0;
1637 fdf9b3e8 bellard
      int rm = 0;
1638 fdf9b3e8 bellard
      int rb = 0;
1639 fdf9b3e8 bellard
      int disp_pc;
1640 fdf9b3e8 bellard
      bfd_vma disp_pc_addr = 0;
1641 fdf9b3e8 bellard
      int disp = 0;
1642 fdf9b3e8 bellard
      int has_disp = 0;
1643 fdf9b3e8 bellard
      int max_n = SH_MERGE_ARCH_SET (op->arch, arch_op32) ? 8 : 4;
1644 fdf9b3e8 bellard
1645 fdf9b3e8 bellard
      if (!allow_op32
1646 fdf9b3e8 bellard
          && SH_MERGE_ARCH_SET (op->arch, arch_op32))
1647 fdf9b3e8 bellard
        goto fail;
1648 fdf9b3e8 bellard
1649 fdf9b3e8 bellard
      if (!SH_MERGE_ARCH_SET_VALID (op->arch, target_arch))
1650 fdf9b3e8 bellard
        goto fail;
1651 fdf9b3e8 bellard
      for (n = 0; n < max_n; n++)
1652 fdf9b3e8 bellard
        {
1653 fdf9b3e8 bellard
          int i = op->nibbles[n];
1654 fdf9b3e8 bellard
1655 fdf9b3e8 bellard
          if (i < 16)
1656 fdf9b3e8 bellard
            {
1657 fdf9b3e8 bellard
              if (nibs[n] == i)
1658 fdf9b3e8 bellard
                continue;
1659 fdf9b3e8 bellard
              goto fail;
1660 fdf9b3e8 bellard
            }
1661 fdf9b3e8 bellard
          switch (i)
1662 fdf9b3e8 bellard
            {
1663 fdf9b3e8 bellard
            case BRANCH_8:
1664 fdf9b3e8 bellard
              imm = (nibs[2] << 4) | (nibs[3]);
1665 fdf9b3e8 bellard
              if (imm & 0x80)
1666 fdf9b3e8 bellard
                imm |= ~0xff;
1667 fdf9b3e8 bellard
              imm = ((char) imm) * 2 + 4;
1668 fdf9b3e8 bellard
              goto ok;
1669 fdf9b3e8 bellard
            case BRANCH_12:
1670 fdf9b3e8 bellard
              imm = ((nibs[1]) << 8) | (nibs[2] << 4) | (nibs[3]);
1671 fdf9b3e8 bellard
              if (imm & 0x800)
1672 fdf9b3e8 bellard
                imm |= ~0xfff;
1673 fdf9b3e8 bellard
              imm = imm * 2 + 4;
1674 fdf9b3e8 bellard
              goto ok;
1675 fdf9b3e8 bellard
            case IMM0_3c:
1676 fdf9b3e8 bellard
              if (nibs[3] & 0x8)
1677 fdf9b3e8 bellard
                goto fail;
1678 fdf9b3e8 bellard
              imm = nibs[3] & 0x7;
1679 fdf9b3e8 bellard
              break;
1680 fdf9b3e8 bellard
            case IMM0_3s:
1681 fdf9b3e8 bellard
              if (!(nibs[3] & 0x8))
1682 fdf9b3e8 bellard
                goto fail;
1683 fdf9b3e8 bellard
              imm = nibs[3] & 0x7;
1684 fdf9b3e8 bellard
              break;
1685 fdf9b3e8 bellard
            case IMM0_3Uc:
1686 fdf9b3e8 bellard
              if (nibs[2] & 0x8)
1687 fdf9b3e8 bellard
                goto fail;
1688 fdf9b3e8 bellard
              imm = nibs[2] & 0x7;
1689 fdf9b3e8 bellard
              break;
1690 fdf9b3e8 bellard
            case IMM0_3Us:
1691 fdf9b3e8 bellard
              if (!(nibs[2] & 0x8))
1692 fdf9b3e8 bellard
                goto fail;
1693 fdf9b3e8 bellard
              imm = nibs[2] & 0x7;
1694 fdf9b3e8 bellard
              break;
1695 fdf9b3e8 bellard
            case DISP0_12:
1696 fdf9b3e8 bellard
            case DISP1_12:
1697 fdf9b3e8 bellard
              disp = (nibs[5] << 8) | (nibs[6] << 4) | nibs[7];
1698 fdf9b3e8 bellard
              has_disp = 1;
1699 fdf9b3e8 bellard
              goto ok;
1700 fdf9b3e8 bellard
            case DISP0_12BY2:
1701 fdf9b3e8 bellard
            case DISP1_12BY2:
1702 fdf9b3e8 bellard
              disp = ((nibs[5] << 8) | (nibs[6] << 4) | nibs[7]) << 1;
1703 fdf9b3e8 bellard
              relmask = ~(bfd_vma) 1;
1704 fdf9b3e8 bellard
              has_disp = 1;
1705 fdf9b3e8 bellard
              goto ok;
1706 fdf9b3e8 bellard
            case DISP0_12BY4:
1707 fdf9b3e8 bellard
            case DISP1_12BY4:
1708 fdf9b3e8 bellard
              disp = ((nibs[5] << 8) | (nibs[6] << 4) | nibs[7]) << 2;
1709 fdf9b3e8 bellard
              relmask = ~(bfd_vma) 3;
1710 fdf9b3e8 bellard
              has_disp = 1;
1711 fdf9b3e8 bellard
              goto ok;
1712 fdf9b3e8 bellard
            case DISP0_12BY8:
1713 fdf9b3e8 bellard
            case DISP1_12BY8:
1714 fdf9b3e8 bellard
              disp = ((nibs[5] << 8) | (nibs[6] << 4) | nibs[7]) << 3;
1715 fdf9b3e8 bellard
              relmask = ~(bfd_vma) 7;
1716 fdf9b3e8 bellard
              has_disp = 1;
1717 fdf9b3e8 bellard
              goto ok;
1718 fdf9b3e8 bellard
            case IMM0_20_4:
1719 fdf9b3e8 bellard
              break;
1720 fdf9b3e8 bellard
            case IMM0_20:
1721 fdf9b3e8 bellard
              imm = ((nibs[2] << 16) | (nibs[4] << 12) | (nibs[5] << 8)
1722 fdf9b3e8 bellard
                     | (nibs[6] << 4) | nibs[7]);
1723 fdf9b3e8 bellard
              if (imm & 0x80000)
1724 fdf9b3e8 bellard
                imm -= 0x100000;
1725 fdf9b3e8 bellard
              goto ok;
1726 fdf9b3e8 bellard
            case IMM0_20BY8:
1727 fdf9b3e8 bellard
              imm = ((nibs[2] << 16) | (nibs[4] << 12) | (nibs[5] << 8)
1728 fdf9b3e8 bellard
                     | (nibs[6] << 4) | nibs[7]);
1729 fdf9b3e8 bellard
              imm <<= 8;
1730 fdf9b3e8 bellard
              if (imm & 0x8000000)
1731 fdf9b3e8 bellard
                imm -= 0x10000000;
1732 fdf9b3e8 bellard
              goto ok;
1733 fdf9b3e8 bellard
            case IMM0_4:
1734 fdf9b3e8 bellard
            case IMM1_4:
1735 fdf9b3e8 bellard
              imm = nibs[3];
1736 fdf9b3e8 bellard
              goto ok;
1737 fdf9b3e8 bellard
            case IMM0_4BY2:
1738 fdf9b3e8 bellard
            case IMM1_4BY2:
1739 fdf9b3e8 bellard
              imm = nibs[3] << 1;
1740 fdf9b3e8 bellard
              goto ok;
1741 fdf9b3e8 bellard
            case IMM0_4BY4:
1742 fdf9b3e8 bellard
            case IMM1_4BY4:
1743 fdf9b3e8 bellard
              imm = nibs[3] << 2;
1744 fdf9b3e8 bellard
              goto ok;
1745 fdf9b3e8 bellard
            case IMM0_8:
1746 fdf9b3e8 bellard
            case IMM1_8:
1747 fdf9b3e8 bellard
              imm = (nibs[2] << 4) | nibs[3];
1748 fdf9b3e8 bellard
              disp = imm;
1749 fdf9b3e8 bellard
              has_disp = 1;
1750 fdf9b3e8 bellard
              if (imm & 0x80)
1751 fdf9b3e8 bellard
                imm -= 0x100;
1752 fdf9b3e8 bellard
              goto ok;
1753 fdf9b3e8 bellard
            case PCRELIMM_8BY2:
1754 fdf9b3e8 bellard
              imm = ((nibs[2] << 4) | nibs[3]) << 1;
1755 fdf9b3e8 bellard
              relmask = ~(bfd_vma) 1;
1756 fdf9b3e8 bellard
              goto ok;
1757 fdf9b3e8 bellard
            case PCRELIMM_8BY4:
1758 fdf9b3e8 bellard
              imm = ((nibs[2] << 4) | nibs[3]) << 2;
1759 fdf9b3e8 bellard
              relmask = ~(bfd_vma) 3;
1760 fdf9b3e8 bellard
              goto ok;
1761 fdf9b3e8 bellard
            case IMM0_8BY2:
1762 fdf9b3e8 bellard
            case IMM1_8BY2:
1763 fdf9b3e8 bellard
              imm = ((nibs[2] << 4) | nibs[3]) << 1;
1764 fdf9b3e8 bellard
              goto ok;
1765 fdf9b3e8 bellard
            case IMM0_8BY4:
1766 fdf9b3e8 bellard
            case IMM1_8BY4:
1767 fdf9b3e8 bellard
              imm = ((nibs[2] << 4) | nibs[3]) << 2;
1768 fdf9b3e8 bellard
              goto ok;
1769 fdf9b3e8 bellard
            case REG_N_D:
1770 fdf9b3e8 bellard
              if ((nibs[n] & 1) != 0)
1771 fdf9b3e8 bellard
                goto fail;
1772 fdf9b3e8 bellard
              /* fall through */
1773 fdf9b3e8 bellard
            case REG_N:
1774 fdf9b3e8 bellard
              rn = nibs[n];
1775 fdf9b3e8 bellard
              break;
1776 fdf9b3e8 bellard
            case REG_M:
1777 fdf9b3e8 bellard
              rm = nibs[n];
1778 fdf9b3e8 bellard
              break;
1779 fdf9b3e8 bellard
            case REG_N_B01:
1780 fdf9b3e8 bellard
              if ((nibs[n] & 0x3) != 1 /* binary 01 */)
1781 fdf9b3e8 bellard
                goto fail;
1782 fdf9b3e8 bellard
              rn = (nibs[n] & 0xc) >> 2;
1783 fdf9b3e8 bellard
              break;
1784 fdf9b3e8 bellard
            case REG_NM:
1785 fdf9b3e8 bellard
              rn = (nibs[n] & 0xc) >> 2;
1786 fdf9b3e8 bellard
              rm = (nibs[n] & 0x3);
1787 fdf9b3e8 bellard
              break;
1788 fdf9b3e8 bellard
            case REG_B:
1789 fdf9b3e8 bellard
              rb = nibs[n] & 0x07;
1790 fdf9b3e8 bellard
              break;
1791 fdf9b3e8 bellard
            case SDT_REG_N:
1792 fdf9b3e8 bellard
              /* sh-dsp: single data transfer.  */
1793 fdf9b3e8 bellard
              rn = nibs[n];
1794 fdf9b3e8 bellard
              if ((rn & 0xc) != 4)
1795 fdf9b3e8 bellard
                goto fail;
1796 fdf9b3e8 bellard
              rn = rn & 0x3;
1797 fdf9b3e8 bellard
              rn |= (!(rn & 2)) << 2;
1798 fdf9b3e8 bellard
              break;
1799 fdf9b3e8 bellard
            case PPI:
1800 fdf9b3e8 bellard
            case REPEAT:
1801 fdf9b3e8 bellard
              goto fail;
1802 fdf9b3e8 bellard
            default:
1803 fdf9b3e8 bellard
              abort ();
1804 fdf9b3e8 bellard
            }
1805 fdf9b3e8 bellard
        }
1806 fdf9b3e8 bellard
1807 fdf9b3e8 bellard
    ok:
1808 fdf9b3e8 bellard
      /* sh2a has D_REG but not X_REG.  We don't know the pattern
1809 fdf9b3e8 bellard
         doesn't match unless we check the output args to see if they
1810 fdf9b3e8 bellard
         make sense.  */
1811 fdf9b3e8 bellard
      if (target_arch == arch_sh2a
1812 fdf9b3e8 bellard
          && ((op->arg[0] == DX_REG_M && (rm & 1) != 0)
1813 fdf9b3e8 bellard
              || (op->arg[1] == DX_REG_N && (rn & 1) != 0)))
1814 fdf9b3e8 bellard
        goto fail;
1815 fdf9b3e8 bellard
1816 fdf9b3e8 bellard
      fprintf_fn (stream, "%s\t", op->name);
1817 fdf9b3e8 bellard
      disp_pc = 0;
1818 fdf9b3e8 bellard
      for (n = 0; n < 3 && op->arg[n] != A_END; n++)
1819 fdf9b3e8 bellard
        {
1820 fdf9b3e8 bellard
          if (n && op->arg[1] != A_END)
1821 fdf9b3e8 bellard
            fprintf_fn (stream, ",");
1822 fdf9b3e8 bellard
          switch (op->arg[n])
1823 fdf9b3e8 bellard
            {
1824 fdf9b3e8 bellard
            case A_IMM:
1825 fdf9b3e8 bellard
              fprintf_fn (stream, "#%d", imm);
1826 fdf9b3e8 bellard
              break;
1827 fdf9b3e8 bellard
            case A_R0:
1828 fdf9b3e8 bellard
              fprintf_fn (stream, "r0");
1829 fdf9b3e8 bellard
              break;
1830 fdf9b3e8 bellard
            case A_REG_N:
1831 fdf9b3e8 bellard
              fprintf_fn (stream, "r%d", rn);
1832 fdf9b3e8 bellard
              break;
1833 fdf9b3e8 bellard
            case A_INC_N:
1834 fdf9b3e8 bellard
            case AS_INC_N:
1835 fdf9b3e8 bellard
              fprintf_fn (stream, "@r%d+", rn);
1836 fdf9b3e8 bellard
              break;
1837 fdf9b3e8 bellard
            case A_DEC_N:
1838 fdf9b3e8 bellard
            case AS_DEC_N:
1839 fdf9b3e8 bellard
              fprintf_fn (stream, "@-r%d", rn);
1840 fdf9b3e8 bellard
              break;
1841 fdf9b3e8 bellard
            case A_IND_N:
1842 fdf9b3e8 bellard
            case AS_IND_N:
1843 fdf9b3e8 bellard
              fprintf_fn (stream, "@r%d", rn);
1844 fdf9b3e8 bellard
              break;
1845 fdf9b3e8 bellard
            case A_DISP_REG_N:
1846 fdf9b3e8 bellard
              fprintf_fn (stream, "@(%d,r%d)", has_disp?disp:imm, rn);
1847 fdf9b3e8 bellard
              break;
1848 fdf9b3e8 bellard
            case AS_PMOD_N:
1849 fdf9b3e8 bellard
              fprintf_fn (stream, "@r%d+r8", rn);
1850 fdf9b3e8 bellard
              break;
1851 fdf9b3e8 bellard
            case A_REG_M:
1852 fdf9b3e8 bellard
              fprintf_fn (stream, "r%d", rm);
1853 fdf9b3e8 bellard
              break;
1854 fdf9b3e8 bellard
            case A_INC_M:
1855 fdf9b3e8 bellard
              fprintf_fn (stream, "@r%d+", rm);
1856 fdf9b3e8 bellard
              break;
1857 fdf9b3e8 bellard
            case A_DEC_M:
1858 fdf9b3e8 bellard
              fprintf_fn (stream, "@-r%d", rm);
1859 fdf9b3e8 bellard
              break;
1860 fdf9b3e8 bellard
            case A_IND_M:
1861 fdf9b3e8 bellard
              fprintf_fn (stream, "@r%d", rm);
1862 fdf9b3e8 bellard
              break;
1863 fdf9b3e8 bellard
            case A_DISP_REG_M:
1864 fdf9b3e8 bellard
              fprintf_fn (stream, "@(%d,r%d)", has_disp?disp:imm, rm);
1865 fdf9b3e8 bellard
              break;
1866 fdf9b3e8 bellard
            case A_REG_B:
1867 fdf9b3e8 bellard
              fprintf_fn (stream, "r%d_bank", rb);
1868 fdf9b3e8 bellard
              break;
1869 fdf9b3e8 bellard
            case A_DISP_PC:
1870 fdf9b3e8 bellard
              disp_pc = 1;
1871 fdf9b3e8 bellard
              disp_pc_addr = imm + 4 + (memaddr & relmask);
1872 fdf9b3e8 bellard
              (*info->print_address_func) (disp_pc_addr, info);
1873 fdf9b3e8 bellard
              break;
1874 fdf9b3e8 bellard
            case A_IND_R0_REG_N:
1875 fdf9b3e8 bellard
              fprintf_fn (stream, "@(r0,r%d)", rn);
1876 fdf9b3e8 bellard
              break;
1877 fdf9b3e8 bellard
            case A_IND_R0_REG_M:
1878 fdf9b3e8 bellard
              fprintf_fn (stream, "@(r0,r%d)", rm);
1879 fdf9b3e8 bellard
              break;
1880 fdf9b3e8 bellard
            case A_DISP_GBR:
1881 fdf9b3e8 bellard
              fprintf_fn (stream, "@(%d,gbr)", has_disp?disp:imm);
1882 fdf9b3e8 bellard
              break;
1883 fdf9b3e8 bellard
            case A_TBR:
1884 fdf9b3e8 bellard
              fprintf_fn (stream, "tbr");
1885 fdf9b3e8 bellard
              break;
1886 fdf9b3e8 bellard
            case A_DISP2_TBR:
1887 fdf9b3e8 bellard
              fprintf_fn (stream, "@@(%d,tbr)", has_disp?disp:imm);
1888 fdf9b3e8 bellard
              break;
1889 fdf9b3e8 bellard
            case A_INC_R15:
1890 fdf9b3e8 bellard
              fprintf_fn (stream, "@r15+");
1891 fdf9b3e8 bellard
              break;
1892 fdf9b3e8 bellard
            case A_DEC_R15:
1893 fdf9b3e8 bellard
              fprintf_fn (stream, "@-r15");
1894 fdf9b3e8 bellard
              break;
1895 fdf9b3e8 bellard
            case A_R0_GBR:
1896 fdf9b3e8 bellard
              fprintf_fn (stream, "@(r0,gbr)");
1897 fdf9b3e8 bellard
              break;
1898 fdf9b3e8 bellard
            case A_BDISP12:
1899 fdf9b3e8 bellard
            case A_BDISP8:
1900 fdf9b3e8 bellard
                {
1901 fdf9b3e8 bellard
                    bfd_vma addr;
1902 fdf9b3e8 bellard
                    addr = imm + memaddr;
1903 fdf9b3e8 bellard
                    (*info->print_address_func) (addr, info);
1904 fdf9b3e8 bellard
                }
1905 fdf9b3e8 bellard
              break;
1906 fdf9b3e8 bellard
            case A_SR:
1907 fdf9b3e8 bellard
              fprintf_fn (stream, "sr");
1908 fdf9b3e8 bellard
              break;
1909 fdf9b3e8 bellard
            case A_GBR:
1910 fdf9b3e8 bellard
              fprintf_fn (stream, "gbr");
1911 fdf9b3e8 bellard
              break;
1912 fdf9b3e8 bellard
            case A_VBR:
1913 fdf9b3e8 bellard
              fprintf_fn (stream, "vbr");
1914 fdf9b3e8 bellard
              break;
1915 fdf9b3e8 bellard
            case A_DSR:
1916 fdf9b3e8 bellard
              fprintf_fn (stream, "dsr");
1917 fdf9b3e8 bellard
              break;
1918 fdf9b3e8 bellard
            case A_MOD:
1919 fdf9b3e8 bellard
              fprintf_fn (stream, "mod");
1920 fdf9b3e8 bellard
              break;
1921 fdf9b3e8 bellard
            case A_RE:
1922 fdf9b3e8 bellard
              fprintf_fn (stream, "re");
1923 fdf9b3e8 bellard
              break;
1924 fdf9b3e8 bellard
            case A_RS:
1925 fdf9b3e8 bellard
              fprintf_fn (stream, "rs");
1926 fdf9b3e8 bellard
              break;
1927 fdf9b3e8 bellard
            case A_A0:
1928 fdf9b3e8 bellard
              fprintf_fn (stream, "a0");
1929 fdf9b3e8 bellard
              break;
1930 fdf9b3e8 bellard
            case A_X0:
1931 fdf9b3e8 bellard
              fprintf_fn (stream, "x0");
1932 fdf9b3e8 bellard
              break;
1933 fdf9b3e8 bellard
            case A_X1:
1934 fdf9b3e8 bellard
              fprintf_fn (stream, "x1");
1935 fdf9b3e8 bellard
              break;
1936 fdf9b3e8 bellard
            case A_Y0:
1937 fdf9b3e8 bellard
              fprintf_fn (stream, "y0");
1938 fdf9b3e8 bellard
              break;
1939 fdf9b3e8 bellard
            case A_Y1:
1940 fdf9b3e8 bellard
              fprintf_fn (stream, "y1");
1941 fdf9b3e8 bellard
              break;
1942 fdf9b3e8 bellard
            case DSP_REG_M:
1943 fdf9b3e8 bellard
              print_dsp_reg (rm, fprintf_fn, stream);
1944 fdf9b3e8 bellard
              break;
1945 fdf9b3e8 bellard
            case A_SSR:
1946 fdf9b3e8 bellard
              fprintf_fn (stream, "ssr");
1947 fdf9b3e8 bellard
              break;
1948 fdf9b3e8 bellard
            case A_SPC:
1949 fdf9b3e8 bellard
              fprintf_fn (stream, "spc");
1950 fdf9b3e8 bellard
              break;
1951 fdf9b3e8 bellard
            case A_MACH:
1952 fdf9b3e8 bellard
              fprintf_fn (stream, "mach");
1953 fdf9b3e8 bellard
              break;
1954 fdf9b3e8 bellard
            case A_MACL:
1955 fdf9b3e8 bellard
              fprintf_fn (stream, "macl");
1956 fdf9b3e8 bellard
              break;
1957 fdf9b3e8 bellard
            case A_PR:
1958 fdf9b3e8 bellard
              fprintf_fn (stream, "pr");
1959 fdf9b3e8 bellard
              break;
1960 fdf9b3e8 bellard
            case A_SGR:
1961 fdf9b3e8 bellard
              fprintf_fn (stream, "sgr");
1962 fdf9b3e8 bellard
              break;
1963 fdf9b3e8 bellard
            case A_DBR:
1964 fdf9b3e8 bellard
              fprintf_fn (stream, "dbr");
1965 fdf9b3e8 bellard
              break;
1966 fdf9b3e8 bellard
            case F_REG_N:
1967 fdf9b3e8 bellard
              fprintf_fn (stream, "fr%d", rn);
1968 fdf9b3e8 bellard
              break;
1969 fdf9b3e8 bellard
            case F_REG_M:
1970 fdf9b3e8 bellard
              fprintf_fn (stream, "fr%d", rm);
1971 fdf9b3e8 bellard
              break;
1972 fdf9b3e8 bellard
            case DX_REG_N:
1973 fdf9b3e8 bellard
              if (rn & 1)
1974 fdf9b3e8 bellard
                {
1975 fdf9b3e8 bellard
                  fprintf_fn (stream, "xd%d", rn & ~1);
1976 fdf9b3e8 bellard
                  break;
1977 fdf9b3e8 bellard
                }
1978 fdf9b3e8 bellard
            case D_REG_N:
1979 fdf9b3e8 bellard
              fprintf_fn (stream, "dr%d", rn);
1980 fdf9b3e8 bellard
              break;
1981 fdf9b3e8 bellard
            case DX_REG_M:
1982 fdf9b3e8 bellard
              if (rm & 1)
1983 fdf9b3e8 bellard
                {
1984 fdf9b3e8 bellard
                  fprintf_fn (stream, "xd%d", rm & ~1);
1985 fdf9b3e8 bellard
                  break;
1986 fdf9b3e8 bellard
                }
1987 fdf9b3e8 bellard
            case D_REG_M:
1988 fdf9b3e8 bellard
              fprintf_fn (stream, "dr%d", rm);
1989 fdf9b3e8 bellard
              break;
1990 fdf9b3e8 bellard
            case FPSCR_M:
1991 fdf9b3e8 bellard
            case FPSCR_N:
1992 fdf9b3e8 bellard
              fprintf_fn (stream, "fpscr");
1993 fdf9b3e8 bellard
              break;
1994 fdf9b3e8 bellard
            case FPUL_M:
1995 fdf9b3e8 bellard
            case FPUL_N:
1996 fdf9b3e8 bellard
              fprintf_fn (stream, "fpul");
1997 fdf9b3e8 bellard
              break;
1998 fdf9b3e8 bellard
            case F_FR0:
1999 fdf9b3e8 bellard
              fprintf_fn (stream, "fr0");
2000 fdf9b3e8 bellard
              break;
2001 fdf9b3e8 bellard
            case V_REG_N:
2002 fdf9b3e8 bellard
              fprintf_fn (stream, "fv%d", rn * 4);
2003 fdf9b3e8 bellard
              break;
2004 fdf9b3e8 bellard
            case V_REG_M:
2005 fdf9b3e8 bellard
              fprintf_fn (stream, "fv%d", rm * 4);
2006 fdf9b3e8 bellard
              break;
2007 fdf9b3e8 bellard
            case XMTRX_M4:
2008 fdf9b3e8 bellard
              fprintf_fn (stream, "xmtrx");
2009 fdf9b3e8 bellard
              break;
2010 fdf9b3e8 bellard
            default:
2011 fdf9b3e8 bellard
              abort ();
2012 fdf9b3e8 bellard
            }
2013 fdf9b3e8 bellard
        }
2014 fdf9b3e8 bellard
2015 fdf9b3e8 bellard
#if 0
2016 fdf9b3e8 bellard
      /* This code prints instructions in delay slots on the same line
2017 fdf9b3e8 bellard
         as the instruction which needs the delay slots.  This can be
2018 fdf9b3e8 bellard
         confusing, since other disassembler don't work this way, and
2019 fdf9b3e8 bellard
         it means that the instructions are not all in a line.  So I
2020 fdf9b3e8 bellard
         disabled it.  Ian.  */
2021 fdf9b3e8 bellard
      if (!(info->flags & 1)
2022 fdf9b3e8 bellard
          && (op->name[0] == 'j'
2023 fdf9b3e8 bellard
              || (op->name[0] == 'b'
2024 fdf9b3e8 bellard
                  && (op->name[1] == 'r'
2025 fdf9b3e8 bellard
                      || op->name[1] == 's'))
2026 fdf9b3e8 bellard
              || (op->name[0] == 'r' && op->name[1] == 't')
2027 fdf9b3e8 bellard
              || (op->name[0] == 'b' && op->name[2] == '.')))
2028 fdf9b3e8 bellard
        {
2029 fdf9b3e8 bellard
          info->flags |= 1;
2030 fdf9b3e8 bellard
          fprintf_fn (stream, "\t(slot ");
2031 fdf9b3e8 bellard
          print_insn_sh (memaddr + 2, info);
2032 fdf9b3e8 bellard
          info->flags &= ~1;
2033 fdf9b3e8 bellard
          fprintf_fn (stream, ")");
2034 fdf9b3e8 bellard
          return 4;
2035 fdf9b3e8 bellard
        }
2036 fdf9b3e8 bellard
#endif
2037 fdf9b3e8 bellard
2038 fdf9b3e8 bellard
      if (disp_pc && strcmp (op->name, "mova") != 0)
2039 fdf9b3e8 bellard
        {
2040 fdf9b3e8 bellard
          int size;
2041 fdf9b3e8 bellard
          bfd_byte bytes[4];
2042 fdf9b3e8 bellard
2043 fdf9b3e8 bellard
          if (relmask == ~(bfd_vma) 1)
2044 fdf9b3e8 bellard
            size = 2;
2045 fdf9b3e8 bellard
          else
2046 fdf9b3e8 bellard
            size = 4;
2047 fdf9b3e8 bellard
          status = info->read_memory_func (disp_pc_addr, bytes, size, info);
2048 fdf9b3e8 bellard
          if (status == 0)
2049 fdf9b3e8 bellard
            {
2050 fdf9b3e8 bellard
              unsigned int val;
2051 fdf9b3e8 bellard
2052 fdf9b3e8 bellard
              if (size == 2)
2053 fdf9b3e8 bellard
                {
2054 fdf9b3e8 bellard
                  if (info->endian == BFD_ENDIAN_LITTLE)
2055 fdf9b3e8 bellard
                    val = bfd_getl16 (bytes);
2056 fdf9b3e8 bellard
                  else
2057 fdf9b3e8 bellard
                    val = bfd_getb16 (bytes);
2058 fdf9b3e8 bellard
                }
2059 fdf9b3e8 bellard
              else
2060 fdf9b3e8 bellard
                {
2061 fdf9b3e8 bellard
                  if (info->endian == BFD_ENDIAN_LITTLE)
2062 fdf9b3e8 bellard
                    val = bfd_getl32 (bytes);
2063 fdf9b3e8 bellard
                  else
2064 fdf9b3e8 bellard
                    val = bfd_getb32 (bytes);
2065 fdf9b3e8 bellard
                }
2066 fdf9b3e8 bellard
              if ((*info->symbol_at_address_func) (val, info))
2067 fdf9b3e8 bellard
                {
2068 b4e1f077 Magnus Damm
                  fprintf_fn (stream, "\t! ");
2069 fdf9b3e8 bellard
                  (*info->print_address_func) (val, info);
2070 fdf9b3e8 bellard
                }
2071 fdf9b3e8 bellard
              else
2072 fdf9b3e8 bellard
                fprintf_fn (stream, "\t! 0x%x", val);
2073 fdf9b3e8 bellard
            }
2074 fdf9b3e8 bellard
        }
2075 fdf9b3e8 bellard
2076 fdf9b3e8 bellard
      return SH_MERGE_ARCH_SET (op->arch, arch_op32) ? 4 : 2;
2077 fdf9b3e8 bellard
    fail:
2078 fdf9b3e8 bellard
      ;
2079 fdf9b3e8 bellard
2080 fdf9b3e8 bellard
    }
2081 fdf9b3e8 bellard
  fprintf_fn (stream, ".word 0x%x%x%x%x", nibs[0], nibs[1], nibs[2], nibs[3]);
2082 fdf9b3e8 bellard
  return 2;
2083 fdf9b3e8 bellard
}