Coverage Report

Created: 2026-07-12 09:22

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/binutils-gdb/opcodes/bfin-dis.c
Line
Count
Source
1
/* Disassemble ADI Blackfin Instructions.
2
   Copyright (C) 2005-2026 Free Software Foundation, Inc.
3
4
   This file is part of libopcodes.
5
6
   This library is free software; you can redistribute it and/or modify
7
   it under the terms of the GNU General Public License as published by
8
   the Free Software Foundation; either version 3, or (at your option)
9
   any later version.
10
11
   It is distributed in the hope that it will be useful, but WITHOUT
12
   ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
13
   or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
14
   License for more details.
15
16
   You should have received a copy of the GNU General Public License
17
   along with this program; if not, write to the Free Software
18
   Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
19
   MA 02110-1301, USA.  */
20
21
#include "sysdep.h"
22
#include <stdio.h>
23
24
#include "opcode/bfin.h"
25
26
#ifndef PRINTF
27
#define PRINTF printf
28
#endif
29
30
#ifndef EXIT
31
#define EXIT exit
32
#endif
33
34
typedef long TIword;
35
36
2.90M
#define SIGNBIT(bits)       (1ul << ((bits) - 1))
37
969k
#define MASKBITS(val, bits) ((val) & ((SIGNBIT (bits) << 1) - 1))
38
969k
#define SIGNEXTEND(v, n)    ((MASKBITS (v, n) ^ SIGNBIT (n)) - SIGNBIT (n))
39
40
#include "disassemble.h"
41
42
typedef unsigned int bu32;
43
44
struct private
45
{
46
  TIword iw0;
47
  bool comment, parallel;
48
};
49
50
typedef enum
51
{
52
  c_0, c_1, c_4, c_2, c_uimm2, c_uimm3, c_imm3, c_pcrel4,
53
  c_imm4, c_uimm4s4, c_uimm4s4d, c_uimm4, c_uimm4s2, c_negimm5s4, c_imm5, c_imm5d, c_uimm5, c_imm6,
54
  c_imm7, c_imm7d, c_imm8, c_uimm8, c_pcrel8, c_uimm8s4, c_pcrel8s4, c_lppcrel10, c_pcrel10,
55
  c_pcrel12, c_imm16s4, c_luimm16, c_imm16, c_imm16d, c_huimm16, c_rimm16, c_imm16s2, c_uimm16s4,
56
  c_uimm16s4d, c_uimm16, c_pcrel24, c_uimm32, c_imm32, c_huimm32, c_huimm32e,
57
} const_forms_t;
58
59
static const struct
60
{
61
  const char *name;
62
  const int nbits;
63
  const char reloc;
64
  const char issigned;
65
  const char pcrel;
66
  const char scale;
67
  const char offset;
68
  const char negative;
69
  const char positive;
70
  const char decimal;
71
  const char leading;
72
  const char exact;
73
} constant_formats[] =
74
{
75
  { "0",          0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0},
76
  { "1",          0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0},
77
  { "4",          0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0},
78
  { "2",          0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0},
79
  { "uimm2",      2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
80
  { "uimm3",      3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
81
  { "imm3",       3, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0},
82
  { "pcrel4",     4, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0},
83
  { "imm4",       4, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0},
84
  { "uimm4s4",    4, 0, 0, 0, 2, 0, 0, 1, 0, 0, 0},
85
  { "uimm4s4d",   4, 0, 0, 0, 2, 0, 0, 1, 1, 0, 0},
86
  { "uimm4",      4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
87
  { "uimm4s2",    4, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0},
88
  { "negimm5s4",  5, 0, 1, 0, 2, 0, 1, 0, 0, 0, 0},
89
  { "imm5",       5, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0},
90
  { "imm5d",      5, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0},
91
  { "uimm5",      5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
92
  { "imm6",       6, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0},
93
  { "imm7",       7, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0},
94
  { "imm7d",      7, 0, 1, 0, 0, 0, 0, 0, 1, 3, 0},
95
  { "imm8",       8, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0},
96
  { "uimm8",      8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
97
  { "pcrel8",     8, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0},
98
  { "uimm8s4",    8, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0},
99
  { "pcrel8s4",   8, 1, 1, 1, 2, 0, 0, 0, 0, 0, 0},
100
  { "lppcrel10", 10, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0},
101
  { "pcrel10",   10, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0},
102
  { "pcrel12",   12, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0},
103
  { "imm16s4",   16, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0},
104
  { "luimm16",   16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
105
  { "imm16",     16, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0},
106
  { "imm16d",    16, 0, 1, 0, 0, 0, 0, 0, 1, 3, 0},
107
  { "huimm16",   16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
108
  { "rimm16",    16, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0},
109
  { "imm16s2",   16, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0},
110
  { "uimm16s4",  16, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0},
111
  { "uimm16s4d", 16, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0},
112
  { "uimm16",    16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
113
  { "pcrel24",   24, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0},
114
  { "uimm32",    32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
115
  { "imm32",     32, 0, 1, 0, 0, 0, 0, 0, 1, 3, 0},
116
  { "huimm32",   32, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
117
  { "huimm32e",  32, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1},
118
};
119
120
static const char *
121
fmtconst (const_forms_t cf, TIword x, bfd_vma pc, disassemble_info *outf)
122
1.25M
{
123
1.25M
  static char buf[60];
124
125
1.25M
  if (constant_formats[cf].reloc)
126
323k
    {
127
323k
      bfd_vma ea;
128
129
323k
      if (constant_formats[cf].pcrel)
130
314k
  x = SIGNEXTEND (x, constant_formats[cf].nbits);
131
323k
      ea = x + constant_formats[cf].offset;
132
323k
      ea = ea << constant_formats[cf].scale;
133
323k
      if (constant_formats[cf].pcrel)
134
314k
  ea += pc;
135
136
      /* truncate to 32-bits for proper symbol lookup/matching */
137
323k
      ea = (bu32)ea;
138
139
323k
      if (outf->symbol_at_address_func (ea, outf) || !constant_formats[cf].exact)
140
314k
  {
141
314k
    outf->print_address_func (ea, outf);
142
314k
    return "";
143
314k
  }
144
9.00k
      else
145
9.00k
  {
146
9.00k
    sprintf (buf, "%lx", (unsigned long) x);
147
9.00k
    return buf;
148
9.00k
  }
149
323k
    }
150
151
  /* Negative constants have an implied sign bit.  */
152
931k
  if (constant_formats[cf].negative)
153
22.1k
    {
154
22.1k
      int nb = constant_formats[cf].nbits + 1;
155
156
22.1k
      x = x | (1ul << constant_formats[cf].nbits);
157
22.1k
      x = SIGNEXTEND (x, nb);
158
22.1k
    }
159
909k
  else if (constant_formats[cf].issigned)
160
527k
    x = SIGNEXTEND (x, constant_formats[cf].nbits);
161
162
931k
  x += constant_formats[cf].offset;
163
931k
  x = (unsigned long) x << constant_formats[cf].scale;
164
165
931k
  if (constant_formats[cf].decimal)
166
291k
    sprintf (buf, "%*li", constant_formats[cf].leading, x);
167
640k
  else
168
640k
    {
169
640k
      if (constant_formats[cf].issigned && x < 0)
170
115k
  sprintf (buf, "-0x%lx", (unsigned long)(- x));
171
525k
      else
172
525k
  sprintf (buf, "0x%lx", (unsigned long) x);
173
640k
    }
174
175
931k
  return buf;
176
1.25M
}
177
178
static bu32
179
fmtconst_val (const_forms_t cf, unsigned int x, unsigned int pc)
180
114k
{
181
114k
  if (0 && constant_formats[cf].reloc)
182
0
    {
183
0
      bu32 ea;
184
185
0
      if (constant_formats[cf].pcrel)
186
0
  x = SIGNEXTEND (x, constant_formats[cf].nbits);
187
0
      ea = x + constant_formats[cf].offset;
188
0
      ea = ea << constant_formats[cf].scale;
189
0
      if (constant_formats[cf].pcrel)
190
0
  ea += pc;
191
192
0
      return ea;
193
0
    }
194
195
  /* Negative constants have an implied sign bit.  */
196
114k
  if (constant_formats[cf].negative)
197
0
    {
198
0
      int nb = constant_formats[cf].nbits + 1;
199
0
      x = x | (1ul << constant_formats[cf].nbits);
200
0
      x = SIGNEXTEND (x, nb);
201
0
    }
202
114k
  else if (constant_formats[cf].issigned)
203
105k
    x = SIGNEXTEND (x, constant_formats[cf].nbits);
204
205
114k
  x += constant_formats[cf].offset;
206
114k
  x <<= constant_formats[cf].scale;
207
208
114k
  return x;
209
114k
}
210
211
enum machine_registers
212
{
213
  REG_RL0, REG_RL1, REG_RL2, REG_RL3, REG_RL4, REG_RL5, REG_RL6, REG_RL7,
214
  REG_RH0, REG_RH1, REG_RH2, REG_RH3, REG_RH4, REG_RH5, REG_RH6, REG_RH7,
215
  REG_R0, REG_R1, REG_R2, REG_R3, REG_R4, REG_R5, REG_R6, REG_R7,
216
  REG_R1_0, REG_R3_2, REG_R5_4, REG_R7_6, REG_P0, REG_P1, REG_P2, REG_P3,
217
  REG_P4, REG_P5, REG_SP, REG_FP, REG_A0x, REG_A1x, REG_A0w, REG_A1w,
218
  REG_A0, REG_A1, REG_I0, REG_I1, REG_I2, REG_I3, REG_M0, REG_M1,
219
  REG_M2, REG_M3, REG_B0, REG_B1, REG_B2, REG_B3, REG_L0, REG_L1,
220
  REG_L2, REG_L3,
221
  REG_AZ, REG_AN, REG_AC0, REG_AC1, REG_AV0, REG_AV1, REG_AV0S, REG_AV1S,
222
  REG_AQ, REG_V, REG_VS,
223
  REG_sftreset, REG_omode, REG_excause, REG_emucause, REG_idle_req, REG_hwerrcause, REG_CC, REG_LC0,
224
  REG_LC1, REG_ASTAT, REG_RETS, REG_LT0, REG_LB0, REG_LT1, REG_LB1,
225
  REG_CYCLES, REG_CYCLES2, REG_USP, REG_SEQSTAT, REG_SYSCFG, REG_RETI, REG_RETX, REG_RETN,
226
  REG_RETE, REG_EMUDAT, REG_BR0, REG_BR1, REG_BR2, REG_BR3, REG_BR4, REG_BR5, REG_BR6,
227
  REG_BR7, REG_PL0, REG_PL1, REG_PL2, REG_PL3, REG_PL4, REG_PL5, REG_SLP, REG_FLP,
228
  REG_PH0, REG_PH1, REG_PH2, REG_PH3, REG_PH4, REG_PH5, REG_SHP, REG_FHP,
229
  REG_IL0, REG_IL1, REG_IL2, REG_IL3, REG_ML0, REG_ML1, REG_ML2, REG_ML3,
230
  REG_BL0, REG_BL1, REG_BL2, REG_BL3, REG_LL0, REG_LL1, REG_LL2, REG_LL3,
231
  REG_IH0, REG_IH1, REG_IH2, REG_IH3, REG_MH0, REG_MH1, REG_MH2, REG_MH3,
232
  REG_BH0, REG_BH1, REG_BH2, REG_BH3, REG_LH0, REG_LH1, REG_LH2, REG_LH3,
233
  REG_AC0_COPY, REG_V_COPY, REG_RND_MOD,
234
  REG_LASTREG,
235
};
236
237
enum reg_class
238
{
239
  rc_dregs_lo, rc_dregs_hi, rc_dregs, rc_dregs_pair, rc_pregs, rc_spfp, rc_dregs_hilo, rc_accum_ext,
240
  rc_accum_word, rc_accum, rc_iregs, rc_mregs, rc_bregs, rc_lregs, rc_dpregs, rc_gregs,
241
  rc_regs, rc_statbits, rc_ignore_bits, rc_ccstat, rc_counters, rc_dregs2_sysregs1, rc_open, rc_sysregs2,
242
  rc_sysregs3, rc_allregs,
243
  LIM_REG_CLASSES
244
};
245
246
static const char * const reg_names[] =
247
{
248
  "R0.L", "R1.L", "R2.L", "R3.L", "R4.L", "R5.L", "R6.L", "R7.L",
249
  "R0.H", "R1.H", "R2.H", "R3.H", "R4.H", "R5.H", "R6.H", "R7.H",
250
  "R0", "R1", "R2", "R3", "R4", "R5", "R6", "R7",
251
  "R1:0", "R3:2", "R5:4", "R7:6", "P0", "P1", "P2", "P3",
252
  "P4", "P5", "SP", "FP", "A0.X", "A1.X", "A0.W", "A1.W",
253
  "A0", "A1", "I0", "I1", "I2", "I3", "M0", "M1",
254
  "M2", "M3", "B0", "B1", "B2", "B3", "L0", "L1",
255
  "L2", "L3",
256
  "AZ", "AN", "AC0", "AC1", "AV0", "AV1", "AV0S", "AV1S",
257
  "AQ", "V", "VS",
258
  "sftreset", "omode", "excause", "emucause", "idle_req", "hwerrcause", "CC", "LC0",
259
  "LC1", "ASTAT", "RETS", "LT0", "LB0", "LT1", "LB1",
260
  "CYCLES", "CYCLES2", "USP", "SEQSTAT", "SYSCFG", "RETI", "RETX", "RETN",
261
  "RETE", "EMUDAT",
262
  "R0.B", "R1.B", "R2.B", "R3.B", "R4.B", "R5.B", "R6.B", "R7.B",
263
  "P0.L", "P1.L", "P2.L", "P3.L", "P4.L", "P5.L", "SP.L", "FP.L",
264
  "P0.H", "P1.H", "P2.H", "P3.H", "P4.H", "P5.H", "SP.H", "FP.H",
265
  "I0.L", "I1.L", "I2.L", "I3.L", "M0.L", "M1.L", "M2.L", "M3.L",
266
  "B0.L", "B1.L", "B2.L", "B3.L", "L0.L", "L1.L", "L2.L", "L3.L",
267
  "I0.H", "I1.H", "I2.H", "I3.H", "M0.H", "M1.H", "M2.H", "M3.H",
268
  "B0.H", "B1.H", "B2.H", "B3.H", "L0.H", "L1.H", "L2.H", "L3.H",
269
  "AC0_COPY", "V_COPY", "RND_MOD",
270
  "LASTREG",
271
  0
272
};
273
274
131k
#define REGNAME(x) ((x) < REG_LASTREG ? (reg_names[x]) : "...... Illegal register .......")
275
276
/* RL(0..7).  */
277
static const enum machine_registers decode_dregs_lo[] =
278
{
279
  REG_RL0, REG_RL1, REG_RL2, REG_RL3, REG_RL4, REG_RL5, REG_RL6, REG_RL7,
280
};
281
282
61.1k
#define dregs_lo(x) REGNAME (decode_dregs_lo[(x) & 7])
283
284
/* RH(0..7).  */
285
static const enum machine_registers decode_dregs_hi[] =
286
{
287
  REG_RH0, REG_RH1, REG_RH2, REG_RH3, REG_RH4, REG_RH5, REG_RH6, REG_RH7,
288
};
289
290
42.0k
#define dregs_hi(x) REGNAME (decode_dregs_hi[(x) & 7])
291
292
/* R(0..7).  */
293
static const enum machine_registers decode_dregs[] =
294
{
295
  REG_R0, REG_R1, REG_R2, REG_R3, REG_R4, REG_R5, REG_R6, REG_R7,
296
};
297
298
#define dregs(x) REGNAME (decode_dregs[(x) & 7])
299
300
/* R BYTE(0..7).  */
301
static const enum machine_registers decode_dregs_byte[] =
302
{
303
  REG_BR0, REG_BR1, REG_BR2, REG_BR3, REG_BR4, REG_BR5, REG_BR6, REG_BR7,
304
};
305
306
#define dregs_byte(x) REGNAME (decode_dregs_byte[(x) & 7])
307
308
/* P(0..5) SP FP.  */
309
static const enum machine_registers decode_pregs[] =
310
{
311
  REG_P0, REG_P1, REG_P2, REG_P3, REG_P4, REG_P5, REG_SP, REG_FP,
312
};
313
314
#define pregs(x)  REGNAME (decode_pregs[(x) & 7])
315
#define spfp(x)   REGNAME (decode_spfp[(x) & 1])
316
#define dregs_hilo(x, i)  REGNAME (decode_dregs_hilo[((i) << 3) | (x)])
317
#define accum_ext(x)  REGNAME (decode_accum_ext[(x) & 1])
318
#define accum_word(x) REGNAME (decode_accum_word[(x) & 1])
319
#define accum(x)  REGNAME (decode_accum[(x) & 1])
320
321
/* I(0..3).  */
322
static const enum machine_registers decode_iregs[] =
323
{
324
  REG_I0, REG_I1, REG_I2, REG_I3,
325
};
326
327
#define iregs(x) REGNAME (decode_iregs[(x) & 3])
328
329
/* M(0..3).  */
330
static const enum machine_registers decode_mregs[] =
331
{
332
  REG_M0, REG_M1, REG_M2, REG_M3,
333
};
334
335
#define mregs(x) REGNAME (decode_mregs[(x) & 3])
336
#define bregs(x) REGNAME (decode_bregs[(x) & 3])
337
#define lregs(x) REGNAME (decode_lregs[(x) & 3])
338
339
/* dregs pregs.  */
340
static const enum machine_registers decode_dpregs[] =
341
{
342
  REG_R0, REG_R1, REG_R2, REG_R3, REG_R4, REG_R5, REG_R6, REG_R7,
343
  REG_P0, REG_P1, REG_P2, REG_P3, REG_P4, REG_P5, REG_SP, REG_FP,
344
};
345
346
#define dpregs(x) REGNAME (decode_dpregs[(x) & 15])
347
348
/* [dregs pregs].  */
349
static const enum machine_registers decode_gregs[] =
350
{
351
  REG_R0, REG_R1, REG_R2, REG_R3, REG_R4, REG_R5, REG_R6, REG_R7,
352
  REG_P0, REG_P1, REG_P2, REG_P3, REG_P4, REG_P5, REG_SP, REG_FP,
353
};
354
355
#define gregs(x, i) REGNAME (decode_gregs[(((i) << 3) | (x)) & 15])
356
357
/* [dregs pregs (iregs mregs) (bregs lregs)].  */
358
static const enum machine_registers decode_regs[] =
359
{
360
  REG_R0, REG_R1, REG_R2, REG_R3, REG_R4, REG_R5, REG_R6, REG_R7,
361
  REG_P0, REG_P1, REG_P2, REG_P3, REG_P4, REG_P5, REG_SP, REG_FP,
362
  REG_I0, REG_I1, REG_I2, REG_I3, REG_M0, REG_M1, REG_M2, REG_M3,
363
  REG_B0, REG_B1, REG_B2, REG_B3, REG_L0, REG_L1, REG_L2, REG_L3,
364
};
365
366
#define regs(x, i) REGNAME (decode_regs[(((i) << 3) | (x)) & 31])
367
368
/* [dregs pregs (iregs mregs) (bregs lregs) Low Half].  */
369
static const enum machine_registers decode_regs_lo[] =
370
{
371
  REG_RL0, REG_RL1, REG_RL2, REG_RL3, REG_RL4, REG_RL5, REG_RL6, REG_RL7,
372
  REG_PL0, REG_PL1, REG_PL2, REG_PL3, REG_PL4, REG_PL5, REG_SLP, REG_FLP,
373
  REG_IL0, REG_IL1, REG_IL2, REG_IL3, REG_ML0, REG_ML1, REG_ML2, REG_ML3,
374
  REG_BL0, REG_BL1, REG_BL2, REG_BL3, REG_LL0, REG_LL1, REG_LL2, REG_LL3,
375
};
376
377
#define regs_lo(x, i) REGNAME (decode_regs_lo[(((i) << 3) | (x)) & 31])
378
379
/* [dregs pregs (iregs mregs) (bregs lregs) High Half].  */
380
static const enum machine_registers decode_regs_hi[] =
381
{
382
  REG_RH0, REG_RH1, REG_RH2, REG_RH3, REG_RH4, REG_RH5, REG_RH6, REG_RH7,
383
  REG_PH0, REG_PH1, REG_PH2, REG_PH3, REG_PH4, REG_PH5, REG_SHP, REG_FHP,
384
  REG_IH0, REG_IH1, REG_IH2, REG_IH3, REG_MH0, REG_MH1, REG_MH2, REG_MH3,
385
  REG_BH0, REG_BH1, REG_BH2, REG_BH3, REG_LH0, REG_LH1, REG_LH2, REG_LH3,
386
};
387
388
#define regs_hi(x, i) REGNAME (decode_regs_hi[(((i) << 3) | (x)) & 31])
389
390
static const enum machine_registers decode_statbits[] =
391
{
392
  REG_AZ,        REG_AN,        REG_AC0_COPY,    REG_V_COPY,
393
  REG_LASTREG,   REG_LASTREG,   REG_AQ,          REG_LASTREG,
394
  REG_RND_MOD,   REG_LASTREG,   REG_LASTREG,     REG_LASTREG,
395
  REG_AC0,       REG_AC1,       REG_LASTREG,     REG_LASTREG,
396
  REG_AV0,       REG_AV0S,      REG_AV1,         REG_AV1S,
397
  REG_LASTREG,   REG_LASTREG,   REG_LASTREG,     REG_LASTREG,
398
  REG_V,         REG_VS,        REG_LASTREG,     REG_LASTREG,
399
  REG_LASTREG,   REG_LASTREG,   REG_LASTREG,     REG_LASTREG,
400
};
401
402
28.1k
#define statbits(x) REGNAME (decode_statbits[(x) & 31])
403
404
/* LC0 LC1.  */
405
static const enum machine_registers decode_counters[] =
406
{
407
  REG_LC0, REG_LC1,
408
};
409
410
#define counters(x)        REGNAME (decode_counters[(x) & 1])
411
#define dregs2_sysregs1(x) REGNAME (decode_dregs2_sysregs1[(x) & 7])
412
413
/* [dregs pregs (iregs mregs) (bregs lregs)
414
   dregs2_sysregs1 open sysregs2 sysregs3].  */
415
static const enum machine_registers decode_allregs[] =
416
{
417
  REG_R0, REG_R1, REG_R2, REG_R3, REG_R4, REG_R5, REG_R6, REG_R7,
418
  REG_P0, REG_P1, REG_P2, REG_P3, REG_P4, REG_P5, REG_SP, REG_FP,
419
  REG_I0, REG_I1, REG_I2, REG_I3, REG_M0, REG_M1, REG_M2, REG_M3,
420
  REG_B0, REG_B1, REG_B2, REG_B3, REG_L0, REG_L1, REG_L2, REG_L3,
421
  REG_A0x, REG_A0w, REG_A1x, REG_A1w, REG_LASTREG, REG_LASTREG, REG_ASTAT, REG_RETS,
422
  REG_LASTREG, REG_LASTREG, REG_LASTREG, REG_LASTREG, REG_LASTREG, REG_LASTREG, REG_LASTREG, REG_LASTREG,
423
  REG_LC0, REG_LT0, REG_LB0, REG_LC1, REG_LT1, REG_LB1, REG_CYCLES, REG_CYCLES2,
424
  REG_USP, REG_SEQSTAT, REG_SYSCFG, REG_RETI, REG_RETX, REG_RETN, REG_RETE, REG_EMUDAT,
425
  REG_LASTREG,
426
};
427
428
78.8k
#define IS_DREG(g,r)  ((g) == 0 && (r) < 8)
429
247k
#define IS_PREG(g,r)  ((g) == 1 && (r) < 8)
430
#define IS_AREG(g,r)  ((g) == 4 && (r) >= 0 && (r) < 4)
431
#define IS_GENREG(g,r)  ((((g) == 0 || (g) == 1) && (r) < 8) || IS_AREG (g, r))
432
#define IS_DAGREG(g,r)  (((g) == 2 || (g) == 3) && (r) < 8)
433
#define IS_SYSREG(g,r) \
434
  (((g) == 4 && ((r) == 6 || (r) == 7)) || (g) == 6 || (g) == 7)
435
#define IS_RESERVEDREG(g,r) \
436
552k
  (((r) > 7) || ((g) == 4 && ((r) == 4 || (r) == 5)) || (g) == 5)
437
438
35.5k
#define allreg(r,g) (!IS_RESERVEDREG (g, r))
439
24.5k
#define mostreg(r,g)  (!(IS_DREG (g, r) || IS_PREG (g, r) || IS_RESERVEDREG (g, r)))
440
441
#define allregs(x, i) REGNAME (decode_allregs[((i) << 3) | (x)])
442
#define uimm16s4(x) fmtconst (c_uimm16s4, x, 0, outf)
443
#define uimm16s4d(x)  fmtconst (c_uimm16s4d, x, 0, outf)
444
#define pcrel4(x) fmtconst (c_pcrel4, x, pc, outf)
445
#define pcrel8(x) fmtconst (c_pcrel8, x, pc, outf)
446
#define pcrel8s4(x) fmtconst (c_pcrel8s4, x, pc, outf)
447
#define pcrel10(x)  fmtconst (c_pcrel10, x, pc, outf)
448
#define pcrel12(x)  fmtconst (c_pcrel12, x, pc, outf)
449
#define negimm5s4(x)  fmtconst (c_negimm5s4, x, 0, outf)
450
#define rimm16(x) fmtconst (c_rimm16, x, 0, outf)
451
#define huimm16(x)  fmtconst (c_huimm16, x, 0, outf)
452
#define imm16(x)  fmtconst (c_imm16, x, 0, outf)
453
#define imm16d(x) fmtconst (c_imm16d, x, 0, outf)
454
#define uimm2(x)  fmtconst (c_uimm2, x, 0, outf)
455
#define uimm3(x)  fmtconst (c_uimm3, x, 0, outf)
456
#define luimm16(x)  fmtconst (c_luimm16, x, 0, outf)
457
#define uimm4(x)  fmtconst (c_uimm4, x, 0, outf)
458
#define uimm5(x)  fmtconst (c_uimm5, x, 0, outf)
459
#define imm16s2(x)  fmtconst (c_imm16s2, x, 0, outf)
460
#define uimm8(x)  fmtconst (c_uimm8, x, 0, outf)
461
#define imm16s4(x)  fmtconst (c_imm16s4, x, 0, outf)
462
#define uimm4s2(x)  fmtconst (c_uimm4s2, x, 0, outf)
463
#define uimm4s4(x)  fmtconst (c_uimm4s4, x, 0, outf)
464
#define uimm4s4d(x) fmtconst (c_uimm4s4d, x, 0, outf)
465
#define lppcrel10(x)  fmtconst (c_lppcrel10, x, pc, outf)
466
#define imm3(x)   fmtconst (c_imm3, x, 0, outf)
467
#define imm4(x)   fmtconst (c_imm4, x, 0, outf)
468
#define uimm8s4(x)  fmtconst (c_uimm8s4, x, 0, outf)
469
#define imm5(x)   fmtconst (c_imm5, x, 0, outf)
470
#define imm5d(x)  fmtconst (c_imm5d, x, 0, outf)
471
#define imm6(x)   fmtconst (c_imm6, x, 0, outf)
472
#define imm7(x)   fmtconst (c_imm7, x, 0, outf)
473
#define imm7d(x)  fmtconst (c_imm7d, x, 0, outf)
474
#define imm8(x)   fmtconst (c_imm8, x, 0, outf)
475
#define pcrel24(x)  fmtconst (c_pcrel24, x, pc, outf)
476
#define uimm16(x) fmtconst (c_uimm16, x, 0, outf)
477
#define uimm32(x) fmtconst (c_uimm32, x, 0, outf)
478
#define imm32(x)  fmtconst (c_imm32, x, 0, outf)
479
#define huimm32(x)  fmtconst (c_huimm32, x, 0, outf)
480
#define huimm32e(x) fmtconst (c_huimm32e, x, 0, outf)
481
105k
#define imm7_val(x) fmtconst_val (c_imm7, x, 0)
482
1.75k
#define imm16_val(x)  fmtconst_val (c_uimm16, x, 0)
483
7.24k
#define luimm16_val(x)  fmtconst_val (c_luimm16, x, 0)
484
485
/* (arch.pm)arch_disassembler_functions.  */
486
#ifndef OUTS
487
12.7M
#define OUTS(p, txt) (p)->fprintf_func ((p)->stream, "%s", txt)
488
#endif
489
26.1k
#define OUT(p, txt, ...) (p)->fprintf_func ((p)->stream, txt, __VA_ARGS__)
490
491
static void
492
amod0 (int s0, int x0, disassemble_info *outf)
493
11.8k
{
494
11.8k
  if (s0 == 1 && x0 == 0)
495
1.20k
    OUTS (outf, " (S)");
496
10.6k
  else if (s0 == 0 && x0 == 1)
497
493
    OUTS (outf, " (CO)");
498
10.1k
  else if (s0 == 1 && x0 == 1)
499
2.73k
    OUTS (outf, " (SCO)");
500
11.8k
}
501
502
static void
503
amod1 (int s0, int x0, disassemble_info *outf)
504
19.1k
{
505
19.1k
  if (s0 == 0 && x0 == 0)
506
7.66k
    OUTS (outf, " (NS)");
507
11.4k
  else if (s0 == 1 && x0 == 0)
508
5.02k
    OUTS (outf, " (S)");
509
19.1k
}
510
511
static void
512
amod0amod2 (int s0, int x0, int aop0, disassemble_info *outf)
513
6.63k
{
514
6.63k
  if (s0 == 1 && x0 == 0 && aop0 == 0)
515
289
    OUTS (outf, " (S)");
516
6.34k
  else if (s0 == 0 && x0 == 1 && aop0 == 0)
517
156
    OUTS (outf, " (CO)");
518
6.19k
  else if (s0 == 1 && x0 == 1 && aop0 == 0)
519
780
    OUTS (outf, " (SCO)");
520
5.41k
  else if (s0 == 0 && x0 == 0 && aop0 == 2)
521
384
    OUTS (outf, " (ASR)");
522
5.02k
  else if (s0 == 1 && x0 == 0 && aop0 == 2)
523
222
    OUTS (outf, " (S, ASR)");
524
4.80k
  else if (s0 == 0 && x0 == 1 && aop0 == 2)
525
403
    OUTS (outf, " (CO, ASR)");
526
4.40k
  else if (s0 == 1 && x0 == 1 && aop0 == 2)
527
222
    OUTS (outf, " (SCO, ASR)");
528
4.18k
  else if (s0 == 0 && x0 == 0 && aop0 == 3)
529
1.41k
    OUTS (outf, " (ASL)");
530
2.76k
  else if (s0 == 1 && x0 == 0 && aop0 == 3)
531
185
    OUTS (outf, " (S, ASL)");
532
2.57k
  else if (s0 == 0 && x0 == 1 && aop0 == 3)
533
723
    OUTS (outf, " (CO, ASL)");
534
1.85k
  else if (s0 == 1 && x0 == 1 && aop0 == 3)
535
183
    OUTS (outf, " (SCO, ASL)");
536
6.63k
}
537
538
static void
539
searchmod (int r0, disassemble_info *outf)
540
2.20k
{
541
2.20k
  if (r0 == 0)
542
239
    OUTS (outf, "GT");
543
1.96k
  else if (r0 == 1)
544
607
    OUTS (outf, "GE");
545
1.35k
  else if (r0 == 2)
546
73
    OUTS (outf, "LT");
547
1.28k
  else if (r0 == 3)
548
1.28k
    OUTS (outf, "LE");
549
2.20k
}
550
551
static void
552
aligndir (int r0, disassemble_info *outf)
553
4.24k
{
554
4.24k
  if (r0 == 1)
555
2.33k
    OUTS (outf, " (R)");
556
4.24k
}
557
558
static int
559
decode_multfunc (int h0, int h1, int src0, int src1, disassemble_info *outf)
560
51.6k
{
561
51.6k
  const char *s0, *s1;
562
563
51.6k
  if (h0)
564
20.9k
    s0 = dregs_hi (src0);
565
30.6k
  else
566
30.6k
    s0 = dregs_lo (src0);
567
568
51.6k
  if (h1)
569
21.1k
    s1 = dregs_hi (src1);
570
30.4k
  else
571
30.4k
    s1 = dregs_lo (src1);
572
573
51.6k
  OUTS (outf, s0);
574
51.6k
  OUTS (outf, " * ");
575
51.6k
  OUTS (outf, s1);
576
51.6k
  return 0;
577
51.6k
}
578
579
static int
580
decode_macfunc (int which, int op, int h0, int h1, int src0, int src1, disassemble_info *outf)
581
40.9k
{
582
40.9k
  const char *a;
583
40.9k
  const char *sop = "<unknown op>";
584
585
40.9k
  if (which)
586
20.9k
    a = "A1";
587
20.0k
  else
588
20.0k
    a = "A0";
589
590
40.9k
  if (op == 3)
591
0
    {
592
0
      OUTS (outf, a);
593
0
      return 0;
594
0
    }
595
596
40.9k
  switch (op)
597
40.9k
    {
598
22.7k
    case 0: sop = " = ";   break;
599
10.1k
    case 1: sop = " += ";  break;
600
7.95k
    case 2: sop = " -= ";  break;
601
0
    default: break;
602
40.9k
    }
603
604
40.9k
  OUTS (outf, a);
605
40.9k
  OUTS (outf, sop);
606
40.9k
  decode_multfunc (h0, h1, src0, src1, outf);
607
608
40.9k
  return 0;
609
40.9k
}
610
611
static void
612
decode_optmode (int mod, int MM, disassemble_info *outf)
613
32.1k
{
614
32.1k
  if (mod == 0 && MM == 0)
615
6.90k
    return;
616
617
25.2k
  OUTS (outf, " (");
618
619
25.2k
  if (MM && !mod)
620
1.00k
    {
621
1.00k
      OUTS (outf, "M)");
622
1.00k
      return;
623
1.00k
    }
624
625
24.2k
  if (MM)
626
2.50k
    OUTS (outf, "M, ");
627
628
24.2k
  if (mod == M_S2RND)
629
4.64k
    OUTS (outf, "S2RND");
630
19.5k
  else if (mod == M_T)
631
855
    OUTS (outf, "T");
632
18.7k
  else if (mod == M_W32)
633
309
    OUTS (outf, "W32");
634
18.4k
  else if (mod == M_FU)
635
2.46k
    OUTS (outf, "FU");
636
15.9k
  else if (mod == M_TFU)
637
4.11k
    OUTS (outf, "TFU");
638
11.8k
  else if (mod == M_IS)
639
4.16k
    OUTS (outf, "IS");
640
7.66k
  else if (mod == M_ISS2)
641
3.47k
    OUTS (outf, "ISS2");
642
4.19k
  else if (mod == M_IH)
643
1.81k
    OUTS (outf, "IH");
644
2.37k
  else if (mod == M_IU)
645
2.37k
    OUTS (outf, "IU");
646
0
  else
647
0
    abort ();
648
649
24.2k
  OUTS (outf, ")");
650
24.2k
}
651
652
static struct saved_state
653
{
654
  bu32 dpregs[16], iregs[4], mregs[4], bregs[4], lregs[4];
655
  bu32 ax[2], aw[2];
656
  bu32 lt[2], lc[2], lb[2];
657
  bu32 rets;
658
} saved_state;
659
660
#define DREG(x)         (saved_state.dpregs[x])
661
#define GREG(x, i)      DPREG ((x) | ((i) << 3))
662
#define DPREG(x)        (saved_state.dpregs[x])
663
126k
#define DREG(x)         (saved_state.dpregs[x])
664
102k
#define PREG(x)         (saved_state.dpregs[(x) + 8])
665
#define SPREG           PREG (6)
666
#define FPREG           PREG (7)
667
1.16k
#define IREG(x)         (saved_state.iregs[x])
668
1.32k
#define MREG(x)         (saved_state.mregs[x])
669
1.48k
#define BREG(x)         (saved_state.bregs[x])
670
1.59k
#define LREG(x)         (saved_state.lregs[x])
671
0
#define AXREG(x)        (saved_state.ax[x])
672
0
#define AWREG(x)        (saved_state.aw[x])
673
0
#define LCREG(x)        (saved_state.lc[x])
674
0
#define LTREG(x)        (saved_state.lt[x])
675
0
#define LBREG(x)        (saved_state.lb[x])
676
0
#define RETSREG         (saved_state.rets)
677
678
static bu32 *
679
get_allreg (int grp, int reg)
680
234k
{
681
234k
  int fullreg = (grp << 3) | reg;
682
  /* REG_R0, REG_R1, REG_R2, REG_R3, REG_R4, REG_R5, REG_R6, REG_R7,
683
     REG_P0, REG_P1, REG_P2, REG_P3, REG_P4, REG_P5, REG_SP, REG_FP,
684
     REG_I0, REG_I1, REG_I2, REG_I3, REG_M0, REG_M1, REG_M2, REG_M3,
685
     REG_B0, REG_B1, REG_B2, REG_B3, REG_L0, REG_L1, REG_L2, REG_L3,
686
     REG_A0x, REG_A0w, REG_A1x, REG_A1w, , , REG_ASTAT, REG_RETS,
687
     , , , , , , , ,
688
     REG_LC0, REG_LT0, REG_LB0, REG_LC1, REG_LT1, REG_LB1, REG_CYCLES,
689
     REG_CYCLES2,
690
     REG_USP, REG_SEQSTAT, REG_SYSCFG, REG_RETI, REG_RETX, REG_RETN, REG_RETE,
691
     REG_LASTREG */
692
234k
  switch (fullreg >> 2)
693
234k
    {
694
126k
    case 0: case 1: return &DREG (reg);
695
102k
    case 2: case 3: return &PREG (reg);
696
1.16k
    case 4: return &IREG (reg & 3);
697
1.32k
    case 5: return &MREG (reg & 3);
698
1.48k
    case 6: return &BREG (reg & 3);
699
1.59k
    case 7: return &LREG (reg & 3);
700
0
    default:
701
0
      switch (fullreg)
702
0
  {
703
0
  case 32: return &AXREG (0);
704
0
  case 33: return &AWREG (0);
705
0
  case 34: return &AXREG (1);
706
0
  case 35: return &AWREG (1);
707
0
  case 39: return &RETSREG;
708
0
  case 48: return &LCREG (0);
709
0
  case 49: return &LTREG (0);
710
0
  case 50: return &LBREG (0);
711
0
  case 51: return &LCREG (1);
712
0
  case 52: return &LTREG (1);
713
0
  case 53: return &LBREG (1);
714
0
  }
715
234k
    }
716
0
  abort ();
717
234k
}
718
719
static int
720
decode_ProgCtrl_0 (TIword iw0, disassemble_info *outf)
721
632k
{
722
632k
  struct private *priv = outf->private_data;
723
  /* ProgCtrl
724
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
725
     | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |.prgfunc.......|.poprnd........|
726
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+  */
727
632k
  int poprnd  = ((iw0 >> ProgCtrl_poprnd_bits) & ProgCtrl_poprnd_mask);
728
632k
  int prgfunc = ((iw0 >> ProgCtrl_prgfunc_bits) & ProgCtrl_prgfunc_mask);
729
730
632k
  if (prgfunc == 0 && poprnd == 0)
731
368k
    OUTS (outf, "NOP");
732
264k
  else if (priv->parallel)
733
17.6k
    return 0;
734
246k
  else if (prgfunc == 1 && poprnd == 0)
735
5.98k
    OUTS (outf, "RTS");
736
240k
  else if (prgfunc == 1 && poprnd == 1)
737
1.27k
    OUTS (outf, "RTI");
738
239k
  else if (prgfunc == 1 && poprnd == 2)
739
761
    OUTS (outf, "RTX");
740
238k
  else if (prgfunc == 1 && poprnd == 3)
741
826
    OUTS (outf, "RTN");
742
237k
  else if (prgfunc == 1 && poprnd == 4)
743
888
    OUTS (outf, "RTE");
744
237k
  else if (prgfunc == 2 && poprnd == 0)
745
4.04k
    OUTS (outf, "IDLE");
746
233k
  else if (prgfunc == 2 && poprnd == 3)
747
1.36k
    OUTS (outf, "CSYNC");
748
231k
  else if (prgfunc == 2 && poprnd == 4)
749
1.59k
    OUTS (outf, "SSYNC");
750
230k
  else if (prgfunc == 2 && poprnd == 5)
751
2.64k
    OUTS (outf, "EMUEXCPT");
752
227k
  else if (prgfunc == 3 && IS_DREG (0, poprnd))
753
10.0k
    {
754
10.0k
      OUTS (outf, "CLI ");
755
10.0k
      OUTS (outf, dregs (poprnd));
756
10.0k
    }
757
217k
  else if (prgfunc == 4 && IS_DREG (0, poprnd))
758
10.1k
    {
759
10.1k
      OUTS (outf, "STI ");
760
10.1k
      OUTS (outf, dregs (poprnd));
761
10.1k
    }
762
207k
  else if (prgfunc == 5 && IS_PREG (1, poprnd))
763
3.84k
    {
764
3.84k
      OUTS (outf, "JUMP (");
765
3.84k
      OUTS (outf, pregs (poprnd));
766
3.84k
      OUTS (outf, ")");
767
3.84k
    }
768
203k
  else if (prgfunc == 6 && IS_PREG (1, poprnd))
769
7.42k
    {
770
7.42k
      OUTS (outf, "CALL (");
771
7.42k
      OUTS (outf, pregs (poprnd));
772
7.42k
      OUTS (outf, ")");
773
7.42k
    }
774
195k
  else if (prgfunc == 7 && IS_PREG (1, poprnd))
775
5.57k
    {
776
5.57k
      OUTS (outf, "CALL (PC + ");
777
5.57k
      OUTS (outf, pregs (poprnd));
778
5.57k
      OUTS (outf, ")");
779
5.57k
    }
780
190k
  else if (prgfunc == 8 && IS_PREG (1, poprnd))
781
6.74k
    {
782
6.74k
      OUTS (outf, "JUMP (PC + ");
783
6.74k
      OUTS (outf, pregs (poprnd));
784
6.74k
      OUTS (outf, ")");
785
6.74k
    }
786
183k
  else if (prgfunc == 9)
787
8.05k
    {
788
8.05k
      OUTS (outf, "RAISE ");
789
8.05k
      OUTS (outf, uimm4 (poprnd));
790
8.05k
    }
791
175k
  else if (prgfunc == 10)
792
5.47k
    {
793
5.47k
      OUTS (outf, "EXCPT ");
794
5.47k
      OUTS (outf, uimm4 (poprnd));
795
5.47k
    }
796
170k
  else if (prgfunc == 11 && IS_PREG (1, poprnd) && poprnd <= 5)
797
2.11k
    {
798
2.11k
      OUTS (outf, "TESTSET (");
799
2.11k
      OUTS (outf, pregs (poprnd));
800
2.11k
      OUTS (outf, ")");
801
2.11k
    }
802
167k
  else
803
167k
    return 0;
804
446k
  return 2;
805
632k
}
806
807
static int
808
decode_CaCTRL_0 (TIword iw0, disassemble_info *outf)
809
4.72k
{
810
4.72k
  struct private *priv = outf->private_data;
811
  /* CaCTRL
812
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
813
     | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 |.a.|.op....|.reg.......|
814
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+  */
815
4.72k
  int a   = ((iw0 >> CaCTRL_a_bits) & CaCTRL_a_mask);
816
4.72k
  int op  = ((iw0 >> CaCTRL_op_bits) & CaCTRL_op_mask);
817
4.72k
  int reg = ((iw0 >> CaCTRL_reg_bits) & CaCTRL_reg_mask);
818
819
4.72k
  if (priv->parallel)
820
409
    return 0;
821
822
4.32k
  if (a == 0 && op == 0)
823
1.20k
    {
824
1.20k
      OUTS (outf, "PREFETCH[");
825
1.20k
      OUTS (outf, pregs (reg));
826
1.20k
      OUTS (outf, "]");
827
1.20k
    }
828
3.12k
  else if (a == 0 && op == 1)
829
413
    {
830
413
      OUTS (outf, "FLUSHINV[");
831
413
      OUTS (outf, pregs (reg));
832
413
      OUTS (outf, "]");
833
413
    }
834
2.70k
  else if (a == 0 && op == 2)
835
396
    {
836
396
      OUTS (outf, "FLUSH[");
837
396
      OUTS (outf, pregs (reg));
838
396
      OUTS (outf, "]");
839
396
    }
840
2.31k
  else if (a == 0 && op == 3)
841
439
    {
842
439
      OUTS (outf, "IFLUSH[");
843
439
      OUTS (outf, pregs (reg));
844
439
      OUTS (outf, "]");
845
439
    }
846
1.87k
  else if (a == 1 && op == 0)
847
566
    {
848
566
      OUTS (outf, "PREFETCH[");
849
566
      OUTS (outf, pregs (reg));
850
566
      OUTS (outf, "++]");
851
566
    }
852
1.30k
  else if (a == 1 && op == 1)
853
477
    {
854
477
      OUTS (outf, "FLUSHINV[");
855
477
      OUTS (outf, pregs (reg));
856
477
      OUTS (outf, "++]");
857
477
    }
858
829
  else if (a == 1 && op == 2)
859
354
    {
860
354
      OUTS (outf, "FLUSH[");
861
354
      OUTS (outf, pregs (reg));
862
354
      OUTS (outf, "++]");
863
354
    }
864
475
  else if (a == 1 && op == 3)
865
475
    {
866
475
      OUTS (outf, "IFLUSH[");
867
475
      OUTS (outf, pregs (reg));
868
475
      OUTS (outf, "++]");
869
475
    }
870
0
  else
871
0
    return 0;
872
4.32k
  return 2;
873
4.32k
}
874
875
static int
876
decode_PushPopReg_0 (TIword iw0, disassemble_info *outf)
877
34.1k
{
878
34.1k
  struct private *priv = outf->private_data;
879
  /* PushPopReg
880
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
881
     | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 |.W.|.grp.......|.reg.......|
882
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+  */
883
34.1k
  int W   = ((iw0 >> PushPopReg_W_bits) & PushPopReg_W_mask);
884
34.1k
  int grp = ((iw0 >> PushPopReg_grp_bits) & PushPopReg_grp_mask);
885
34.1k
  int reg = ((iw0 >> PushPopReg_reg_bits) & PushPopReg_reg_mask);
886
887
34.1k
  if (priv->parallel)
888
1.85k
    return 0;
889
890
32.3k
  if (W == 0 && mostreg (reg, grp))
891
4.51k
    {
892
4.51k
      OUTS (outf, allregs (reg, grp));
893
4.51k
      OUTS (outf, " = [SP++]");
894
4.51k
    }
895
27.8k
  else if (W == 1 && allreg (reg, grp) && !(grp == 1 && reg == 6))
896
5.86k
    {
897
5.86k
      OUTS (outf, "[--SP] = ");
898
5.86k
      OUTS (outf, allregs (reg, grp));
899
5.86k
    }
900
21.9k
  else
901
21.9k
    return 0;
902
10.3k
  return 2;
903
32.3k
}
904
905
static int
906
decode_PushPopMultiple_0 (TIword iw0, disassemble_info *outf)
907
44.3k
{
908
44.3k
  struct private *priv = outf->private_data;
909
  /* PushPopMultiple
910
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
911
     | 0 | 0 | 0 | 0 | 0 | 1 | 0 |.d.|.p.|.W.|.dr........|.pr........|
912
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+  */
913
44.3k
  int p  = ((iw0 >> PushPopMultiple_p_bits) & PushPopMultiple_p_mask);
914
44.3k
  int d  = ((iw0 >> PushPopMultiple_d_bits) & PushPopMultiple_d_mask);
915
44.3k
  int W  = ((iw0 >> PushPopMultiple_W_bits) & PushPopMultiple_W_mask);
916
44.3k
  int dr = ((iw0 >> PushPopMultiple_dr_bits) & PushPopMultiple_dr_mask);
917
44.3k
  int pr = ((iw0 >> PushPopMultiple_pr_bits) & PushPopMultiple_pr_mask);
918
919
44.3k
  if (priv->parallel)
920
2.21k
    return 0;
921
922
42.1k
  if (pr > 5)
923
6.41k
    return 0;
924
925
35.6k
  if (W == 1 && d == 1 && p == 1)
926
2.57k
    {
927
2.57k
      OUTS (outf, "[--SP] = (R7:");
928
2.57k
      OUTS (outf, imm5d (dr));
929
2.57k
      OUTS (outf, ", P5:");
930
2.57k
      OUTS (outf, imm5d (pr));
931
2.57k
      OUTS (outf, ")");
932
2.57k
    }
933
33.1k
  else if (W == 1 && d == 1 && p == 0 && pr == 0)
934
1.49k
    {
935
1.49k
      OUTS (outf, "[--SP] = (R7:");
936
1.49k
      OUTS (outf, imm5d (dr));
937
1.49k
      OUTS (outf, ")");
938
1.49k
    }
939
31.6k
  else if (W == 1 && d == 0 && p == 1 && dr == 0)
940
502
    {
941
502
      OUTS (outf, "[--SP] = (P5:");
942
502
      OUTS (outf, imm5d (pr));
943
502
      OUTS (outf, ")");
944
502
    }
945
31.1k
  else if (W == 0 && d == 1 && p == 1)
946
2.96k
    {
947
2.96k
      OUTS (outf, "(R7:");
948
2.96k
      OUTS (outf, imm5d (dr));
949
2.96k
      OUTS (outf, ", P5:");
950
2.96k
      OUTS (outf, imm5d (pr));
951
2.96k
      OUTS (outf, ") = [SP++]");
952
2.96k
    }
953
28.1k
  else if (W == 0 && d == 1 && p == 0 && pr == 0)
954
3.45k
    {
955
3.45k
      OUTS (outf, "(R7:");
956
3.45k
      OUTS (outf, imm5d (dr));
957
3.45k
      OUTS (outf, ") = [SP++]");
958
3.45k
    }
959
24.7k
  else if (W == 0 && d == 0 && p == 1 && dr == 0)
960
885
    {
961
885
      OUTS (outf, "(P5:");
962
885
      OUTS (outf, imm5d (pr));
963
885
      OUTS (outf, ") = [SP++]");
964
885
    }
965
23.8k
  else
966
23.8k
    return 0;
967
11.8k
  return 2;
968
35.6k
}
969
970
static int
971
decode_ccMV_0 (TIword iw0, disassemble_info *outf)
972
51.6k
{
973
51.6k
  struct private *priv = outf->private_data;
974
  /* ccMV
975
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
976
     | 0 | 0 | 0 | 0 | 0 | 1 | 1 |.T.|.d.|.s.|.dst.......|.src.......|
977
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+  */
978
51.6k
  int s  = ((iw0 >> CCmv_s_bits) & CCmv_s_mask);
979
51.6k
  int d  = ((iw0 >> CCmv_d_bits) & CCmv_d_mask);
980
51.6k
  int T  = ((iw0 >> CCmv_T_bits) & CCmv_T_mask);
981
51.6k
  int src = ((iw0 >> CCmv_src_bits) & CCmv_src_mask);
982
51.6k
  int dst = ((iw0 >> CCmv_dst_bits) & CCmv_dst_mask);
983
984
51.6k
  if (priv->parallel)
985
5.08k
    return 0;
986
987
46.5k
  if (T == 1)
988
27.9k
    {
989
27.9k
      OUTS (outf, "IF CC ");
990
27.9k
      OUTS (outf, gregs (dst, d));
991
27.9k
      OUTS (outf, " = ");
992
27.9k
      OUTS (outf, gregs (src, s));
993
27.9k
    }
994
18.5k
  else if (T == 0)
995
18.5k
    {
996
18.5k
      OUTS (outf, "IF !CC ");
997
18.5k
      OUTS (outf, gregs (dst, d));
998
18.5k
      OUTS (outf, " = ");
999
18.5k
      OUTS (outf, gregs (src, s));
1000
18.5k
    }
1001
0
  else
1002
0
    return 0;
1003
46.5k
  return 2;
1004
46.5k
}
1005
1006
static int
1007
decode_CCflag_0 (TIword iw0, disassemble_info *outf)
1008
125k
{
1009
125k
  struct private *priv = outf->private_data;
1010
  /* CCflag
1011
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
1012
     | 0 | 0 | 0 | 0 | 1 |.I.|.opc.......|.G.|.y.........|.x.........|
1013
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+  */
1014
125k
  int x = ((iw0 >> CCflag_x_bits) & CCflag_x_mask);
1015
125k
  int y = ((iw0 >> CCflag_y_bits) & CCflag_y_mask);
1016
125k
  int I = ((iw0 >> CCflag_I_bits) & CCflag_I_mask);
1017
125k
  int G = ((iw0 >> CCflag_G_bits) & CCflag_G_mask);
1018
125k
  int opc = ((iw0 >> CCflag_opc_bits) & CCflag_opc_mask);
1019
1020
125k
  if (priv->parallel)
1021
7.89k
    return 0;
1022
1023
117k
  if (opc == 0 && I == 0 && G == 0)
1024
8.51k
    {
1025
8.51k
      OUTS (outf, "CC = ");
1026
8.51k
      OUTS (outf, dregs (x));
1027
8.51k
      OUTS (outf, " == ");
1028
8.51k
      OUTS (outf, dregs (y));
1029
8.51k
    }
1030
109k
  else if (opc == 1 && I == 0 && G == 0)
1031
2.25k
    {
1032
2.25k
      OUTS (outf, "CC = ");
1033
2.25k
      OUTS (outf, dregs (x));
1034
2.25k
      OUTS (outf, " < ");
1035
2.25k
      OUTS (outf, dregs (y));
1036
2.25k
    }
1037
107k
  else if (opc == 2 && I == 0 && G == 0)
1038
11.1k
    {
1039
11.1k
      OUTS (outf, "CC = ");
1040
11.1k
      OUTS (outf, dregs (x));
1041
11.1k
      OUTS (outf, " <= ");
1042
11.1k
      OUTS (outf, dregs (y));
1043
11.1k
    }
1044
96.0k
  else if (opc == 3 && I == 0 && G == 0)
1045
2.43k
    {
1046
2.43k
      OUTS (outf, "CC = ");
1047
2.43k
      OUTS (outf, dregs (x));
1048
2.43k
      OUTS (outf, " < ");
1049
2.43k
      OUTS (outf, dregs (y));
1050
2.43k
      OUTS (outf, " (IU)");
1051
2.43k
    }
1052
93.5k
  else if (opc == 4 && I == 0 && G == 0)
1053
7.99k
    {
1054
7.99k
      OUTS (outf, "CC = ");
1055
7.99k
      OUTS (outf, dregs (x));
1056
7.99k
      OUTS (outf, " <= ");
1057
7.99k
      OUTS (outf, dregs (y));
1058
7.99k
      OUTS (outf, " (IU)");
1059
7.99k
    }
1060
85.5k
  else if (opc == 0 && I == 1 && G == 0)
1061
8.93k
    {
1062
8.93k
      OUTS (outf, "CC = ");
1063
8.93k
      OUTS (outf, dregs (x));
1064
8.93k
      OUTS (outf, " == ");
1065
8.93k
      OUTS (outf, imm3 (y));
1066
8.93k
    }
1067
76.6k
  else if (opc == 1 && I == 1 && G == 0)
1068
2.91k
    {
1069
2.91k
      OUTS (outf, "CC = ");
1070
2.91k
      OUTS (outf, dregs (x));
1071
2.91k
      OUTS (outf, " < ");
1072
2.91k
      OUTS (outf, imm3 (y));
1073
2.91k
    }
1074
73.7k
  else if (opc == 2 && I == 1 && G == 0)
1075
3.32k
    {
1076
3.32k
      OUTS (outf, "CC = ");
1077
3.32k
      OUTS (outf, dregs (x));
1078
3.32k
      OUTS (outf, " <= ");
1079
3.32k
      OUTS (outf, imm3 (y));
1080
3.32k
    }
1081
70.4k
  else if (opc == 3 && I == 1 && G == 0)
1082
1.18k
    {
1083
1.18k
      OUTS (outf, "CC = ");
1084
1.18k
      OUTS (outf, dregs (x));
1085
1.18k
      OUTS (outf, " < ");
1086
1.18k
      OUTS (outf, uimm3 (y));
1087
1.18k
      OUTS (outf, " (IU)");
1088
1.18k
    }
1089
69.2k
  else if (opc == 4 && I == 1 && G == 0)
1090
7.50k
    {
1091
7.50k
      OUTS (outf, "CC = ");
1092
7.50k
      OUTS (outf, dregs (x));
1093
7.50k
      OUTS (outf, " <= ");
1094
7.50k
      OUTS (outf, uimm3 (y));
1095
7.50k
      OUTS (outf, " (IU)");
1096
7.50k
    }
1097
61.7k
  else if (opc == 0 && I == 0 && G == 1)
1098
2.60k
    {
1099
2.60k
      OUTS (outf, "CC = ");
1100
2.60k
      OUTS (outf, pregs (x));
1101
2.60k
      OUTS (outf, " == ");
1102
2.60k
      OUTS (outf, pregs (y));
1103
2.60k
    }
1104
59.1k
  else if (opc == 1 && I == 0 && G == 1)
1105
3.29k
    {
1106
3.29k
      OUTS (outf, "CC = ");
1107
3.29k
      OUTS (outf, pregs (x));
1108
3.29k
      OUTS (outf, " < ");
1109
3.29k
      OUTS (outf, pregs (y));
1110
3.29k
    }
1111
55.8k
  else if (opc == 2 && I == 0 && G == 1)
1112
3.82k
    {
1113
3.82k
      OUTS (outf, "CC = ");
1114
3.82k
      OUTS (outf, pregs (x));
1115
3.82k
      OUTS (outf, " <= ");
1116
3.82k
      OUTS (outf, pregs (y));
1117
3.82k
    }
1118
52.0k
  else if (opc == 3 && I == 0 && G == 1)
1119
4.15k
    {
1120
4.15k
      OUTS (outf, "CC = ");
1121
4.15k
      OUTS (outf, pregs (x));
1122
4.15k
      OUTS (outf, " < ");
1123
4.15k
      OUTS (outf, pregs (y));
1124
4.15k
      OUTS (outf, " (IU)");
1125
4.15k
    }
1126
47.8k
  else if (opc == 4 && I == 0 && G == 1)
1127
1.65k
    {
1128
1.65k
      OUTS (outf, "CC = ");
1129
1.65k
      OUTS (outf, pregs (x));
1130
1.65k
      OUTS (outf, " <= ");
1131
1.65k
      OUTS (outf, pregs (y));
1132
1.65k
      OUTS (outf, " (IU)");
1133
1.65k
    }
1134
46.1k
  else if (opc == 0 && I == 1 && G == 1)
1135
1.63k
    {
1136
1.63k
      OUTS (outf, "CC = ");
1137
1.63k
      OUTS (outf, pregs (x));
1138
1.63k
      OUTS (outf, " == ");
1139
1.63k
      OUTS (outf, imm3 (y));
1140
1.63k
    }
1141
44.5k
  else if (opc == 1 && I == 1 && G == 1)
1142
2.58k
    {
1143
2.58k
      OUTS (outf, "CC = ");
1144
2.58k
      OUTS (outf, pregs (x));
1145
2.58k
      OUTS (outf, " < ");
1146
2.58k
      OUTS (outf, imm3 (y));
1147
2.58k
    }
1148
41.9k
  else if (opc == 2 && I == 1 && G == 1)
1149
1.38k
    {
1150
1.38k
      OUTS (outf, "CC = ");
1151
1.38k
      OUTS (outf, pregs (x));
1152
1.38k
      OUTS (outf, " <= ");
1153
1.38k
      OUTS (outf, imm3 (y));
1154
1.38k
    }
1155
40.5k
  else if (opc == 3 && I == 1 && G == 1)
1156
1.26k
    {
1157
1.26k
      OUTS (outf, "CC = ");
1158
1.26k
      OUTS (outf, pregs (x));
1159
1.26k
      OUTS (outf, " < ");
1160
1.26k
      OUTS (outf, uimm3 (y));
1161
1.26k
      OUTS (outf, " (IU)");
1162
1.26k
    }
1163
39.3k
  else if (opc == 4 && I == 1 && G == 1)
1164
2.03k
    {
1165
2.03k
      OUTS (outf, "CC = ");
1166
2.03k
      OUTS (outf, pregs (x));
1167
2.03k
      OUTS (outf, " <= ");
1168
2.03k
      OUTS (outf, uimm3 (y));
1169
2.03k
      OUTS (outf, " (IU)");
1170
2.03k
    }
1171
37.2k
  else if (opc == 5 && I == 0 && G == 0 && x == 0 && y == 0)
1172
1.09k
    OUTS (outf, "CC = A0 == A1");
1173
1174
36.2k
  else if (opc == 6 && I == 0 && G == 0 && x == 0 && y == 0)
1175
1.59k
    OUTS (outf, "CC = A0 < A1");
1176
1177
34.6k
  else if (opc == 7 && I == 0 && G == 0 && x == 0 && y == 0)
1178
260
    OUTS (outf, "CC = A0 <= A1");
1179
1180
34.3k
  else
1181
34.3k
    return 0;
1182
83.6k
  return 2;
1183
117k
}
1184
1185
static int
1186
decode_CC2dreg_0 (TIword iw0, disassemble_info *outf)
1187
14.4k
{
1188
14.4k
  struct private *priv = outf->private_data;
1189
  /* CC2dreg
1190
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
1191
     | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 |.op....|.reg.......|
1192
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+  */
1193
14.4k
  int op  = ((iw0 >> CC2dreg_op_bits) & CC2dreg_op_mask);
1194
14.4k
  int reg = ((iw0 >> CC2dreg_reg_bits) & CC2dreg_reg_mask);
1195
1196
14.4k
  if (priv->parallel)
1197
846
    return 0;
1198
1199
13.6k
  if (op == 0)
1200
10.2k
    {
1201
10.2k
      OUTS (outf, dregs (reg));
1202
10.2k
      OUTS (outf, " = CC");
1203
10.2k
    }
1204
3.34k
  else if (op == 1)
1205
540
    {
1206
540
      OUTS (outf, "CC = ");
1207
540
      OUTS (outf, dregs (reg));
1208
540
    }
1209
2.80k
  else if (op == 3 && reg == 0)
1210
828
    OUTS (outf, "CC = !CC");
1211
1.97k
  else
1212
1.97k
    return 0;
1213
1214
11.6k
  return 2;
1215
13.6k
}
1216
1217
static int
1218
decode_CC2stat_0 (TIword iw0, disassemble_info *outf)
1219
28.1k
{
1220
28.1k
  struct private *priv = outf->private_data;
1221
  /* CC2stat
1222
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
1223
     | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 |.D.|.op....|.cbit..............|
1224
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+  */
1225
28.1k
  int D    = ((iw0 >> CC2stat_D_bits) & CC2stat_D_mask);
1226
28.1k
  int op   = ((iw0 >> CC2stat_op_bits) & CC2stat_op_mask);
1227
28.1k
  int cbit = ((iw0 >> CC2stat_cbit_bits) & CC2stat_cbit_mask);
1228
1229
28.1k
  const char *bitname = statbits (cbit);
1230
28.1k
  const char * const op_names[] = { "", "|", "&", "^" } ;
1231
1232
28.1k
  if (priv->parallel)
1233
1.35k
    return 0;
1234
1235
26.7k
  if (decode_statbits[cbit] == REG_LASTREG)
1236
9.75k
    {
1237
      /* All ASTAT bits except CC may be operated on in hardware, but may
1238
         not have a dedicated insn, so still decode "valid" insns.  */
1239
9.75k
      static char bitnames[64];
1240
9.75k
      if (cbit != 5)
1241
9.14k
  sprintf (bitnames, "ASTAT[%i /* unused bit */]", cbit);
1242
602
      else
1243
602
  return 0;
1244
1245
9.14k
      bitname = bitnames;
1246
9.14k
    }
1247
1248
26.1k
  if (D == 0)
1249
15.6k
    OUT (outf, "CC %s= %s", op_names[op], bitname);
1250
10.5k
  else
1251
10.5k
    OUT (outf, "%s %s= CC", bitname, op_names[op]);
1252
1253
26.1k
  return 2;
1254
26.7k
}
1255
1256
static int
1257
decode_BRCC_0 (TIword iw0, bfd_vma pc, disassemble_info *outf)
1258
126k
{
1259
126k
  struct private *priv = outf->private_data;
1260
  /* BRCC
1261
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
1262
     | 0 | 0 | 0 | 1 |.T.|.B.|.offset................................|
1263
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+  */
1264
126k
  int B = ((iw0 >> BRCC_B_bits) & BRCC_B_mask);
1265
126k
  int T = ((iw0 >> BRCC_T_bits) & BRCC_T_mask);
1266
126k
  int offset = ((iw0 >> BRCC_offset_bits) & BRCC_offset_mask);
1267
1268
126k
  if (priv->parallel)
1269
5.28k
    return 0;
1270
1271
121k
  if (T == 1 && B == 1)
1272
23.3k
    {
1273
23.3k
      OUTS (outf, "IF CC JUMP 0x");
1274
23.3k
      OUTS (outf, pcrel10 (offset));
1275
23.3k
      OUTS (outf, " (BP)");
1276
23.3k
    }
1277
97.9k
  else if (T == 0 && B == 1)
1278
21.9k
    {
1279
21.9k
      OUTS (outf, "IF !CC JUMP 0x");
1280
21.9k
      OUTS (outf, pcrel10 (offset));
1281
21.9k
      OUTS (outf, " (BP)");
1282
21.9k
    }
1283
76.0k
  else if (T == 1)
1284
28.5k
    {
1285
28.5k
      OUTS (outf, "IF CC JUMP 0x");
1286
28.5k
      OUTS (outf, pcrel10 (offset));
1287
28.5k
    }
1288
47.5k
  else if (T == 0)
1289
47.5k
    {
1290
47.5k
      OUTS (outf, "IF !CC JUMP 0x");
1291
47.5k
      OUTS (outf, pcrel10 (offset));
1292
47.5k
    }
1293
0
  else
1294
0
    return 0;
1295
1296
121k
  return 2;
1297
121k
}
1298
1299
static int
1300
decode_UJUMP_0 (TIword iw0, bfd_vma pc, disassemble_info *outf)
1301
186k
{
1302
186k
  struct private *priv = outf->private_data;
1303
  /* UJUMP
1304
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
1305
     | 0 | 0 | 1 | 0 |.offset........................................|
1306
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+  */
1307
186k
  int offset = ((iw0 >> UJump_offset_bits) & UJump_offset_mask);
1308
1309
186k
  if (priv->parallel)
1310
13.2k
    return 0;
1311
1312
172k
  OUTS (outf, "JUMP.S 0x");
1313
172k
  OUTS (outf, pcrel12 (offset));
1314
172k
  return 2;
1315
186k
}
1316
1317
static int
1318
decode_REGMV_0 (TIword iw0, disassemble_info *outf)
1319
186k
{
1320
  /* REGMV
1321
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
1322
     | 0 | 0 | 1 | 1 |.gd........|.gs........|.dst.......|.src.......|
1323
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+  */
1324
186k
  int gs  = ((iw0 >> RegMv_gs_bits) & RegMv_gs_mask);
1325
186k
  int gd  = ((iw0 >> RegMv_gd_bits) & RegMv_gd_mask);
1326
186k
  int src = ((iw0 >> RegMv_src_bits) & RegMv_src_mask);
1327
186k
  int dst = ((iw0 >> RegMv_dst_bits) & RegMv_dst_mask);
1328
1329
  /* Reserved slots cannot be a src/dst.  */
1330
186k
  if (IS_RESERVEDREG (gs, src) || IS_RESERVEDREG (gd, dst))
1331
39.0k
    goto invalid_move;
1332
1333
  /* Standard register moves  */
1334
147k
  if ((gs < 2) ||                               /* Dregs/Pregs as source  */
1335
83.3k
      (gd < 2) ||                               /* Dregs/Pregs as dest    */
1336
48.3k
      (gs == 4 && src < 4) ||                   /* Accumulators as source */
1337
34.9k
      (gd == 4 && dst < 4 && (gs < 4)) ||       /* Accumulators as dest   */
1338
33.6k
      (gs == 7 && src == 7 && !(gd == 4 && dst < 4)) || /* EMUDAT as src  */
1339
31.8k
      (gd == 7 && dst == 7))                    /* EMUDAT as dest         */
1340
117k
    goto valid_move;
1341
1342
  /* dareg = dareg (IMBL) */
1343
30.1k
  if (gs < 4 && gd < 4)
1344
6.18k
    goto valid_move;
1345
1346
  /* USP can be src to sysregs, but not dagregs.  */
1347
23.9k
  if ((gs == 7 && src == 0) && (gd >= 4))
1348
580
    goto valid_move;
1349
1350
  /* USP can move between genregs (only check Accumulators).  */
1351
23.3k
  if (((gs == 7 && src == 0) && (gd == 4 && dst < 4)) ||
1352
23.3k
      ((gd == 7 && dst == 0) && (gs == 4 && src < 4)))
1353
0
    goto valid_move;
1354
1355
  /* Still here ?  Invalid reg pair.  */
1356
62.4k
 invalid_move:
1357
62.4k
  return 0;
1358
1359
124k
 valid_move:
1360
124k
  OUTS (outf, allregs (dst, gd));
1361
124k
  OUTS (outf, " = ");
1362
124k
  OUTS (outf, allregs (src, gs));
1363
124k
  return 2;
1364
23.3k
}
1365
1366
static int
1367
decode_ALU2op_0 (TIword iw0, disassemble_info *outf)
1368
53.7k
{
1369
  /* ALU2op
1370
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
1371
     | 0 | 1 | 0 | 0 | 0 | 0 |.opc...........|.src.......|.dst.......|
1372
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+  */
1373
53.7k
  int src = ((iw0 >> ALU2op_src_bits) & ALU2op_src_mask);
1374
53.7k
  int opc = ((iw0 >> ALU2op_opc_bits) & ALU2op_opc_mask);
1375
53.7k
  int dst = ((iw0 >> ALU2op_dst_bits) & ALU2op_dst_mask);
1376
1377
53.7k
  if (opc == 0)
1378
10.2k
    {
1379
10.2k
      OUTS (outf, dregs (dst));
1380
10.2k
      OUTS (outf, " >>>= ");
1381
10.2k
      OUTS (outf, dregs (src));
1382
10.2k
    }
1383
43.5k
  else if (opc == 1)
1384
3.49k
    {
1385
3.49k
      OUTS (outf, dregs (dst));
1386
3.49k
      OUTS (outf, " >>= ");
1387
3.49k
      OUTS (outf, dregs (src));
1388
3.49k
    }
1389
40.0k
  else if (opc == 2)
1390
1.62k
    {
1391
1.62k
      OUTS (outf, dregs (dst));
1392
1.62k
      OUTS (outf, " <<= ");
1393
1.62k
      OUTS (outf, dregs (src));
1394
1.62k
    }
1395
38.4k
  else if (opc == 3)
1396
4.64k
    {
1397
4.64k
      OUTS (outf, dregs (dst));
1398
4.64k
      OUTS (outf, " *= ");
1399
4.64k
      OUTS (outf, dregs (src));
1400
4.64k
    }
1401
33.7k
  else if (opc == 4)
1402
3.83k
    {
1403
3.83k
      OUTS (outf, dregs (dst));
1404
3.83k
      OUTS (outf, " = (");
1405
3.83k
      OUTS (outf, dregs (dst));
1406
3.83k
      OUTS (outf, " + ");
1407
3.83k
      OUTS (outf, dregs (src));
1408
3.83k
      OUTS (outf, ") << 0x1");
1409
3.83k
    }
1410
29.9k
  else if (opc == 5)
1411
4.21k
    {
1412
4.21k
      OUTS (outf, dregs (dst));
1413
4.21k
      OUTS (outf, " = (");
1414
4.21k
      OUTS (outf, dregs (dst));
1415
4.21k
      OUTS (outf, " + ");
1416
4.21k
      OUTS (outf, dregs (src));
1417
4.21k
      OUTS (outf, ") << 0x2");
1418
4.21k
    }
1419
25.7k
  else if (opc == 8)
1420
3.17k
    {
1421
3.17k
      OUTS (outf, "DIVQ (");
1422
3.17k
      OUTS (outf, dregs (dst));
1423
3.17k
      OUTS (outf, ", ");
1424
3.17k
      OUTS (outf, dregs (src));
1425
3.17k
      OUTS (outf, ")");
1426
3.17k
    }
1427
22.5k
  else if (opc == 9)
1428
5.65k
    {
1429
5.65k
      OUTS (outf, "DIVS (");
1430
5.65k
      OUTS (outf, dregs (dst));
1431
5.65k
      OUTS (outf, ", ");
1432
5.65k
      OUTS (outf, dregs (src));
1433
5.65k
      OUTS (outf, ")");
1434
5.65k
    }
1435
16.8k
  else if (opc == 10)
1436
2.22k
    {
1437
2.22k
      OUTS (outf, dregs (dst));
1438
2.22k
      OUTS (outf, " = ");
1439
2.22k
      OUTS (outf, dregs_lo (src));
1440
2.22k
      OUTS (outf, " (X)");
1441
2.22k
    }
1442
14.6k
  else if (opc == 11)
1443
3.21k
    {
1444
3.21k
      OUTS (outf, dregs (dst));
1445
3.21k
      OUTS (outf, " = ");
1446
3.21k
      OUTS (outf, dregs_lo (src));
1447
3.21k
      OUTS (outf, " (Z)");
1448
3.21k
    }
1449
11.4k
  else if (opc == 12)
1450
2.31k
    {
1451
2.31k
      OUTS (outf, dregs (dst));
1452
2.31k
      OUTS (outf, " = ");
1453
2.31k
      OUTS (outf, dregs_byte (src));
1454
2.31k
      OUTS (outf, " (X)");
1455
2.31k
    }
1456
9.14k
  else if (opc == 13)
1457
3.57k
    {
1458
3.57k
      OUTS (outf, dregs (dst));
1459
3.57k
      OUTS (outf, " = ");
1460
3.57k
      OUTS (outf, dregs_byte (src));
1461
3.57k
      OUTS (outf, " (Z)");
1462
3.57k
    }
1463
5.57k
  else if (opc == 14)
1464
822
    {
1465
822
      OUTS (outf, dregs (dst));
1466
822
      OUTS (outf, " = -");
1467
822
      OUTS (outf, dregs (src));
1468
822
    }
1469
4.75k
  else if (opc == 15)
1470
947
    {
1471
947
      OUTS (outf, dregs (dst));
1472
947
      OUTS (outf, " =~ ");
1473
947
      OUTS (outf, dregs (src));
1474
947
    }
1475
3.80k
  else
1476
3.80k
    return 0;
1477
1478
49.9k
  return 2;
1479
53.7k
}
1480
1481
static int
1482
decode_PTR2op_0 (TIword iw0, disassemble_info *outf)
1483
18.7k
{
1484
  /* PTR2op
1485
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
1486
     | 0 | 1 | 0 | 0 | 0 | 1 | 0 |.opc.......|.src.......|.dst.......|
1487
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+  */
1488
18.7k
  int src = ((iw0 >> PTR2op_src_bits) & PTR2op_dst_mask);
1489
18.7k
  int opc = ((iw0 >> PTR2op_opc_bits) & PTR2op_opc_mask);
1490
18.7k
  int dst = ((iw0 >> PTR2op_dst_bits) & PTR2op_dst_mask);
1491
1492
18.7k
  if (opc == 0)
1493
4.81k
    {
1494
4.81k
      OUTS (outf, pregs (dst));
1495
4.81k
      OUTS (outf, " -= ");
1496
4.81k
      OUTS (outf, pregs (src));
1497
4.81k
    }
1498
13.9k
  else if (opc == 1)
1499
3.35k
    {
1500
3.35k
      OUTS (outf, pregs (dst));
1501
3.35k
      OUTS (outf, " = ");
1502
3.35k
      OUTS (outf, pregs (src));
1503
3.35k
      OUTS (outf, " << 0x2");
1504
3.35k
    }
1505
10.5k
  else if (opc == 3)
1506
1.60k
    {
1507
1.60k
      OUTS (outf, pregs (dst));
1508
1.60k
      OUTS (outf, " = ");
1509
1.60k
      OUTS (outf, pregs (src));
1510
1.60k
      OUTS (outf, " >> 0x2");
1511
1.60k
    }
1512
8.99k
  else if (opc == 4)
1513
1.83k
    {
1514
1.83k
      OUTS (outf, pregs (dst));
1515
1.83k
      OUTS (outf, " = ");
1516
1.83k
      OUTS (outf, pregs (src));
1517
1.83k
      OUTS (outf, " >> 0x1");
1518
1.83k
    }
1519
7.16k
  else if (opc == 5)
1520
3.49k
    {
1521
3.49k
      OUTS (outf, pregs (dst));
1522
3.49k
      OUTS (outf, " += ");
1523
3.49k
      OUTS (outf, pregs (src));
1524
3.49k
      OUTS (outf, " (BREV)");
1525
3.49k
    }
1526
3.67k
  else if (opc == 6)
1527
1.21k
    {
1528
1.21k
      OUTS (outf, pregs (dst));
1529
1.21k
      OUTS (outf, " = (");
1530
1.21k
      OUTS (outf, pregs (dst));
1531
1.21k
      OUTS (outf, " + ");
1532
1.21k
      OUTS (outf, pregs (src));
1533
1.21k
      OUTS (outf, ") << 0x1");
1534
1.21k
    }
1535
2.45k
  else if (opc == 7)
1536
978
    {
1537
978
      OUTS (outf, pregs (dst));
1538
978
      OUTS (outf, " = (");
1539
978
      OUTS (outf, pregs (dst));
1540
978
      OUTS (outf, " + ");
1541
978
      OUTS (outf, pregs (src));
1542
978
      OUTS (outf, ") << 0x2");
1543
978
    }
1544
1.48k
  else
1545
1.48k
    return 0;
1546
1547
17.2k
  return 2;
1548
18.7k
}
1549
1550
static int
1551
decode_LOGI2op_0 (TIword iw0, disassemble_info *outf)
1552
66.1k
{
1553
66.1k
  struct private *priv = outf->private_data;
1554
  /* LOGI2op
1555
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
1556
     | 0 | 1 | 0 | 0 | 1 |.opc.......|.src...............|.dst.......|
1557
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+  */
1558
66.1k
  int src = ((iw0 >> LOGI2op_src_bits) & LOGI2op_src_mask);
1559
66.1k
  int opc = ((iw0 >> LOGI2op_opc_bits) & LOGI2op_opc_mask);
1560
66.1k
  int dst = ((iw0 >> LOGI2op_dst_bits) & LOGI2op_dst_mask);
1561
1562
66.1k
  if (priv->parallel)
1563
2.48k
    return 0;
1564
1565
63.7k
  if (opc == 0)
1566
8.42k
    {
1567
8.42k
      OUTS (outf, "CC = !BITTST (");
1568
8.42k
      OUTS (outf, dregs (dst));
1569
8.42k
      OUTS (outf, ", ");
1570
8.42k
      OUTS (outf, uimm5 (src));
1571
8.42k
      OUTS (outf, ");\t\t/* bit");
1572
8.42k
      OUTS (outf, imm7d (src));
1573
8.42k
      OUTS (outf, " */");
1574
8.42k
      priv->comment = true;
1575
8.42k
    }
1576
55.2k
  else if (opc == 1)
1577
9.28k
    {
1578
9.28k
      OUTS (outf, "CC = BITTST (");
1579
9.28k
      OUTS (outf, dregs (dst));
1580
9.28k
      OUTS (outf, ", ");
1581
9.28k
      OUTS (outf, uimm5 (src));
1582
9.28k
      OUTS (outf, ");\t\t/* bit");
1583
9.28k
      OUTS (outf, imm7d (src));
1584
9.28k
      OUTS (outf, " */");
1585
9.28k
      priv->comment = true;
1586
9.28k
    }
1587
46.0k
  else if (opc == 2)
1588
6.92k
    {
1589
6.92k
      OUTS (outf, "BITSET (");
1590
6.92k
      OUTS (outf, dregs (dst));
1591
6.92k
      OUTS (outf, ", ");
1592
6.92k
      OUTS (outf, uimm5 (src));
1593
6.92k
      OUTS (outf, ");\t\t/* bit");
1594
6.92k
      OUTS (outf, imm7d (src));
1595
6.92k
      OUTS (outf, " */");
1596
6.92k
      priv->comment = true;
1597
6.92k
    }
1598
39.0k
  else if (opc == 3)
1599
3.83k
    {
1600
3.83k
      OUTS (outf, "BITTGL (");
1601
3.83k
      OUTS (outf, dregs (dst));
1602
3.83k
      OUTS (outf, ", ");
1603
3.83k
      OUTS (outf, uimm5 (src));
1604
3.83k
      OUTS (outf, ");\t\t/* bit");
1605
3.83k
      OUTS (outf, imm7d (src));
1606
3.83k
      OUTS (outf, " */");
1607
3.83k
      priv->comment = true;
1608
3.83k
    }
1609
35.2k
  else if (opc == 4)
1610
10.3k
    {
1611
10.3k
      OUTS (outf, "BITCLR (");
1612
10.3k
      OUTS (outf, dregs (dst));
1613
10.3k
      OUTS (outf, ", ");
1614
10.3k
      OUTS (outf, uimm5 (src));
1615
10.3k
      OUTS (outf, ");\t\t/* bit");
1616
10.3k
      OUTS (outf, imm7d (src));
1617
10.3k
      OUTS (outf, " */");
1618
10.3k
      priv->comment = true;
1619
10.3k
    }
1620
24.9k
  else if (opc == 5)
1621
6.36k
    {
1622
6.36k
      OUTS (outf, dregs (dst));
1623
6.36k
      OUTS (outf, " >>>= ");
1624
6.36k
      OUTS (outf, uimm5 (src));
1625
6.36k
    }
1626
18.5k
  else if (opc == 6)
1627
7.31k
    {
1628
7.31k
      OUTS (outf, dregs (dst));
1629
7.31k
      OUTS (outf, " >>= ");
1630
7.31k
      OUTS (outf, uimm5 (src));
1631
7.31k
    }
1632
11.2k
  else if (opc == 7)
1633
11.2k
    {
1634
11.2k
      OUTS (outf, dregs (dst));
1635
11.2k
      OUTS (outf, " <<= ");
1636
11.2k
      OUTS (outf, uimm5 (src));
1637
11.2k
    }
1638
0
  else
1639
0
    return 0;
1640
1641
63.7k
  return 2;
1642
63.7k
}
1643
1644
static int
1645
decode_COMP3op_0 (TIword iw0, disassemble_info *outf)
1646
94.3k
{
1647
  /* COMP3op
1648
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
1649
     | 0 | 1 | 0 | 1 |.opc.......|.dst.......|.src1......|.src0......|
1650
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+  */
1651
94.3k
  int opc  = ((iw0 >> COMP3op_opc_bits) & COMP3op_opc_mask);
1652
94.3k
  int dst  = ((iw0 >> COMP3op_dst_bits) & COMP3op_dst_mask);
1653
94.3k
  int src0 = ((iw0 >> COMP3op_src0_bits) & COMP3op_src0_mask);
1654
94.3k
  int src1 = ((iw0 >> COMP3op_src1_bits) & COMP3op_src1_mask);
1655
1656
94.3k
  if (opc == 5 && src1 == src0)
1657
2.14k
    {
1658
2.14k
      OUTS (outf, pregs (dst));
1659
2.14k
      OUTS (outf, " = ");
1660
2.14k
      OUTS (outf, pregs (src0));
1661
2.14k
      OUTS (outf, " << 0x1");
1662
2.14k
    }
1663
92.2k
  else if (opc == 1)
1664
11.1k
    {
1665
11.1k
      OUTS (outf, dregs (dst));
1666
11.1k
      OUTS (outf, " = ");
1667
11.1k
      OUTS (outf, dregs (src0));
1668
11.1k
      OUTS (outf, " - ");
1669
11.1k
      OUTS (outf, dregs (src1));
1670
11.1k
    }
1671
81.0k
  else if (opc == 2)
1672
8.64k
    {
1673
8.64k
      OUTS (outf, dregs (dst));
1674
8.64k
      OUTS (outf, " = ");
1675
8.64k
      OUTS (outf, dregs (src0));
1676
8.64k
      OUTS (outf, " & ");
1677
8.64k
      OUTS (outf, dregs (src1));
1678
8.64k
    }
1679
72.3k
  else if (opc == 3)
1680
12.5k
    {
1681
12.5k
      OUTS (outf, dregs (dst));
1682
12.5k
      OUTS (outf, " = ");
1683
12.5k
      OUTS (outf, dregs (src0));
1684
12.5k
      OUTS (outf, " | ");
1685
12.5k
      OUTS (outf, dregs (src1));
1686
12.5k
    }
1687
59.8k
  else if (opc == 4)
1688
16.8k
    {
1689
16.8k
      OUTS (outf, dregs (dst));
1690
16.8k
      OUTS (outf, " = ");
1691
16.8k
      OUTS (outf, dregs (src0));
1692
16.8k
      OUTS (outf, " ^ ");
1693
16.8k
      OUTS (outf, dregs (src1));
1694
16.8k
    }
1695
43.0k
  else if (opc == 5)
1696
7.52k
    {
1697
7.52k
      OUTS (outf, pregs (dst));
1698
7.52k
      OUTS (outf, " = ");
1699
7.52k
      OUTS (outf, pregs (src0));
1700
7.52k
      OUTS (outf, " + ");
1701
7.52k
      OUTS (outf, pregs (src1));
1702
7.52k
    }
1703
35.5k
  else if (opc == 6)
1704
11.2k
    {
1705
11.2k
      OUTS (outf, pregs (dst));
1706
11.2k
      OUTS (outf, " = ");
1707
11.2k
      OUTS (outf, pregs (src0));
1708
11.2k
      OUTS (outf, " + (");
1709
11.2k
      OUTS (outf, pregs (src1));
1710
11.2k
      OUTS (outf, " << 0x1)");
1711
11.2k
    }
1712
24.2k
  else if (opc == 7)
1713
14.7k
    {
1714
14.7k
      OUTS (outf, pregs (dst));
1715
14.7k
      OUTS (outf, " = ");
1716
14.7k
      OUTS (outf, pregs (src0));
1717
14.7k
      OUTS (outf, " + (");
1718
14.7k
      OUTS (outf, pregs (src1));
1719
14.7k
      OUTS (outf, " << 0x2)");
1720
14.7k
    }
1721
9.58k
  else if (opc == 0)
1722
9.58k
    {
1723
9.58k
      OUTS (outf, dregs (dst));
1724
9.58k
      OUTS (outf, " = ");
1725
9.58k
      OUTS (outf, dregs (src0));
1726
9.58k
      OUTS (outf, " + ");
1727
9.58k
      OUTS (outf, dregs (src1));
1728
9.58k
    }
1729
0
  else
1730
0
    return 0;
1731
1732
94.3k
  return 2;
1733
94.3k
}
1734
1735
static int
1736
decode_COMPI2opD_0 (TIword iw0, disassemble_info *outf)
1737
114k
{
1738
114k
  struct private *priv = outf->private_data;
1739
  /* COMPI2opD
1740
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
1741
     | 0 | 1 | 1 | 0 | 0 |.op|..src......................|.dst.......|
1742
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+  */
1743
114k
  int op  = ((iw0 >> COMPI2opD_op_bits) & COMPI2opD_op_mask);
1744
114k
  int dst = ((iw0 >> COMPI2opD_dst_bits) & COMPI2opD_dst_mask);
1745
114k
  int src = ((iw0 >> COMPI2opD_src_bits) & COMPI2opD_src_mask);
1746
1747
114k
  bu32 *pval = get_allreg (0, dst);
1748
1749
114k
  if (priv->parallel)
1750
6.05k
    return 0;
1751
1752
  /* Since we don't have 32-bit immediate loads, we allow the disassembler
1753
     to combine them, so it prints out the right values.
1754
     Here we keep track of the registers.  */
1755
108k
  if (op == 0)
1756
56.9k
    {
1757
56.9k
      *pval = imm7_val (src);
1758
56.9k
      if (src & 0x40)
1759
25.2k
  *pval |= 0xFFFFFF80;
1760
31.7k
      else
1761
31.7k
  *pval &= 0x7F;
1762
56.9k
    }
1763
1764
108k
  if (op == 0)
1765
56.9k
    {
1766
56.9k
      OUTS (outf, dregs (dst));
1767
56.9k
      OUTS (outf, " = ");
1768
56.9k
      OUTS (outf, imm7 (src));
1769
56.9k
      OUTS (outf, " (X);\t\t/*\t\t");
1770
56.9k
      OUTS (outf, dregs (dst));
1771
56.9k
      OUTS (outf, "=");
1772
56.9k
      OUTS (outf, uimm32 (*pval));
1773
56.9k
      OUTS (outf, "(");
1774
56.9k
      OUTS (outf, imm32 (*pval));
1775
56.9k
      OUTS (outf, ") */");
1776
56.9k
      priv->comment = true;
1777
56.9k
    }
1778
51.8k
  else if (op == 1)
1779
51.8k
    {
1780
51.8k
      OUTS (outf, dregs (dst));
1781
51.8k
      OUTS (outf, " += ");
1782
51.8k
      OUTS (outf, imm7 (src));
1783
51.8k
      OUTS (outf, ";\t\t/* (");
1784
51.8k
      OUTS (outf, imm7d (src));
1785
51.8k
      OUTS (outf, ") */");
1786
51.8k
      priv->comment = true;
1787
51.8k
    }
1788
0
  else
1789
0
    return 0;
1790
1791
108k
  return 2;
1792
108k
}
1793
1794
static int
1795
decode_COMPI2opP_0 (TIword iw0, disassemble_info *outf)
1796
99.9k
{
1797
99.9k
  struct private *priv = outf->private_data;
1798
  /* COMPI2opP
1799
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
1800
     | 0 | 1 | 1 | 0 | 1 |.op|.src.......................|.dst.......|
1801
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+  */
1802
99.9k
  int op  = ((iw0 >> COMPI2opP_op_bits) & COMPI2opP_op_mask);
1803
99.9k
  int src = ((iw0 >> COMPI2opP_src_bits) & COMPI2opP_src_mask);
1804
99.9k
  int dst = ((iw0 >> COMPI2opP_dst_bits) & COMPI2opP_dst_mask);
1805
1806
99.9k
  bu32 *pval = get_allreg (1, dst);
1807
1808
99.9k
  if (priv->parallel)
1809
8.67k
    return 0;
1810
1811
91.2k
  if (op == 0)
1812
48.1k
    {
1813
48.1k
      *pval = imm7_val (src);
1814
48.1k
      if (src & 0x40)
1815
10.7k
  *pval |= 0xFFFFFF80;
1816
37.4k
      else
1817
37.4k
  *pval &= 0x7F;
1818
48.1k
    }
1819
1820
91.2k
  if (op == 0)
1821
48.1k
    {
1822
48.1k
      OUTS (outf, pregs (dst));
1823
48.1k
      OUTS (outf, " = ");
1824
48.1k
      OUTS (outf, imm7 (src));
1825
48.1k
      OUTS (outf, " (X);\t\t/*\t\t");
1826
48.1k
      OUTS (outf, pregs (dst));
1827
48.1k
      OUTS (outf, "=");
1828
48.1k
      OUTS (outf, uimm32 (*pval));
1829
48.1k
      OUTS (outf, "(");
1830
48.1k
      OUTS (outf, imm32 (*pval));
1831
48.1k
      OUTS (outf, ") */");
1832
48.1k
      priv->comment = true;
1833
48.1k
    }
1834
43.1k
  else if (op == 1)
1835
43.1k
    {
1836
43.1k
      OUTS (outf, pregs (dst));
1837
43.1k
      OUTS (outf, " += ");
1838
43.1k
      OUTS (outf, imm7 (src));
1839
43.1k
      OUTS (outf, ";\t\t/* (");
1840
43.1k
      OUTS (outf, imm7d (src));
1841
43.1k
      OUTS (outf, ") */");
1842
43.1k
      priv->comment = true;
1843
43.1k
    }
1844
0
  else
1845
0
    return 0;
1846
1847
91.2k
  return 2;
1848
91.2k
}
1849
1850
static int
1851
decode_LDSTpmod_0 (TIword iw0, disassemble_info *outf)
1852
120k
{
1853
  /* LDSTpmod
1854
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
1855
     | 1 | 0 | 0 | 0 |.W.|.aop...|.reg.......|.idx.......|.ptr.......|
1856
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+  */
1857
120k
  int W   = ((iw0 >> LDSTpmod_W_bits) & LDSTpmod_W_mask);
1858
120k
  int aop = ((iw0 >> LDSTpmod_aop_bits) & LDSTpmod_aop_mask);
1859
120k
  int idx = ((iw0 >> LDSTpmod_idx_bits) & LDSTpmod_idx_mask);
1860
120k
  int ptr = ((iw0 >> LDSTpmod_ptr_bits) & LDSTpmod_ptr_mask);
1861
120k
  int reg = ((iw0 >> LDSTpmod_reg_bits) & LDSTpmod_reg_mask);
1862
1863
120k
  if (aop == 1 && W == 0 && idx == ptr)
1864
2.26k
    {
1865
2.26k
      OUTS (outf, dregs_lo (reg));
1866
2.26k
      OUTS (outf, " = W[");
1867
2.26k
      OUTS (outf, pregs (ptr));
1868
2.26k
      OUTS (outf, "]");
1869
2.26k
    }
1870
118k
  else if (aop == 2 && W == 0 && idx == ptr)
1871
2.92k
    {
1872
2.92k
      OUTS (outf, dregs_hi (reg));
1873
2.92k
      OUTS (outf, " = W[");
1874
2.92k
      OUTS (outf, pregs (ptr));
1875
2.92k
      OUTS (outf, "]");
1876
2.92k
    }
1877
115k
  else if (aop == 1 && W == 1 && idx == ptr)
1878
1.94k
    {
1879
1.94k
      OUTS (outf, "W[");
1880
1.94k
      OUTS (outf, pregs (ptr));
1881
1.94k
      OUTS (outf, "] = ");
1882
1.94k
      OUTS (outf, dregs_lo (reg));
1883
1.94k
    }
1884
113k
  else if (aop == 2 && W == 1 && idx == ptr)
1885
1.82k
    {
1886
1.82k
      OUTS (outf, "W[");
1887
1.82k
      OUTS (outf, pregs (ptr));
1888
1.82k
      OUTS (outf, "] = ");
1889
1.82k
      OUTS (outf, dregs_hi (reg));
1890
1.82k
    }
1891
111k
  else if (aop == 0 && W == 0)
1892
37.0k
    {
1893
37.0k
      OUTS (outf, dregs (reg));
1894
37.0k
      OUTS (outf, " = [");
1895
37.0k
      OUTS (outf, pregs (ptr));
1896
37.0k
      OUTS (outf, " ++ ");
1897
37.0k
      OUTS (outf, pregs (idx));
1898
37.0k
      OUTS (outf, "]");
1899
37.0k
    }
1900
74.4k
  else if (aop == 1 && W == 0)
1901
10.7k
    {
1902
10.7k
      OUTS (outf, dregs_lo (reg));
1903
10.7k
      OUTS (outf, " = W[");
1904
10.7k
      OUTS (outf, pregs (ptr));
1905
10.7k
      OUTS (outf, " ++ ");
1906
10.7k
      OUTS (outf, pregs (idx));
1907
10.7k
      OUTS (outf, "]");
1908
10.7k
    }
1909
63.6k
  else if (aop == 2 && W == 0)
1910
10.3k
    {
1911
10.3k
      OUTS (outf, dregs_hi (reg));
1912
10.3k
      OUTS (outf, " = W[");
1913
10.3k
      OUTS (outf, pregs (ptr));
1914
10.3k
      OUTS (outf, " ++ ");
1915
10.3k
      OUTS (outf, pregs (idx));
1916
10.3k
      OUTS (outf, "]");
1917
10.3k
    }
1918
53.2k
  else if (aop == 3 && W == 0)
1919
8.64k
    {
1920
8.64k
      OUTS (outf, dregs (reg));
1921
8.64k
      OUTS (outf, " = W[");
1922
8.64k
      OUTS (outf, pregs (ptr));
1923
8.64k
      OUTS (outf, " ++ ");
1924
8.64k
      OUTS (outf, pregs (idx));
1925
8.64k
      OUTS (outf, "] (Z)");
1926
8.64k
    }
1927
44.6k
  else if (aop == 3 && W == 1)
1928
10.9k
    {
1929
10.9k
      OUTS (outf, dregs (reg));
1930
10.9k
      OUTS (outf, " = W[");
1931
10.9k
      OUTS (outf, pregs (ptr));
1932
10.9k
      OUTS (outf, " ++ ");
1933
10.9k
      OUTS (outf, pregs (idx));
1934
10.9k
      OUTS (outf, "] (X)");
1935
10.9k
    }
1936
33.6k
  else if (aop == 0 && W == 1)
1937
15.1k
    {
1938
15.1k
      OUTS (outf, "[");
1939
15.1k
      OUTS (outf, pregs (ptr));
1940
15.1k
      OUTS (outf, " ++ ");
1941
15.1k
      OUTS (outf, pregs (idx));
1942
15.1k
      OUTS (outf, "] = ");
1943
15.1k
      OUTS (outf, dregs (reg));
1944
15.1k
    }
1945
18.5k
  else if (aop == 1 && W == 1)
1946
9.63k
    {
1947
9.63k
      OUTS (outf, "W[");
1948
9.63k
      OUTS (outf, pregs (ptr));
1949
9.63k
      OUTS (outf, " ++ ");
1950
9.63k
      OUTS (outf, pregs (idx));
1951
9.63k
      OUTS (outf, "] = ");
1952
9.63k
      OUTS (outf, dregs_lo (reg));
1953
9.63k
    }
1954
8.92k
  else if (aop == 2 && W == 1)
1955
8.92k
    {
1956
8.92k
      OUTS (outf, "W[");
1957
8.92k
      OUTS (outf, pregs (ptr));
1958
8.92k
      OUTS (outf, " ++ ");
1959
8.92k
      OUTS (outf, pregs (idx));
1960
8.92k
      OUTS (outf, "] = ");
1961
8.92k
      OUTS (outf, dregs_hi (reg));
1962
8.92k
    }
1963
0
  else
1964
0
    return 0;
1965
1966
120k
  return 2;
1967
120k
}
1968
1969
static int
1970
decode_dagMODim_0 (TIword iw0, disassemble_info *outf)
1971
1.98k
{
1972
  /* dagMODim
1973
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
1974
     | 1 | 0 | 0 | 1 | 1 | 1 | 1 | 0 |.br| 1 | 1 |.op|.m.....|.i.....|
1975
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+  */
1976
1.98k
  int i  = ((iw0 >> DagMODim_i_bits) & DagMODim_i_mask);
1977
1.98k
  int m  = ((iw0 >> DagMODim_m_bits) & DagMODim_m_mask);
1978
1.98k
  int br = ((iw0 >> DagMODim_br_bits) & DagMODim_br_mask);
1979
1.98k
  int op = ((iw0 >> DagMODim_op_bits) & DagMODim_op_mask);
1980
1981
1.98k
  if (op == 0 && br == 1)
1982
877
    {
1983
877
      OUTS (outf, iregs (i));
1984
877
      OUTS (outf, " += ");
1985
877
      OUTS (outf, mregs (m));
1986
877
      OUTS (outf, " (BREV)");
1987
877
    }
1988
1.10k
  else if (op == 0)
1989
176
    {
1990
176
      OUTS (outf, iregs (i));
1991
176
      OUTS (outf, " += ");
1992
176
      OUTS (outf, mregs (m));
1993
176
    }
1994
930
  else if (op == 1 && br == 0)
1995
284
    {
1996
284
      OUTS (outf, iregs (i));
1997
284
      OUTS (outf, " -= ");
1998
284
      OUTS (outf, mregs (m));
1999
284
    }
2000
646
  else
2001
646
    return 0;
2002
2003
1.33k
  return 2;
2004
1.98k
}
2005
2006
static int
2007
decode_dagMODik_0 (TIword iw0, disassemble_info *outf)
2008
2.01k
{
2009
2.01k
  struct private *priv = outf->private_data;
2010
  /* dagMODik
2011
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
2012
     | 1 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 1 | 0 |.op....|.i.....|
2013
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+  */
2014
2.01k
  int i  = ((iw0 >> DagMODik_i_bits) & DagMODik_i_mask);
2015
2.01k
  int op = ((iw0 >> DagMODik_op_bits) & DagMODik_op_mask);
2016
2017
2.01k
  if (op == 0)
2018
1.35k
    {
2019
1.35k
      OUTS (outf, iregs (i));
2020
1.35k
      OUTS (outf, " += 0x2");
2021
1.35k
    }
2022
662
  else if (op == 1)
2023
102
    {
2024
102
      OUTS (outf, iregs (i));
2025
102
      OUTS (outf, " -= 0x2");
2026
102
    }
2027
560
  else if (op == 2)
2028
214
    {
2029
214
      OUTS (outf, iregs (i));
2030
214
      OUTS (outf, " += 0x4");
2031
214
    }
2032
346
  else if (op == 3)
2033
346
    {
2034
346
      OUTS (outf, iregs (i));
2035
346
      OUTS (outf, " -= 0x4");
2036
346
    }
2037
0
  else
2038
0
    return 0;
2039
2040
2.01k
  if (!priv->parallel)
2041
1.86k
    {
2042
1.86k
      OUTS (outf, ";\t\t/* (  ");
2043
1.86k
      if (op == 0 || op == 1)
2044
1.30k
  OUTS (outf, "2");
2045
560
      else if (op == 2 || op == 3)
2046
560
  OUTS (outf, "4");
2047
1.86k
      OUTS (outf, ") */");
2048
1.86k
      priv->comment = true;
2049
1.86k
    }
2050
2051
2.01k
  return 2;
2052
2.01k
}
2053
2054
static int
2055
decode_dspLDST_0 (TIword iw0, disassemble_info *outf)
2056
30.4k
{
2057
  /* dspLDST
2058
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
2059
     | 1 | 0 | 0 | 1 | 1 | 1 |.W.|.aop...|.m.....|.i.....|.reg.......|
2060
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+  */
2061
30.4k
  int i   = ((iw0 >> DspLDST_i_bits) & DspLDST_i_mask);
2062
30.4k
  int m   = ((iw0 >> DspLDST_m_bits) & DspLDST_m_mask);
2063
30.4k
  int W   = ((iw0 >> DspLDST_W_bits) & DspLDST_W_mask);
2064
30.4k
  int aop = ((iw0 >> DspLDST_aop_bits) & DspLDST_aop_mask);
2065
30.4k
  int reg = ((iw0 >> DspLDST_reg_bits) & DspLDST_reg_mask);
2066
2067
30.4k
  if (aop == 0 && W == 0 && m == 0)
2068
1.03k
    {
2069
1.03k
      OUTS (outf, dregs (reg));
2070
1.03k
      OUTS (outf, " = [");
2071
1.03k
      OUTS (outf, iregs (i));
2072
1.03k
      OUTS (outf, "++]");
2073
1.03k
    }
2074
29.3k
  else if (aop == 0 && W == 0 && m == 1)
2075
1.09k
    {
2076
1.09k
      OUTS (outf, dregs_lo (reg));
2077
1.09k
      OUTS (outf, " = W[");
2078
1.09k
      OUTS (outf, iregs (i));
2079
1.09k
      OUTS (outf, "++]");
2080
1.09k
    }
2081
28.2k
  else if (aop == 0 && W == 0 && m == 2)
2082
278
    {
2083
278
      OUTS (outf, dregs_hi (reg));
2084
278
      OUTS (outf, " = W[");
2085
278
      OUTS (outf, iregs (i));
2086
278
      OUTS (outf, "++]");
2087
278
    }
2088
28.0k
  else if (aop == 1 && W == 0 && m == 0)
2089
5.63k
    {
2090
5.63k
      OUTS (outf, dregs (reg));
2091
5.63k
      OUTS (outf, " = [");
2092
5.63k
      OUTS (outf, iregs (i));
2093
5.63k
      OUTS (outf, "--]");
2094
5.63k
    }
2095
22.3k
  else if (aop == 1 && W == 0 && m == 1)
2096
235
    {
2097
235
      OUTS (outf, dregs_lo (reg));
2098
235
      OUTS (outf, " = W[");
2099
235
      OUTS (outf, iregs (i));
2100
235
      OUTS (outf, "--]");
2101
235
    }
2102
22.1k
  else if (aop == 1 && W == 0 && m == 2)
2103
533
    {
2104
533
      OUTS (outf, dregs_hi (reg));
2105
533
      OUTS (outf, " = W[");
2106
533
      OUTS (outf, iregs (i));
2107
533
      OUTS (outf, "--]");
2108
533
    }
2109
21.6k
  else if (aop == 2 && W == 0 && m == 0)
2110
1.61k
    {
2111
1.61k
      OUTS (outf, dregs (reg));
2112
1.61k
      OUTS (outf, " = [");
2113
1.61k
      OUTS (outf, iregs (i));
2114
1.61k
      OUTS (outf, "]");
2115
1.61k
    }
2116
20.0k
  else if (aop == 2 && W == 0 && m == 1)
2117
678
    {
2118
678
      OUTS (outf, dregs_lo (reg));
2119
678
      OUTS (outf, " = W[");
2120
678
      OUTS (outf, iregs (i));
2121
678
      OUTS (outf, "]");
2122
678
    }
2123
19.3k
  else if (aop == 2 && W == 0 && m == 2)
2124
440
    {
2125
440
      OUTS (outf, dregs_hi (reg));
2126
440
      OUTS (outf, " = W[");
2127
440
      OUTS (outf, iregs (i));
2128
440
      OUTS (outf, "]");
2129
440
    }
2130
18.8k
  else if (aop == 0 && W == 1 && m == 0)
2131
1.07k
    {
2132
1.07k
      OUTS (outf, "[");
2133
1.07k
      OUTS (outf, iregs (i));
2134
1.07k
      OUTS (outf, "++] = ");
2135
1.07k
      OUTS (outf, dregs (reg));
2136
1.07k
    }
2137
17.8k
  else if (aop == 0 && W == 1 && m == 1)
2138
960
    {
2139
960
      OUTS (outf, "W[");
2140
960
      OUTS (outf, iregs (i));
2141
960
      OUTS (outf, "++] = ");
2142
960
      OUTS (outf, dregs_lo (reg));
2143
960
    }
2144
16.8k
  else if (aop == 0 && W == 1 && m == 2)
2145
811
    {
2146
811
      OUTS (outf, "W[");
2147
811
      OUTS (outf, iregs (i));
2148
811
      OUTS (outf, "++] = ");
2149
811
      OUTS (outf, dregs_hi (reg));
2150
811
    }
2151
16.0k
  else if (aop == 1 && W == 1 && m == 0)
2152
2.32k
    {
2153
2.32k
      OUTS (outf, "[");
2154
2.32k
      OUTS (outf, iregs (i));
2155
2.32k
      OUTS (outf, "--] = ");
2156
2.32k
      OUTS (outf, dregs (reg));
2157
2.32k
    }
2158
13.7k
  else if (aop == 1 && W == 1 && m == 1)
2159
500
    {
2160
500
      OUTS (outf, "W[");
2161
500
      OUTS (outf, iregs (i));
2162
500
      OUTS (outf, "--] = ");
2163
500
      OUTS (outf, dregs_lo (reg));
2164
500
    }
2165
13.2k
  else if (aop == 1 && W == 1 && m == 2)
2166
375
    {
2167
375
      OUTS (outf, "W[");
2168
375
      OUTS (outf, iregs (i));
2169
375
      OUTS (outf, "--] = ");
2170
375
      OUTS (outf, dregs_hi (reg));
2171
375
    }
2172
12.8k
  else if (aop == 2 && W == 1 && m == 0)
2173
719
    {
2174
719
      OUTS (outf, "[");
2175
719
      OUTS (outf, iregs (i));
2176
719
      OUTS (outf, "] = ");
2177
719
      OUTS (outf, dregs (reg));
2178
719
    }
2179
12.1k
  else if (aop == 2 && W == 1 && m == 1)
2180
421
    {
2181
421
      OUTS (outf, "W[");
2182
421
      OUTS (outf, iregs (i));
2183
421
      OUTS (outf, "] = ");
2184
421
      OUTS (outf, dregs_lo (reg));
2185
421
    }
2186
11.6k
  else if (aop == 2 && W == 1 && m == 2)
2187
491
    {
2188
491
      OUTS (outf, "W[");
2189
491
      OUTS (outf, iregs (i));
2190
491
      OUTS (outf, "] = ");
2191
491
      OUTS (outf, dregs_hi (reg));
2192
491
    }
2193
11.2k
  else if (aop == 3 && W == 0)
2194
4.76k
    {
2195
4.76k
      OUTS (outf, dregs (reg));
2196
4.76k
      OUTS (outf, " = [");
2197
4.76k
      OUTS (outf, iregs (i));
2198
4.76k
      OUTS (outf, " ++ ");
2199
4.76k
      OUTS (outf, mregs (m));
2200
4.76k
      OUTS (outf, "]");
2201
4.76k
    }
2202
6.44k
  else if (aop == 3 && W == 1)
2203
4.51k
    {
2204
4.51k
      OUTS (outf, "[");
2205
4.51k
      OUTS (outf, iregs (i));
2206
4.51k
      OUTS (outf, " ++ ");
2207
4.51k
      OUTS (outf, mregs (m));
2208
4.51k
      OUTS (outf, "] = ");
2209
4.51k
      OUTS (outf, dregs (reg));
2210
4.51k
    }
2211
1.92k
  else
2212
1.92k
    return 0;
2213
2214
28.5k
  return 2;
2215
30.4k
}
2216
2217
static int
2218
decode_LDST_0 (TIword iw0, disassemble_info *outf)
2219
90.8k
{
2220
  /* LDST
2221
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
2222
     | 1 | 0 | 0 | 1 |.sz....|.W.|.aop...|.Z.|.ptr.......|.reg.......|
2223
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+  */
2224
90.8k
  int Z   = ((iw0 >> LDST_Z_bits) & LDST_Z_mask);
2225
90.8k
  int W   = ((iw0 >> LDST_W_bits) & LDST_W_mask);
2226
90.8k
  int sz  = ((iw0 >> LDST_sz_bits) & LDST_sz_mask);
2227
90.8k
  int aop = ((iw0 >> LDST_aop_bits) & LDST_aop_mask);
2228
90.8k
  int reg = ((iw0 >> LDST_reg_bits) & LDST_reg_mask);
2229
90.8k
  int ptr = ((iw0 >> LDST_ptr_bits) & LDST_ptr_mask);
2230
2231
90.8k
  if (aop == 0 && sz == 0 && Z == 0 && W == 0)
2232
2.76k
    {
2233
2.76k
      OUTS (outf, dregs (reg));
2234
2.76k
      OUTS (outf, " = [");
2235
2.76k
      OUTS (outf, pregs (ptr));
2236
2.76k
      OUTS (outf, "++]");
2237
2.76k
    }
2238
88.0k
  else if (aop == 0 && sz == 0 && Z == 1 && W == 0 && reg != ptr)
2239
1.68k
    {
2240
1.68k
      OUTS (outf, pregs (reg));
2241
1.68k
      OUTS (outf, " = [");
2242
1.68k
      OUTS (outf, pregs (ptr));
2243
1.68k
      OUTS (outf, "++]");
2244
1.68k
    }
2245
86.3k
  else if (aop == 0 && sz == 1 && Z == 0 && W == 0)
2246
1.63k
    {
2247
1.63k
      OUTS (outf, dregs (reg));
2248
1.63k
      OUTS (outf, " = W[");
2249
1.63k
      OUTS (outf, pregs (ptr));
2250
1.63k
      OUTS (outf, "++] (Z)");
2251
1.63k
    }
2252
84.7k
  else if (aop == 0 && sz == 1 && Z == 1 && W == 0)
2253
536
    {
2254
536
      OUTS (outf, dregs (reg));
2255
536
      OUTS (outf, " = W[");
2256
536
      OUTS (outf, pregs (ptr));
2257
536
      OUTS (outf, "++] (X)");
2258
536
    }
2259
84.2k
  else if (aop == 0 && sz == 2 && Z == 0 && W == 0)
2260
3.05k
    {
2261
3.05k
      OUTS (outf, dregs (reg));
2262
3.05k
      OUTS (outf, " = B[");
2263
3.05k
      OUTS (outf, pregs (ptr));
2264
3.05k
      OUTS (outf, "++] (Z)");
2265
3.05k
    }
2266
81.1k
  else if (aop == 0 && sz == 2 && Z == 1 && W == 0)
2267
1.24k
    {
2268
1.24k
      OUTS (outf, dregs (reg));
2269
1.24k
      OUTS (outf, " = B[");
2270
1.24k
      OUTS (outf, pregs (ptr));
2271
1.24k
      OUTS (outf, "++] (X)");
2272
1.24k
    }
2273
79.9k
  else if (aop == 1 && sz == 0 && Z == 0 && W == 0)
2274
3.45k
    {
2275
3.45k
      OUTS (outf, dregs (reg));
2276
3.45k
      OUTS (outf, " = [");
2277
3.45k
      OUTS (outf, pregs (ptr));
2278
3.45k
      OUTS (outf, "--]");
2279
3.45k
    }
2280
76.4k
  else if (aop == 1 && sz == 0 && Z == 1 && W == 0 && reg != ptr)
2281
1.06k
    {
2282
1.06k
      OUTS (outf, pregs (reg));
2283
1.06k
      OUTS (outf, " = [");
2284
1.06k
      OUTS (outf, pregs (ptr));
2285
1.06k
      OUTS (outf, "--]");
2286
1.06k
    }
2287
75.3k
  else if (aop == 1 && sz == 1 && Z == 0 && W == 0)
2288
3.81k
    {
2289
3.81k
      OUTS (outf, dregs (reg));
2290
3.81k
      OUTS (outf, " = W[");
2291
3.81k
      OUTS (outf, pregs (ptr));
2292
3.81k
      OUTS (outf, "--] (Z)");
2293
3.81k
    }
2294
71.5k
  else if (aop == 1 && sz == 1 && Z == 1 && W == 0)
2295
983
    {
2296
983
      OUTS (outf, dregs (reg));
2297
983
      OUTS (outf, " = W[");
2298
983
      OUTS (outf, pregs (ptr));
2299
983
      OUTS (outf, "--] (X)");
2300
983
    }
2301
70.5k
  else if (aop == 1 && sz == 2 && Z == 0 && W == 0)
2302
6.60k
    {
2303
6.60k
      OUTS (outf, dregs (reg));
2304
6.60k
      OUTS (outf, " = B[");
2305
6.60k
      OUTS (outf, pregs (ptr));
2306
6.60k
      OUTS (outf, "--] (Z)");
2307
6.60k
    }
2308
63.9k
  else if (aop == 1 && sz == 2 && Z == 1 && W == 0)
2309
1.85k
    {
2310
1.85k
      OUTS (outf, dregs (reg));
2311
1.85k
      OUTS (outf, " = B[");
2312
1.85k
      OUTS (outf, pregs (ptr));
2313
1.85k
      OUTS (outf, "--] (X)");
2314
1.85k
    }
2315
62.1k
  else if (aop == 2 && sz == 0 && Z == 0 && W == 0)
2316
2.54k
    {
2317
2.54k
      OUTS (outf, dregs (reg));
2318
2.54k
      OUTS (outf, " = [");
2319
2.54k
      OUTS (outf, pregs (ptr));
2320
2.54k
      OUTS (outf, "]");
2321
2.54k
    }
2322
59.5k
  else if (aop == 2 && sz == 0 && Z == 1 && W == 0)
2323
1.17k
    {
2324
1.17k
      OUTS (outf, pregs (reg));
2325
1.17k
      OUTS (outf, " = [");
2326
1.17k
      OUTS (outf, pregs (ptr));
2327
1.17k
      OUTS (outf, "]");
2328
1.17k
    }
2329
58.4k
  else if (aop == 2 && sz == 1 && Z == 0 && W == 0)
2330
1.79k
    {
2331
1.79k
      OUTS (outf, dregs (reg));
2332
1.79k
      OUTS (outf, " = W[");
2333
1.79k
      OUTS (outf, pregs (ptr));
2334
1.79k
      OUTS (outf, "] (Z)");
2335
1.79k
    }
2336
56.6k
  else if (aop == 2 && sz == 1 && Z == 1 && W == 0)
2337
841
    {
2338
841
      OUTS (outf, dregs (reg));
2339
841
      OUTS (outf, " = W[");
2340
841
      OUTS (outf, pregs (ptr));
2341
841
      OUTS (outf, "] (X)");
2342
841
    }
2343
55.7k
  else if (aop == 2 && sz == 2 && Z == 0 && W == 0)
2344
1.42k
    {
2345
1.42k
      OUTS (outf, dregs (reg));
2346
1.42k
      OUTS (outf, " = B[");
2347
1.42k
      OUTS (outf, pregs (ptr));
2348
1.42k
      OUTS (outf, "] (Z)");
2349
1.42k
    }
2350
54.3k
  else if (aop == 2 && sz == 2 && Z == 1 && W == 0)
2351
805
    {
2352
805
      OUTS (outf, dregs (reg));
2353
805
      OUTS (outf, " = B[");
2354
805
      OUTS (outf, pregs (ptr));
2355
805
      OUTS (outf, "] (X)");
2356
805
    }
2357
53.5k
  else if (aop == 0 && sz == 0 && Z == 0 && W == 1)
2358
1.66k
    {
2359
1.66k
      OUTS (outf, "[");
2360
1.66k
      OUTS (outf, pregs (ptr));
2361
1.66k
      OUTS (outf, "++] = ");
2362
1.66k
      OUTS (outf, dregs (reg));
2363
1.66k
    }
2364
51.8k
  else if (aop == 0 && sz == 0 && Z == 1 && W == 1)
2365
1.04k
    {
2366
1.04k
      OUTS (outf, "[");
2367
1.04k
      OUTS (outf, pregs (ptr));
2368
1.04k
      OUTS (outf, "++] = ");
2369
1.04k
      OUTS (outf, pregs (reg));
2370
1.04k
    }
2371
50.8k
  else if (aop == 0 && sz == 1 && Z == 0 && W == 1)
2372
1.04k
    {
2373
1.04k
      OUTS (outf, "W[");
2374
1.04k
      OUTS (outf, pregs (ptr));
2375
1.04k
      OUTS (outf, "++] = ");
2376
1.04k
      OUTS (outf, dregs (reg));
2377
1.04k
    }
2378
49.7k
  else if (aop == 0 && sz == 2 && Z == 0 && W == 1)
2379
2.42k
    {
2380
2.42k
      OUTS (outf, "B[");
2381
2.42k
      OUTS (outf, pregs (ptr));
2382
2.42k
      OUTS (outf, "++] = ");
2383
2.42k
      OUTS (outf, dregs (reg));
2384
2.42k
    }
2385
47.3k
  else if (aop == 1 && sz == 0 && Z == 0 && W == 1)
2386
2.57k
    {
2387
2.57k
      OUTS (outf, "[");
2388
2.57k
      OUTS (outf, pregs (ptr));
2389
2.57k
      OUTS (outf, "--] = ");
2390
2.57k
      OUTS (outf, dregs (reg));
2391
2.57k
    }
2392
44.7k
  else if (aop == 1 && sz == 0 && Z == 1 && W == 1)
2393
1.69k
    {
2394
1.69k
      OUTS (outf, "[");
2395
1.69k
      OUTS (outf, pregs (ptr));
2396
1.69k
      OUTS (outf, "--] = ");
2397
1.69k
      OUTS (outf, pregs (reg));
2398
1.69k
    }
2399
43.0k
  else if (aop == 1 && sz == 1 && Z == 0 && W == 1)
2400
1.63k
    {
2401
1.63k
      OUTS (outf, "W[");
2402
1.63k
      OUTS (outf, pregs (ptr));
2403
1.63k
      OUTS (outf, "--] = ");
2404
1.63k
      OUTS (outf, dregs (reg));
2405
1.63k
    }
2406
41.4k
  else if (aop == 1 && sz == 2 && Z == 0 && W == 1)
2407
2.31k
    {
2408
2.31k
      OUTS (outf, "B[");
2409
2.31k
      OUTS (outf, pregs (ptr));
2410
2.31k
      OUTS (outf, "--] = ");
2411
2.31k
      OUTS (outf, dregs (reg));
2412
2.31k
    }
2413
39.1k
  else if (aop == 2 && sz == 0 && Z == 0 && W == 1)
2414
1.44k
    {
2415
1.44k
      OUTS (outf, "[");
2416
1.44k
      OUTS (outf, pregs (ptr));
2417
1.44k
      OUTS (outf, "] = ");
2418
1.44k
      OUTS (outf, dregs (reg));
2419
1.44k
    }
2420
37.6k
  else if (aop == 2 && sz == 0 && Z == 1 && W == 1)
2421
947
    {
2422
947
      OUTS (outf, "[");
2423
947
      OUTS (outf, pregs (ptr));
2424
947
      OUTS (outf, "] = ");
2425
947
      OUTS (outf, pregs (reg));
2426
947
    }
2427
36.7k
  else if (aop == 2 && sz == 1 && Z == 0 && W == 1)
2428
840
    {
2429
840
      OUTS (outf, "W[");
2430
840
      OUTS (outf, pregs (ptr));
2431
840
      OUTS (outf, "] = ");
2432
840
      OUTS (outf, dregs (reg));
2433
840
    }
2434
35.9k
  else if (aop == 2 && sz == 2 && Z == 0 && W == 1)
2435
1.38k
    {
2436
1.38k
      OUTS (outf, "B[");
2437
1.38k
      OUTS (outf, pregs (ptr));
2438
1.38k
      OUTS (outf, "] = ");
2439
1.38k
      OUTS (outf, dregs (reg));
2440
1.38k
    }
2441
34.5k
  else
2442
34.5k
    return 0;
2443
2444
56.3k
  return 2;
2445
90.8k
}
2446
2447
static int
2448
decode_LDSTiiFP_0 (TIword iw0, disassemble_info *outf)
2449
22.1k
{
2450
  /* LDSTiiFP
2451
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
2452
     | 1 | 0 | 1 | 1 | 1 | 0 |.W.|.offset............|.reg...........|
2453
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+  */
2454
22.1k
  int reg = ((iw0 >> LDSTiiFP_reg_bits) & LDSTiiFP_reg_mask);
2455
22.1k
  int offset = ((iw0 >> LDSTiiFP_offset_bits) & LDSTiiFP_offset_mask);
2456
22.1k
  int W = ((iw0 >> LDSTiiFP_W_bits) & LDSTiiFP_W_mask);
2457
2458
22.1k
  if (W == 0)
2459
12.6k
    {
2460
12.6k
      OUTS (outf, dpregs (reg));
2461
12.6k
      OUTS (outf, " = [FP ");
2462
12.6k
      OUTS (outf, negimm5s4 (offset));
2463
12.6k
      OUTS (outf, "]");
2464
12.6k
    }
2465
9.41k
  else if (W == 1)
2466
9.41k
    {
2467
9.41k
      OUTS (outf, "[FP ");
2468
9.41k
      OUTS (outf, negimm5s4 (offset));
2469
9.41k
      OUTS (outf, "] = ");
2470
9.41k
      OUTS (outf, dpregs (reg));
2471
9.41k
    }
2472
0
  else
2473
0
    return 0;
2474
2475
22.1k
  return 2;
2476
22.1k
}
2477
2478
static int
2479
decode_LDSTii_0 (TIword iw0, disassemble_info *outf)
2480
147k
{
2481
  /* LDSTii
2482
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
2483
     | 1 | 0 | 1 |.W.|.op....|.offset........|.ptr.......|.reg.......|
2484
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+  */
2485
147k
  int reg = ((iw0 >> LDSTii_reg_bit) & LDSTii_reg_mask);
2486
147k
  int ptr = ((iw0 >> LDSTii_ptr_bit) & LDSTii_ptr_mask);
2487
147k
  int offset = ((iw0 >> LDSTii_offset_bit) & LDSTii_offset_mask);
2488
147k
  int op = ((iw0 >> LDSTii_op_bit) & LDSTii_op_mask);
2489
147k
  int W = ((iw0 >> LDSTii_W_bit) & LDSTii_W_mask);
2490
2491
147k
  if (W == 0 && op == 0)
2492
31.4k
    {
2493
31.4k
      OUTS (outf, dregs (reg));
2494
31.4k
      OUTS (outf, " = [");
2495
31.4k
      OUTS (outf, pregs (ptr));
2496
31.4k
      OUTS (outf, " + ");
2497
31.4k
      OUTS (outf, uimm4s4 (offset));
2498
31.4k
      OUTS (outf, "]");
2499
31.4k
    }
2500
116k
  else if (W == 0 && op == 1)
2501
21.6k
    {
2502
21.6k
      OUTS (outf, dregs (reg));
2503
21.6k
      OUTS (outf, " = W[");
2504
21.6k
      OUTS (outf, pregs (ptr));
2505
21.6k
      OUTS (outf, " + ");
2506
21.6k
      OUTS (outf, uimm4s2 (offset));
2507
21.6k
      OUTS (outf, "] (Z)");
2508
21.6k
    }
2509
94.3k
  else if (W == 0 && op == 2)
2510
15.6k
    {
2511
15.6k
      OUTS (outf, dregs (reg));
2512
15.6k
      OUTS (outf, " = W[");
2513
15.6k
      OUTS (outf, pregs (ptr));
2514
15.6k
      OUTS (outf, " + ");
2515
15.6k
      OUTS (outf, uimm4s2 (offset));
2516
15.6k
      OUTS (outf, "] (X)");
2517
15.6k
    }
2518
78.6k
  else if (W == 0 && op == 3)
2519
19.9k
    {
2520
19.9k
      OUTS (outf, pregs (reg));
2521
19.9k
      OUTS (outf, " = [");
2522
19.9k
      OUTS (outf, pregs (ptr));
2523
19.9k
      OUTS (outf, " + ");
2524
19.9k
      OUTS (outf, uimm4s4 (offset));
2525
19.9k
      OUTS (outf, "]");
2526
19.9k
    }
2527
58.7k
  else if (W == 1 && op == 0)
2528
14.9k
    {
2529
14.9k
      OUTS (outf, "[");
2530
14.9k
      OUTS (outf, pregs (ptr));
2531
14.9k
      OUTS (outf, " + ");
2532
14.9k
      OUTS (outf, uimm4s4 (offset));
2533
14.9k
      OUTS (outf, "] = ");
2534
14.9k
      OUTS (outf, dregs (reg));
2535
14.9k
    }
2536
43.7k
  else if (W == 1 && op == 1)
2537
16.8k
    {
2538
16.8k
      OUTS (outf, "W[");
2539
16.8k
      OUTS (outf, pregs (ptr));
2540
16.8k
      OUTS (outf, " + ");
2541
16.8k
      OUTS (outf, uimm4s2 (offset));
2542
16.8k
      OUTS (outf, "] = ");
2543
16.8k
      OUTS (outf, dregs (reg));
2544
16.8k
    }
2545
26.8k
  else if (W == 1 && op == 3)
2546
26.8k
    {
2547
26.8k
      OUTS (outf, "[");
2548
26.8k
      OUTS (outf, pregs (ptr));
2549
26.8k
      OUTS (outf, " + ");
2550
26.8k
      OUTS (outf, uimm4s4 (offset));
2551
26.8k
      OUTS (outf, "] = ");
2552
26.8k
      OUTS (outf, pregs (reg));
2553
26.8k
    }
2554
0
  else
2555
0
    return 0;
2556
2557
147k
  return 2;
2558
147k
}
2559
2560
static int
2561
decode_LoopSetup_0 (TIword iw0, TIword iw1, bfd_vma pc, disassemble_info *outf)
2562
7.33k
{
2563
7.33k
  struct private *priv = outf->private_data;
2564
  /* LoopSetup
2565
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
2566
     | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 1 |.rop...|.c.|.soffset.......|
2567
     |.reg...........| - | - |.eoffset...............................|
2568
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+  */
2569
7.33k
  int c   = ((iw0 >> (LoopSetup_c_bits - 16)) & LoopSetup_c_mask);
2570
7.33k
  int reg = ((iw1 >> LoopSetup_reg_bits) & LoopSetup_reg_mask);
2571
7.33k
  int rop = ((iw0 >> (LoopSetup_rop_bits - 16)) & LoopSetup_rop_mask);
2572
7.33k
  int soffset = ((iw0 >> (LoopSetup_soffset_bits - 16)) & LoopSetup_soffset_mask);
2573
7.33k
  int eoffset = ((iw1 >> LoopSetup_eoffset_bits) & LoopSetup_eoffset_mask);
2574
2575
7.33k
  if (priv->parallel)
2576
486
    return 0;
2577
2578
6.84k
  if (reg > 7)
2579
4.40k
    return 0;
2580
2581
2.44k
  if (rop == 0)
2582
382
    {
2583
382
      OUTS (outf, "LSETUP");
2584
382
      OUTS (outf, "(0x");
2585
382
      OUTS (outf, pcrel4 (soffset));
2586
382
      OUTS (outf, ", 0x");
2587
382
      OUTS (outf, lppcrel10 (eoffset));
2588
382
      OUTS (outf, ") ");
2589
382
      OUTS (outf, counters (c));
2590
382
    }
2591
2.06k
  else if (rop == 1)
2592
526
    {
2593
526
      OUTS (outf, "LSETUP");
2594
526
      OUTS (outf, "(0x");
2595
526
      OUTS (outf, pcrel4 (soffset));
2596
526
      OUTS (outf, ", 0x");
2597
526
      OUTS (outf, lppcrel10 (eoffset));
2598
526
      OUTS (outf, ") ");
2599
526
      OUTS (outf, counters (c));
2600
526
      OUTS (outf, " = ");
2601
526
      OUTS (outf, pregs (reg));
2602
526
    }
2603
1.53k
  else if (rop == 3)
2604
965
    {
2605
965
      OUTS (outf, "LSETUP");
2606
965
      OUTS (outf, "(0x");
2607
965
      OUTS (outf, pcrel4 (soffset));
2608
965
      OUTS (outf, ", 0x");
2609
965
      OUTS (outf, lppcrel10 (eoffset));
2610
965
      OUTS (outf, ") ");
2611
965
      OUTS (outf, counters (c));
2612
965
      OUTS (outf, " = ");
2613
965
      OUTS (outf, pregs (reg));
2614
965
      OUTS (outf, " >> 0x1");
2615
965
    }
2616
570
  else
2617
570
    return 0;
2618
2619
1.87k
  return 4;
2620
2.44k
}
2621
2622
static int
2623
decode_LDIMMhalf_0 (TIword iw0, TIword iw1, disassemble_info *outf)
2624
19.3k
{
2625
19.3k
  struct private *priv = outf->private_data;
2626
  /* LDIMMhalf
2627
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
2628
     | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 1 |.Z.|.H.|.S.|.grp...|.reg.......|
2629
     |.hword.........................................................|
2630
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+  */
2631
19.3k
  int H = ((iw0 >> (LDIMMhalf_H_bits - 16)) & LDIMMhalf_H_mask);
2632
19.3k
  int Z = ((iw0 >> (LDIMMhalf_Z_bits - 16)) & LDIMMhalf_Z_mask);
2633
19.3k
  int S = ((iw0 >> (LDIMMhalf_S_bits - 16)) & LDIMMhalf_S_mask);
2634
19.3k
  int reg = ((iw0 >> (LDIMMhalf_reg_bits - 16)) & LDIMMhalf_reg_mask);
2635
19.3k
  int grp = ((iw0 >> (LDIMMhalf_grp_bits - 16)) & LDIMMhalf_grp_mask);
2636
19.3k
  int hword = ((iw1 >> LDIMMhalf_hword_bits) & LDIMMhalf_hword_mask);
2637
2638
19.3k
  bu32 *pval = get_allreg (grp, reg);
2639
2640
19.3k
  if (priv->parallel)
2641
1.32k
    return 0;
2642
2643
  /* Since we don't have 32-bit immediate loads, we allow the disassembler
2644
     to combine them, so it prints out the right values.
2645
     Here we keep track of the registers.  */
2646
18.0k
  if (H == 0 && S == 1 && Z == 0)
2647
1.75k
    {
2648
      /* regs = imm16 (x) */
2649
1.75k
      *pval = imm16_val (hword);
2650
1.75k
      if (hword & 0x8000)
2651
857
  *pval |= 0xFFFF0000;
2652
895
      else
2653
895
  *pval &= 0xFFFF;
2654
1.75k
    }
2655
16.3k
  else if (H == 0 && S == 0 && Z == 1)
2656
1.61k
    {
2657
      /* regs = luimm16 (Z) */
2658
1.61k
      *pval = luimm16_val (hword);
2659
1.61k
      *pval &= 0xFFFF;
2660
1.61k
    }
2661
14.6k
  else if (H == 0 && S == 0 && Z == 0)
2662
4.36k
    {
2663
      /* regs_lo = luimm16 */
2664
4.36k
      *pval &= 0xFFFF0000;
2665
4.36k
      *pval |= luimm16_val (hword);
2666
4.36k
    }
2667
10.3k
  else if (H == 1 && S == 0 && Z == 0)
2668
1.26k
    {
2669
      /* regs_hi = huimm16 */
2670
1.26k
      *pval &= 0xFFFF;
2671
1.26k
      *pval |= luimm16_val (hword) << 16;
2672
1.26k
    }
2673
2674
  /* Here we do the disassembly */
2675
18.0k
  if (grp == 0 && H == 0 && S == 0 && Z == 0)
2676
2.94k
    {
2677
2.94k
      OUTS (outf, dregs_lo (reg));
2678
2.94k
      OUTS (outf, " = ");
2679
2.94k
      OUTS (outf, uimm16 (hword));
2680
2.94k
    }
2681
15.1k
  else if (grp == 0 && H == 1 && S == 0 && Z == 0)
2682
568
    {
2683
568
      OUTS (outf, dregs_hi (reg));
2684
568
      OUTS (outf, " = ");
2685
568
      OUTS (outf, uimm16 (hword));
2686
568
    }
2687
14.5k
  else if (grp == 0 && H == 0 && S == 1 && Z == 0)
2688
577
    {
2689
577
      OUTS (outf, dregs (reg));
2690
577
      OUTS (outf, " = ");
2691
577
      OUTS (outf, imm16 (hword));
2692
577
      OUTS (outf, " (X)");
2693
577
    }
2694
13.9k
  else if (H == 0 && S == 1 && Z == 0)
2695
1.17k
    {
2696
1.17k
      OUTS (outf, regs (reg, grp));
2697
1.17k
      OUTS (outf, " = ");
2698
1.17k
      OUTS (outf, imm16 (hword));
2699
1.17k
      OUTS (outf, " (X)");
2700
1.17k
    }
2701
12.7k
  else if (H == 0 && S == 0 && Z == 1)
2702
1.61k
    {
2703
1.61k
      OUTS (outf, regs (reg, grp));
2704
1.61k
      OUTS (outf, " = ");
2705
1.61k
      OUTS (outf, uimm16 (hword));
2706
1.61k
      OUTS (outf, " (Z)");
2707
1.61k
    }
2708
11.1k
  else if (H == 0 && S == 0 && Z == 0)
2709
1.42k
    {
2710
1.42k
      OUTS (outf, regs_lo (reg, grp));
2711
1.42k
      OUTS (outf, " = ");
2712
1.42k
      OUTS (outf, uimm16 (hword));
2713
1.42k
    }
2714
9.74k
  else if (H == 1 && S == 0 && Z == 0)
2715
694
    {
2716
694
      OUTS (outf, regs_hi (reg, grp));
2717
694
      OUTS (outf, " = ");
2718
694
      OUTS (outf, uimm16 (hword));
2719
694
    }
2720
9.05k
  else
2721
9.05k
    return 0;
2722
2723
  /* And we print out the 32-bit value if it is a pointer.  */
2724
9.00k
  if (S == 0 && Z == 0)
2725
5.63k
    {
2726
5.63k
      OUTS (outf, ";\t\t/* (");
2727
5.63k
      OUTS (outf, imm16d (hword));
2728
5.63k
      OUTS (outf, ")\t");
2729
2730
      /* If it is an MMR, don't print the symbol.  */
2731
5.63k
      if (*pval < 0xFFC00000 && grp == 1)
2732
292
  {
2733
292
    OUTS (outf, regs (reg, grp));
2734
292
    OUTS (outf, "=0x");
2735
292
    OUTS (outf, huimm32e (*pval));
2736
292
  }
2737
5.33k
      else
2738
5.33k
  {
2739
5.33k
    OUTS (outf, regs (reg, grp));
2740
5.33k
    OUTS (outf, "=0x");
2741
5.33k
    OUTS (outf, huimm32e (*pval));
2742
5.33k
    OUTS (outf, "(");
2743
5.33k
    OUTS (outf, imm32 (*pval));
2744
5.33k
    OUTS (outf, ")");
2745
5.33k
  }
2746
2747
5.63k
      OUTS (outf, " */");
2748
5.63k
      priv->comment = true;
2749
5.63k
    }
2750
9.00k
  if (S == 1 || Z == 1)
2751
3.37k
    {
2752
3.37k
      OUTS (outf, ";\t\t/*\t\t");
2753
3.37k
      OUTS (outf, regs (reg, grp));
2754
3.37k
      OUTS (outf, "=0x");
2755
3.37k
      OUTS (outf, huimm32e (*pval));
2756
3.37k
      OUTS (outf, "(");
2757
3.37k
      OUTS (outf, imm32 (*pval));
2758
3.37k
      OUTS (outf, ") */");
2759
3.37k
      priv->comment = true;
2760
3.37k
    }
2761
9.00k
  return 4;
2762
18.0k
}
2763
2764
static int
2765
decode_CALLa_0 (TIword iw0, TIword iw1, bfd_vma pc, disassemble_info *outf)
2766
17.4k
{
2767
17.4k
  struct private *priv = outf->private_data;
2768
  /* CALLa
2769
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
2770
     | 1 | 1 | 1 | 0 | 0 | 0 | 1 |.S.|.msw...........................|
2771
     |.lsw...........................................................|
2772
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+  */
2773
17.4k
  int S   = ((iw0 >> (CALLa_S_bits - 16)) & CALLa_S_mask);
2774
17.4k
  int lsw = ((iw1 >> 0) & 0xffff);
2775
17.4k
  int msw = ((iw0 >> 0) & 0xff);
2776
2777
17.4k
  if (priv->parallel)
2778
1.14k
    return 0;
2779
2780
16.2k
  if (S == 1)
2781
7.34k
    OUTS (outf, "CALL 0x");
2782
8.95k
  else if (S == 0)
2783
8.95k
    OUTS (outf, "JUMP.L 0x");
2784
0
  else
2785
0
    return 0;
2786
2787
16.2k
  OUTS (outf, pcrel24 (((msw) << 16) | (lsw)));
2788
16.2k
  return 4;
2789
16.2k
}
2790
2791
static int
2792
decode_LDSTidxI_0 (TIword iw0, TIword iw1, disassemble_info *outf)
2793
26.1k
{
2794
  /* LDSTidxI
2795
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
2796
     | 1 | 1 | 1 | 0 | 0 | 1 |.W.|.Z.|.sz....|.ptr.......|.reg.......|
2797
     |.offset........................................................|
2798
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+  */
2799
26.1k
  int Z = ((iw0 >> (LDSTidxI_Z_bits - 16)) & LDSTidxI_Z_mask);
2800
26.1k
  int W = ((iw0 >> (LDSTidxI_W_bits - 16)) & LDSTidxI_W_mask);
2801
26.1k
  int sz = ((iw0 >> (LDSTidxI_sz_bits - 16)) & LDSTidxI_sz_mask);
2802
26.1k
  int reg = ((iw0 >> (LDSTidxI_reg_bits - 16)) & LDSTidxI_reg_mask);
2803
26.1k
  int ptr = ((iw0 >> (LDSTidxI_ptr_bits - 16)) & LDSTidxI_ptr_mask);
2804
26.1k
  int offset = ((iw1 >> LDSTidxI_offset_bits) & LDSTidxI_offset_mask);
2805
2806
26.1k
  if (W == 0 && sz == 0 && Z == 0)
2807
1.39k
    {
2808
1.39k
      OUTS (outf, dregs (reg));
2809
1.39k
      OUTS (outf, " = [");
2810
1.39k
      OUTS (outf, pregs (ptr));
2811
1.39k
      OUTS (outf, " + ");
2812
1.39k
      OUTS (outf, imm16s4 (offset));
2813
1.39k
      OUTS (outf, "]");
2814
1.39k
    }
2815
24.7k
  else if (W == 0 && sz == 0 && Z == 1)
2816
1.23k
    {
2817
1.23k
      OUTS (outf, pregs (reg));
2818
1.23k
      OUTS (outf, " = [");
2819
1.23k
      OUTS (outf, pregs (ptr));
2820
1.23k
      OUTS (outf, " + ");
2821
1.23k
      OUTS (outf, imm16s4 (offset));
2822
1.23k
      OUTS (outf, "]");
2823
1.23k
    }
2824
23.4k
  else if (W == 0 && sz == 1 && Z == 0)
2825
690
    {
2826
690
      OUTS (outf, dregs (reg));
2827
690
      OUTS (outf, " = W[");
2828
690
      OUTS (outf, pregs (ptr));
2829
690
      OUTS (outf, " + ");
2830
690
      OUTS (outf, imm16s2 (offset));
2831
690
      OUTS (outf, "] (Z)");
2832
690
    }
2833
22.7k
  else if (W == 0 && sz == 1 && Z == 1)
2834
1.03k
    {
2835
1.03k
      OUTS (outf, dregs (reg));
2836
1.03k
      OUTS (outf, " = W[");
2837
1.03k
      OUTS (outf, pregs (ptr));
2838
1.03k
      OUTS (outf, " + ");
2839
1.03k
      OUTS (outf, imm16s2 (offset));
2840
1.03k
      OUTS (outf, "] (X)");
2841
1.03k
    }
2842
21.7k
  else if (W == 0 && sz == 2 && Z == 0)
2843
837
    {
2844
837
      OUTS (outf, dregs (reg));
2845
837
      OUTS (outf, " = B[");
2846
837
      OUTS (outf, pregs (ptr));
2847
837
      OUTS (outf, " + ");
2848
837
      OUTS (outf, imm16 (offset));
2849
837
      OUTS (outf, "] (Z)");
2850
837
    }
2851
20.9k
  else if (W == 0 && sz == 2 && Z == 1)
2852
1.10k
    {
2853
1.10k
      OUTS (outf, dregs (reg));
2854
1.10k
      OUTS (outf, " = B[");
2855
1.10k
      OUTS (outf, pregs (ptr));
2856
1.10k
      OUTS (outf, " + ");
2857
1.10k
      OUTS (outf, imm16 (offset));
2858
1.10k
      OUTS (outf, "] (X)");
2859
1.10k
    }
2860
19.8k
  else if (W == 1 && sz == 0 && Z == 0)
2861
1.19k
    {
2862
1.19k
      OUTS (outf, "[");
2863
1.19k
      OUTS (outf, pregs (ptr));
2864
1.19k
      OUTS (outf, " + ");
2865
1.19k
      OUTS (outf, imm16s4 (offset));
2866
1.19k
      OUTS (outf, "] = ");
2867
1.19k
      OUTS (outf, dregs (reg));
2868
1.19k
    }
2869
18.6k
  else if (W == 1 && sz == 0 && Z == 1)
2870
1.70k
    {
2871
1.70k
      OUTS (outf, "[");
2872
1.70k
      OUTS (outf, pregs (ptr));
2873
1.70k
      OUTS (outf, " + ");
2874
1.70k
      OUTS (outf, imm16s4 (offset));
2875
1.70k
      OUTS (outf, "] = ");
2876
1.70k
      OUTS (outf, pregs (reg));
2877
1.70k
    }
2878
16.9k
  else if (W == 1 && sz == 1 && Z == 0)
2879
1.38k
    {
2880
1.38k
      OUTS (outf, "W[");
2881
1.38k
      OUTS (outf, pregs (ptr));
2882
1.38k
      OUTS (outf, " + ");
2883
1.38k
      OUTS (outf, imm16s2 (offset));
2884
1.38k
      OUTS (outf, "] = ");
2885
1.38k
      OUTS (outf, dregs (reg));
2886
1.38k
    }
2887
15.5k
  else if (W == 1 && sz == 2 && Z == 0)
2888
2.30k
    {
2889
2.30k
      OUTS (outf, "B[");
2890
2.30k
      OUTS (outf, pregs (ptr));
2891
2.30k
      OUTS (outf, " + ");
2892
2.30k
      OUTS (outf, imm16 (offset));
2893
2.30k
      OUTS (outf, "] = ");
2894
2.30k
      OUTS (outf, dregs (reg));
2895
2.30k
    }
2896
13.2k
  else
2897
13.2k
    return 0;
2898
2899
12.8k
  return 4;
2900
26.1k
}
2901
2902
static int
2903
decode_linkage_0 (TIword iw0, TIword iw1, disassemble_info *outf)
2904
2.01k
{
2905
2.01k
  struct private *priv = outf->private_data;
2906
  /* linkage
2907
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
2908
     | 1 | 1 | 1 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |.R.|
2909
     |.framesize.....................................................|
2910
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+  */
2911
2.01k
  int R = ((iw0 >> (Linkage_R_bits - 16)) & Linkage_R_mask);
2912
2.01k
  int framesize = ((iw1 >> Linkage_framesize_bits) & Linkage_framesize_mask);
2913
2914
2.01k
  if (priv->parallel)
2915
332
    return 0;
2916
2917
1.68k
  if (R == 0)
2918
1.19k
    {
2919
1.19k
      OUTS (outf, "LINK ");
2920
1.19k
      OUTS (outf, uimm16s4 (framesize));
2921
1.19k
      OUTS (outf, ";\t\t/* (");
2922
1.19k
      OUTS (outf, uimm16s4d (framesize));
2923
1.19k
      OUTS (outf, ") */");
2924
1.19k
      priv->comment = true;
2925
1.19k
    }
2926
487
  else if (R == 1)
2927
487
    OUTS (outf, "UNLINK");
2928
0
  else
2929
0
    return 0;
2930
2931
1.68k
  return 4;
2932
1.68k
}
2933
2934
static int
2935
decode_dsp32mac_0 (TIword iw0, TIword iw1, disassemble_info *outf)
2936
42.4k
{
2937
  /* dsp32mac
2938
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
2939
     | 1 | 1 | 0 | 0 |.M.| 0 | 0 |.mmod..........|.MM|.P.|.w1|.op1...|
2940
     |.h01|.h11|.w0|.op0...|.h00|.h10|.dst.......|.src0......|.src1..|
2941
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+  */
2942
42.4k
  int op1  = ((iw0 >> (DSP32Mac_op1_bits - 16)) & DSP32Mac_op1_mask);
2943
42.4k
  int w1   = ((iw0 >> (DSP32Mac_w1_bits - 16)) & DSP32Mac_w1_mask);
2944
42.4k
  int P    = ((iw0 >> (DSP32Mac_p_bits - 16)) & DSP32Mac_p_mask);
2945
42.4k
  int MM   = ((iw0 >> (DSP32Mac_MM_bits - 16)) & DSP32Mac_MM_mask);
2946
42.4k
  int mmod = ((iw0 >> (DSP32Mac_mmod_bits - 16)) & DSP32Mac_mmod_mask);
2947
42.4k
  int w0   = ((iw1 >> DSP32Mac_w0_bits) & DSP32Mac_w0_mask);
2948
42.4k
  int src0 = ((iw1 >> DSP32Mac_src0_bits) & DSP32Mac_src0_mask);
2949
42.4k
  int src1 = ((iw1 >> DSP32Mac_src1_bits) & DSP32Mac_src1_mask);
2950
42.4k
  int dst  = ((iw1 >> DSP32Mac_dst_bits) & DSP32Mac_dst_mask);
2951
42.4k
  int h10  = ((iw1 >> DSP32Mac_h10_bits) & DSP32Mac_h10_mask);
2952
42.4k
  int h00  = ((iw1 >> DSP32Mac_h00_bits) & DSP32Mac_h00_mask);
2953
42.4k
  int op0  = ((iw1 >> DSP32Mac_op0_bits) & DSP32Mac_op0_mask);
2954
42.4k
  int h11  = ((iw1 >> DSP32Mac_h11_bits) & DSP32Mac_h11_mask);
2955
42.4k
  int h01  = ((iw1 >> DSP32Mac_h01_bits) & DSP32Mac_h01_mask);
2956
2957
42.4k
  if (w0 == 0 && w1 == 0 && op1 == 3 && op0 == 3)
2958
358
    return 0;
2959
2960
42.1k
  if (op1 == 3 && MM)
2961
3.40k
    return 0;
2962
2963
38.7k
  if ((w1 || w0) && mmod == M_W32)
2964
736
    return 0;
2965
2966
37.9k
  if (((1 << mmod) & (P ? 0x131b : 0x1b5f)) == 0)
2967
14.0k
    return 0;
2968
2969
23.9k
  if (w1 == 1 || op1 != 3)
2970
21.6k
    {
2971
21.6k
      if (w1)
2972
6.89k
  OUTS (outf, P ? dregs (dst + 1) : dregs_hi (dst));
2973
2974
21.6k
      if (op1 == 3)
2975
709
  OUTS (outf, " = A1");
2976
20.9k
      else
2977
20.9k
  {
2978
20.9k
    if (w1)
2979
6.18k
      OUTS (outf, " = (");
2980
20.9k
    decode_macfunc (1, op1, h01, h11, src0, src1, outf);
2981
20.9k
    if (w1)
2982
6.18k
      OUTS (outf, ")");
2983
20.9k
  }
2984
2985
21.6k
      if (w0 == 1 || op0 != 3)
2986
19.8k
  {
2987
19.8k
    if (MM)
2988
7.08k
      OUTS (outf, " (M)");
2989
19.8k
    OUTS (outf, ", ");
2990
19.8k
  }
2991
21.6k
    }
2992
2993
23.9k
  if (w0 == 1 || op0 != 3)
2994
22.2k
    {
2995
      /* Clear MM option since it only matters for MAC1, and if we made
2996
         it this far, we've already shown it or we want to ignore it.  */
2997
22.2k
      MM = 0;
2998
2999
22.2k
      if (w0)
3000
9.56k
  OUTS (outf, P ? dregs (dst) : dregs_lo (dst));
3001
3002
22.2k
      if (op0 == 3)
3003
2.20k
  OUTS (outf, " = A0");
3004
20.0k
      else
3005
20.0k
  {
3006
20.0k
    if (w0)
3007
7.36k
      OUTS (outf, " = (");
3008
20.0k
    decode_macfunc (0, op0, h00, h10, src0, src1, outf);
3009
20.0k
    if (w0)
3010
7.36k
      OUTS (outf, ")");
3011
20.0k
  }
3012
22.2k
    }
3013
3014
23.9k
  decode_optmode (mmod, MM, outf);
3015
3016
23.9k
  return 4;
3017
37.9k
}
3018
3019
static int
3020
decode_dsp32mult_0 (TIword iw0, TIword iw1, disassemble_info *outf)
3021
27.6k
{
3022
  /* dsp32mult
3023
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
3024
     | 1 | 1 | 0 | 0 |.M.| 0 | 1 |.mmod..........|.MM|.P.|.w1|.op1...|
3025
     |.h01|.h11|.w0|.op0...|.h00|.h10|.dst.......|.src0......|.src1..|
3026
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+  */
3027
27.6k
  int w1   = ((iw0 >> (DSP32Mac_w1_bits - 16)) & DSP32Mac_w1_mask);
3028
27.6k
  int P    = ((iw0 >> (DSP32Mac_p_bits - 16)) & DSP32Mac_p_mask);
3029
27.6k
  int MM   = ((iw0 >> (DSP32Mac_MM_bits - 16)) & DSP32Mac_MM_mask);
3030
27.6k
  int mmod = ((iw0 >> (DSP32Mac_mmod_bits - 16)) & DSP32Mac_mmod_mask);
3031
27.6k
  int w0   = ((iw1 >> DSP32Mac_w0_bits) & DSP32Mac_w0_mask);
3032
27.6k
  int src0 = ((iw1 >> DSP32Mac_src0_bits) & DSP32Mac_src0_mask);
3033
27.6k
  int src1 = ((iw1 >> DSP32Mac_src1_bits) & DSP32Mac_src1_mask);
3034
27.6k
  int dst  = ((iw1 >> DSP32Mac_dst_bits) & DSP32Mac_dst_mask);
3035
27.6k
  int h10  = ((iw1 >> DSP32Mac_h10_bits) & DSP32Mac_h10_mask);
3036
27.6k
  int h00  = ((iw1 >> DSP32Mac_h00_bits) & DSP32Mac_h00_mask);
3037
27.6k
  int h11  = ((iw1 >> DSP32Mac_h11_bits) & DSP32Mac_h11_mask);
3038
27.6k
  int h01  = ((iw1 >> DSP32Mac_h01_bits) & DSP32Mac_h01_mask);
3039
3040
27.6k
  if (w1 == 0 && w0 == 0)
3041
10.1k
    return 0;
3042
3043
17.5k
  if (((1 << mmod) & (P ? 0x313 : 0x1b57)) == 0)
3044
9.40k
    return 0;
3045
3046
8.14k
  if (w1)
3047
5.24k
    {
3048
5.24k
      OUTS (outf, P ? dregs (dst + 1) : dregs_hi (dst));
3049
5.24k
      OUTS (outf, " = ");
3050
5.24k
      decode_multfunc (h01, h11, src0, src1, outf);
3051
3052
5.24k
      if (w0)
3053
2.54k
  {
3054
2.54k
    if (MM)
3055
969
      OUTS (outf, " (M)");
3056
2.54k
    MM = 0;
3057
2.54k
    OUTS (outf, ", ");
3058
2.54k
  }
3059
5.24k
    }
3060
3061
8.14k
  if (w0)
3062
5.44k
    {
3063
5.44k
      OUTS (outf, P ? dregs (dst) : dregs_lo (dst));
3064
5.44k
      OUTS (outf, " = ");
3065
5.44k
      decode_multfunc (h00, h10, src0, src1, outf);
3066
5.44k
    }
3067
3068
8.14k
  decode_optmode (mmod, MM, outf);
3069
8.14k
  return 4;
3070
17.5k
}
3071
3072
static int
3073
decode_dsp32alu_0 (TIword iw0, TIword iw1, disassemble_info *outf)
3074
93.0k
{
3075
  /* dsp32alu
3076
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
3077
     | 1 | 1 | 0 | 0 |.M.| 1 | 0 | - | - | - |.HL|.aopcde............|
3078
     |.aop...|.s.|.x.|.dst0......|.dst1......|.src0......|.src1......|
3079
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+  */
3080
93.0k
  int s    = ((iw1 >> DSP32Alu_s_bits) & DSP32Alu_s_mask);
3081
93.0k
  int x    = ((iw1 >> DSP32Alu_x_bits) & DSP32Alu_x_mask);
3082
93.0k
  int aop  = ((iw1 >> DSP32Alu_aop_bits) & DSP32Alu_aop_mask);
3083
93.0k
  int src0 = ((iw1 >> DSP32Alu_src0_bits) & DSP32Alu_src0_mask);
3084
93.0k
  int src1 = ((iw1 >> DSP32Alu_src1_bits) & DSP32Alu_src1_mask);
3085
93.0k
  int dst0 = ((iw1 >> DSP32Alu_dst0_bits) & DSP32Alu_dst0_mask);
3086
93.0k
  int dst1 = ((iw1 >> DSP32Alu_dst1_bits) & DSP32Alu_dst1_mask);
3087
93.0k
  int HL   = ((iw0 >> (DSP32Alu_HL_bits - 16)) & DSP32Alu_HL_mask);
3088
93.0k
  int aopcde = ((iw0 >> (DSP32Alu_aopcde_bits - 16)) & DSP32Alu_aopcde_mask);
3089
3090
93.0k
  if (aop == 0 && aopcde == 9 && HL == 0 && s == 0)
3091
773
    {
3092
773
      OUTS (outf, "A0.L = ");
3093
773
      OUTS (outf, dregs_lo (src0));
3094
773
    }
3095
92.3k
  else if (aop == 2 && aopcde == 9 && HL == 1 && s == 0)
3096
330
    {
3097
330
      OUTS (outf, "A1.H = ");
3098
330
      OUTS (outf, dregs_hi (src0));
3099
330
    }
3100
91.9k
  else if (aop == 2 && aopcde == 9 && HL == 0 && s == 0)
3101
372
    {
3102
372
      OUTS (outf, "A1.L = ");
3103
372
      OUTS (outf, dregs_lo (src0));
3104
372
    }
3105
91.6k
  else if (aop == 0 && aopcde == 9 && HL == 1 && s == 0)
3106
193
    {
3107
193
      OUTS (outf, "A0.H = ");
3108
193
      OUTS (outf, dregs_hi (src0));
3109
193
    }
3110
91.4k
  else if (x == 1 && HL == 1 && aop == 3 && aopcde == 5)
3111
1.27k
    {
3112
1.27k
      OUTS (outf, dregs_hi (dst0));
3113
1.27k
      OUTS (outf, " = ");
3114
1.27k
      OUTS (outf, dregs (src0));
3115
1.27k
      OUTS (outf, " - ");
3116
1.27k
      OUTS (outf, dregs (src1));
3117
1.27k
      OUTS (outf, " (RND20)");
3118
1.27k
    }
3119
90.1k
  else if (x == 1 && HL == 1 && aop == 2 && aopcde == 5)
3120
146
    {
3121
146
      OUTS (outf, dregs_hi (dst0));
3122
146
      OUTS (outf, " = ");
3123
146
      OUTS (outf, dregs (src0));
3124
146
      OUTS (outf, " + ");
3125
146
      OUTS (outf, dregs (src1));
3126
146
      OUTS (outf, " (RND20)");
3127
146
    }
3128
90.0k
  else if (x == 0 && HL == 0 && aop == 1 && aopcde == 5)
3129
1.12k
    {
3130
1.12k
      OUTS (outf, dregs_lo (dst0));
3131
1.12k
      OUTS (outf, " = ");
3132
1.12k
      OUTS (outf, dregs (src0));
3133
1.12k
      OUTS (outf, " - ");
3134
1.12k
      OUTS (outf, dregs (src1));
3135
1.12k
      OUTS (outf, " (RND12)");
3136
1.12k
    }
3137
88.8k
  else if (x == 0 && HL == 0 && aop == 0 && aopcde == 5)
3138
117
    {
3139
117
      OUTS (outf, dregs_lo (dst0));
3140
117
      OUTS (outf, " = ");
3141
117
      OUTS (outf, dregs (src0));
3142
117
      OUTS (outf, " + ");
3143
117
      OUTS (outf, dregs (src1));
3144
117
      OUTS (outf, " (RND12)");
3145
117
    }
3146
88.7k
  else if (x == 1 && HL == 0 && aop == 3 && aopcde == 5)
3147
710
    {
3148
710
      OUTS (outf, dregs_lo (dst0));
3149
710
      OUTS (outf, " = ");
3150
710
      OUTS (outf, dregs (src0));
3151
710
      OUTS (outf, " - ");
3152
710
      OUTS (outf, dregs (src1));
3153
710
      OUTS (outf, " (RND20)");
3154
710
    }
3155
88.0k
  else if (x == 0 && HL == 1 && aop == 0 && aopcde == 5)
3156
500
    {
3157
500
      OUTS (outf, dregs_hi (dst0));
3158
500
      OUTS (outf, " = ");
3159
500
      OUTS (outf, dregs (src0));
3160
500
      OUTS (outf, " + ");
3161
500
      OUTS (outf, dregs (src1));
3162
500
      OUTS (outf, " (RND12)");
3163
500
    }
3164
87.5k
  else if (x == 1 && HL == 0 && aop == 2 && aopcde == 5)
3165
133
    {
3166
133
      OUTS (outf, dregs_lo (dst0));
3167
133
      OUTS (outf, " = ");
3168
133
      OUTS (outf, dregs (src0));
3169
133
      OUTS (outf, " + ");
3170
133
      OUTS (outf, dregs (src1));
3171
133
      OUTS (outf, " (RND20)");
3172
133
    }
3173
87.4k
  else if (x == 0 && HL == 1 && aop == 1 && aopcde == 5)
3174
770
    {
3175
770
      OUTS (outf, dregs_hi (dst0));
3176
770
      OUTS (outf, " = ");
3177
770
      OUTS (outf, dregs (src0));
3178
770
      OUTS (outf, " - ");
3179
770
      OUTS (outf, dregs (src1));
3180
770
      OUTS (outf, " (RND12)");
3181
770
    }
3182
86.6k
  else if (HL == 1 && aop == 0 && aopcde == 2)
3183
600
    {
3184
600
      OUTS (outf, dregs_hi (dst0));
3185
600
      OUTS (outf, " = ");
3186
600
      OUTS (outf, dregs_lo (src0));
3187
600
      OUTS (outf, " + ");
3188
600
      OUTS (outf, dregs_lo (src1));
3189
600
      amod1 (s, x, outf);
3190
600
    }
3191
86.0k
  else if (HL == 1 && aop == 1 && aopcde == 2)
3192
1.30k
    {
3193
1.30k
      OUTS (outf, dregs_hi (dst0));
3194
1.30k
      OUTS (outf, " = ");
3195
1.30k
      OUTS (outf, dregs_lo (src0));
3196
1.30k
      OUTS (outf, " + ");
3197
1.30k
      OUTS (outf, dregs_hi (src1));
3198
1.30k
      amod1 (s, x, outf);
3199
1.30k
    }
3200
84.7k
  else if (HL == 1 && aop == 2 && aopcde == 2)
3201
480
    {
3202
480
      OUTS (outf, dregs_hi (dst0));
3203
480
      OUTS (outf, " = ");
3204
480
      OUTS (outf, dregs_hi (src0));
3205
480
      OUTS (outf, " + ");
3206
480
      OUTS (outf, dregs_lo (src1));
3207
480
      amod1 (s, x, outf);
3208
480
    }
3209
84.2k
  else if (HL == 1 && aop == 3 && aopcde == 2)
3210
892
    {
3211
892
      OUTS (outf, dregs_hi (dst0));
3212
892
      OUTS (outf, " = ");
3213
892
      OUTS (outf, dregs_hi (src0));
3214
892
      OUTS (outf, " + ");
3215
892
      OUTS (outf, dregs_hi (src1));
3216
892
      amod1 (s, x, outf);
3217
892
    }
3218
83.3k
  else if (HL == 0 && aop == 0 && aopcde == 3)
3219
1.66k
    {
3220
1.66k
      OUTS (outf, dregs_lo (dst0));
3221
1.66k
      OUTS (outf, " = ");
3222
1.66k
      OUTS (outf, dregs_lo (src0));
3223
1.66k
      OUTS (outf, " - ");
3224
1.66k
      OUTS (outf, dregs_lo (src1));
3225
1.66k
      amod1 (s, x, outf);
3226
1.66k
    }
3227
81.7k
  else if (HL == 0 && aop == 1 && aopcde == 3)
3228
645
    {
3229
645
      OUTS (outf, dregs_lo (dst0));
3230
645
      OUTS (outf, " = ");
3231
645
      OUTS (outf, dregs_lo (src0));
3232
645
      OUTS (outf, " - ");
3233
645
      OUTS (outf, dregs_hi (src1));
3234
645
      amod1 (s, x, outf);
3235
645
    }
3236
81.0k
  else if (HL == 0 && aop == 3 && aopcde == 2)
3237
616
    {
3238
616
      OUTS (outf, dregs_lo (dst0));
3239
616
      OUTS (outf, " = ");
3240
616
      OUTS (outf, dregs_hi (src0));
3241
616
      OUTS (outf, " + ");
3242
616
      OUTS (outf, dregs_hi (src1));
3243
616
      amod1 (s, x, outf);
3244
616
    }
3245
80.4k
  else if (HL == 1 && aop == 0 && aopcde == 3)
3246
1.07k
    {
3247
1.07k
      OUTS (outf, dregs_hi (dst0));
3248
1.07k
      OUTS (outf, " = ");
3249
1.07k
      OUTS (outf, dregs_lo (src0));
3250
1.07k
      OUTS (outf, " - ");
3251
1.07k
      OUTS (outf, dregs_lo (src1));
3252
1.07k
      amod1 (s, x, outf);
3253
1.07k
    }
3254
79.3k
  else if (HL == 1 && aop == 1 && aopcde == 3)
3255
639
    {
3256
639
      OUTS (outf, dregs_hi (dst0));
3257
639
      OUTS (outf, " = ");
3258
639
      OUTS (outf, dregs_lo (src0));
3259
639
      OUTS (outf, " - ");
3260
639
      OUTS (outf, dregs_hi (src1));
3261
639
      amod1 (s, x, outf);
3262
639
    }
3263
78.7k
  else if (HL == 1 && aop == 2 && aopcde == 3)
3264
311
    {
3265
311
      OUTS (outf, dregs_hi (dst0));
3266
311
      OUTS (outf, " = ");
3267
311
      OUTS (outf, dregs_hi (src0));
3268
311
      OUTS (outf, " - ");
3269
311
      OUTS (outf, dregs_lo (src1));
3270
311
      amod1 (s, x, outf);
3271
311
    }
3272
78.4k
  else if (HL == 1 && aop == 3 && aopcde == 3)
3273
155
    {
3274
155
      OUTS (outf, dregs_hi (dst0));
3275
155
      OUTS (outf, " = ");
3276
155
      OUTS (outf, dregs_hi (src0));
3277
155
      OUTS (outf, " - ");
3278
155
      OUTS (outf, dregs_hi (src1));
3279
155
      amod1 (s, x, outf);
3280
155
    }
3281
78.2k
  else if (HL == 0 && aop == 2 && aopcde == 2)
3282
504
    {
3283
504
      OUTS (outf, dregs_lo (dst0));
3284
504
      OUTS (outf, " = ");
3285
504
      OUTS (outf, dregs_hi (src0));
3286
504
      OUTS (outf, " + ");
3287
504
      OUTS (outf, dregs_lo (src1));
3288
504
      amod1 (s, x, outf);
3289
504
    }
3290
77.7k
  else if (HL == 0 && aop == 1 && aopcde == 2)
3291
284
    {
3292
284
      OUTS (outf, dregs_lo (dst0));
3293
284
      OUTS (outf, " = ");
3294
284
      OUTS (outf, dregs_lo (src0));
3295
284
      OUTS (outf, " + ");
3296
284
      OUTS (outf, dregs_hi (src1));
3297
284
      amod1 (s, x, outf);
3298
284
    }
3299
77.4k
  else if (HL == 0 && aop == 2 && aopcde == 3)
3300
556
    {
3301
556
      OUTS (outf, dregs_lo (dst0));
3302
556
      OUTS (outf, " = ");
3303
556
      OUTS (outf, dregs_hi (src0));
3304
556
      OUTS (outf, " - ");
3305
556
      OUTS (outf, dregs_lo (src1));
3306
556
      amod1 (s, x, outf);
3307
556
    }
3308
76.9k
  else if (HL == 0 && aop == 3 && aopcde == 3)
3309
1.46k
    {
3310
1.46k
      OUTS (outf, dregs_lo (dst0));
3311
1.46k
      OUTS (outf, " = ");
3312
1.46k
      OUTS (outf, dregs_hi (src0));
3313
1.46k
      OUTS (outf, " - ");
3314
1.46k
      OUTS (outf, dregs_hi (src1));
3315
1.46k
      amod1 (s, x, outf);
3316
1.46k
    }
3317
75.4k
  else if (HL == 0 && aop == 0 && aopcde == 2)
3318
1.95k
    {
3319
1.95k
      OUTS (outf, dregs_lo (dst0));
3320
1.95k
      OUTS (outf, " = ");
3321
1.95k
      OUTS (outf, dregs_lo (src0));
3322
1.95k
      OUTS (outf, " + ");
3323
1.95k
      OUTS (outf, dregs_lo (src1));
3324
1.95k
      amod1 (s, x, outf);
3325
1.95k
    }
3326
73.4k
  else if (aop == 0 && aopcde == 9 && s == 1)
3327
1.33k
    {
3328
1.33k
      OUTS (outf, "A0 = ");
3329
1.33k
      OUTS (outf, dregs (src0));
3330
1.33k
    }
3331
72.1k
  else if (aop == 3 && aopcde == 11 && s == 0)
3332
976
    OUTS (outf, "A0 -= A1");
3333
3334
71.1k
  else if (aop == 3 && aopcde == 11 && s == 1)
3335
442
    OUTS (outf, "A0 -= A1 (W32)");
3336
3337
70.7k
  else if (aop == 1 && aopcde == 22 && HL == 1)
3338
676
    {
3339
676
      OUTS (outf, dregs (dst0));
3340
676
      OUTS (outf, " = BYTEOP2P (");
3341
676
      OUTS (outf, dregs (src0 + 1));
3342
676
      OUTS (outf, ":");
3343
676
      OUTS (outf, imm5d (src0));
3344
676
      OUTS (outf, ", ");
3345
676
      OUTS (outf, dregs (src1 + 1));
3346
676
      OUTS (outf, ":");
3347
676
      OUTS (outf, imm5d (src1));
3348
676
      OUTS (outf, ") (TH");
3349
676
      if (s == 1)
3350
628
  OUTS (outf, ", R)");
3351
48
      else
3352
48
  OUTS (outf, ")");
3353
676
    }
3354
70.0k
  else if (aop == 1 && aopcde == 22 && HL == 0)
3355
1.58k
    {
3356
1.58k
      OUTS (outf, dregs (dst0));
3357
1.58k
      OUTS (outf, " = BYTEOP2P (");
3358
1.58k
      OUTS (outf, dregs (src0 + 1));
3359
1.58k
      OUTS (outf, ":");
3360
1.58k
      OUTS (outf, imm5d (src0));
3361
1.58k
      OUTS (outf, ", ");
3362
1.58k
      OUTS (outf, dregs (src1 + 1));
3363
1.58k
      OUTS (outf, ":");
3364
1.58k
      OUTS (outf, imm5d (src1));
3365
1.58k
      OUTS (outf, ") (TL");
3366
1.58k
      if (s == 1)
3367
1.30k
  OUTS (outf, ", R)");
3368
274
      else
3369
274
  OUTS (outf, ")");
3370
1.58k
    }
3371
68.4k
  else if (aop == 0 && aopcde == 22 && HL == 1)
3372
1.12k
    {
3373
1.12k
      OUTS (outf, dregs (dst0));
3374
1.12k
      OUTS (outf, " = BYTEOP2P (");
3375
1.12k
      OUTS (outf, dregs (src0 + 1));
3376
1.12k
      OUTS (outf, ":");
3377
1.12k
      OUTS (outf, imm5d (src0));
3378
1.12k
      OUTS (outf, ", ");
3379
1.12k
      OUTS (outf, dregs (src1 + 1));
3380
1.12k
      OUTS (outf, ":");
3381
1.12k
      OUTS (outf, imm5d (src1));
3382
1.12k
      OUTS (outf, ") (RNDH");
3383
1.12k
      if (s == 1)
3384
537
  OUTS (outf, ", R)");
3385
585
      else
3386
585
  OUTS (outf, ")");
3387
1.12k
    }
3388
67.3k
  else if (aop == 0 && aopcde == 22 && HL == 0)
3389
586
    {
3390
586
      OUTS (outf, dregs (dst0));
3391
586
      OUTS (outf, " = BYTEOP2P (");
3392
586
      OUTS (outf, dregs (src0 + 1));
3393
586
      OUTS (outf, ":");
3394
586
      OUTS (outf, imm5d (src0));
3395
586
      OUTS (outf, ", ");
3396
586
      OUTS (outf, dregs (src1 + 1));
3397
586
      OUTS (outf, ":");
3398
586
      OUTS (outf, imm5d (src1));
3399
586
      OUTS (outf, ") (RNDL");
3400
586
      if (s == 1)
3401
471
  OUTS (outf, ", R)");
3402
115
      else
3403
115
  OUTS (outf, ")");
3404
586
    }
3405
66.7k
  else if (aop == 0 && s == 0 && aopcde == 8)
3406
229
    OUTS (outf, "A0 = 0");
3407
3408
66.5k
  else if (aop == 0 && s == 1 && aopcde == 8)
3409
440
    OUTS (outf, "A0 = A0 (S)");
3410
3411
66.1k
  else if (aop == 1 && s == 0 && aopcde == 8)
3412
596
    OUTS (outf, "A1 = 0");
3413
3414
65.5k
  else if (aop == 1 && s == 1 && aopcde == 8)
3415
302
    OUTS (outf, "A1 = A1 (S)");
3416
3417
65.2k
  else if (aop == 2 && s == 0 && aopcde == 8)
3418
173
    OUTS (outf, "A1 = A0 = 0");
3419
3420
65.0k
  else if (aop == 2 && s == 1 && aopcde == 8)
3421
178
    OUTS (outf, "A1 = A1 (S), A0 = A0 (S)");
3422
3423
64.8k
  else if (aop == 3 && s == 0 && aopcde == 8)
3424
248
    OUTS (outf, "A0 = A1");
3425
3426
64.6k
  else if (aop == 3 && s == 1 && aopcde == 8)
3427
2.04k
    OUTS (outf, "A1 = A0");
3428
3429
62.5k
  else if (aop == 1 && aopcde == 9 && s == 0)
3430
479
    {
3431
479
      OUTS (outf, "A0.X = ");
3432
479
      OUTS (outf, dregs_lo (src0));
3433
479
    }
3434
62.0k
  else if (aop == 1 && HL == 0 && aopcde == 11)
3435
257
    {
3436
257
      OUTS (outf, dregs_lo (dst0));
3437
257
      OUTS (outf, " = (A0 += A1)");
3438
257
    }
3439
61.8k
  else if (aop == 3 && HL == 0 && aopcde == 16)
3440
1.60k
    OUTS (outf, "A1 = ABS A1, A0 = ABS A0");
3441
3442
60.2k
  else if (aop == 0 && aopcde == 23 && HL == 1)
3443
956
    {
3444
956
      OUTS (outf, dregs (dst0));
3445
956
      OUTS (outf, " = BYTEOP3P (");
3446
956
      OUTS (outf, dregs (src0 + 1));
3447
956
      OUTS (outf, ":");
3448
956
      OUTS (outf, imm5d (src0));
3449
956
      OUTS (outf, ", ");
3450
956
      OUTS (outf, dregs (src1 + 1));
3451
956
      OUTS (outf, ":");
3452
956
      OUTS (outf, imm5d (src1));
3453
956
      OUTS (outf, ") (HI");
3454
956
      if (s == 1)
3455
534
  OUTS (outf, ", R)");
3456
422
      else
3457
422
  OUTS (outf, ")");
3458
956
    }
3459
59.2k
  else if (aop == 3 && aopcde == 9 && s == 0)
3460
560
    {
3461
560
      OUTS (outf, "A1.X = ");
3462
560
      OUTS (outf, dregs_lo (src0));
3463
560
    }
3464
58.7k
  else if (aop == 1 && HL == 1 && aopcde == 16)
3465
245
    OUTS (outf, "A1 = ABS A1");
3466
3467
58.4k
  else if (aop == 0 && HL == 1 && aopcde == 16)
3468
530
    OUTS (outf, "A1 = ABS A0");
3469
3470
57.9k
  else if (aop == 2 && aopcde == 9 && s == 1)
3471
307
    {
3472
307
      OUTS (outf, "A1 = ");
3473
307
      OUTS (outf, dregs (src0));
3474
307
    }
3475
57.6k
  else if (HL == 0 && aop == 3 && aopcde == 12)
3476
240
    {
3477
240
      OUTS (outf, dregs_lo (dst0));
3478
240
      OUTS (outf, " = ");
3479
240
      OUTS (outf, dregs (src0));
3480
240
      OUTS (outf, " (RND)");
3481
240
    }
3482
57.3k
  else if (aop == 1 && HL == 0 && aopcde == 16)
3483
575
    OUTS (outf, "A0 = ABS A1");
3484
3485
56.8k
  else if (aop == 0 && HL == 0 && aopcde == 16)
3486
1.44k
    OUTS (outf, "A0 = ABS A0");
3487
3488
55.3k
  else if (aop == 3 && HL == 0 && aopcde == 15)
3489
172
    {
3490
172
      OUTS (outf, dregs (dst0));
3491
172
      OUTS (outf, " = -");
3492
172
      OUTS (outf, dregs (src0));
3493
172
      OUTS (outf, " (V)");
3494
172
    }
3495
55.1k
  else if (aop == 3 && s == 1 && HL == 0 && aopcde == 7)
3496
307
    {
3497
307
      OUTS (outf, dregs (dst0));
3498
307
      OUTS (outf, " = -");
3499
307
      OUTS (outf, dregs (src0));
3500
307
      OUTS (outf, " (S)");
3501
307
    }
3502
54.8k
  else if (aop == 3 && s == 0 && HL == 0 && aopcde == 7)
3503
250
    {
3504
250
      OUTS (outf, dregs (dst0));
3505
250
      OUTS (outf, " = -");
3506
250
      OUTS (outf, dregs (src0));
3507
250
      OUTS (outf, " (NS)");
3508
250
    }
3509
54.6k
  else if (aop == 1 && HL == 1 && aopcde == 11)
3510
1.80k
    {
3511
1.80k
      OUTS (outf, dregs_hi (dst0));
3512
1.80k
      OUTS (outf, " = (A0 += A1)");
3513
1.80k
    }
3514
52.8k
  else if (aop == 2 && aopcde == 11 && s == 0)
3515
312
    OUTS (outf, "A0 += A1");
3516
3517
52.5k
  else if (aop == 2 && aopcde == 11 && s == 1)
3518
168
    OUTS (outf, "A0 += A1 (W32)");
3519
3520
52.3k
  else if (aop == 3 && HL == 0 && aopcde == 14)
3521
75
    OUTS (outf, "A1 = -A1, A0 = -A0");
3522
3523
52.2k
  else if (HL == 1 && aop == 3 && aopcde == 12)
3524
246
    {
3525
246
      OUTS (outf, dregs_hi (dst0));
3526
246
      OUTS (outf, " = ");
3527
246
      OUTS (outf, dregs (src0));
3528
246
      OUTS (outf, " (RND)");
3529
246
    }
3530
52.0k
  else if (aop == 0 && aopcde == 23 && HL == 0)
3531
385
    {
3532
385
      OUTS (outf, dregs (dst0));
3533
385
      OUTS (outf, " = BYTEOP3P (");
3534
385
      OUTS (outf, dregs (src0 + 1));
3535
385
      OUTS (outf, ":");
3536
385
      OUTS (outf, imm5d (src0));
3537
385
      OUTS (outf, ", ");
3538
385
      OUTS (outf, dregs (src1 + 1));
3539
385
      OUTS (outf, ":");
3540
385
      OUTS (outf, imm5d (src1));
3541
385
      OUTS (outf, ") (LO");
3542
385
      if (s == 1)
3543
288
  OUTS (outf, ", R)");
3544
97
      else
3545
97
  OUTS (outf, ")");
3546
385
    }
3547
51.6k
  else if (aop == 0 && HL == 0 && aopcde == 14)
3548
149
    OUTS (outf, "A0 = -A0");
3549
3550
51.5k
  else if (aop == 1 && HL == 0 && aopcde == 14)
3551
234
    OUTS (outf, "A0 = -A1");
3552
3553
51.2k
  else if (aop == 0 && HL == 1 && aopcde == 14)
3554
246
    OUTS (outf, "A1 = -A0");
3555
3556
51.0k
  else if (aop == 1 && HL == 1 && aopcde == 14)
3557
206
    OUTS (outf, "A1 = -A1");
3558
3559
50.8k
  else if (aop == 0 && aopcde == 12)
3560
922
    {
3561
922
      OUTS (outf, dregs_hi (dst0));
3562
922
      OUTS (outf, " = ");
3563
922
      OUTS (outf, dregs_lo (dst0));
3564
922
      OUTS (outf, " = SIGN (");
3565
922
      OUTS (outf, dregs_hi (src0));
3566
922
      OUTS (outf, ") * ");
3567
922
      OUTS (outf, dregs_hi (src1));
3568
922
      OUTS (outf, " + SIGN (");
3569
922
      OUTS (outf, dregs_lo (src0));
3570
922
      OUTS (outf, ") * ");
3571
922
      OUTS (outf, dregs_lo (src1));
3572
922
    }
3573
49.8k
  else if (aop == 2 && aopcde == 0)
3574
373
    {
3575
373
      OUTS (outf, dregs (dst0));
3576
373
      OUTS (outf, " = ");
3577
373
      OUTS (outf, dregs (src0));
3578
373
      OUTS (outf, " -|+ ");
3579
373
      OUTS (outf, dregs (src1));
3580
373
      amod0 (s, x, outf);
3581
373
    }
3582
49.5k
  else if (aop == 1 && aopcde == 12)
3583
524
    {
3584
524
      OUTS (outf, dregs (dst1));
3585
524
      OUTS (outf, " = A1.L + A1.H, ");
3586
524
      OUTS (outf, dregs (dst0));
3587
524
      OUTS (outf, " = A0.L + A0.H");
3588
524
    }
3589
48.9k
  else if (aop == 2 && aopcde == 4)
3590
223
    {
3591
223
      OUTS (outf, dregs (dst1));
3592
223
      OUTS (outf, " = ");
3593
223
      OUTS (outf, dregs (src0));
3594
223
      OUTS (outf, " + ");
3595
223
      OUTS (outf, dregs (src1));
3596
223
      OUTS (outf, ", ");
3597
223
      OUTS (outf, dregs (dst0));
3598
223
      OUTS (outf, " = ");
3599
223
      OUTS (outf, dregs (src0));
3600
223
      OUTS (outf, " - ");
3601
223
      OUTS (outf, dregs (src1));
3602
223
      amod1 (s, x, outf);
3603
223
    }
3604
48.7k
  else if (HL == 0 && aopcde == 1)
3605
3.28k
    {
3606
3.28k
      OUTS (outf, dregs (dst1));
3607
3.28k
      OUTS (outf, " = ");
3608
3.28k
      OUTS (outf, dregs (src0));
3609
3.28k
      OUTS (outf, " +|+ ");
3610
3.28k
      OUTS (outf, dregs (src1));
3611
3.28k
      OUTS (outf, ", ");
3612
3.28k
      OUTS (outf, dregs (dst0));
3613
3.28k
      OUTS (outf, " = ");
3614
3.28k
      OUTS (outf, dregs (src0));
3615
3.28k
      OUTS (outf, " -|- ");
3616
3.28k
      OUTS (outf, dregs (src1));
3617
3.28k
      amod0amod2 (s, x, aop, outf);
3618
3.28k
    }
3619
45.4k
  else if (aop == 0 && aopcde == 11)
3620
3.47k
    {
3621
3.47k
      OUTS (outf, dregs (dst0));
3622
3.47k
      OUTS (outf, " = (A0 += A1)");
3623
3.47k
    }
3624
42.0k
  else if (aop == 0 && aopcde == 10)
3625
1.69k
    {
3626
1.69k
      OUTS (outf, dregs_lo (dst0));
3627
1.69k
      OUTS (outf, " = A0.X");
3628
1.69k
    }
3629
40.3k
  else if (aop == 1 && aopcde == 10)
3630
684
    {
3631
684
      OUTS (outf, dregs_lo (dst0));
3632
684
      OUTS (outf, " = A1.X");
3633
684
    }
3634
39.6k
  else if (aop == 1 && aopcde == 0)
3635
1.94k
    {
3636
1.94k
      OUTS (outf, dregs (dst0));
3637
1.94k
      OUTS (outf, " = ");
3638
1.94k
      OUTS (outf, dregs (src0));
3639
1.94k
      OUTS (outf, " +|- ");
3640
1.94k
      OUTS (outf, dregs (src1));
3641
1.94k
      amod0 (s, x, outf);
3642
1.94k
    }
3643
37.7k
  else if (aop == 3 && aopcde == 0)
3644
4.25k
    {
3645
4.25k
      OUTS (outf, dregs (dst0));
3646
4.25k
      OUTS (outf, " = ");
3647
4.25k
      OUTS (outf, dregs (src0));
3648
4.25k
      OUTS (outf, " -|- ");
3649
4.25k
      OUTS (outf, dregs (src1));
3650
4.25k
      amod0 (s, x, outf);
3651
4.25k
    }
3652
33.4k
  else if (aop == 1 && aopcde == 4)
3653
697
    {
3654
697
      OUTS (outf, dregs (dst0));
3655
697
      OUTS (outf, " = ");
3656
697
      OUTS (outf, dregs (src0));
3657
697
      OUTS (outf, " - ");
3658
697
      OUTS (outf, dregs (src1));
3659
697
      amod1 (s, x, outf);
3660
697
    }
3661
32.7k
  else if (aop == 0 && aopcde == 17)
3662
3.03k
    {
3663
3.03k
      OUTS (outf, dregs (dst1));
3664
3.03k
      OUTS (outf, " = A1 + A0, ");
3665
3.03k
      OUTS (outf, dregs (dst0));
3666
3.03k
      OUTS (outf, " = A1 - A0");
3667
3.03k
      amod1 (s, x, outf);
3668
3.03k
    }
3669
29.7k
  else if (aop == 1 && aopcde == 17)
3670
1.23k
    {
3671
1.23k
      OUTS (outf, dregs (dst1));
3672
1.23k
      OUTS (outf, " = A0 + A1, ");
3673
1.23k
      OUTS (outf, dregs (dst0));
3674
1.23k
      OUTS (outf, " = A0 - A1");
3675
1.23k
      amod1 (s, x, outf);
3676
1.23k
    }
3677
28.4k
  else if (aop == 0 && aopcde == 18)
3678
818
    {
3679
818
      OUTS (outf, "SAA (");
3680
818
      OUTS (outf, dregs (src0 + 1));
3681
818
      OUTS (outf, ":");
3682
818
      OUTS (outf, imm5d (src0));
3683
818
      OUTS (outf, ", ");
3684
818
      OUTS (outf, dregs (src1 + 1));
3685
818
      OUTS (outf, ":");
3686
818
      OUTS (outf, imm5d (src1));
3687
818
      OUTS (outf, ")");
3688
818
      aligndir (s, outf);
3689
818
    }
3690
27.6k
  else if (aop == 3 && aopcde == 18)
3691
328
    OUTS (outf, "DISALGNEXCPT");
3692
3693
27.3k
  else if (aop == 0 && aopcde == 20)
3694
601
    {
3695
601
      OUTS (outf, dregs (dst0));
3696
601
      OUTS (outf, " = BYTEOP1P (");
3697
601
      OUTS (outf, dregs (src0 + 1));
3698
601
      OUTS (outf, ":");
3699
601
      OUTS (outf, imm5d (src0));
3700
601
      OUTS (outf, ", ");
3701
601
      OUTS (outf, dregs (src1 + 1));
3702
601
      OUTS (outf, ":");
3703
601
      OUTS (outf, imm5d (src1));
3704
601
      OUTS (outf, ")");
3705
601
      aligndir (s, outf);
3706
601
    }
3707
26.7k
  else if (aop == 1 && aopcde == 20)
3708
540
    {
3709
540
      OUTS (outf, dregs (dst0));
3710
540
      OUTS (outf, " = BYTEOP1P (");
3711
540
      OUTS (outf, dregs (src0 + 1));
3712
540
      OUTS (outf, ":");
3713
540
      OUTS (outf, imm5d (src0));
3714
540
      OUTS (outf, ", ");
3715
540
      OUTS (outf, dregs (src1 + 1));
3716
540
      OUTS (outf, ":");
3717
540
      OUTS (outf, imm5d (src1));
3718
540
      OUTS (outf, ") (T");
3719
540
      if (s == 1)
3720
292
  OUTS (outf, ", R)");
3721
248
      else
3722
248
  OUTS (outf, ")");
3723
540
    }
3724
26.2k
  else if (aop == 0 && aopcde == 21)
3725
906
    {
3726
906
      OUTS (outf, "(");
3727
906
      OUTS (outf, dregs (dst1));
3728
906
      OUTS (outf, ", ");
3729
906
      OUTS (outf, dregs (dst0));
3730
906
      OUTS (outf, ") = BYTEOP16P (");
3731
906
      OUTS (outf, dregs (src0 + 1));
3732
906
      OUTS (outf, ":");
3733
906
      OUTS (outf, imm5d (src0));
3734
906
      OUTS (outf, ", ");
3735
906
      OUTS (outf, dregs (src1 + 1));
3736
906
      OUTS (outf, ":");
3737
906
      OUTS (outf, imm5d (src1));
3738
906
      OUTS (outf, ")");
3739
906
      aligndir (s, outf);
3740
906
    }
3741
25.2k
  else if (aop == 1 && aopcde == 21)
3742
892
    {
3743
892
      OUTS (outf, "(");
3744
892
      OUTS (outf, dregs (dst1));
3745
892
      OUTS (outf, ", ");
3746
892
      OUTS (outf, dregs (dst0));
3747
892
      OUTS (outf, ") = BYTEOP16M (");
3748
892
      OUTS (outf, dregs (src0 + 1));
3749
892
      OUTS (outf, ":");
3750
892
      OUTS (outf, imm5d (src0));
3751
892
      OUTS (outf, ", ");
3752
892
      OUTS (outf, dregs (src1 + 1));
3753
892
      OUTS (outf, ":");
3754
892
      OUTS (outf, imm5d (src1));
3755
892
      OUTS (outf, ")");
3756
892
      aligndir (s, outf);
3757
892
    }
3758
24.4k
  else if (aop == 2 && aopcde == 7)
3759
470
    {
3760
470
      OUTS (outf, dregs (dst0));
3761
470
      OUTS (outf, " = ABS ");
3762
470
      OUTS (outf, dregs (src0));
3763
470
    }
3764
23.9k
  else if (aop == 1 && aopcde == 7)
3765
350
    {
3766
350
      OUTS (outf, dregs (dst0));
3767
350
      OUTS (outf, " = MIN (");
3768
350
      OUTS (outf, dregs (src0));
3769
350
      OUTS (outf, ", ");
3770
350
      OUTS (outf, dregs (src1));
3771
350
      OUTS (outf, ")");
3772
350
    }
3773
23.5k
  else if (aop == 0 && aopcde == 7)
3774
541
    {
3775
541
      OUTS (outf, dregs (dst0));
3776
541
      OUTS (outf, " = MAX (");
3777
541
      OUTS (outf, dregs (src0));
3778
541
      OUTS (outf, ", ");
3779
541
      OUTS (outf, dregs (src1));
3780
541
      OUTS (outf, ")");
3781
541
    }
3782
23.0k
  else if (aop == 2 && aopcde == 6)
3783
222
    {
3784
222
      OUTS (outf, dregs (dst0));
3785
222
      OUTS (outf, " = ABS ");
3786
222
      OUTS (outf, dregs (src0));
3787
222
      OUTS (outf, " (V)");
3788
222
    }
3789
22.8k
  else if (aop == 1 && aopcde == 6)
3790
245
    {
3791
245
      OUTS (outf, dregs (dst0));
3792
245
      OUTS (outf, " = MIN (");
3793
245
      OUTS (outf, dregs (src0));
3794
245
      OUTS (outf, ", ");
3795
245
      OUTS (outf, dregs (src1));
3796
245
      OUTS (outf, ") (V)");
3797
245
    }
3798
22.5k
  else if (aop == 0 && aopcde == 6)
3799
588
    {
3800
588
      OUTS (outf, dregs (dst0));
3801
588
      OUTS (outf, " = MAX (");
3802
588
      OUTS (outf, dregs (src0));
3803
588
      OUTS (outf, ", ");
3804
588
      OUTS (outf, dregs (src1));
3805
588
      OUTS (outf, ") (V)");
3806
588
    }
3807
21.9k
  else if (HL == 1 && aopcde == 1)
3808
3.35k
    {
3809
3.35k
      OUTS (outf, dregs (dst1));
3810
3.35k
      OUTS (outf, " = ");
3811
3.35k
      OUTS (outf, dregs (src0));
3812
3.35k
      OUTS (outf, " +|- ");
3813
3.35k
      OUTS (outf, dregs (src1));
3814
3.35k
      OUTS (outf, ", ");
3815
3.35k
      OUTS (outf, dregs (dst0));
3816
3.35k
      OUTS (outf, " = ");
3817
3.35k
      OUTS (outf, dregs (src0));
3818
3.35k
      OUTS (outf, " -|+ ");
3819
3.35k
      OUTS (outf, dregs (src1));
3820
3.35k
      amod0amod2 (s, x, aop, outf);
3821
3.35k
    }
3822
18.6k
  else if (aop == 0 && aopcde == 4)
3823
817
    {
3824
817
      OUTS (outf, dregs (dst0));
3825
817
      OUTS (outf, " = ");
3826
817
      OUTS (outf, dregs (src0));
3827
817
      OUTS (outf, " + ");
3828
817
      OUTS (outf, dregs (src1));
3829
817
      amod1 (s, x, outf);
3830
817
    }
3831
17.8k
  else if (aop == 0 && aopcde == 0)
3832
5.25k
    {
3833
5.25k
      OUTS (outf, dregs (dst0));
3834
5.25k
      OUTS (outf, " = ");
3835
5.25k
      OUTS (outf, dregs (src0));
3836
5.25k
      OUTS (outf, " +|+ ");
3837
5.25k
      OUTS (outf, dregs (src1));
3838
5.25k
      amod0 (s, x, outf);
3839
5.25k
    }
3840
12.5k
  else if (aop == 0 && aopcde == 24)
3841
250
    {
3842
250
      OUTS (outf, dregs (dst0));
3843
250
      OUTS (outf, " = BYTEPACK (");
3844
250
      OUTS (outf, dregs (src0));
3845
250
      OUTS (outf, ", ");
3846
250
      OUTS (outf, dregs (src1));
3847
250
      OUTS (outf, ")");
3848
250
    }
3849
12.3k
  else if (aop == 1 && aopcde == 24)
3850
1.03k
    {
3851
1.03k
      OUTS (outf, "(");
3852
1.03k
      OUTS (outf, dregs (dst1));
3853
1.03k
      OUTS (outf, ", ");
3854
1.03k
      OUTS (outf, dregs (dst0));
3855
1.03k
      OUTS (outf, ") = BYTEUNPACK ");
3856
1.03k
      OUTS (outf, dregs (src0 + 1));
3857
1.03k
      OUTS (outf, ":");
3858
1.03k
      OUTS (outf, imm5d (src0));
3859
1.03k
      aligndir (s, outf);
3860
1.03k
    }
3861
11.2k
  else if (aopcde == 13)
3862
2.20k
    {
3863
2.20k
      OUTS (outf, "(");
3864
2.20k
      OUTS (outf, dregs (dst1));
3865
2.20k
      OUTS (outf, ", ");
3866
2.20k
      OUTS (outf, dregs (dst0));
3867
2.20k
      OUTS (outf, ") = SEARCH ");
3868
2.20k
      OUTS (outf, dregs (src0));
3869
2.20k
      OUTS (outf, " (");
3870
2.20k
      searchmod (aop, outf);
3871
2.20k
      OUTS (outf, ")");
3872
2.20k
    }
3873
9.08k
  else
3874
9.08k
    return 0;
3875
3876
84.0k
  return 4;
3877
93.0k
}
3878
3879
static int
3880
decode_dsp32shift_0 (TIword iw0, TIword iw1, disassemble_info *outf)
3881
34.0k
{
3882
  /* dsp32shift
3883
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
3884
     | 1 | 1 | 0 | 0 |.M.| 1 | 1 | 0 | 0 | - | - |.sopcde............|
3885
     |.sop...|.HLs...|.dst0......| - | - | - |.src0......|.src1......|
3886
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+  */
3887
34.0k
  int HLs  = ((iw1 >> DSP32Shift_HLs_bits) & DSP32Shift_HLs_mask);
3888
34.0k
  int sop  = ((iw1 >> DSP32Shift_sop_bits) & DSP32Shift_sop_mask);
3889
34.0k
  int src0 = ((iw1 >> DSP32Shift_src0_bits) & DSP32Shift_src0_mask);
3890
34.0k
  int src1 = ((iw1 >> DSP32Shift_src1_bits) & DSP32Shift_src1_mask);
3891
34.0k
  int dst0 = ((iw1 >> DSP32Shift_dst0_bits) & DSP32Shift_dst0_mask);
3892
34.0k
  int sopcde = ((iw0 >> (DSP32Shift_sopcde_bits - 16)) & DSP32Shift_sopcde_mask);
3893
34.0k
  const char *acc01 = (HLs & 1) == 0 ? "A0" : "A1";
3894
3895
34.0k
  if (HLs == 0 && sop == 0 && sopcde == 0)
3896
898
    {
3897
898
      OUTS (outf, dregs_lo (dst0));
3898
898
      OUTS (outf, " = ASHIFT ");
3899
898
      OUTS (outf, dregs_lo (src1));
3900
898
      OUTS (outf, " BY ");
3901
898
      OUTS (outf, dregs_lo (src0));
3902
898
    }
3903
33.1k
  else if (HLs == 1 && sop == 0 && sopcde == 0)
3904
641
    {
3905
641
      OUTS (outf, dregs_lo (dst0));
3906
641
      OUTS (outf, " = ASHIFT ");
3907
641
      OUTS (outf, dregs_hi (src1));
3908
641
      OUTS (outf, " BY ");
3909
641
      OUTS (outf, dregs_lo (src0));
3910
641
    }
3911
32.5k
  else if (HLs == 2 && sop == 0 && sopcde == 0)
3912
951
    {
3913
951
      OUTS (outf, dregs_hi (dst0));
3914
951
      OUTS (outf, " = ASHIFT ");
3915
951
      OUTS (outf, dregs_lo (src1));
3916
951
      OUTS (outf, " BY ");
3917
951
      OUTS (outf, dregs_lo (src0));
3918
951
    }
3919
31.5k
  else if (HLs == 3 && sop == 0 && sopcde == 0)
3920
427
    {
3921
427
      OUTS (outf, dregs_hi (dst0));
3922
427
      OUTS (outf, " = ASHIFT ");
3923
427
      OUTS (outf, dregs_hi (src1));
3924
427
      OUTS (outf, " BY ");
3925
427
      OUTS (outf, dregs_lo (src0));
3926
427
    }
3927
31.1k
  else if (HLs == 0 && sop == 1 && sopcde == 0)
3928
1.69k
    {
3929
1.69k
      OUTS (outf, dregs_lo (dst0));
3930
1.69k
      OUTS (outf, " = ASHIFT ");
3931
1.69k
      OUTS (outf, dregs_lo (src1));
3932
1.69k
      OUTS (outf, " BY ");
3933
1.69k
      OUTS (outf, dregs_lo (src0));
3934
1.69k
      OUTS (outf, " (S)");
3935
1.69k
    }
3936
29.4k
  else if (HLs == 1 && sop == 1 && sopcde == 0)
3937
427
    {
3938
427
      OUTS (outf, dregs_lo (dst0));
3939
427
      OUTS (outf, " = ASHIFT ");
3940
427
      OUTS (outf, dregs_hi (src1));
3941
427
      OUTS (outf, " BY ");
3942
427
      OUTS (outf, dregs_lo (src0));
3943
427
      OUTS (outf, " (S)");
3944
427
    }
3945
29.0k
  else if (HLs == 2 && sop == 1 && sopcde == 0)
3946
1.03k
    {
3947
1.03k
      OUTS (outf, dregs_hi (dst0));
3948
1.03k
      OUTS (outf, " = ASHIFT ");
3949
1.03k
      OUTS (outf, dregs_lo (src1));
3950
1.03k
      OUTS (outf, " BY ");
3951
1.03k
      OUTS (outf, dregs_lo (src0));
3952
1.03k
      OUTS (outf, " (S)");
3953
1.03k
    }
3954
28.0k
  else if (HLs == 3 && sop == 1 && sopcde == 0)
3955
293
    {
3956
293
      OUTS (outf, dregs_hi (dst0));
3957
293
      OUTS (outf, " = ASHIFT ");
3958
293
      OUTS (outf, dregs_hi (src1));
3959
293
      OUTS (outf, " BY ");
3960
293
      OUTS (outf, dregs_lo (src0));
3961
293
      OUTS (outf, " (S)");
3962
293
    }
3963
27.7k
  else if (sop == 2 && sopcde == 0)
3964
983
    {
3965
983
      OUTS (outf, (HLs & 2) == 0 ? dregs_lo (dst0) : dregs_hi (dst0));
3966
983
      OUTS (outf, " = LSHIFT ");
3967
983
      OUTS (outf, (HLs & 1) == 0 ? dregs_lo (src1) : dregs_hi (src1));
3968
983
      OUTS (outf, " BY ");
3969
983
      OUTS (outf, dregs_lo (src0));
3970
983
    }
3971
26.7k
  else if (sop == 0 && sopcde == 3)
3972
554
    {
3973
554
      OUTS (outf, acc01);
3974
554
      OUTS (outf, " = ASHIFT ");
3975
554
      OUTS (outf, acc01);
3976
554
      OUTS (outf, " BY ");
3977
554
      OUTS (outf, dregs_lo (src0));
3978
554
    }
3979
26.1k
  else if (sop == 1 && sopcde == 3)
3980
883
    {
3981
883
      OUTS (outf, acc01);
3982
883
      OUTS (outf, " = LSHIFT ");
3983
883
      OUTS (outf, acc01);
3984
883
      OUTS (outf, " BY ");
3985
883
      OUTS (outf, dregs_lo (src0));
3986
883
    }
3987
25.2k
  else if (sop == 2 && sopcde == 3)
3988
119
    {
3989
119
      OUTS (outf, acc01);
3990
119
      OUTS (outf, " = ROT ");
3991
119
      OUTS (outf, acc01);
3992
119
      OUTS (outf, " BY ");
3993
119
      OUTS (outf, dregs_lo (src0));
3994
119
    }
3995
25.1k
  else if (sop == 3 && sopcde == 3)
3996
400
    {
3997
400
      OUTS (outf, dregs (dst0));
3998
400
      OUTS (outf, " = ROT ");
3999
400
      OUTS (outf, dregs (src1));
4000
400
      OUTS (outf, " BY ");
4001
400
      OUTS (outf, dregs_lo (src0));
4002
400
    }
4003
24.7k
  else if (sop == 1 && sopcde == 1)
4004
153
    {
4005
153
      OUTS (outf, dregs (dst0));
4006
153
      OUTS (outf, " = ASHIFT ");
4007
153
      OUTS (outf, dregs (src1));
4008
153
      OUTS (outf, " BY ");
4009
153
      OUTS (outf, dregs_lo (src0));
4010
153
      OUTS (outf, " (V, S)");
4011
153
    }
4012
24.6k
  else if (sop == 0 && sopcde == 1)
4013
646
    {
4014
646
      OUTS (outf, dregs (dst0));
4015
646
      OUTS (outf, " = ASHIFT ");
4016
646
      OUTS (outf, dregs (src1));
4017
646
      OUTS (outf, " BY ");
4018
646
      OUTS (outf, dregs_lo (src0));
4019
646
      OUTS (outf, " (V)");
4020
646
    }
4021
23.9k
  else if (sop == 0 && sopcde == 2)
4022
1.73k
    {
4023
1.73k
      OUTS (outf, dregs (dst0));
4024
1.73k
      OUTS (outf, " = ASHIFT ");
4025
1.73k
      OUTS (outf, dregs (src1));
4026
1.73k
      OUTS (outf, " BY ");
4027
1.73k
      OUTS (outf, dregs_lo (src0));
4028
1.73k
    }
4029
22.2k
  else if (sop == 1 && sopcde == 2)
4030
1.00k
    {
4031
1.00k
      OUTS (outf, dregs (dst0));
4032
1.00k
      OUTS (outf, " = ASHIFT ");
4033
1.00k
      OUTS (outf, dregs (src1));
4034
1.00k
      OUTS (outf, " BY ");
4035
1.00k
      OUTS (outf, dregs_lo (src0));
4036
1.00k
      OUTS (outf, " (S)");
4037
1.00k
    }
4038
21.2k
  else if (sop == 2 && sopcde == 2)
4039
1.01k
    {
4040
1.01k
      OUTS (outf, dregs (dst0));
4041
1.01k
      OUTS (outf, " = LSHIFT ");
4042
1.01k
      OUTS (outf, dregs (src1));
4043
1.01k
      OUTS (outf, " BY ");
4044
1.01k
      OUTS (outf, dregs_lo (src0));
4045
1.01k
    }
4046
20.2k
  else if (sop == 3 && sopcde == 2)
4047
524
    {
4048
524
      OUTS (outf, dregs (dst0));
4049
524
      OUTS (outf, " = ROT ");
4050
524
      OUTS (outf, dregs (src1));
4051
524
      OUTS (outf, " BY ");
4052
524
      OUTS (outf, dregs_lo (src0));
4053
524
    }
4054
19.7k
  else if (sop == 2 && sopcde == 1)
4055
323
    {
4056
323
      OUTS (outf, dregs (dst0));
4057
323
      OUTS (outf, " = LSHIFT ");
4058
323
      OUTS (outf, dregs (src1));
4059
323
      OUTS (outf, " BY ");
4060
323
      OUTS (outf, dregs_lo (src0));
4061
323
      OUTS (outf, " (V)");
4062
323
    }
4063
19.3k
  else if (sop == 0 && sopcde == 4)
4064
680
    {
4065
680
      OUTS (outf, dregs (dst0));
4066
680
      OUTS (outf, " = PACK (");
4067
680
      OUTS (outf, dregs_lo (src1));
4068
680
      OUTS (outf, ", ");
4069
680
      OUTS (outf, dregs_lo (src0));
4070
680
      OUTS (outf, ")");
4071
680
    }
4072
18.6k
  else if (sop == 1 && sopcde == 4)
4073
602
    {
4074
602
      OUTS (outf, dregs (dst0));
4075
602
      OUTS (outf, " = PACK (");
4076
602
      OUTS (outf, dregs_lo (src1));
4077
602
      OUTS (outf, ", ");
4078
602
      OUTS (outf, dregs_hi (src0));
4079
602
      OUTS (outf, ")");
4080
602
    }
4081
18.0k
  else if (sop == 2 && sopcde == 4)
4082
277
    {
4083
277
      OUTS (outf, dregs (dst0));
4084
277
      OUTS (outf, " = PACK (");
4085
277
      OUTS (outf, dregs_hi (src1));
4086
277
      OUTS (outf, ", ");
4087
277
      OUTS (outf, dregs_lo (src0));
4088
277
      OUTS (outf, ")");
4089
277
    }
4090
17.8k
  else if (sop == 3 && sopcde == 4)
4091
758
    {
4092
758
      OUTS (outf, dregs (dst0));
4093
758
      OUTS (outf, " = PACK (");
4094
758
      OUTS (outf, dregs_hi (src1));
4095
758
      OUTS (outf, ", ");
4096
758
      OUTS (outf, dregs_hi (src0));
4097
758
      OUTS (outf, ")");
4098
758
    }
4099
17.0k
  else if (sop == 0 && sopcde == 5)
4100
405
    {
4101
405
      OUTS (outf, dregs_lo (dst0));
4102
405
      OUTS (outf, " = SIGNBITS ");
4103
405
      OUTS (outf, dregs (src1));
4104
405
    }
4105
16.6k
  else if (sop == 1 && sopcde == 5)
4106
191
    {
4107
191
      OUTS (outf, dregs_lo (dst0));
4108
191
      OUTS (outf, " = SIGNBITS ");
4109
191
      OUTS (outf, dregs_lo (src1));
4110
191
    }
4111
16.4k
  else if (sop == 2 && sopcde == 5)
4112
116
    {
4113
116
      OUTS (outf, dregs_lo (dst0));
4114
116
      OUTS (outf, " = SIGNBITS ");
4115
116
      OUTS (outf, dregs_hi (src1));
4116
116
    }
4117
16.3k
  else if (sop == 0 && sopcde == 6)
4118
222
    {
4119
222
      OUTS (outf, dregs_lo (dst0));
4120
222
      OUTS (outf, " = SIGNBITS A0");
4121
222
    }
4122
16.1k
  else if (sop == 1 && sopcde == 6)
4123
90
    {
4124
90
      OUTS (outf, dregs_lo (dst0));
4125
90
      OUTS (outf, " = SIGNBITS A1");
4126
90
    }
4127
16.0k
  else if (sop == 3 && sopcde == 6)
4128
423
    {
4129
423
      OUTS (outf, dregs_lo (dst0));
4130
423
      OUTS (outf, " = ONES ");
4131
423
      OUTS (outf, dregs (src1));
4132
423
    }
4133
15.6k
  else if (sop == 0 && sopcde == 7)
4134
690
    {
4135
690
      OUTS (outf, dregs_lo (dst0));
4136
690
      OUTS (outf, " = EXPADJ (");
4137
690
      OUTS (outf, dregs (src1));
4138
690
      OUTS (outf, ", ");
4139
690
      OUTS (outf, dregs_lo (src0));
4140
690
      OUTS (outf, ")");
4141
690
    }
4142
14.9k
  else if (sop == 1 && sopcde == 7)
4143
971
    {
4144
971
      OUTS (outf, dregs_lo (dst0));
4145
971
      OUTS (outf, " = EXPADJ (");
4146
971
      OUTS (outf, dregs (src1));
4147
971
      OUTS (outf, ", ");
4148
971
      OUTS (outf, dregs_lo (src0));
4149
971
      OUTS (outf, ") (V)");
4150
971
    }
4151
13.9k
  else if (sop == 2 && sopcde == 7)
4152
53
    {
4153
53
      OUTS (outf, dregs_lo (dst0));
4154
53
      OUTS (outf, " = EXPADJ (");
4155
53
      OUTS (outf, dregs_lo (src1));
4156
53
      OUTS (outf, ", ");
4157
53
      OUTS (outf, dregs_lo (src0));
4158
53
      OUTS (outf, ")");
4159
53
    }
4160
13.9k
  else if (sop == 3 && sopcde == 7)
4161
1.43k
    {
4162
1.43k
      OUTS (outf, dregs_lo (dst0));
4163
1.43k
      OUTS (outf, " = EXPADJ (");
4164
1.43k
      OUTS (outf, dregs_hi (src1));
4165
1.43k
      OUTS (outf, ", ");
4166
1.43k
      OUTS (outf, dregs_lo (src0));
4167
1.43k
      OUTS (outf, ")");
4168
1.43k
    }
4169
12.4k
  else if (sop == 0 && sopcde == 8)
4170
447
    {
4171
447
      OUTS (outf, "BITMUX (");
4172
447
      OUTS (outf, dregs (src0));
4173
447
      OUTS (outf, ", ");
4174
447
      OUTS (outf, dregs (src1));
4175
447
      OUTS (outf, ", A0) (ASR)");
4176
447
    }
4177
12.0k
  else if (sop == 1 && sopcde == 8)
4178
210
    {
4179
210
      OUTS (outf, "BITMUX (");
4180
210
      OUTS (outf, dregs (src0));
4181
210
      OUTS (outf, ", ");
4182
210
      OUTS (outf, dregs (src1));
4183
210
      OUTS (outf, ", A0) (ASL)");
4184
210
    }
4185
11.8k
  else if (sop == 0 && sopcde == 9)
4186
1.29k
    {
4187
1.29k
      OUTS (outf, dregs_lo (dst0));
4188
1.29k
      OUTS (outf, " = VIT_MAX (");
4189
1.29k
      OUTS (outf, dregs (src1));
4190
1.29k
      OUTS (outf, ") (ASL)");
4191
1.29k
    }
4192
10.5k
  else if (sop == 1 && sopcde == 9)
4193
340
    {
4194
340
      OUTS (outf, dregs_lo (dst0));
4195
340
      OUTS (outf, " = VIT_MAX (");
4196
340
      OUTS (outf, dregs (src1));
4197
340
      OUTS (outf, ") (ASR)");
4198
340
    }
4199
10.1k
  else if (sop == 2 && sopcde == 9)
4200
666
    {
4201
666
      OUTS (outf, dregs (dst0));
4202
666
      OUTS (outf, " = VIT_MAX (");
4203
666
      OUTS (outf, dregs (src1));
4204
666
      OUTS (outf, ", ");
4205
666
      OUTS (outf, dregs (src0));
4206
666
      OUTS (outf, ") (ASL)");
4207
666
    }
4208
9.51k
  else if (sop == 3 && sopcde == 9)
4209
656
    {
4210
656
      OUTS (outf, dregs (dst0));
4211
656
      OUTS (outf, " = VIT_MAX (");
4212
656
      OUTS (outf, dregs (src1));
4213
656
      OUTS (outf, ", ");
4214
656
      OUTS (outf, dregs (src0));
4215
656
      OUTS (outf, ") (ASR)");
4216
656
    }
4217
8.85k
  else if (sop == 0 && sopcde == 10)
4218
418
    {
4219
418
      OUTS (outf, dregs (dst0));
4220
418
      OUTS (outf, " = EXTRACT (");
4221
418
      OUTS (outf, dregs (src1));
4222
418
      OUTS (outf, ", ");
4223
418
      OUTS (outf, dregs_lo (src0));
4224
418
      OUTS (outf, ") (Z)");
4225
418
    }
4226
8.43k
  else if (sop == 1 && sopcde == 10)
4227
78
    {
4228
78
      OUTS (outf, dregs (dst0));
4229
78
      OUTS (outf, " = EXTRACT (");
4230
78
      OUTS (outf, dregs (src1));
4231
78
      OUTS (outf, ", ");
4232
78
      OUTS (outf, dregs_lo (src0));
4233
78
      OUTS (outf, ") (X)");
4234
78
    }
4235
8.35k
  else if (sop == 2 && sopcde == 10)
4236
463
    {
4237
463
      OUTS (outf, dregs (dst0));
4238
463
      OUTS (outf, " = DEPOSIT (");
4239
463
      OUTS (outf, dregs (src1));
4240
463
      OUTS (outf, ", ");
4241
463
      OUTS (outf, dregs (src0));
4242
463
      OUTS (outf, ")");
4243
463
    }
4244
7.89k
  else if (sop == 3 && sopcde == 10)
4245
427
    {
4246
427
      OUTS (outf, dregs (dst0));
4247
427
      OUTS (outf, " = DEPOSIT (");
4248
427
      OUTS (outf, dregs (src1));
4249
427
      OUTS (outf, ", ");
4250
427
      OUTS (outf, dregs (src0));
4251
427
      OUTS (outf, ") (X)");
4252
427
    }
4253
7.46k
  else if (sop == 0 && sopcde == 11)
4254
337
    {
4255
337
      OUTS (outf, dregs_lo (dst0));
4256
337
      OUTS (outf, " = CC = BXORSHIFT (A0, ");
4257
337
      OUTS (outf, dregs (src0));
4258
337
      OUTS (outf, ")");
4259
337
    }
4260
7.13k
  else if (sop == 1 && sopcde == 11)
4261
961
    {
4262
961
      OUTS (outf, dregs_lo (dst0));
4263
961
      OUTS (outf, " = CC = BXOR (A0, ");
4264
961
      OUTS (outf, dregs (src0));
4265
961
      OUTS (outf, ")");
4266
961
    }
4267
6.17k
  else if (sop == 0 && sopcde == 12)
4268
438
    OUTS (outf, "A0 = BXORSHIFT (A0, A1, CC)");
4269
4270
5.73k
  else if (sop == 1 && sopcde == 12)
4271
277
    {
4272
277
      OUTS (outf, dregs_lo (dst0));
4273
277
      OUTS (outf, " = CC = BXOR (A0, A1, CC)");
4274
277
    }
4275
5.45k
  else if (sop == 0 && sopcde == 13)
4276
93
    {
4277
93
      OUTS (outf, dregs (dst0));
4278
93
      OUTS (outf, " = ALIGN8 (");
4279
93
      OUTS (outf, dregs (src1));
4280
93
      OUTS (outf, ", ");
4281
93
      OUTS (outf, dregs (src0));
4282
93
      OUTS (outf, ")");
4283
93
    }
4284
5.36k
  else if (sop == 1 && sopcde == 13)
4285
70
    {
4286
70
      OUTS (outf, dregs (dst0));
4287
70
      OUTS (outf, " = ALIGN16 (");
4288
70
      OUTS (outf, dregs (src1));
4289
70
      OUTS (outf, ", ");
4290
70
      OUTS (outf, dregs (src0));
4291
70
      OUTS (outf, ")");
4292
70
    }
4293
5.29k
  else if (sop == 2 && sopcde == 13)
4294
125
    {
4295
125
      OUTS (outf, dregs (dst0));
4296
125
      OUTS (outf, " = ALIGN24 (");
4297
125
      OUTS (outf, dregs (src1));
4298
125
      OUTS (outf, ", ");
4299
125
      OUTS (outf, dregs (src0));
4300
125
      OUTS (outf, ")");
4301
125
    }
4302
5.16k
  else
4303
5.16k
    return 0;
4304
4305
28.9k
  return 4;
4306
34.0k
}
4307
4308
static int
4309
decode_dsp32shiftimm_0 (TIword iw0, TIword iw1, disassemble_info *outf)
4310
29.1k
{
4311
  /* dsp32shiftimm
4312
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
4313
     | 1 | 1 | 0 | 0 |.M.| 1 | 1 | 0 | 1 | - | - |.sopcde............|
4314
     |.sop...|.HLs...|.dst0......|.immag.................|.src1......|
4315
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+  */
4316
29.1k
  int src1     = ((iw1 >> DSP32ShiftImm_src1_bits) & DSP32ShiftImm_src1_mask);
4317
29.1k
  int sop      = ((iw1 >> DSP32ShiftImm_sop_bits) & DSP32ShiftImm_sop_mask);
4318
29.1k
  int bit8     = ((iw1 >> 8) & 0x1);
4319
29.1k
  int immag    = ((iw1 >> DSP32ShiftImm_immag_bits) & DSP32ShiftImm_immag_mask);
4320
29.1k
  int newimmag = (-(iw1 >> DSP32ShiftImm_immag_bits) & DSP32ShiftImm_immag_mask);
4321
29.1k
  int dst0     = ((iw1 >> DSP32ShiftImm_dst0_bits) & DSP32ShiftImm_dst0_mask);
4322
29.1k
  int sopcde   = ((iw0 >> (DSP32ShiftImm_sopcde_bits - 16)) & DSP32ShiftImm_sopcde_mask);
4323
29.1k
  int HLs      = ((iw1 >> DSP32ShiftImm_HLs_bits) & DSP32ShiftImm_HLs_mask);
4324
4325
29.1k
  if (sop == 0 && sopcde == 0)
4326
1.51k
    {
4327
1.51k
      OUTS (outf, (HLs & 2) ? dregs_hi (dst0) : dregs_lo (dst0));
4328
1.51k
      OUTS (outf, " = ");
4329
1.51k
      OUTS (outf, (HLs & 1) ? dregs_hi (src1) : dregs_lo (src1));
4330
1.51k
      OUTS (outf, " >>> ");
4331
1.51k
      OUTS (outf, uimm4 (newimmag));
4332
1.51k
    }
4333
27.6k
  else if (sop == 1 && sopcde == 0 && bit8 == 0)
4334
1.22k
    {
4335
1.22k
      OUTS (outf, (HLs & 2) ? dregs_hi (dst0) : dregs_lo (dst0));
4336
1.22k
      OUTS (outf, " = ");
4337
1.22k
      OUTS (outf, (HLs & 1) ? dregs_hi (src1) : dregs_lo (src1));
4338
1.22k
      OUTS (outf, " << ");
4339
1.22k
      OUTS (outf, uimm4 (immag));
4340
1.22k
      OUTS (outf, " (S)");
4341
1.22k
    }
4342
26.3k
  else if (sop == 1 && sopcde == 0 && bit8 == 1)
4343
245
    {
4344
245
      OUTS (outf, (HLs & 2) ? dregs_hi (dst0) : dregs_lo (dst0));
4345
245
      OUTS (outf, " = ");
4346
245
      OUTS (outf, (HLs & 1) ? dregs_hi (src1) : dregs_lo (src1));
4347
245
      OUTS (outf, " >>> ");
4348
245
      OUTS (outf, uimm4 (newimmag));
4349
245
      OUTS (outf, " (S)");
4350
245
    }
4351
26.1k
  else if (sop == 2 && sopcde == 0 && bit8 == 0)
4352
265
    {
4353
265
      OUTS (outf, (HLs & 2) ? dregs_hi (dst0) : dregs_lo (dst0));
4354
265
      OUTS (outf, " = ");
4355
265
      OUTS (outf, (HLs & 1) ? dregs_hi (src1) : dregs_lo (src1));
4356
265
      OUTS (outf, " << ");
4357
265
      OUTS (outf, uimm4 (immag));
4358
265
    }
4359
25.8k
  else if (sop == 2 && sopcde == 0 && bit8 == 1)
4360
421
    {
4361
421
      OUTS (outf, (HLs & 2) ? dregs_hi (dst0) : dregs_lo (dst0));
4362
421
      OUTS (outf, " = ");
4363
421
      OUTS (outf, (HLs & 1) ? dregs_hi (src1) : dregs_lo (src1));
4364
421
      OUTS (outf, " >> ");
4365
421
      OUTS (outf, uimm4 (newimmag));
4366
421
    }
4367
25.4k
  else if (sop == 2 && sopcde == 3 && HLs == 1)
4368
356
    {
4369
356
      OUTS (outf, "A1 = ROT A1 BY ");
4370
356
      OUTS (outf, imm6 (immag));
4371
356
    }
4372
25.1k
  else if (sop == 0 && sopcde == 3 && HLs == 0 && bit8 == 0)
4373
455
    {
4374
455
      OUTS (outf, "A0 = A0 << ");
4375
455
      OUTS (outf, uimm5 (immag));
4376
455
    }
4377
24.6k
  else if (sop == 0 && sopcde == 3 && HLs == 0 && bit8 == 1)
4378
167
    {
4379
167
      OUTS (outf, "A0 = A0 >>> ");
4380
167
      OUTS (outf, uimm5 (newimmag));
4381
167
    }
4382
24.4k
  else if (sop == 0 && sopcde == 3 && HLs == 1 && bit8 == 0)
4383
67
    {
4384
67
      OUTS (outf, "A1 = A1 << ");
4385
67
      OUTS (outf, uimm5 (immag));
4386
67
    }
4387
24.4k
  else if (sop == 0 && sopcde == 3 && HLs == 1 && bit8 == 1)
4388
1.25k
    {
4389
1.25k
      OUTS (outf, "A1 = A1 >>> ");
4390
1.25k
      OUTS (outf, uimm5 (newimmag));
4391
1.25k
    }
4392
23.1k
  else if (sop == 1 && sopcde == 3 && HLs == 0)
4393
274
    {
4394
274
      OUTS (outf, "A0 = A0 >> ");
4395
274
      OUTS (outf, uimm5 (newimmag));
4396
274
    }
4397
22.8k
  else if (sop == 1 && sopcde == 3 && HLs == 1)
4398
119
    {
4399
119
      OUTS (outf, "A1 = A1 >> ");
4400
119
      OUTS (outf, uimm5 (newimmag));
4401
119
    }
4402
22.7k
  else if (sop == 2 && sopcde == 3 && HLs == 0)
4403
489
    {
4404
489
      OUTS (outf, "A0 = ROT A0 BY ");
4405
489
      OUTS (outf, imm6 (immag));
4406
489
    }
4407
22.2k
  else if (sop == 1 && sopcde == 1 && bit8 == 0)
4408
1.82k
    {
4409
1.82k
      OUTS (outf, dregs (dst0));
4410
1.82k
      OUTS (outf, " = ");
4411
1.82k
      OUTS (outf, dregs (src1));
4412
1.82k
      OUTS (outf, " << ");
4413
1.82k
      OUTS (outf, uimm5 (immag));
4414
1.82k
      OUTS (outf, " (V, S)");
4415
1.82k
    }
4416
20.4k
  else if (sop == 1 && sopcde == 1 && bit8 == 1)
4417
162
    {
4418
162
      OUTS (outf, dregs (dst0));
4419
162
      OUTS (outf, " = ");
4420
162
      OUTS (outf, dregs (src1));
4421
162
      OUTS (outf, " >>> ");
4422
162
      OUTS (outf, imm5 (-immag));
4423
162
      OUTS (outf, " (V, S)");
4424
162
    }
4425
20.2k
  else if (sop == 2 && sopcde == 1 && bit8 == 1)
4426
135
    {
4427
135
      OUTS (outf, dregs (dst0));
4428
135
      OUTS (outf, " = ");
4429
135
      OUTS (outf, dregs (src1));
4430
135
      OUTS (outf, " >> ");
4431
135
      OUTS (outf, uimm5 (newimmag));
4432
135
      OUTS (outf, " (V)");
4433
135
    }
4434
20.1k
  else if (sop == 2 && sopcde == 1 && bit8 == 0)
4435
368
    {
4436
368
      OUTS (outf, dregs (dst0));
4437
368
      OUTS (outf, " = ");
4438
368
      OUTS (outf, dregs (src1));
4439
368
      OUTS (outf, " << ");
4440
368
      OUTS (outf, imm5 (immag));
4441
368
      OUTS (outf, " (V)");
4442
368
    }
4443
19.7k
  else if (sop == 0 && sopcde == 1)
4444
848
    {
4445
848
      OUTS (outf, dregs (dst0));
4446
848
      OUTS (outf, " = ");
4447
848
      OUTS (outf, dregs (src1));
4448
848
      OUTS (outf, " >>> ");
4449
848
      OUTS (outf, uimm5 (newimmag));
4450
848
      OUTS (outf, " (V)");
4451
848
    }
4452
18.9k
  else if (sop == 1 && sopcde == 2)
4453
139
    {
4454
139
      OUTS (outf, dregs (dst0));
4455
139
      OUTS (outf, " = ");
4456
139
      OUTS (outf, dregs (src1));
4457
139
      OUTS (outf, " << ");
4458
139
      OUTS (outf, uimm5 (immag));
4459
139
      OUTS (outf, " (S)");
4460
139
    }
4461
18.8k
  else if (sop == 2 && sopcde == 2 && bit8 == 1)
4462
517
    {
4463
517
      OUTS (outf, dregs (dst0));
4464
517
      OUTS (outf, " = ");
4465
517
      OUTS (outf, dregs (src1));
4466
517
      OUTS (outf, " >> ");
4467
517
      OUTS (outf, uimm5 (newimmag));
4468
517
    }
4469
18.2k
  else if (sop == 2 && sopcde == 2 && bit8 == 0)
4470
274
    {
4471
274
      OUTS (outf, dregs (dst0));
4472
274
      OUTS (outf, " = ");
4473
274
      OUTS (outf, dregs (src1));
4474
274
      OUTS (outf, " << ");
4475
274
      OUTS (outf, uimm5 (immag));
4476
274
    }
4477
18.0k
  else if (sop == 3 && sopcde == 2)
4478
885
    {
4479
885
      OUTS (outf, dregs (dst0));
4480
885
      OUTS (outf, " = ROT ");
4481
885
      OUTS (outf, dregs (src1));
4482
885
      OUTS (outf, " BY ");
4483
885
      OUTS (outf, imm6 (immag));
4484
885
    }
4485
17.1k
  else if (sop == 0 && sopcde == 2)
4486
511
    {
4487
511
      OUTS (outf, dregs (dst0));
4488
511
      OUTS (outf, " = ");
4489
511
      OUTS (outf, dregs (src1));
4490
511
      OUTS (outf, " >>> ");
4491
511
      OUTS (outf, uimm5 (newimmag));
4492
511
    }
4493
16.6k
  else
4494
16.6k
    return 0;
4495
4496
12.5k
  return 4;
4497
29.1k
}
4498
4499
static int
4500
decode_pseudoDEBUG_0 (TIword iw0, disassemble_info *outf)
4501
17.7k
{
4502
17.7k
  struct private *priv = outf->private_data;
4503
  /* pseudoDEBUG
4504
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
4505
     | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 0 |.fn....|.grp.......|.reg.......|
4506
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+  */
4507
17.7k
  int fn  = ((iw0 >> PseudoDbg_fn_bits) & PseudoDbg_fn_mask);
4508
17.7k
  int grp = ((iw0 >> PseudoDbg_grp_bits) & PseudoDbg_grp_mask);
4509
17.7k
  int reg = ((iw0 >> PseudoDbg_reg_bits) & PseudoDbg_reg_mask);
4510
4511
17.7k
  if (priv->parallel)
4512
943
    return 0;
4513
4514
16.7k
  if (reg == 0 && fn == 3)
4515
3.56k
    OUTS (outf, "DBG A0");
4516
4517
13.2k
  else if (reg == 1 && fn == 3)
4518
644
    OUTS (outf, "DBG A1");
4519
4520
12.5k
  else if (reg == 3 && fn == 3)
4521
243
    OUTS (outf, "ABORT");
4522
4523
12.3k
  else if (reg == 4 && fn == 3)
4524
897
    OUTS (outf, "HLT");
4525
4526
11.4k
  else if (reg == 5 && fn == 3)
4527
135
    OUTS (outf, "DBGHALT");
4528
4529
11.3k
  else if (reg == 6 && fn == 3)
4530
533
    {
4531
533
      OUTS (outf, "DBGCMPLX (");
4532
533
      OUTS (outf, dregs (grp));
4533
533
      OUTS (outf, ")");
4534
533
    }
4535
10.7k
  else if (reg == 7 && fn == 3)
4536
1.37k
    OUTS (outf, "DBG");
4537
4538
9.41k
  else if (grp == 0 && fn == 2)
4539
304
    {
4540
304
      OUTS (outf, "OUTC ");
4541
304
      OUTS (outf, dregs (reg));
4542
304
    }
4543
9.10k
  else if (fn == 0)
4544
5.26k
    {
4545
5.26k
      OUTS (outf, "DBG ");
4546
5.26k
      OUTS (outf, allregs (reg, grp));
4547
5.26k
    }
4548
3.84k
  else if (fn == 1)
4549
1.97k
    {
4550
1.97k
      OUTS (outf, "PRNT ");
4551
1.97k
      OUTS (outf, allregs (reg, grp));
4552
1.97k
    }
4553
1.87k
  else
4554
1.87k
    return 0;
4555
4556
14.9k
  return 2;
4557
16.7k
}
4558
4559
static int
4560
decode_pseudoOChar_0 (TIword iw0, disassemble_info *outf)
4561
11.1k
{
4562
11.1k
  struct private *priv = outf->private_data;
4563
  /* psedoOChar
4564
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
4565
     | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 1 |.ch............................|
4566
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+  */
4567
11.1k
  int ch = ((iw0 >> PseudoChr_ch_bits) & PseudoChr_ch_mask);
4568
4569
11.1k
  if (priv->parallel)
4570
204
    return 0;
4571
4572
10.9k
  OUTS (outf, "OUTC ");
4573
10.9k
  OUTS (outf, uimm8 (ch));
4574
4575
10.9k
  return 2;
4576
11.1k
}
4577
4578
static int
4579
decode_pseudodbg_assert_0 (TIword iw0, TIword iw1, disassemble_info *outf)
4580
10.2k
{
4581
10.2k
  struct private *priv = outf->private_data;
4582
  /* pseudodbg_assert
4583
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
4584
     | 1 | 1 | 1 | 1 | 0 | - | - | - | dbgop |.grp.......|.regtest...|
4585
     |.expected......................................................|
4586
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+  */
4587
10.2k
  int expected = ((iw1 >> PseudoDbg_Assert_expected_bits) & PseudoDbg_Assert_expected_mask);
4588
10.2k
  int dbgop    = ((iw0 >> (PseudoDbg_Assert_dbgop_bits - 16)) & PseudoDbg_Assert_dbgop_mask);
4589
10.2k
  int grp      = ((iw0 >> (PseudoDbg_Assert_grp_bits - 16)) & PseudoDbg_Assert_grp_mask);
4590
10.2k
  int regtest  = ((iw0 >> (PseudoDbg_Assert_regtest_bits - 16)) & PseudoDbg_Assert_regtest_mask);
4591
4592
10.2k
  if (priv->parallel)
4593
828
    return 0;
4594
4595
9.37k
  if (dbgop == 0)
4596
3.68k
    {
4597
3.68k
      OUTS (outf, "DBGA (");
4598
3.68k
      OUTS (outf, regs_lo (regtest, grp));
4599
3.68k
      OUTS (outf, ", ");
4600
3.68k
      OUTS (outf, uimm16 (expected));
4601
3.68k
      OUTS (outf, ")");
4602
3.68k
    }
4603
5.68k
  else if (dbgop == 1)
4604
1.56k
    {
4605
1.56k
      OUTS (outf, "DBGA (");
4606
1.56k
      OUTS (outf, regs_hi (regtest, grp));
4607
1.56k
      OUTS (outf, ", ");
4608
1.56k
      OUTS (outf, uimm16 (expected));
4609
1.56k
      OUTS (outf, ")");
4610
1.56k
    }
4611
4.12k
  else if (dbgop == 2)
4612
948
    {
4613
948
      OUTS (outf, "DBGAL (");
4614
948
      OUTS (outf, allregs (regtest, grp));
4615
948
      OUTS (outf, ", ");
4616
948
      OUTS (outf, uimm16 (expected));
4617
948
      OUTS (outf, ")");
4618
948
    }
4619
3.17k
  else if (dbgop == 3)
4620
3.17k
    {
4621
3.17k
      OUTS (outf, "DBGAH (");
4622
3.17k
      OUTS (outf, allregs (regtest, grp));
4623
3.17k
      OUTS (outf, ", ");
4624
3.17k
      OUTS (outf, uimm16 (expected));
4625
3.17k
      OUTS (outf, ")");
4626
3.17k
    }
4627
0
  else
4628
0
    return 0;
4629
9.37k
  return 4;
4630
9.37k
}
4631
4632
static int
4633
ifetch (bfd_vma pc, disassemble_info *outf, TIword *iw)
4634
4.16M
{
4635
4.16M
  bfd_byte buf[2];
4636
4.16M
  int status;
4637
4638
4.16M
  status = (*outf->read_memory_func) (pc, buf, 2, outf);
4639
4.16M
  if (status != 0)
4640
1.74k
    {
4641
1.74k
      (*outf->memory_error_func) (status, pc, outf);
4642
1.74k
      return -1;
4643
1.74k
    }
4644
4645
4.16M
  *iw = bfd_getl16 (buf);
4646
4.16M
  return 0;
4647
4.16M
}
4648
4649
static int
4650
_print_insn_bfin (bfd_vma pc, disassemble_info *outf)
4651
3.33M
{
4652
3.33M
  struct private *priv = outf->private_data;
4653
3.33M
  TIword iw0;
4654
3.33M
  TIword iw1;
4655
3.33M
  int rv = 0;
4656
4657
  /* The PC must be 16-bit aligned.  */
4658
3.33M
  if (pc & 1)
4659
4
    {
4660
4
      OUTS (outf, "ILLEGAL (UNALIGNED)");
4661
      /* For people dumping data, just re-align the return value.  */
4662
4
      return 1;
4663
4
    }
4664
4665
3.33M
  if (ifetch (pc, outf, &iw0))
4666
1.35k
    return -1;
4667
3.33M
  priv->iw0 = iw0;
4668
4669
3.33M
  if (((iw0 & 0xc000) == 0xc000) && ((iw0 & 0xff00) != 0xf800))
4670
832k
    {
4671
      /* 32-bit insn.  */
4672
832k
      if (ifetch (pc + 2, outf, &iw1))
4673
391
  return -1;
4674
832k
    }
4675
2.50M
  else
4676
    /* 16-bit insn.  */
4677
2.50M
    iw1 = 0;
4678
4679
3.33M
  if ((iw0 & 0xf7ff) == 0xc003 && iw1 == 0x1800)
4680
140
    {
4681
140
      if (priv->parallel)
4682
39
  {
4683
39
    OUTS (outf, "ILLEGAL");
4684
39
    return 0;
4685
39
  }
4686
101
      OUTS (outf, "MNOP");
4687
101
      return 4;
4688
140
    }
4689
3.33M
  else if ((iw0 & 0xff00) == 0x0000)
4690
632k
    rv = decode_ProgCtrl_0 (iw0, outf);
4691
2.70M
  else if ((iw0 & 0xffc0) == 0x0240)
4692
4.72k
    rv = decode_CaCTRL_0 (iw0, outf);
4693
2.69M
  else if ((iw0 & 0xff80) == 0x0100)
4694
34.1k
    rv = decode_PushPopReg_0 (iw0, outf);
4695
2.66M
  else if ((iw0 & 0xfe00) == 0x0400)
4696
44.3k
    rv = decode_PushPopMultiple_0 (iw0, outf);
4697
2.61M
  else if ((iw0 & 0xfe00) == 0x0600)
4698
51.6k
    rv = decode_ccMV_0 (iw0, outf);
4699
2.56M
  else if ((iw0 & 0xf800) == 0x0800)
4700
125k
    rv = decode_CCflag_0 (iw0, outf);
4701
2.44M
  else if ((iw0 & 0xffe0) == 0x0200)
4702
14.4k
    rv = decode_CC2dreg_0 (iw0, outf);
4703
2.42M
  else if ((iw0 & 0xff00) == 0x0300)
4704
28.1k
    rv = decode_CC2stat_0 (iw0, outf);
4705
2.39M
  else if ((iw0 & 0xf000) == 0x1000)
4706
126k
    rv = decode_BRCC_0 (iw0, pc, outf);
4707
2.27M
  else if ((iw0 & 0xf000) == 0x2000)
4708
186k
    rv = decode_UJUMP_0 (iw0, pc, outf);
4709
2.08M
  else if ((iw0 & 0xf000) == 0x3000)
4710
186k
    rv = decode_REGMV_0 (iw0, outf);
4711
1.89M
  else if ((iw0 & 0xfc00) == 0x4000)
4712
53.7k
    rv = decode_ALU2op_0 (iw0, outf);
4713
1.84M
  else if ((iw0 & 0xfe00) == 0x4400)
4714
18.7k
    rv = decode_PTR2op_0 (iw0, outf);
4715
1.82M
  else if ((iw0 & 0xf800) == 0x4800)
4716
66.1k
    rv = decode_LOGI2op_0 (iw0, outf);
4717
1.76M
  else if ((iw0 & 0xf000) == 0x5000)
4718
94.3k
    rv = decode_COMP3op_0 (iw0, outf);
4719
1.66M
  else if ((iw0 & 0xf800) == 0x6000)
4720
114k
    rv = decode_COMPI2opD_0 (iw0, outf);
4721
1.55M
  else if ((iw0 & 0xf800) == 0x6800)
4722
99.9k
    rv = decode_COMPI2opP_0 (iw0, outf);
4723
1.45M
  else if ((iw0 & 0xf000) == 0x8000)
4724
120k
    rv = decode_LDSTpmod_0 (iw0, outf);
4725
1.33M
  else if ((iw0 & 0xff60) == 0x9e60)
4726
1.98k
    rv = decode_dagMODim_0 (iw0, outf);
4727
1.32M
  else if ((iw0 & 0xfff0) == 0x9f60)
4728
2.01k
    rv = decode_dagMODik_0 (iw0, outf);
4729
1.32M
  else if ((iw0 & 0xfc00) == 0x9c00)
4730
30.4k
    rv = decode_dspLDST_0 (iw0, outf);
4731
1.29M
  else if ((iw0 & 0xf000) == 0x9000)
4732
90.8k
    rv = decode_LDST_0 (iw0, outf);
4733
1.20M
  else if ((iw0 & 0xfc00) == 0xb800)
4734
22.1k
    rv = decode_LDSTiiFP_0 (iw0, outf);
4735
1.18M
  else if ((iw0 & 0xe000) == 0xA000)
4736
147k
    rv = decode_LDSTii_0 (iw0, outf);
4737
1.03M
  else if ((iw0 & 0xff80) == 0xe080 && (iw1 & 0x0C00) == 0x0000)
4738
7.33k
    rv = decode_LoopSetup_0 (iw0, iw1, pc, outf);
4739
1.02M
  else if ((iw0 & 0xff00) == 0xe100 && (iw1 & 0x0000) == 0x0000)
4740
19.3k
    rv = decode_LDIMMhalf_0 (iw0, iw1, outf);
4741
1.00M
  else if ((iw0 & 0xfe00) == 0xe200 && (iw1 & 0x0000) == 0x0000)
4742
17.4k
    rv = decode_CALLa_0 (iw0, iw1, pc, outf);
4743
992k
  else if ((iw0 & 0xfc00) == 0xe400 && (iw1 & 0x0000) == 0x0000)
4744
26.1k
    rv = decode_LDSTidxI_0 (iw0, iw1, outf);
4745
966k
  else if ((iw0 & 0xfffe) == 0xe800 && (iw1 & 0x0000) == 0x0000)
4746
2.01k
    rv = decode_linkage_0 (iw0, iw1, outf);
4747
964k
  else if ((iw0 & 0xf600) == 0xc000 && (iw1 & 0x0000) == 0x0000)
4748
42.4k
    rv = decode_dsp32mac_0 (iw0, iw1, outf);
4749
921k
  else if ((iw0 & 0xf600) == 0xc200 && (iw1 & 0x0000) == 0x0000)
4750
27.6k
    rv = decode_dsp32mult_0 (iw0, iw1, outf);
4751
893k
  else if ((iw0 & 0xf7c0) == 0xc400 && (iw1 & 0x0000) == 0x0000)
4752
93.0k
    rv = decode_dsp32alu_0 (iw0, iw1, outf);
4753
800k
  else if ((iw0 & 0xf780) == 0xc600 && (iw1 & 0x01c0) == 0x0000)
4754
34.0k
    rv = decode_dsp32shift_0 (iw0, iw1, outf);
4755
766k
  else if ((iw0 & 0xf780) == 0xc680 && (iw1 & 0x0000) == 0x0000)
4756
29.1k
    rv = decode_dsp32shiftimm_0 (iw0, iw1, outf);
4757
737k
  else if ((iw0 & 0xff00) == 0xf800)
4758
17.7k
    rv = decode_pseudoDEBUG_0 (iw0, outf);
4759
719k
  else if ((iw0 & 0xFF00) == 0xF900)
4760
11.1k
    rv = decode_pseudoOChar_0 (iw0, outf);
4761
708k
  else if ((iw0 & 0xFF00) == 0xf000 && (iw1 & 0x0000) == 0x0000)
4762
10.2k
    rv = decode_pseudodbg_assert_0 (iw0, iw1, outf);
4763
4764
3.33M
  if (rv == 0)
4765
1.23M
    OUTS (outf, "ILLEGAL");
4766
4767
3.33M
  return rv;
4768
3.33M
}
4769
4770
int
4771
print_insn_bfin (bfd_vma pc, disassemble_info *outf)
4772
3.13M
{
4773
3.13M
  struct private priv;
4774
3.13M
  int count;
4775
4776
3.13M
  priv.parallel = false;
4777
3.13M
  priv.comment = false;
4778
3.13M
  outf->private_data = &priv;
4779
4780
3.13M
  count = _print_insn_bfin (pc, outf);
4781
3.13M
  if (count == -1)
4782
1.60k
    return -1;
4783
4784
  /* Proper display of multiple issue instructions.  */
4785
4786
3.13M
  if (count == 4 && (priv.iw0 & 0xc000) == 0xc000 && (priv.iw0 & BIT_MULTI_INS)
4787
100k
      && ((priv.iw0 & 0xe800) != 0xe800 /* Not Linkage.  */ ))
4788
99.2k
    {
4789
99.2k
      bool legal = true;
4790
99.2k
      int len;
4791
4792
99.2k
      priv.parallel = true;
4793
99.2k
      OUTS (outf, " || ");
4794
99.2k
      len = _print_insn_bfin (pc + 4, outf);
4795
99.2k
      if (len == -1)
4796
75
  return -1;
4797
99.1k
      OUTS (outf, " || ");
4798
99.1k
      if (len != 2)
4799
79.8k
  legal = false;
4800
99.1k
      len = _print_insn_bfin (pc + 6, outf);
4801
99.1k
      if (len == -1)
4802
68
  return -1;
4803
99.0k
      if (len != 2)
4804
76.5k
  legal = false;
4805
4806
99.0k
      if (legal)
4807
6.44k
  count = 8;
4808
92.6k
      else
4809
92.6k
  {
4810
92.6k
    OUTS (outf, ";\t\t/* ILLEGAL PARALLEL INSTRUCTION */");
4811
92.6k
    priv.comment = true;
4812
92.6k
    count = 0;
4813
92.6k
  }
4814
99.0k
    }
4815
4816
3.13M
  if (!priv.comment)
4817
2.79M
    OUTS (outf, ";");
4818
4819
3.13M
  if (count == 0)
4820
1.20M
    return 2;
4821
4822
1.93M
  return count;
4823
3.13M
}