Coverage Report

Created: 2026-07-25 10:20

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
3.04M
#define SIGNBIT(bits)       (1ul << ((bits) - 1))
37
1.01M
#define MASKBITS(val, bits) ((val) & ((SIGNBIT (bits) << 1) - 1))
38
1.01M
#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.32M
{
123
1.32M
  static char buf[60];
124
125
1.32M
  if (constant_formats[cf].reloc)
126
337k
    {
127
337k
      bfd_vma ea;
128
129
337k
      if (constant_formats[cf].pcrel)
130
328k
  x = SIGNEXTEND (x, constant_formats[cf].nbits);
131
337k
      ea = x + constant_formats[cf].offset;
132
337k
      ea = ea << constant_formats[cf].scale;
133
337k
      if (constant_formats[cf].pcrel)
134
328k
  ea += pc;
135
136
      /* truncate to 32-bits for proper symbol lookup/matching */
137
337k
      ea = (bu32)ea;
138
139
337k
      if (outf->symbol_at_address_func (ea, outf) || !constant_formats[cf].exact)
140
328k
  {
141
328k
    outf->print_address_func (ea, outf);
142
328k
    return "";
143
328k
  }
144
9.40k
      else
145
9.40k
  {
146
9.40k
    sprintf (buf, "%lx", (unsigned long) x);
147
9.40k
    return buf;
148
9.40k
  }
149
337k
    }
150
151
  /* Negative constants have an implied sign bit.  */
152
984k
  if (constant_formats[cf].negative)
153
26.8k
    {
154
26.8k
      int nb = constant_formats[cf].nbits + 1;
155
156
26.8k
      x = x | (1ul << constant_formats[cf].nbits);
157
26.8k
      x = SIGNEXTEND (x, nb);
158
26.8k
    }
159
957k
  else if (constant_formats[cf].issigned)
160
552k
    x = SIGNEXTEND (x, constant_formats[cf].nbits);
161
162
984k
  x += constant_formats[cf].offset;
163
984k
  x = (unsigned long) x << constant_formats[cf].scale;
164
165
984k
  if (constant_formats[cf].decimal)
166
306k
    sprintf (buf, "%*li", constant_formats[cf].leading, x);
167
677k
  else
168
677k
    {
169
677k
      if (constant_formats[cf].issigned && x < 0)
170
126k
  sprintf (buf, "-0x%lx", (unsigned long)(- x));
171
550k
      else
172
550k
  sprintf (buf, "0x%lx", (unsigned long) x);
173
677k
    }
174
175
984k
  return buf;
176
1.32M
}
177
178
static bu32
179
fmtconst_val (const_forms_t cf, unsigned int x, unsigned int pc)
180
117k
{
181
117k
  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
117k
  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
117k
  else if (constant_formats[cf].issigned)
203
107k
    x = SIGNEXTEND (x, constant_formats[cf].nbits);
204
205
117k
  x += constant_formats[cf].offset;
206
117k
  x <<= constant_formats[cf].scale;
207
208
117k
  return x;
209
117k
}
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
139k
#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
65.4k
#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
45.9k
#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.4k
#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
84.9k
#define IS_DREG(g,r)  ((g) == 0 && (r) < 8)
429
262k
#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
578k
  (((r) > 7) || ((g) == 4 && ((r) == 4 || (r) == 5)) || (g) == 5)
437
438
38.5k
#define allreg(r,g) (!IS_RESERVEDREG (g, r))
439
26.2k
#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
107k
#define imm7_val(x) fmtconst_val (c_imm7, x, 0)
482
1.69k
#define imm16_val(x)  fmtconst_val (c_uimm16, x, 0)
483
7.71k
#define luimm16_val(x)  fmtconst_val (c_luimm16, x, 0)
484
485
/* (arch.pm)arch_disassembler_functions.  */
486
#ifndef OUTS
487
13.4M
#define OUTS(p, txt) (p)->fprintf_func ((p)->stream, "%s", txt)
488
#endif
489
26.5k
#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.7k
{
494
11.7k
  if (s0 == 1 && x0 == 0)
495
1.10k
    OUTS (outf, " (S)");
496
10.6k
  else if (s0 == 0 && x0 == 1)
497
468
    OUTS (outf, " (CO)");
498
10.2k
  else if (s0 == 1 && x0 == 1)
499
2.37k
    OUTS (outf, " (SCO)");
500
11.7k
}
501
502
static void
503
amod1 (int s0, int x0, disassemble_info *outf)
504
18.9k
{
505
18.9k
  if (s0 == 0 && x0 == 0)
506
7.37k
    OUTS (outf, " (NS)");
507
11.5k
  else if (s0 == 1 && x0 == 0)
508
5.21k
    OUTS (outf, " (S)");
509
18.9k
}
510
511
static void
512
amod0amod2 (int s0, int x0, int aop0, disassemble_info *outf)
513
7.25k
{
514
7.25k
  if (s0 == 1 && x0 == 0 && aop0 == 0)
515
264
    OUTS (outf, " (S)");
516
6.98k
  else if (s0 == 0 && x0 == 1 && aop0 == 0)
517
119
    OUTS (outf, " (CO)");
518
6.86k
  else if (s0 == 1 && x0 == 1 && aop0 == 0)
519
885
    OUTS (outf, " (SCO)");
520
5.98k
  else if (s0 == 0 && x0 == 0 && aop0 == 2)
521
369
    OUTS (outf, " (ASR)");
522
5.61k
  else if (s0 == 1 && x0 == 0 && aop0 == 2)
523
206
    OUTS (outf, " (S, ASR)");
524
5.40k
  else if (s0 == 0 && x0 == 1 && aop0 == 2)
525
399
    OUTS (outf, " (CO, ASR)");
526
5.01k
  else if (s0 == 1 && x0 == 1 && aop0 == 2)
527
838
    OUTS (outf, " (SCO, ASR)");
528
4.17k
  else if (s0 == 0 && x0 == 0 && aop0 == 3)
529
1.09k
    OUTS (outf, " (ASL)");
530
3.07k
  else if (s0 == 1 && x0 == 0 && aop0 == 3)
531
255
    OUTS (outf, " (S, ASL)");
532
2.82k
  else if (s0 == 0 && x0 == 1 && aop0 == 3)
533
767
    OUTS (outf, " (CO, ASL)");
534
2.05k
  else if (s0 == 1 && x0 == 1 && aop0 == 3)
535
291
    OUTS (outf, " (SCO, ASL)");
536
7.25k
}
537
538
static void
539
searchmod (int r0, disassemble_info *outf)
540
2.23k
{
541
2.23k
  if (r0 == 0)
542
236
    OUTS (outf, "GT");
543
2.00k
  else if (r0 == 1)
544
661
    OUTS (outf, "GE");
545
1.34k
  else if (r0 == 2)
546
77
    OUTS (outf, "LT");
547
1.26k
  else if (r0 == 3)
548
1.26k
    OUTS (outf, "LE");
549
2.23k
}
550
551
static void
552
aligndir (int r0, disassemble_info *outf)
553
4.56k
{
554
4.56k
  if (r0 == 1)
555
2.49k
    OUTS (outf, " (R)");
556
4.56k
}
557
558
static int
559
decode_multfunc (int h0, int h1, int src0, int src1, disassemble_info *outf)
560
55.7k
{
561
55.7k
  const char *s0, *s1;
562
563
55.7k
  if (h0)
564
22.4k
    s0 = dregs_hi (src0);
565
33.2k
  else
566
33.2k
    s0 = dregs_lo (src0);
567
568
55.7k
  if (h1)
569
23.5k
    s1 = dregs_hi (src1);
570
32.2k
  else
571
32.2k
    s1 = dregs_lo (src1);
572
573
55.7k
  OUTS (outf, s0);
574
55.7k
  OUTS (outf, " * ");
575
55.7k
  OUTS (outf, s1);
576
55.7k
  return 0;
577
55.7k
}
578
579
static int
580
decode_macfunc (int which, int op, int h0, int h1, int src0, int src1, disassemble_info *outf)
581
44.9k
{
582
44.9k
  const char *a;
583
44.9k
  const char *sop = "<unknown op>";
584
585
44.9k
  if (which)
586
23.0k
    a = "A1";
587
21.8k
  else
588
21.8k
    a = "A0";
589
590
44.9k
  if (op == 3)
591
0
    {
592
0
      OUTS (outf, a);
593
0
      return 0;
594
0
    }
595
596
44.9k
  switch (op)
597
44.9k
    {
598
25.1k
    case 0: sop = " = ";   break;
599
10.9k
    case 1: sop = " += ";  break;
600
8.91k
    case 2: sop = " -= ";  break;
601
0
    default: break;
602
44.9k
    }
603
604
44.9k
  OUTS (outf, a);
605
44.9k
  OUTS (outf, sop);
606
44.9k
  decode_multfunc (h0, h1, src0, src1, outf);
607
608
44.9k
  return 0;
609
44.9k
}
610
611
static void
612
decode_optmode (int mod, int MM, disassemble_info *outf)
613
34.3k
{
614
34.3k
  if (mod == 0 && MM == 0)
615
7.23k
    return;
616
617
27.1k
  OUTS (outf, " (");
618
619
27.1k
  if (MM && !mod)
620
1.04k
    {
621
1.04k
      OUTS (outf, "M)");
622
1.04k
      return;
623
1.04k
    }
624
625
26.0k
  if (MM)
626
2.91k
    OUTS (outf, "M, ");
627
628
26.0k
  if (mod == M_S2RND)
629
4.91k
    OUTS (outf, "S2RND");
630
21.1k
  else if (mod == M_T)
631
929
    OUTS (outf, "T");
632
20.2k
  else if (mod == M_W32)
633
356
    OUTS (outf, "W32");
634
19.8k
  else if (mod == M_FU)
635
3.04k
    OUTS (outf, "FU");
636
16.8k
  else if (mod == M_TFU)
637
4.34k
    OUTS (outf, "TFU");
638
12.4k
  else if (mod == M_IS)
639
4.52k
    OUTS (outf, "IS");
640
7.96k
  else if (mod == M_ISS2)
641
3.65k
    OUTS (outf, "ISS2");
642
4.30k
  else if (mod == M_IH)
643
1.69k
    OUTS (outf, "IH");
644
2.60k
  else if (mod == M_IU)
645
2.60k
    OUTS (outf, "IU");
646
0
  else
647
0
    abort ();
648
649
26.0k
  OUTS (outf, ")");
650
26.0k
}
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
131k
#define DREG(x)         (saved_state.dpregs[x])
664
103k
#define PREG(x)         (saved_state.dpregs[(x) + 8])
665
#define SPREG           PREG (6)
666
#define FPREG           PREG (7)
667
1.34k
#define IREG(x)         (saved_state.iregs[x])
668
1.24k
#define MREG(x)         (saved_state.mregs[x])
669
1.40k
#define BREG(x)         (saved_state.bregs[x])
670
1.78k
#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
241k
{
681
241k
  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
241k
  switch (fullreg >> 2)
693
241k
    {
694
131k
    case 0: case 1: return &DREG (reg);
695
103k
    case 2: case 3: return &PREG (reg);
696
1.34k
    case 4: return &IREG (reg & 3);
697
1.24k
    case 5: return &MREG (reg & 3);
698
1.40k
    case 6: return &BREG (reg & 3);
699
1.78k
    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
241k
    }
716
0
  abort ();
717
241k
}
718
719
static int
720
decode_ProgCtrl_0 (TIword iw0, disassemble_info *outf)
721
667k
{
722
667k
  struct private *priv = outf->private_data;
723
  /* ProgCtrl
724
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
725
     | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |.prgfunc.......|.poprnd........|
726
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+  */
727
667k
  int poprnd  = ((iw0 >> ProgCtrl_poprnd_bits) & ProgCtrl_poprnd_mask);
728
667k
  int prgfunc = ((iw0 >> ProgCtrl_prgfunc_bits) & ProgCtrl_prgfunc_mask);
729
730
667k
  if (prgfunc == 0 && poprnd == 0)
731
386k
    OUTS (outf, "NOP");
732
280k
  else if (priv->parallel)
733
17.7k
    return 0;
734
263k
  else if (prgfunc == 1 && poprnd == 0)
735
6.42k
    OUTS (outf, "RTS");
736
256k
  else if (prgfunc == 1 && poprnd == 1)
737
1.39k
    OUTS (outf, "RTI");
738
255k
  else if (prgfunc == 1 && poprnd == 2)
739
868
    OUTS (outf, "RTX");
740
254k
  else if (prgfunc == 1 && poprnd == 3)
741
1.01k
    OUTS (outf, "RTN");
742
253k
  else if (prgfunc == 1 && poprnd == 4)
743
1.13k
    OUTS (outf, "RTE");
744
252k
  else if (prgfunc == 2 && poprnd == 0)
745
4.39k
    OUTS (outf, "IDLE");
746
247k
  else if (prgfunc == 2 && poprnd == 3)
747
1.55k
    OUTS (outf, "CSYNC");
748
246k
  else if (prgfunc == 2 && poprnd == 4)
749
1.93k
    OUTS (outf, "SSYNC");
750
244k
  else if (prgfunc == 2 && poprnd == 5)
751
3.01k
    OUTS (outf, "EMUEXCPT");
752
241k
  else if (prgfunc == 3 && IS_DREG (0, poprnd))
753
10.8k
    {
754
10.8k
      OUTS (outf, "CLI ");
755
10.8k
      OUTS (outf, dregs (poprnd));
756
10.8k
    }
757
230k
  else if (prgfunc == 4 && IS_DREG (0, poprnd))
758
11.2k
    {
759
11.2k
      OUTS (outf, "STI ");
760
11.2k
      OUTS (outf, dregs (poprnd));
761
11.2k
    }
762
219k
  else if (prgfunc == 5 && IS_PREG (1, poprnd))
763
4.22k
    {
764
4.22k
      OUTS (outf, "JUMP (");
765
4.22k
      OUTS (outf, pregs (poprnd));
766
4.22k
      OUTS (outf, ")");
767
4.22k
    }
768
214k
  else if (prgfunc == 6 && IS_PREG (1, poprnd))
769
7.72k
    {
770
7.72k
      OUTS (outf, "CALL (");
771
7.72k
      OUTS (outf, pregs (poprnd));
772
7.72k
      OUTS (outf, ")");
773
7.72k
    }
774
207k
  else if (prgfunc == 7 && IS_PREG (1, poprnd))
775
6.11k
    {
776
6.11k
      OUTS (outf, "CALL (PC + ");
777
6.11k
      OUTS (outf, pregs (poprnd));
778
6.11k
      OUTS (outf, ")");
779
6.11k
    }
780
201k
  else if (prgfunc == 8 && IS_PREG (1, poprnd))
781
7.25k
    {
782
7.25k
      OUTS (outf, "JUMP (PC + ");
783
7.25k
      OUTS (outf, pregs (poprnd));
784
7.25k
      OUTS (outf, ")");
785
7.25k
    }
786
193k
  else if (prgfunc == 9)
787
8.78k
    {
788
8.78k
      OUTS (outf, "RAISE ");
789
8.78k
      OUTS (outf, uimm4 (poprnd));
790
8.78k
    }
791
185k
  else if (prgfunc == 10)
792
5.76k
    {
793
5.76k
      OUTS (outf, "EXCPT ");
794
5.76k
      OUTS (outf, uimm4 (poprnd));
795
5.76k
    }
796
179k
  else if (prgfunc == 11 && IS_PREG (1, poprnd) && poprnd <= 5)
797
2.08k
    {
798
2.08k
      OUTS (outf, "TESTSET (");
799
2.08k
      OUTS (outf, pregs (poprnd));
800
2.08k
      OUTS (outf, ")");
801
2.08k
    }
802
177k
  else
803
177k
    return 0;
804
472k
  return 2;
805
667k
}
806
807
static int
808
decode_CaCTRL_0 (TIword iw0, disassemble_info *outf)
809
5.02k
{
810
5.02k
  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
5.02k
  int a   = ((iw0 >> CaCTRL_a_bits) & CaCTRL_a_mask);
816
5.02k
  int op  = ((iw0 >> CaCTRL_op_bits) & CaCTRL_op_mask);
817
5.02k
  int reg = ((iw0 >> CaCTRL_reg_bits) & CaCTRL_reg_mask);
818
819
5.02k
  if (priv->parallel)
820
360
    return 0;
821
822
4.66k
  if (a == 0 && op == 0)
823
1.36k
    {
824
1.36k
      OUTS (outf, "PREFETCH[");
825
1.36k
      OUTS (outf, pregs (reg));
826
1.36k
      OUTS (outf, "]");
827
1.36k
    }
828
3.29k
  else if (a == 0 && op == 1)
829
540
    {
830
540
      OUTS (outf, "FLUSHINV[");
831
540
      OUTS (outf, pregs (reg));
832
540
      OUTS (outf, "]");
833
540
    }
834
2.75k
  else if (a == 0 && op == 2)
835
413
    {
836
413
      OUTS (outf, "FLUSH[");
837
413
      OUTS (outf, pregs (reg));
838
413
      OUTS (outf, "]");
839
413
    }
840
2.34k
  else if (a == 0 && op == 3)
841
466
    {
842
466
      OUTS (outf, "IFLUSH[");
843
466
      OUTS (outf, pregs (reg));
844
466
      OUTS (outf, "]");
845
466
    }
846
1.87k
  else if (a == 1 && op == 0)
847
527
    {
848
527
      OUTS (outf, "PREFETCH[");
849
527
      OUTS (outf, pregs (reg));
850
527
      OUTS (outf, "++]");
851
527
    }
852
1.35k
  else if (a == 1 && op == 1)
853
415
    {
854
415
      OUTS (outf, "FLUSHINV[");
855
415
      OUTS (outf, pregs (reg));
856
415
      OUTS (outf, "++]");
857
415
    }
858
937
  else if (a == 1 && op == 2)
859
441
    {
860
441
      OUTS (outf, "FLUSH[");
861
441
      OUTS (outf, pregs (reg));
862
441
      OUTS (outf, "++]");
863
441
    }
864
496
  else if (a == 1 && op == 3)
865
496
    {
866
496
      OUTS (outf, "IFLUSH[");
867
496
      OUTS (outf, pregs (reg));
868
496
      OUTS (outf, "++]");
869
496
    }
870
0
  else
871
0
    return 0;
872
4.66k
  return 2;
873
4.66k
}
874
875
static int
876
decode_PushPopReg_0 (TIword iw0, disassemble_info *outf)
877
36.7k
{
878
36.7k
  struct private *priv = outf->private_data;
879
  /* PushPopReg
880
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
881
     | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 |.W.|.grp.......|.reg.......|
882
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+  */
883
36.7k
  int W   = ((iw0 >> PushPopReg_W_bits) & PushPopReg_W_mask);
884
36.7k
  int grp = ((iw0 >> PushPopReg_grp_bits) & PushPopReg_grp_mask);
885
36.7k
  int reg = ((iw0 >> PushPopReg_reg_bits) & PushPopReg_reg_mask);
886
887
36.7k
  if (priv->parallel)
888
1.86k
    return 0;
889
890
34.9k
  if (W == 0 && mostreg (reg, grp))
891
5.03k
    {
892
5.03k
      OUTS (outf, allregs (reg, grp));
893
5.03k
      OUTS (outf, " = [SP++]");
894
5.03k
    }
895
29.8k
  else if (W == 1 && allreg (reg, grp) && !(grp == 1 && reg == 6))
896
6.63k
    {
897
6.63k
      OUTS (outf, "[--SP] = ");
898
6.63k
      OUTS (outf, allregs (reg, grp));
899
6.63k
    }
900
23.2k
  else
901
23.2k
    return 0;
902
11.6k
  return 2;
903
34.9k
}
904
905
static int
906
decode_PushPopMultiple_0 (TIword iw0, disassemble_info *outf)
907
47.4k
{
908
47.4k
  struct private *priv = outf->private_data;
909
  /* PushPopMultiple
910
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
911
     | 0 | 0 | 0 | 0 | 0 | 1 | 0 |.d.|.p.|.W.|.dr........|.pr........|
912
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+  */
913
47.4k
  int p  = ((iw0 >> PushPopMultiple_p_bits) & PushPopMultiple_p_mask);
914
47.4k
  int d  = ((iw0 >> PushPopMultiple_d_bits) & PushPopMultiple_d_mask);
915
47.4k
  int W  = ((iw0 >> PushPopMultiple_W_bits) & PushPopMultiple_W_mask);
916
47.4k
  int dr = ((iw0 >> PushPopMultiple_dr_bits) & PushPopMultiple_dr_mask);
917
47.4k
  int pr = ((iw0 >> PushPopMultiple_pr_bits) & PushPopMultiple_pr_mask);
918
919
47.4k
  if (priv->parallel)
920
2.06k
    return 0;
921
922
45.3k
  if (pr > 5)
923
6.80k
    return 0;
924
925
38.5k
  if (W == 1 && d == 1 && p == 1)
926
3.09k
    {
927
3.09k
      OUTS (outf, "[--SP] = (R7:");
928
3.09k
      OUTS (outf, imm5d (dr));
929
3.09k
      OUTS (outf, ", P5:");
930
3.09k
      OUTS (outf, imm5d (pr));
931
3.09k
      OUTS (outf, ")");
932
3.09k
    }
933
35.4k
  else if (W == 1 && d == 1 && p == 0 && pr == 0)
934
1.59k
    {
935
1.59k
      OUTS (outf, "[--SP] = (R7:");
936
1.59k
      OUTS (outf, imm5d (dr));
937
1.59k
      OUTS (outf, ")");
938
1.59k
    }
939
33.8k
  else if (W == 1 && d == 0 && p == 1 && dr == 0)
940
496
    {
941
496
      OUTS (outf, "[--SP] = (P5:");
942
496
      OUTS (outf, imm5d (pr));
943
496
      OUTS (outf, ")");
944
496
    }
945
33.3k
  else if (W == 0 && d == 1 && p == 1)
946
3.27k
    {
947
3.27k
      OUTS (outf, "(R7:");
948
3.27k
      OUTS (outf, imm5d (dr));
949
3.27k
      OUTS (outf, ", P5:");
950
3.27k
      OUTS (outf, imm5d (pr));
951
3.27k
      OUTS (outf, ") = [SP++]");
952
3.27k
    }
953
30.1k
  else if (W == 0 && d == 1 && p == 0 && pr == 0)
954
3.83k
    {
955
3.83k
      OUTS (outf, "(R7:");
956
3.83k
      OUTS (outf, imm5d (dr));
957
3.83k
      OUTS (outf, ") = [SP++]");
958
3.83k
    }
959
26.2k
  else if (W == 0 && d == 0 && p == 1 && dr == 0)
960
944
    {
961
944
      OUTS (outf, "(P5:");
962
944
      OUTS (outf, imm5d (pr));
963
944
      OUTS (outf, ") = [SP++]");
964
944
    }
965
25.3k
  else
966
25.3k
    return 0;
967
13.2k
  return 2;
968
38.5k
}
969
970
static int
971
decode_ccMV_0 (TIword iw0, disassemble_info *outf)
972
55.1k
{
973
55.1k
  struct private *priv = outf->private_data;
974
  /* ccMV
975
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
976
     | 0 | 0 | 0 | 0 | 0 | 1 | 1 |.T.|.d.|.s.|.dst.......|.src.......|
977
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+  */
978
55.1k
  int s  = ((iw0 >> CCmv_s_bits) & CCmv_s_mask);
979
55.1k
  int d  = ((iw0 >> CCmv_d_bits) & CCmv_d_mask);
980
55.1k
  int T  = ((iw0 >> CCmv_T_bits) & CCmv_T_mask);
981
55.1k
  int src = ((iw0 >> CCmv_src_bits) & CCmv_src_mask);
982
55.1k
  int dst = ((iw0 >> CCmv_dst_bits) & CCmv_dst_mask);
983
984
55.1k
  if (priv->parallel)
985
5.58k
    return 0;
986
987
49.5k
  if (T == 1)
988
29.9k
    {
989
29.9k
      OUTS (outf, "IF CC ");
990
29.9k
      OUTS (outf, gregs (dst, d));
991
29.9k
      OUTS (outf, " = ");
992
29.9k
      OUTS (outf, gregs (src, s));
993
29.9k
    }
994
19.6k
  else if (T == 0)
995
19.6k
    {
996
19.6k
      OUTS (outf, "IF !CC ");
997
19.6k
      OUTS (outf, gregs (dst, d));
998
19.6k
      OUTS (outf, " = ");
999
19.6k
      OUTS (outf, gregs (src, s));
1000
19.6k
    }
1001
0
  else
1002
0
    return 0;
1003
49.5k
  return 2;
1004
49.5k
}
1005
1006
static int
1007
decode_CCflag_0 (TIword iw0, disassemble_info *outf)
1008
134k
{
1009
134k
  struct private *priv = outf->private_data;
1010
  /* CCflag
1011
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
1012
     | 0 | 0 | 0 | 0 | 1 |.I.|.opc.......|.G.|.y.........|.x.........|
1013
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+  */
1014
134k
  int x = ((iw0 >> CCflag_x_bits) & CCflag_x_mask);
1015
134k
  int y = ((iw0 >> CCflag_y_bits) & CCflag_y_mask);
1016
134k
  int I = ((iw0 >> CCflag_I_bits) & CCflag_I_mask);
1017
134k
  int G = ((iw0 >> CCflag_G_bits) & CCflag_G_mask);
1018
134k
  int opc = ((iw0 >> CCflag_opc_bits) & CCflag_opc_mask);
1019
1020
134k
  if (priv->parallel)
1021
7.75k
    return 0;
1022
1023
126k
  if (opc == 0 && I == 0 && G == 0)
1024
9.39k
    {
1025
9.39k
      OUTS (outf, "CC = ");
1026
9.39k
      OUTS (outf, dregs (x));
1027
9.39k
      OUTS (outf, " == ");
1028
9.39k
      OUTS (outf, dregs (y));
1029
9.39k
    }
1030
116k
  else if (opc == 1 && I == 0 && G == 0)
1031
2.68k
    {
1032
2.68k
      OUTS (outf, "CC = ");
1033
2.68k
      OUTS (outf, dregs (x));
1034
2.68k
      OUTS (outf, " < ");
1035
2.68k
      OUTS (outf, dregs (y));
1036
2.68k
    }
1037
114k
  else if (opc == 2 && I == 0 && G == 0)
1038
11.4k
    {
1039
11.4k
      OUTS (outf, "CC = ");
1040
11.4k
      OUTS (outf, dregs (x));
1041
11.4k
      OUTS (outf, " <= ");
1042
11.4k
      OUTS (outf, dregs (y));
1043
11.4k
    }
1044
102k
  else if (opc == 3 && I == 0 && G == 0)
1045
2.71k
    {
1046
2.71k
      OUTS (outf, "CC = ");
1047
2.71k
      OUTS (outf, dregs (x));
1048
2.71k
      OUTS (outf, " < ");
1049
2.71k
      OUTS (outf, dregs (y));
1050
2.71k
      OUTS (outf, " (IU)");
1051
2.71k
    }
1052
100k
  else if (opc == 4 && I == 0 && G == 0)
1053
9.15k
    {
1054
9.15k
      OUTS (outf, "CC = ");
1055
9.15k
      OUTS (outf, dregs (x));
1056
9.15k
      OUTS (outf, " <= ");
1057
9.15k
      OUTS (outf, dregs (y));
1058
9.15k
      OUTS (outf, " (IU)");
1059
9.15k
    }
1060
90.9k
  else if (opc == 0 && I == 1 && G == 0)
1061
8.47k
    {
1062
8.47k
      OUTS (outf, "CC = ");
1063
8.47k
      OUTS (outf, dregs (x));
1064
8.47k
      OUTS (outf, " == ");
1065
8.47k
      OUTS (outf, imm3 (y));
1066
8.47k
    }
1067
82.4k
  else if (opc == 1 && I == 1 && G == 0)
1068
2.82k
    {
1069
2.82k
      OUTS (outf, "CC = ");
1070
2.82k
      OUTS (outf, dregs (x));
1071
2.82k
      OUTS (outf, " < ");
1072
2.82k
      OUTS (outf, imm3 (y));
1073
2.82k
    }
1074
79.6k
  else if (opc == 2 && I == 1 && G == 0)
1075
4.12k
    {
1076
4.12k
      OUTS (outf, "CC = ");
1077
4.12k
      OUTS (outf, dregs (x));
1078
4.12k
      OUTS (outf, " <= ");
1079
4.12k
      OUTS (outf, imm3 (y));
1080
4.12k
    }
1081
75.5k
  else if (opc == 3 && I == 1 && G == 0)
1082
1.44k
    {
1083
1.44k
      OUTS (outf, "CC = ");
1084
1.44k
      OUTS (outf, dregs (x));
1085
1.44k
      OUTS (outf, " < ");
1086
1.44k
      OUTS (outf, uimm3 (y));
1087
1.44k
      OUTS (outf, " (IU)");
1088
1.44k
    }
1089
74.0k
  else if (opc == 4 && I == 1 && G == 0)
1090
7.98k
    {
1091
7.98k
      OUTS (outf, "CC = ");
1092
7.98k
      OUTS (outf, dregs (x));
1093
7.98k
      OUTS (outf, " <= ");
1094
7.98k
      OUTS (outf, uimm3 (y));
1095
7.98k
      OUTS (outf, " (IU)");
1096
7.98k
    }
1097
66.0k
  else if (opc == 0 && I == 0 && G == 1)
1098
2.72k
    {
1099
2.72k
      OUTS (outf, "CC = ");
1100
2.72k
      OUTS (outf, pregs (x));
1101
2.72k
      OUTS (outf, " == ");
1102
2.72k
      OUTS (outf, pregs (y));
1103
2.72k
    }
1104
63.3k
  else if (opc == 1 && I == 0 && G == 1)
1105
3.82k
    {
1106
3.82k
      OUTS (outf, "CC = ");
1107
3.82k
      OUTS (outf, pregs (x));
1108
3.82k
      OUTS (outf, " < ");
1109
3.82k
      OUTS (outf, pregs (y));
1110
3.82k
    }
1111
59.5k
  else if (opc == 2 && I == 0 && G == 1)
1112
3.97k
    {
1113
3.97k
      OUTS (outf, "CC = ");
1114
3.97k
      OUTS (outf, pregs (x));
1115
3.97k
      OUTS (outf, " <= ");
1116
3.97k
      OUTS (outf, pregs (y));
1117
3.97k
    }
1118
55.5k
  else if (opc == 3 && I == 0 && G == 1)
1119
4.40k
    {
1120
4.40k
      OUTS (outf, "CC = ");
1121
4.40k
      OUTS (outf, pregs (x));
1122
4.40k
      OUTS (outf, " < ");
1123
4.40k
      OUTS (outf, pregs (y));
1124
4.40k
      OUTS (outf, " (IU)");
1125
4.40k
    }
1126
51.1k
  else if (opc == 4 && I == 0 && G == 1)
1127
1.83k
    {
1128
1.83k
      OUTS (outf, "CC = ");
1129
1.83k
      OUTS (outf, pregs (x));
1130
1.83k
      OUTS (outf, " <= ");
1131
1.83k
      OUTS (outf, pregs (y));
1132
1.83k
      OUTS (outf, " (IU)");
1133
1.83k
    }
1134
49.3k
  else if (opc == 0 && I == 1 && G == 1)
1135
1.58k
    {
1136
1.58k
      OUTS (outf, "CC = ");
1137
1.58k
      OUTS (outf, pregs (x));
1138
1.58k
      OUTS (outf, " == ");
1139
1.58k
      OUTS (outf, imm3 (y));
1140
1.58k
    }
1141
47.7k
  else if (opc == 1 && I == 1 && G == 1)
1142
2.34k
    {
1143
2.34k
      OUTS (outf, "CC = ");
1144
2.34k
      OUTS (outf, pregs (x));
1145
2.34k
      OUTS (outf, " < ");
1146
2.34k
      OUTS (outf, imm3 (y));
1147
2.34k
    }
1148
45.3k
  else if (opc == 2 && I == 1 && G == 1)
1149
1.78k
    {
1150
1.78k
      OUTS (outf, "CC = ");
1151
1.78k
      OUTS (outf, pregs (x));
1152
1.78k
      OUTS (outf, " <= ");
1153
1.78k
      OUTS (outf, imm3 (y));
1154
1.78k
    }
1155
43.5k
  else if (opc == 3 && I == 1 && G == 1)
1156
1.32k
    {
1157
1.32k
      OUTS (outf, "CC = ");
1158
1.32k
      OUTS (outf, pregs (x));
1159
1.32k
      OUTS (outf, " < ");
1160
1.32k
      OUTS (outf, uimm3 (y));
1161
1.32k
      OUTS (outf, " (IU)");
1162
1.32k
    }
1163
42.2k
  else if (opc == 4 && I == 1 && G == 1)
1164
2.48k
    {
1165
2.48k
      OUTS (outf, "CC = ");
1166
2.48k
      OUTS (outf, pregs (x));
1167
2.48k
      OUTS (outf, " <= ");
1168
2.48k
      OUTS (outf, uimm3 (y));
1169
2.48k
      OUTS (outf, " (IU)");
1170
2.48k
    }
1171
39.7k
  else if (opc == 5 && I == 0 && G == 0 && x == 0 && y == 0)
1172
990
    OUTS (outf, "CC = A0 == A1");
1173
1174
38.7k
  else if (opc == 6 && I == 0 && G == 0 && x == 0 && y == 0)
1175
1.72k
    OUTS (outf, "CC = A0 < A1");
1176
1177
37.0k
  else if (opc == 7 && I == 0 && G == 0 && x == 0 && y == 0)
1178
375
    OUTS (outf, "CC = A0 <= A1");
1179
1180
36.6k
  else
1181
36.6k
    return 0;
1182
89.6k
  return 2;
1183
126k
}
1184
1185
static int
1186
decode_CC2dreg_0 (TIword iw0, disassemble_info *outf)
1187
16.0k
{
1188
16.0k
  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
16.0k
  int op  = ((iw0 >> CC2dreg_op_bits) & CC2dreg_op_mask);
1194
16.0k
  int reg = ((iw0 >> CC2dreg_reg_bits) & CC2dreg_reg_mask);
1195
1196
16.0k
  if (priv->parallel)
1197
1.24k
    return 0;
1198
1199
14.8k
  if (op == 0)
1200
11.1k
    {
1201
11.1k
      OUTS (outf, dregs (reg));
1202
11.1k
      OUTS (outf, " = CC");
1203
11.1k
    }
1204
3.67k
  else if (op == 1)
1205
632
    {
1206
632
      OUTS (outf, "CC = ");
1207
632
      OUTS (outf, dregs (reg));
1208
632
    }
1209
3.04k
  else if (op == 3 && reg == 0)
1210
638
    OUTS (outf, "CC = !CC");
1211
2.40k
  else
1212
2.40k
    return 0;
1213
1214
12.4k
  return 2;
1215
14.8k
}
1216
1217
static int
1218
decode_CC2stat_0 (TIword iw0, disassemble_info *outf)
1219
28.4k
{
1220
28.4k
  struct private *priv = outf->private_data;
1221
  /* CC2stat
1222
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
1223
     | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 |.D.|.op....|.cbit..............|
1224
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+  */
1225
28.4k
  int D    = ((iw0 >> CC2stat_D_bits) & CC2stat_D_mask);
1226
28.4k
  int op   = ((iw0 >> CC2stat_op_bits) & CC2stat_op_mask);
1227
28.4k
  int cbit = ((iw0 >> CC2stat_cbit_bits) & CC2stat_cbit_mask);
1228
1229
28.4k
  const char *bitname = statbits (cbit);
1230
28.4k
  const char * const op_names[] = { "", "|", "&", "^" } ;
1231
1232
28.4k
  if (priv->parallel)
1233
1.37k
    return 0;
1234
1235
27.1k
  if (decode_statbits[cbit] == REG_LASTREG)
1236
9.92k
    {
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.92k
      static char bitnames[64];
1240
9.92k
      if (cbit != 5)
1241
9.32k
  sprintf (bitnames, "ASTAT[%i /* unused bit */]", cbit);
1242
599
      else
1243
599
  return 0;
1244
1245
9.32k
      bitname = bitnames;
1246
9.32k
    }
1247
1248
26.5k
  if (D == 0)
1249
15.5k
    OUT (outf, "CC %s= %s", op_names[op], bitname);
1250
10.9k
  else
1251
10.9k
    OUT (outf, "%s %s= CC", bitname, op_names[op]);
1252
1253
26.5k
  return 2;
1254
27.1k
}
1255
1256
static int
1257
decode_BRCC_0 (TIword iw0, bfd_vma pc, disassemble_info *outf)
1258
135k
{
1259
135k
  struct private *priv = outf->private_data;
1260
  /* BRCC
1261
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
1262
     | 0 | 0 | 0 | 1 |.T.|.B.|.offset................................|
1263
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+  */
1264
135k
  int B = ((iw0 >> BRCC_B_bits) & BRCC_B_mask);
1265
135k
  int T = ((iw0 >> BRCC_T_bits) & BRCC_T_mask);
1266
135k
  int offset = ((iw0 >> BRCC_offset_bits) & BRCC_offset_mask);
1267
1268
135k
  if (priv->parallel)
1269
5.49k
    return 0;
1270
1271
130k
  if (T == 1 && B == 1)
1272
24.9k
    {
1273
24.9k
      OUTS (outf, "IF CC JUMP 0x");
1274
24.9k
      OUTS (outf, pcrel10 (offset));
1275
24.9k
      OUTS (outf, " (BP)");
1276
24.9k
    }
1277
105k
  else if (T == 0 && B == 1)
1278
23.5k
    {
1279
23.5k
      OUTS (outf, "IF !CC JUMP 0x");
1280
23.5k
      OUTS (outf, pcrel10 (offset));
1281
23.5k
      OUTS (outf, " (BP)");
1282
23.5k
    }
1283
81.7k
  else if (T == 1)
1284
30.1k
    {
1285
30.1k
      OUTS (outf, "IF CC JUMP 0x");
1286
30.1k
      OUTS (outf, pcrel10 (offset));
1287
30.1k
    }
1288
51.6k
  else if (T == 0)
1289
51.6k
    {
1290
51.6k
      OUTS (outf, "IF !CC JUMP 0x");
1291
51.6k
      OUTS (outf, pcrel10 (offset));
1292
51.6k
    }
1293
0
  else
1294
0
    return 0;
1295
1296
130k
  return 2;
1297
130k
}
1298
1299
static int
1300
decode_UJUMP_0 (TIword iw0, bfd_vma pc, disassemble_info *outf)
1301
190k
{
1302
190k
  struct private *priv = outf->private_data;
1303
  /* UJUMP
1304
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
1305
     | 0 | 0 | 1 | 0 |.offset........................................|
1306
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+  */
1307
190k
  int offset = ((iw0 >> UJump_offset_bits) & UJump_offset_mask);
1308
1309
190k
  if (priv->parallel)
1310
12.8k
    return 0;
1311
1312
177k
  OUTS (outf, "JUMP.S 0x");
1313
177k
  OUTS (outf, pcrel12 (offset));
1314
177k
  return 2;
1315
190k
}
1316
1317
static int
1318
decode_REGMV_0 (TIword iw0, disassemble_info *outf)
1319
195k
{
1320
  /* REGMV
1321
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
1322
     | 0 | 0 | 1 | 1 |.gd........|.gs........|.dst.......|.src.......|
1323
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+  */
1324
195k
  int gs  = ((iw0 >> RegMv_gs_bits) & RegMv_gs_mask);
1325
195k
  int gd  = ((iw0 >> RegMv_gd_bits) & RegMv_gd_mask);
1326
195k
  int src = ((iw0 >> RegMv_src_bits) & RegMv_src_mask);
1327
195k
  int dst = ((iw0 >> RegMv_dst_bits) & RegMv_dst_mask);
1328
1329
  /* Reserved slots cannot be a src/dst.  */
1330
195k
  if (IS_RESERVEDREG (gs, src) || IS_RESERVEDREG (gd, dst))
1331
40.7k
    goto invalid_move;
1332
1333
  /* Standard register moves  */
1334
154k
  if ((gs < 2) ||                               /* Dregs/Pregs as source  */
1335
85.7k
      (gd < 2) ||                               /* Dregs/Pregs as dest    */
1336
50.6k
      (gs == 4 && src < 4) ||                   /* Accumulators as source */
1337
36.8k
      (gd == 4 && dst < 4 && (gs < 4)) ||       /* Accumulators as dest   */
1338
35.2k
      (gs == 7 && src == 7 && !(gd == 4 && dst < 4)) || /* EMUDAT as src  */
1339
33.4k
      (gd == 7 && dst == 7))                    /* EMUDAT as dest         */
1340
123k
    goto valid_move;
1341
1342
  /* dareg = dareg (IMBL) */
1343
31.2k
  if (gs < 4 && gd < 4)
1344
6.42k
    goto valid_move;
1345
1346
  /* USP can be src to sysregs, but not dagregs.  */
1347
24.8k
  if ((gs == 7 && src == 0) && (gd >= 4))
1348
719
    goto valid_move;
1349
1350
  /* USP can move between genregs (only check Accumulators).  */
1351
24.1k
  if (((gs == 7 && src == 0) && (gd == 4 && dst < 4)) ||
1352
24.1k
      ((gd == 7 && dst == 0) && (gs == 4 && src < 4)))
1353
0
    goto valid_move;
1354
1355
  /* Still here ?  Invalid reg pair.  */
1356
64.8k
 invalid_move:
1357
64.8k
  return 0;
1358
1359
130k
 valid_move:
1360
130k
  OUTS (outf, allregs (dst, gd));
1361
130k
  OUTS (outf, " = ");
1362
130k
  OUTS (outf, allregs (src, gs));
1363
130k
  return 2;
1364
24.1k
}
1365
1366
static int
1367
decode_ALU2op_0 (TIword iw0, disassemble_info *outf)
1368
59.2k
{
1369
  /* ALU2op
1370
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
1371
     | 0 | 1 | 0 | 0 | 0 | 0 |.opc...........|.src.......|.dst.......|
1372
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+  */
1373
59.2k
  int src = ((iw0 >> ALU2op_src_bits) & ALU2op_src_mask);
1374
59.2k
  int opc = ((iw0 >> ALU2op_opc_bits) & ALU2op_opc_mask);
1375
59.2k
  int dst = ((iw0 >> ALU2op_dst_bits) & ALU2op_dst_mask);
1376
1377
59.2k
  if (opc == 0)
1378
11.1k
    {
1379
11.1k
      OUTS (outf, dregs (dst));
1380
11.1k
      OUTS (outf, " >>>= ");
1381
11.1k
      OUTS (outf, dregs (src));
1382
11.1k
    }
1383
48.1k
  else if (opc == 1)
1384
3.93k
    {
1385
3.93k
      OUTS (outf, dregs (dst));
1386
3.93k
      OUTS (outf, " >>= ");
1387
3.93k
      OUTS (outf, dregs (src));
1388
3.93k
    }
1389
44.2k
  else if (opc == 2)
1390
1.95k
    {
1391
1.95k
      OUTS (outf, dregs (dst));
1392
1.95k
      OUTS (outf, " <<= ");
1393
1.95k
      OUTS (outf, dregs (src));
1394
1.95k
    }
1395
42.2k
  else if (opc == 3)
1396
4.82k
    {
1397
4.82k
      OUTS (outf, dregs (dst));
1398
4.82k
      OUTS (outf, " *= ");
1399
4.82k
      OUTS (outf, dregs (src));
1400
4.82k
    }
1401
37.4k
  else if (opc == 4)
1402
4.95k
    {
1403
4.95k
      OUTS (outf, dregs (dst));
1404
4.95k
      OUTS (outf, " = (");
1405
4.95k
      OUTS (outf, dregs (dst));
1406
4.95k
      OUTS (outf, " + ");
1407
4.95k
      OUTS (outf, dregs (src));
1408
4.95k
      OUTS (outf, ") << 0x1");
1409
4.95k
    }
1410
32.4k
  else if (opc == 5)
1411
5.04k
    {
1412
5.04k
      OUTS (outf, dregs (dst));
1413
5.04k
      OUTS (outf, " = (");
1414
5.04k
      OUTS (outf, dregs (dst));
1415
5.04k
      OUTS (outf, " + ");
1416
5.04k
      OUTS (outf, dregs (src));
1417
5.04k
      OUTS (outf, ") << 0x2");
1418
5.04k
    }
1419
27.4k
  else if (opc == 8)
1420
3.42k
    {
1421
3.42k
      OUTS (outf, "DIVQ (");
1422
3.42k
      OUTS (outf, dregs (dst));
1423
3.42k
      OUTS (outf, ", ");
1424
3.42k
      OUTS (outf, dregs (src));
1425
3.42k
      OUTS (outf, ")");
1426
3.42k
    }
1427
24.0k
  else if (opc == 9)
1428
6.18k
    {
1429
6.18k
      OUTS (outf, "DIVS (");
1430
6.18k
      OUTS (outf, dregs (dst));
1431
6.18k
      OUTS (outf, ", ");
1432
6.18k
      OUTS (outf, dregs (src));
1433
6.18k
      OUTS (outf, ")");
1434
6.18k
    }
1435
17.8k
  else if (opc == 10)
1436
2.36k
    {
1437
2.36k
      OUTS (outf, dregs (dst));
1438
2.36k
      OUTS (outf, " = ");
1439
2.36k
      OUTS (outf, dregs_lo (src));
1440
2.36k
      OUTS (outf, " (X)");
1441
2.36k
    }
1442
15.4k
  else if (opc == 11)
1443
3.28k
    {
1444
3.28k
      OUTS (outf, dregs (dst));
1445
3.28k
      OUTS (outf, " = ");
1446
3.28k
      OUTS (outf, dregs_lo (src));
1447
3.28k
      OUTS (outf, " (Z)");
1448
3.28k
    }
1449
12.1k
  else if (opc == 12)
1450
2.61k
    {
1451
2.61k
      OUTS (outf, dregs (dst));
1452
2.61k
      OUTS (outf, " = ");
1453
2.61k
      OUTS (outf, dregs_byte (src));
1454
2.61k
      OUTS (outf, " (X)");
1455
2.61k
    }
1456
9.57k
  else if (opc == 13)
1457
3.74k
    {
1458
3.74k
      OUTS (outf, dregs (dst));
1459
3.74k
      OUTS (outf, " = ");
1460
3.74k
      OUTS (outf, dregs_byte (src));
1461
3.74k
      OUTS (outf, " (Z)");
1462
3.74k
    }
1463
5.83k
  else if (opc == 14)
1464
819
    {
1465
819
      OUTS (outf, dregs (dst));
1466
819
      OUTS (outf, " = -");
1467
819
      OUTS (outf, dregs (src));
1468
819
    }
1469
5.01k
  else if (opc == 15)
1470
1.06k
    {
1471
1.06k
      OUTS (outf, dregs (dst));
1472
1.06k
      OUTS (outf, " =~ ");
1473
1.06k
      OUTS (outf, dregs (src));
1474
1.06k
    }
1475
3.95k
  else
1476
3.95k
    return 0;
1477
1478
55.2k
  return 2;
1479
59.2k
}
1480
1481
static int
1482
decode_PTR2op_0 (TIword iw0, disassemble_info *outf)
1483
19.8k
{
1484
  /* PTR2op
1485
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
1486
     | 0 | 1 | 0 | 0 | 0 | 1 | 0 |.opc.......|.src.......|.dst.......|
1487
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+  */
1488
19.8k
  int src = ((iw0 >> PTR2op_src_bits) & PTR2op_dst_mask);
1489
19.8k
  int opc = ((iw0 >> PTR2op_opc_bits) & PTR2op_opc_mask);
1490
19.8k
  int dst = ((iw0 >> PTR2op_dst_bits) & PTR2op_dst_mask);
1491
1492
19.8k
  if (opc == 0)
1493
4.88k
    {
1494
4.88k
      OUTS (outf, pregs (dst));
1495
4.88k
      OUTS (outf, " -= ");
1496
4.88k
      OUTS (outf, pregs (src));
1497
4.88k
    }
1498
14.9k
  else if (opc == 1)
1499
3.60k
    {
1500
3.60k
      OUTS (outf, pregs (dst));
1501
3.60k
      OUTS (outf, " = ");
1502
3.60k
      OUTS (outf, pregs (src));
1503
3.60k
      OUTS (outf, " << 0x2");
1504
3.60k
    }
1505
11.3k
  else if (opc == 3)
1506
1.57k
    {
1507
1.57k
      OUTS (outf, pregs (dst));
1508
1.57k
      OUTS (outf, " = ");
1509
1.57k
      OUTS (outf, pregs (src));
1510
1.57k
      OUTS (outf, " >> 0x2");
1511
1.57k
    }
1512
9.74k
  else if (opc == 4)
1513
2.07k
    {
1514
2.07k
      OUTS (outf, pregs (dst));
1515
2.07k
      OUTS (outf, " = ");
1516
2.07k
      OUTS (outf, pregs (src));
1517
2.07k
      OUTS (outf, " >> 0x1");
1518
2.07k
    }
1519
7.66k
  else if (opc == 5)
1520
3.50k
    {
1521
3.50k
      OUTS (outf, pregs (dst));
1522
3.50k
      OUTS (outf, " += ");
1523
3.50k
      OUTS (outf, pregs (src));
1524
3.50k
      OUTS (outf, " (BREV)");
1525
3.50k
    }
1526
4.16k
  else if (opc == 6)
1527
1.37k
    {
1528
1.37k
      OUTS (outf, pregs (dst));
1529
1.37k
      OUTS (outf, " = (");
1530
1.37k
      OUTS (outf, pregs (dst));
1531
1.37k
      OUTS (outf, " + ");
1532
1.37k
      OUTS (outf, pregs (src));
1533
1.37k
      OUTS (outf, ") << 0x1");
1534
1.37k
    }
1535
2.78k
  else if (opc == 7)
1536
1.11k
    {
1537
1.11k
      OUTS (outf, pregs (dst));
1538
1.11k
      OUTS (outf, " = (");
1539
1.11k
      OUTS (outf, pregs (dst));
1540
1.11k
      OUTS (outf, " + ");
1541
1.11k
      OUTS (outf, pregs (src));
1542
1.11k
      OUTS (outf, ") << 0x2");
1543
1.11k
    }
1544
1.66k
  else
1545
1.66k
    return 0;
1546
1547
18.1k
  return 2;
1548
19.8k
}
1549
1550
static int
1551
decode_LOGI2op_0 (TIword iw0, disassemble_info *outf)
1552
69.6k
{
1553
69.6k
  struct private *priv = outf->private_data;
1554
  /* LOGI2op
1555
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
1556
     | 0 | 1 | 0 | 0 | 1 |.opc.......|.src...............|.dst.......|
1557
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+  */
1558
69.6k
  int src = ((iw0 >> LOGI2op_src_bits) & LOGI2op_src_mask);
1559
69.6k
  int opc = ((iw0 >> LOGI2op_opc_bits) & LOGI2op_opc_mask);
1560
69.6k
  int dst = ((iw0 >> LOGI2op_dst_bits) & LOGI2op_dst_mask);
1561
1562
69.6k
  if (priv->parallel)
1563
2.41k
    return 0;
1564
1565
67.2k
  if (opc == 0)
1566
10.7k
    {
1567
10.7k
      OUTS (outf, "CC = !BITTST (");
1568
10.7k
      OUTS (outf, dregs (dst));
1569
10.7k
      OUTS (outf, ", ");
1570
10.7k
      OUTS (outf, uimm5 (src));
1571
10.7k
      OUTS (outf, ");\t\t/* bit");
1572
10.7k
      OUTS (outf, imm7d (src));
1573
10.7k
      OUTS (outf, " */");
1574
10.7k
      priv->comment = true;
1575
10.7k
    }
1576
56.4k
  else if (opc == 1)
1577
10.3k
    {
1578
10.3k
      OUTS (outf, "CC = BITTST (");
1579
10.3k
      OUTS (outf, dregs (dst));
1580
10.3k
      OUTS (outf, ", ");
1581
10.3k
      OUTS (outf, uimm5 (src));
1582
10.3k
      OUTS (outf, ");\t\t/* bit");
1583
10.3k
      OUTS (outf, imm7d (src));
1584
10.3k
      OUTS (outf, " */");
1585
10.3k
      priv->comment = true;
1586
10.3k
    }
1587
46.1k
  else if (opc == 2)
1588
6.52k
    {
1589
6.52k
      OUTS (outf, "BITSET (");
1590
6.52k
      OUTS (outf, dregs (dst));
1591
6.52k
      OUTS (outf, ", ");
1592
6.52k
      OUTS (outf, uimm5 (src));
1593
6.52k
      OUTS (outf, ");\t\t/* bit");
1594
6.52k
      OUTS (outf, imm7d (src));
1595
6.52k
      OUTS (outf, " */");
1596
6.52k
      priv->comment = true;
1597
6.52k
    }
1598
39.6k
  else if (opc == 3)
1599
4.29k
    {
1600
4.29k
      OUTS (outf, "BITTGL (");
1601
4.29k
      OUTS (outf, dregs (dst));
1602
4.29k
      OUTS (outf, ", ");
1603
4.29k
      OUTS (outf, uimm5 (src));
1604
4.29k
      OUTS (outf, ");\t\t/* bit");
1605
4.29k
      OUTS (outf, imm7d (src));
1606
4.29k
      OUTS (outf, " */");
1607
4.29k
      priv->comment = true;
1608
4.29k
    }
1609
35.3k
  else if (opc == 4)
1610
10.2k
    {
1611
10.2k
      OUTS (outf, "BITCLR (");
1612
10.2k
      OUTS (outf, dregs (dst));
1613
10.2k
      OUTS (outf, ", ");
1614
10.2k
      OUTS (outf, uimm5 (src));
1615
10.2k
      OUTS (outf, ");\t\t/* bit");
1616
10.2k
      OUTS (outf, imm7d (src));
1617
10.2k
      OUTS (outf, " */");
1618
10.2k
      priv->comment = true;
1619
10.2k
    }
1620
25.1k
  else if (opc == 5)
1621
7.25k
    {
1622
7.25k
      OUTS (outf, dregs (dst));
1623
7.25k
      OUTS (outf, " >>>= ");
1624
7.25k
      OUTS (outf, uimm5 (src));
1625
7.25k
    }
1626
17.8k
  else if (opc == 6)
1627
7.12k
    {
1628
7.12k
      OUTS (outf, dregs (dst));
1629
7.12k
      OUTS (outf, " >>= ");
1630
7.12k
      OUTS (outf, uimm5 (src));
1631
7.12k
    }
1632
10.7k
  else if (opc == 7)
1633
10.7k
    {
1634
10.7k
      OUTS (outf, dregs (dst));
1635
10.7k
      OUTS (outf, " <<= ");
1636
10.7k
      OUTS (outf, uimm5 (src));
1637
10.7k
    }
1638
0
  else
1639
0
    return 0;
1640
1641
67.2k
  return 2;
1642
67.2k
}
1643
1644
static int
1645
decode_COMP3op_0 (TIword iw0, disassemble_info *outf)
1646
101k
{
1647
  /* COMP3op
1648
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
1649
     | 0 | 1 | 0 | 1 |.opc.......|.dst.......|.src1......|.src0......|
1650
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+  */
1651
101k
  int opc  = ((iw0 >> COMP3op_opc_bits) & COMP3op_opc_mask);
1652
101k
  int dst  = ((iw0 >> COMP3op_dst_bits) & COMP3op_dst_mask);
1653
101k
  int src0 = ((iw0 >> COMP3op_src0_bits) & COMP3op_src0_mask);
1654
101k
  int src1 = ((iw0 >> COMP3op_src1_bits) & COMP3op_src1_mask);
1655
1656
101k
  if (opc == 5 && src1 == src0)
1657
2.40k
    {
1658
2.40k
      OUTS (outf, pregs (dst));
1659
2.40k
      OUTS (outf, " = ");
1660
2.40k
      OUTS (outf, pregs (src0));
1661
2.40k
      OUTS (outf, " << 0x1");
1662
2.40k
    }
1663
98.8k
  else if (opc == 1)
1664
12.2k
    {
1665
12.2k
      OUTS (outf, dregs (dst));
1666
12.2k
      OUTS (outf, " = ");
1667
12.2k
      OUTS (outf, dregs (src0));
1668
12.2k
      OUTS (outf, " - ");
1669
12.2k
      OUTS (outf, dregs (src1));
1670
12.2k
    }
1671
86.6k
  else if (opc == 2)
1672
8.85k
    {
1673
8.85k
      OUTS (outf, dregs (dst));
1674
8.85k
      OUTS (outf, " = ");
1675
8.85k
      OUTS (outf, dregs (src0));
1676
8.85k
      OUTS (outf, " & ");
1677
8.85k
      OUTS (outf, dregs (src1));
1678
8.85k
    }
1679
77.7k
  else if (opc == 3)
1680
14.4k
    {
1681
14.4k
      OUTS (outf, dregs (dst));
1682
14.4k
      OUTS (outf, " = ");
1683
14.4k
      OUTS (outf, dregs (src0));
1684
14.4k
      OUTS (outf, " | ");
1685
14.4k
      OUTS (outf, dregs (src1));
1686
14.4k
    }
1687
63.2k
  else if (opc == 4)
1688
17.4k
    {
1689
17.4k
      OUTS (outf, dregs (dst));
1690
17.4k
      OUTS (outf, " = ");
1691
17.4k
      OUTS (outf, dregs (src0));
1692
17.4k
      OUTS (outf, " ^ ");
1693
17.4k
      OUTS (outf, dregs (src1));
1694
17.4k
    }
1695
45.8k
  else if (opc == 5)
1696
8.46k
    {
1697
8.46k
      OUTS (outf, pregs (dst));
1698
8.46k
      OUTS (outf, " = ");
1699
8.46k
      OUTS (outf, pregs (src0));
1700
8.46k
      OUTS (outf, " + ");
1701
8.46k
      OUTS (outf, pregs (src1));
1702
8.46k
    }
1703
37.3k
  else if (opc == 6)
1704
11.7k
    {
1705
11.7k
      OUTS (outf, pregs (dst));
1706
11.7k
      OUTS (outf, " = ");
1707
11.7k
      OUTS (outf, pregs (src0));
1708
11.7k
      OUTS (outf, " + (");
1709
11.7k
      OUTS (outf, pregs (src1));
1710
11.7k
      OUTS (outf, " << 0x1)");
1711
11.7k
    }
1712
25.6k
  else if (opc == 7)
1713
15.7k
    {
1714
15.7k
      OUTS (outf, pregs (dst));
1715
15.7k
      OUTS (outf, " = ");
1716
15.7k
      OUTS (outf, pregs (src0));
1717
15.7k
      OUTS (outf, " + (");
1718
15.7k
      OUTS (outf, pregs (src1));
1719
15.7k
      OUTS (outf, " << 0x2)");
1720
15.7k
    }
1721
9.83k
  else if (opc == 0)
1722
9.83k
    {
1723
9.83k
      OUTS (outf, dregs (dst));
1724
9.83k
      OUTS (outf, " = ");
1725
9.83k
      OUTS (outf, dregs (src0));
1726
9.83k
      OUTS (outf, " + ");
1727
9.83k
      OUTS (outf, dregs (src1));
1728
9.83k
    }
1729
0
  else
1730
0
    return 0;
1731
1732
101k
  return 2;
1733
101k
}
1734
1735
static int
1736
decode_COMPI2opD_0 (TIword iw0, disassemble_info *outf)
1737
120k
{
1738
120k
  struct private *priv = outf->private_data;
1739
  /* COMPI2opD
1740
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
1741
     | 0 | 1 | 1 | 0 | 0 |.op|..src......................|.dst.......|
1742
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+  */
1743
120k
  int op  = ((iw0 >> COMPI2opD_op_bits) & COMPI2opD_op_mask);
1744
120k
  int dst = ((iw0 >> COMPI2opD_dst_bits) & COMPI2opD_dst_mask);
1745
120k
  int src = ((iw0 >> COMPI2opD_src_bits) & COMPI2opD_src_mask);
1746
1747
120k
  bu32 *pval = get_allreg (0, dst);
1748
1749
120k
  if (priv->parallel)
1750
5.78k
    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
114k
  if (op == 0)
1756
59.6k
    {
1757
59.6k
      *pval = imm7_val (src);
1758
59.6k
      if (src & 0x40)
1759
26.0k
  *pval |= 0xFFFFFF80;
1760
33.6k
      else
1761
33.6k
  *pval &= 0x7F;
1762
59.6k
    }
1763
1764
114k
  if (op == 0)
1765
59.6k
    {
1766
59.6k
      OUTS (outf, dregs (dst));
1767
59.6k
      OUTS (outf, " = ");
1768
59.6k
      OUTS (outf, imm7 (src));
1769
59.6k
      OUTS (outf, " (X);\t\t/*\t\t");
1770
59.6k
      OUTS (outf, dregs (dst));
1771
59.6k
      OUTS (outf, "=");
1772
59.6k
      OUTS (outf, uimm32 (*pval));
1773
59.6k
      OUTS (outf, "(");
1774
59.6k
      OUTS (outf, imm32 (*pval));
1775
59.6k
      OUTS (outf, ") */");
1776
59.6k
      priv->comment = true;
1777
59.6k
    }
1778
54.6k
  else if (op == 1)
1779
54.6k
    {
1780
54.6k
      OUTS (outf, dregs (dst));
1781
54.6k
      OUTS (outf, " += ");
1782
54.6k
      OUTS (outf, imm7 (src));
1783
54.6k
      OUTS (outf, ";\t\t/* (");
1784
54.6k
      OUTS (outf, imm7d (src));
1785
54.6k
      OUTS (outf, ") */");
1786
54.6k
      priv->comment = true;
1787
54.6k
    }
1788
0
  else
1789
0
    return 0;
1790
1791
114k
  return 2;
1792
114k
}
1793
1794
static int
1795
decode_COMPI2opP_0 (TIword iw0, disassemble_info *outf)
1796
101k
{
1797
101k
  struct private *priv = outf->private_data;
1798
  /* COMPI2opP
1799
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
1800
     | 0 | 1 | 1 | 0 | 1 |.op|.src.......................|.dst.......|
1801
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+  */
1802
101k
  int op  = ((iw0 >> COMPI2opP_op_bits) & COMPI2opP_op_mask);
1803
101k
  int src = ((iw0 >> COMPI2opP_src_bits) & COMPI2opP_src_mask);
1804
101k
  int dst = ((iw0 >> COMPI2opP_dst_bits) & COMPI2opP_dst_mask);
1805
1806
101k
  bu32 *pval = get_allreg (1, dst);
1807
1808
101k
  if (priv->parallel)
1809
8.23k
    return 0;
1810
1811
93.5k
  if (op == 0)
1812
48.3k
    {
1813
48.3k
      *pval = imm7_val (src);
1814
48.3k
      if (src & 0x40)
1815
12.1k
  *pval |= 0xFFFFFF80;
1816
36.1k
      else
1817
36.1k
  *pval &= 0x7F;
1818
48.3k
    }
1819
1820
93.5k
  if (op == 0)
1821
48.3k
    {
1822
48.3k
      OUTS (outf, pregs (dst));
1823
48.3k
      OUTS (outf, " = ");
1824
48.3k
      OUTS (outf, imm7 (src));
1825
48.3k
      OUTS (outf, " (X);\t\t/*\t\t");
1826
48.3k
      OUTS (outf, pregs (dst));
1827
48.3k
      OUTS (outf, "=");
1828
48.3k
      OUTS (outf, uimm32 (*pval));
1829
48.3k
      OUTS (outf, "(");
1830
48.3k
      OUTS (outf, imm32 (*pval));
1831
48.3k
      OUTS (outf, ") */");
1832
48.3k
      priv->comment = true;
1833
48.3k
    }
1834
45.2k
  else if (op == 1)
1835
45.2k
    {
1836
45.2k
      OUTS (outf, pregs (dst));
1837
45.2k
      OUTS (outf, " += ");
1838
45.2k
      OUTS (outf, imm7 (src));
1839
45.2k
      OUTS (outf, ";\t\t/* (");
1840
45.2k
      OUTS (outf, imm7d (src));
1841
45.2k
      OUTS (outf, ") */");
1842
45.2k
      priv->comment = true;
1843
45.2k
    }
1844
0
  else
1845
0
    return 0;
1846
1847
93.5k
  return 2;
1848
93.5k
}
1849
1850
static int
1851
decode_LDSTpmod_0 (TIword iw0, disassemble_info *outf)
1852
128k
{
1853
  /* LDSTpmod
1854
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
1855
     | 1 | 0 | 0 | 0 |.W.|.aop...|.reg.......|.idx.......|.ptr.......|
1856
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+  */
1857
128k
  int W   = ((iw0 >> LDSTpmod_W_bits) & LDSTpmod_W_mask);
1858
128k
  int aop = ((iw0 >> LDSTpmod_aop_bits) & LDSTpmod_aop_mask);
1859
128k
  int idx = ((iw0 >> LDSTpmod_idx_bits) & LDSTpmod_idx_mask);
1860
128k
  int ptr = ((iw0 >> LDSTpmod_ptr_bits) & LDSTpmod_ptr_mask);
1861
128k
  int reg = ((iw0 >> LDSTpmod_reg_bits) & LDSTpmod_reg_mask);
1862
1863
128k
  if (aop == 1 && W == 0 && idx == ptr)
1864
2.34k
    {
1865
2.34k
      OUTS (outf, dregs_lo (reg));
1866
2.34k
      OUTS (outf, " = W[");
1867
2.34k
      OUTS (outf, pregs (ptr));
1868
2.34k
      OUTS (outf, "]");
1869
2.34k
    }
1870
126k
  else if (aop == 2 && W == 0 && idx == ptr)
1871
2.98k
    {
1872
2.98k
      OUTS (outf, dregs_hi (reg));
1873
2.98k
      OUTS (outf, " = W[");
1874
2.98k
      OUTS (outf, pregs (ptr));
1875
2.98k
      OUTS (outf, "]");
1876
2.98k
    }
1877
123k
  else if (aop == 1 && W == 1 && idx == ptr)
1878
2.30k
    {
1879
2.30k
      OUTS (outf, "W[");
1880
2.30k
      OUTS (outf, pregs (ptr));
1881
2.30k
      OUTS (outf, "] = ");
1882
2.30k
      OUTS (outf, dregs_lo (reg));
1883
2.30k
    }
1884
121k
  else if (aop == 2 && W == 1 && idx == ptr)
1885
1.87k
    {
1886
1.87k
      OUTS (outf, "W[");
1887
1.87k
      OUTS (outf, pregs (ptr));
1888
1.87k
      OUTS (outf, "] = ");
1889
1.87k
      OUTS (outf, dregs_hi (reg));
1890
1.87k
    }
1891
119k
  else if (aop == 0 && W == 0)
1892
39.8k
    {
1893
39.8k
      OUTS (outf, dregs (reg));
1894
39.8k
      OUTS (outf, " = [");
1895
39.8k
      OUTS (outf, pregs (ptr));
1896
39.8k
      OUTS (outf, " ++ ");
1897
39.8k
      OUTS (outf, pregs (idx));
1898
39.8k
      OUTS (outf, "]");
1899
39.8k
    }
1900
79.5k
  else if (aop == 1 && W == 0)
1901
11.3k
    {
1902
11.3k
      OUTS (outf, dregs_lo (reg));
1903
11.3k
      OUTS (outf, " = W[");
1904
11.3k
      OUTS (outf, pregs (ptr));
1905
11.3k
      OUTS (outf, " ++ ");
1906
11.3k
      OUTS (outf, pregs (idx));
1907
11.3k
      OUTS (outf, "]");
1908
11.3k
    }
1909
68.1k
  else if (aop == 2 && W == 0)
1910
11.4k
    {
1911
11.4k
      OUTS (outf, dregs_hi (reg));
1912
11.4k
      OUTS (outf, " = W[");
1913
11.4k
      OUTS (outf, pregs (ptr));
1914
11.4k
      OUTS (outf, " ++ ");
1915
11.4k
      OUTS (outf, pregs (idx));
1916
11.4k
      OUTS (outf, "]");
1917
11.4k
    }
1918
56.7k
  else if (aop == 3 && W == 0)
1919
9.22k
    {
1920
9.22k
      OUTS (outf, dregs (reg));
1921
9.22k
      OUTS (outf, " = W[");
1922
9.22k
      OUTS (outf, pregs (ptr));
1923
9.22k
      OUTS (outf, " ++ ");
1924
9.22k
      OUTS (outf, pregs (idx));
1925
9.22k
      OUTS (outf, "] (Z)");
1926
9.22k
    }
1927
47.4k
  else if (aop == 3 && W == 1)
1928
12.2k
    {
1929
12.2k
      OUTS (outf, dregs (reg));
1930
12.2k
      OUTS (outf, " = W[");
1931
12.2k
      OUTS (outf, pregs (ptr));
1932
12.2k
      OUTS (outf, " ++ ");
1933
12.2k
      OUTS (outf, pregs (idx));
1934
12.2k
      OUTS (outf, "] (X)");
1935
12.2k
    }
1936
35.2k
  else if (aop == 0 && W == 1)
1937
15.8k
    {
1938
15.8k
      OUTS (outf, "[");
1939
15.8k
      OUTS (outf, pregs (ptr));
1940
15.8k
      OUTS (outf, " ++ ");
1941
15.8k
      OUTS (outf, pregs (idx));
1942
15.8k
      OUTS (outf, "] = ");
1943
15.8k
      OUTS (outf, dregs (reg));
1944
15.8k
    }
1945
19.3k
  else if (aop == 1 && W == 1)
1946
10.0k
    {
1947
10.0k
      OUTS (outf, "W[");
1948
10.0k
      OUTS (outf, pregs (ptr));
1949
10.0k
      OUTS (outf, " ++ ");
1950
10.0k
      OUTS (outf, pregs (idx));
1951
10.0k
      OUTS (outf, "] = ");
1952
10.0k
      OUTS (outf, dregs_lo (reg));
1953
10.0k
    }
1954
9.21k
  else if (aop == 2 && W == 1)
1955
9.21k
    {
1956
9.21k
      OUTS (outf, "W[");
1957
9.21k
      OUTS (outf, pregs (ptr));
1958
9.21k
      OUTS (outf, " ++ ");
1959
9.21k
      OUTS (outf, pregs (idx));
1960
9.21k
      OUTS (outf, "] = ");
1961
9.21k
      OUTS (outf, dregs_hi (reg));
1962
9.21k
    }
1963
0
  else
1964
0
    return 0;
1965
1966
128k
  return 2;
1967
128k
}
1968
1969
static int
1970
decode_dagMODim_0 (TIword iw0, disassemble_info *outf)
1971
2.18k
{
1972
  /* dagMODim
1973
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
1974
     | 1 | 0 | 0 | 1 | 1 | 1 | 1 | 0 |.br| 1 | 1 |.op|.m.....|.i.....|
1975
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+  */
1976
2.18k
  int i  = ((iw0 >> DagMODim_i_bits) & DagMODim_i_mask);
1977
2.18k
  int m  = ((iw0 >> DagMODim_m_bits) & DagMODim_m_mask);
1978
2.18k
  int br = ((iw0 >> DagMODim_br_bits) & DagMODim_br_mask);
1979
2.18k
  int op = ((iw0 >> DagMODim_op_bits) & DagMODim_op_mask);
1980
1981
2.18k
  if (op == 0 && br == 1)
1982
869
    {
1983
869
      OUTS (outf, iregs (i));
1984
869
      OUTS (outf, " += ");
1985
869
      OUTS (outf, mregs (m));
1986
869
      OUTS (outf, " (BREV)");
1987
869
    }
1988
1.31k
  else if (op == 0)
1989
281
    {
1990
281
      OUTS (outf, iregs (i));
1991
281
      OUTS (outf, " += ");
1992
281
      OUTS (outf, mregs (m));
1993
281
    }
1994
1.03k
  else if (op == 1 && br == 0)
1995
294
    {
1996
294
      OUTS (outf, iregs (i));
1997
294
      OUTS (outf, " -= ");
1998
294
      OUTS (outf, mregs (m));
1999
294
    }
2000
743
  else
2001
743
    return 0;
2002
2003
1.44k
  return 2;
2004
2.18k
}
2005
2006
static int
2007
decode_dagMODik_0 (TIword iw0, disassemble_info *outf)
2008
2.27k
{
2009
2.27k
  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.27k
  int i  = ((iw0 >> DagMODik_i_bits) & DagMODik_i_mask);
2015
2.27k
  int op = ((iw0 >> DagMODik_op_bits) & DagMODik_op_mask);
2016
2017
2.27k
  if (op == 0)
2018
1.32k
    {
2019
1.32k
      OUTS (outf, iregs (i));
2020
1.32k
      OUTS (outf, " += 0x2");
2021
1.32k
    }
2022
948
  else if (op == 1)
2023
141
    {
2024
141
      OUTS (outf, iregs (i));
2025
141
      OUTS (outf, " -= 0x2");
2026
141
    }
2027
807
  else if (op == 2)
2028
390
    {
2029
390
      OUTS (outf, iregs (i));
2030
390
      OUTS (outf, " += 0x4");
2031
390
    }
2032
417
  else if (op == 3)
2033
417
    {
2034
417
      OUTS (outf, iregs (i));
2035
417
      OUTS (outf, " -= 0x4");
2036
417
    }
2037
0
  else
2038
0
    return 0;
2039
2040
2.27k
  if (!priv->parallel)
2041
2.11k
    {
2042
2.11k
      OUTS (outf, ";\t\t/* (  ");
2043
2.11k
      if (op == 0 || op == 1)
2044
1.31k
  OUTS (outf, "2");
2045
806
      else if (op == 2 || op == 3)
2046
806
  OUTS (outf, "4");
2047
2.11k
      OUTS (outf, ") */");
2048
2.11k
      priv->comment = true;
2049
2.11k
    }
2050
2051
2.27k
  return 2;
2052
2.27k
}
2053
2054
static int
2055
decode_dspLDST_0 (TIword iw0, disassemble_info *outf)
2056
32.0k
{
2057
  /* dspLDST
2058
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
2059
     | 1 | 0 | 0 | 1 | 1 | 1 |.W.|.aop...|.m.....|.i.....|.reg.......|
2060
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+  */
2061
32.0k
  int i   = ((iw0 >> DspLDST_i_bits) & DspLDST_i_mask);
2062
32.0k
  int m   = ((iw0 >> DspLDST_m_bits) & DspLDST_m_mask);
2063
32.0k
  int W   = ((iw0 >> DspLDST_W_bits) & DspLDST_W_mask);
2064
32.0k
  int aop = ((iw0 >> DspLDST_aop_bits) & DspLDST_aop_mask);
2065
32.0k
  int reg = ((iw0 >> DspLDST_reg_bits) & DspLDST_reg_mask);
2066
2067
32.0k
  if (aop == 0 && W == 0 && m == 0)
2068
1.20k
    {
2069
1.20k
      OUTS (outf, dregs (reg));
2070
1.20k
      OUTS (outf, " = [");
2071
1.20k
      OUTS (outf, iregs (i));
2072
1.20k
      OUTS (outf, "++]");
2073
1.20k
    }
2074
30.8k
  else if (aop == 0 && W == 0 && m == 1)
2075
881
    {
2076
881
      OUTS (outf, dregs_lo (reg));
2077
881
      OUTS (outf, " = W[");
2078
881
      OUTS (outf, iregs (i));
2079
881
      OUTS (outf, "++]");
2080
881
    }
2081
29.9k
  else if (aop == 0 && W == 0 && m == 2)
2082
309
    {
2083
309
      OUTS (outf, dregs_hi (reg));
2084
309
      OUTS (outf, " = W[");
2085
309
      OUTS (outf, iregs (i));
2086
309
      OUTS (outf, "++]");
2087
309
    }
2088
29.6k
  else if (aop == 1 && W == 0 && m == 0)
2089
5.19k
    {
2090
5.19k
      OUTS (outf, dregs (reg));
2091
5.19k
      OUTS (outf, " = [");
2092
5.19k
      OUTS (outf, iregs (i));
2093
5.19k
      OUTS (outf, "--]");
2094
5.19k
    }
2095
24.4k
  else if (aop == 1 && W == 0 && m == 1)
2096
326
    {
2097
326
      OUTS (outf, dregs_lo (reg));
2098
326
      OUTS (outf, " = W[");
2099
326
      OUTS (outf, iregs (i));
2100
326
      OUTS (outf, "--]");
2101
326
    }
2102
24.0k
  else if (aop == 1 && W == 0 && m == 2)
2103
556
    {
2104
556
      OUTS (outf, dregs_hi (reg));
2105
556
      OUTS (outf, " = W[");
2106
556
      OUTS (outf, iregs (i));
2107
556
      OUTS (outf, "--]");
2108
556
    }
2109
23.5k
  else if (aop == 2 && W == 0 && m == 0)
2110
1.65k
    {
2111
1.65k
      OUTS (outf, dregs (reg));
2112
1.65k
      OUTS (outf, " = [");
2113
1.65k
      OUTS (outf, iregs (i));
2114
1.65k
      OUTS (outf, "]");
2115
1.65k
    }
2116
21.8k
  else if (aop == 2 && W == 0 && m == 1)
2117
622
    {
2118
622
      OUTS (outf, dregs_lo (reg));
2119
622
      OUTS (outf, " = W[");
2120
622
      OUTS (outf, iregs (i));
2121
622
      OUTS (outf, "]");
2122
622
    }
2123
21.2k
  else if (aop == 2 && W == 0 && m == 2)
2124
421
    {
2125
421
      OUTS (outf, dregs_hi (reg));
2126
421
      OUTS (outf, " = W[");
2127
421
      OUTS (outf, iregs (i));
2128
421
      OUTS (outf, "]");
2129
421
    }
2130
20.8k
  else if (aop == 0 && W == 1 && m == 0)
2131
1.32k
    {
2132
1.32k
      OUTS (outf, "[");
2133
1.32k
      OUTS (outf, iregs (i));
2134
1.32k
      OUTS (outf, "++] = ");
2135
1.32k
      OUTS (outf, dregs (reg));
2136
1.32k
    }
2137
19.5k
  else if (aop == 0 && W == 1 && m == 1)
2138
804
    {
2139
804
      OUTS (outf, "W[");
2140
804
      OUTS (outf, iregs (i));
2141
804
      OUTS (outf, "++] = ");
2142
804
      OUTS (outf, dregs_lo (reg));
2143
804
    }
2144
18.7k
  else if (aop == 0 && W == 1 && m == 2)
2145
889
    {
2146
889
      OUTS (outf, "W[");
2147
889
      OUTS (outf, iregs (i));
2148
889
      OUTS (outf, "++] = ");
2149
889
      OUTS (outf, dregs_hi (reg));
2150
889
    }
2151
17.8k
  else if (aop == 1 && W == 1 && m == 0)
2152
3.05k
    {
2153
3.05k
      OUTS (outf, "[");
2154
3.05k
      OUTS (outf, iregs (i));
2155
3.05k
      OUTS (outf, "--] = ");
2156
3.05k
      OUTS (outf, dregs (reg));
2157
3.05k
    }
2158
14.7k
  else if (aop == 1 && W == 1 && m == 1)
2159
670
    {
2160
670
      OUTS (outf, "W[");
2161
670
      OUTS (outf, iregs (i));
2162
670
      OUTS (outf, "--] = ");
2163
670
      OUTS (outf, dregs_lo (reg));
2164
670
    }
2165
14.1k
  else if (aop == 1 && W == 1 && m == 2)
2166
433
    {
2167
433
      OUTS (outf, "W[");
2168
433
      OUTS (outf, iregs (i));
2169
433
      OUTS (outf, "--] = ");
2170
433
      OUTS (outf, dregs_hi (reg));
2171
433
    }
2172
13.6k
  else if (aop == 2 && W == 1 && m == 0)
2173
743
    {
2174
743
      OUTS (outf, "[");
2175
743
      OUTS (outf, iregs (i));
2176
743
      OUTS (outf, "] = ");
2177
743
      OUTS (outf, dregs (reg));
2178
743
    }
2179
12.9k
  else if (aop == 2 && W == 1 && m == 1)
2180
441
    {
2181
441
      OUTS (outf, "W[");
2182
441
      OUTS (outf, iregs (i));
2183
441
      OUTS (outf, "] = ");
2184
441
      OUTS (outf, dregs_lo (reg));
2185
441
    }
2186
12.4k
  else if (aop == 2 && W == 1 && m == 2)
2187
495
    {
2188
495
      OUTS (outf, "W[");
2189
495
      OUTS (outf, iregs (i));
2190
495
      OUTS (outf, "] = ");
2191
495
      OUTS (outf, dregs_hi (reg));
2192
495
    }
2193
11.9k
  else if (aop == 3 && W == 0)
2194
4.80k
    {
2195
4.80k
      OUTS (outf, dregs (reg));
2196
4.80k
      OUTS (outf, " = [");
2197
4.80k
      OUTS (outf, iregs (i));
2198
4.80k
      OUTS (outf, " ++ ");
2199
4.80k
      OUTS (outf, mregs (m));
2200
4.80k
      OUTS (outf, "]");
2201
4.80k
    }
2202
7.18k
  else if (aop == 3 && W == 1)
2203
5.25k
    {
2204
5.25k
      OUTS (outf, "[");
2205
5.25k
      OUTS (outf, iregs (i));
2206
5.25k
      OUTS (outf, " ++ ");
2207
5.25k
      OUTS (outf, mregs (m));
2208
5.25k
      OUTS (outf, "] = ");
2209
5.25k
      OUTS (outf, dregs (reg));
2210
5.25k
    }
2211
1.93k
  else
2212
1.93k
    return 0;
2213
2214
30.0k
  return 2;
2215
32.0k
}
2216
2217
static int
2218
decode_LDST_0 (TIword iw0, disassemble_info *outf)
2219
101k
{
2220
  /* LDST
2221
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
2222
     | 1 | 0 | 0 | 1 |.sz....|.W.|.aop...|.Z.|.ptr.......|.reg.......|
2223
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+  */
2224
101k
  int Z   = ((iw0 >> LDST_Z_bits) & LDST_Z_mask);
2225
101k
  int W   = ((iw0 >> LDST_W_bits) & LDST_W_mask);
2226
101k
  int sz  = ((iw0 >> LDST_sz_bits) & LDST_sz_mask);
2227
101k
  int aop = ((iw0 >> LDST_aop_bits) & LDST_aop_mask);
2228
101k
  int reg = ((iw0 >> LDST_reg_bits) & LDST_reg_mask);
2229
101k
  int ptr = ((iw0 >> LDST_ptr_bits) & LDST_ptr_mask);
2230
2231
101k
  if (aop == 0 && sz == 0 && Z == 0 && W == 0)
2232
2.69k
    {
2233
2.69k
      OUTS (outf, dregs (reg));
2234
2.69k
      OUTS (outf, " = [");
2235
2.69k
      OUTS (outf, pregs (ptr));
2236
2.69k
      OUTS (outf, "++]");
2237
2.69k
    }
2238
98.5k
  else if (aop == 0 && sz == 0 && Z == 1 && W == 0 && reg != ptr)
2239
1.44k
    {
2240
1.44k
      OUTS (outf, pregs (reg));
2241
1.44k
      OUTS (outf, " = [");
2242
1.44k
      OUTS (outf, pregs (ptr));
2243
1.44k
      OUTS (outf, "++]");
2244
1.44k
    }
2245
97.1k
  else if (aop == 0 && sz == 1 && Z == 0 && W == 0)
2246
2.19k
    {
2247
2.19k
      OUTS (outf, dregs (reg));
2248
2.19k
      OUTS (outf, " = W[");
2249
2.19k
      OUTS (outf, pregs (ptr));
2250
2.19k
      OUTS (outf, "++] (Z)");
2251
2.19k
    }
2252
94.9k
  else if (aop == 0 && sz == 1 && Z == 1 && W == 0)
2253
818
    {
2254
818
      OUTS (outf, dregs (reg));
2255
818
      OUTS (outf, " = W[");
2256
818
      OUTS (outf, pregs (ptr));
2257
818
      OUTS (outf, "++] (X)");
2258
818
    }
2259
94.1k
  else if (aop == 0 && sz == 2 && Z == 0 && W == 0)
2260
3.49k
    {
2261
3.49k
      OUTS (outf, dregs (reg));
2262
3.49k
      OUTS (outf, " = B[");
2263
3.49k
      OUTS (outf, pregs (ptr));
2264
3.49k
      OUTS (outf, "++] (Z)");
2265
3.49k
    }
2266
90.6k
  else if (aop == 0 && sz == 2 && Z == 1 && W == 0)
2267
1.39k
    {
2268
1.39k
      OUTS (outf, dregs (reg));
2269
1.39k
      OUTS (outf, " = B[");
2270
1.39k
      OUTS (outf, pregs (ptr));
2271
1.39k
      OUTS (outf, "++] (X)");
2272
1.39k
    }
2273
89.2k
  else if (aop == 1 && sz == 0 && Z == 0 && W == 0)
2274
4.07k
    {
2275
4.07k
      OUTS (outf, dregs (reg));
2276
4.07k
      OUTS (outf, " = [");
2277
4.07k
      OUTS (outf, pregs (ptr));
2278
4.07k
      OUTS (outf, "--]");
2279
4.07k
    }
2280
85.1k
  else if (aop == 1 && sz == 0 && Z == 1 && W == 0 && reg != ptr)
2281
1.12k
    {
2282
1.12k
      OUTS (outf, pregs (reg));
2283
1.12k
      OUTS (outf, " = [");
2284
1.12k
      OUTS (outf, pregs (ptr));
2285
1.12k
      OUTS (outf, "--]");
2286
1.12k
    }
2287
84.0k
  else if (aop == 1 && sz == 1 && Z == 0 && W == 0)
2288
4.20k
    {
2289
4.20k
      OUTS (outf, dregs (reg));
2290
4.20k
      OUTS (outf, " = W[");
2291
4.20k
      OUTS (outf, pregs (ptr));
2292
4.20k
      OUTS (outf, "--] (Z)");
2293
4.20k
    }
2294
79.8k
  else if (aop == 1 && sz == 1 && Z == 1 && W == 0)
2295
1.00k
    {
2296
1.00k
      OUTS (outf, dregs (reg));
2297
1.00k
      OUTS (outf, " = W[");
2298
1.00k
      OUTS (outf, pregs (ptr));
2299
1.00k
      OUTS (outf, "--] (X)");
2300
1.00k
    }
2301
78.8k
  else if (aop == 1 && sz == 2 && Z == 0 && W == 0)
2302
9.46k
    {
2303
9.46k
      OUTS (outf, dregs (reg));
2304
9.46k
      OUTS (outf, " = B[");
2305
9.46k
      OUTS (outf, pregs (ptr));
2306
9.46k
      OUTS (outf, "--] (Z)");
2307
9.46k
    }
2308
69.3k
  else if (aop == 1 && sz == 2 && Z == 1 && W == 0)
2309
2.19k
    {
2310
2.19k
      OUTS (outf, dregs (reg));
2311
2.19k
      OUTS (outf, " = B[");
2312
2.19k
      OUTS (outf, pregs (ptr));
2313
2.19k
      OUTS (outf, "--] (X)");
2314
2.19k
    }
2315
67.1k
  else if (aop == 2 && sz == 0 && Z == 0 && W == 0)
2316
2.78k
    {
2317
2.78k
      OUTS (outf, dregs (reg));
2318
2.78k
      OUTS (outf, " = [");
2319
2.78k
      OUTS (outf, pregs (ptr));
2320
2.78k
      OUTS (outf, "]");
2321
2.78k
    }
2322
64.4k
  else if (aop == 2 && sz == 0 && Z == 1 && W == 0)
2323
1.13k
    {
2324
1.13k
      OUTS (outf, pregs (reg));
2325
1.13k
      OUTS (outf, " = [");
2326
1.13k
      OUTS (outf, pregs (ptr));
2327
1.13k
      OUTS (outf, "]");
2328
1.13k
    }
2329
63.2k
  else if (aop == 2 && sz == 1 && Z == 0 && W == 0)
2330
1.74k
    {
2331
1.74k
      OUTS (outf, dregs (reg));
2332
1.74k
      OUTS (outf, " = W[");
2333
1.74k
      OUTS (outf, pregs (ptr));
2334
1.74k
      OUTS (outf, "] (Z)");
2335
1.74k
    }
2336
61.5k
  else if (aop == 2 && sz == 1 && Z == 1 && W == 0)
2337
778
    {
2338
778
      OUTS (outf, dregs (reg));
2339
778
      OUTS (outf, " = W[");
2340
778
      OUTS (outf, pregs (ptr));
2341
778
      OUTS (outf, "] (X)");
2342
778
    }
2343
60.7k
  else if (aop == 2 && sz == 2 && Z == 0 && W == 0)
2344
1.59k
    {
2345
1.59k
      OUTS (outf, dregs (reg));
2346
1.59k
      OUTS (outf, " = B[");
2347
1.59k
      OUTS (outf, pregs (ptr));
2348
1.59k
      OUTS (outf, "] (Z)");
2349
1.59k
    }
2350
59.1k
  else if (aop == 2 && sz == 2 && Z == 1 && W == 0)
2351
875
    {
2352
875
      OUTS (outf, dregs (reg));
2353
875
      OUTS (outf, " = B[");
2354
875
      OUTS (outf, pregs (ptr));
2355
875
      OUTS (outf, "] (X)");
2356
875
    }
2357
58.2k
  else if (aop == 0 && sz == 0 && Z == 0 && W == 1)
2358
1.85k
    {
2359
1.85k
      OUTS (outf, "[");
2360
1.85k
      OUTS (outf, pregs (ptr));
2361
1.85k
      OUTS (outf, "++] = ");
2362
1.85k
      OUTS (outf, dregs (reg));
2363
1.85k
    }
2364
56.4k
  else if (aop == 0 && sz == 0 && Z == 1 && W == 1)
2365
1.15k
    {
2366
1.15k
      OUTS (outf, "[");
2367
1.15k
      OUTS (outf, pregs (ptr));
2368
1.15k
      OUTS (outf, "++] = ");
2369
1.15k
      OUTS (outf, pregs (reg));
2370
1.15k
    }
2371
55.2k
  else if (aop == 0 && sz == 1 && Z == 0 && W == 1)
2372
1.22k
    {
2373
1.22k
      OUTS (outf, "W[");
2374
1.22k
      OUTS (outf, pregs (ptr));
2375
1.22k
      OUTS (outf, "++] = ");
2376
1.22k
      OUTS (outf, dregs (reg));
2377
1.22k
    }
2378
54.0k
  else if (aop == 0 && sz == 2 && Z == 0 && W == 1)
2379
2.83k
    {
2380
2.83k
      OUTS (outf, "B[");
2381
2.83k
      OUTS (outf, pregs (ptr));
2382
2.83k
      OUTS (outf, "++] = ");
2383
2.83k
      OUTS (outf, dregs (reg));
2384
2.83k
    }
2385
51.2k
  else if (aop == 1 && sz == 0 && Z == 0 && W == 1)
2386
3.06k
    {
2387
3.06k
      OUTS (outf, "[");
2388
3.06k
      OUTS (outf, pregs (ptr));
2389
3.06k
      OUTS (outf, "--] = ");
2390
3.06k
      OUTS (outf, dregs (reg));
2391
3.06k
    }
2392
48.1k
  else if (aop == 1 && sz == 0 && Z == 1 && W == 1)
2393
1.86k
    {
2394
1.86k
      OUTS (outf, "[");
2395
1.86k
      OUTS (outf, pregs (ptr));
2396
1.86k
      OUTS (outf, "--] = ");
2397
1.86k
      OUTS (outf, pregs (reg));
2398
1.86k
    }
2399
46.2k
  else if (aop == 1 && sz == 1 && Z == 0 && W == 1)
2400
1.71k
    {
2401
1.71k
      OUTS (outf, "W[");
2402
1.71k
      OUTS (outf, pregs (ptr));
2403
1.71k
      OUTS (outf, "--] = ");
2404
1.71k
      OUTS (outf, dregs (reg));
2405
1.71k
    }
2406
44.5k
  else if (aop == 1 && sz == 2 && Z == 0 && W == 1)
2407
2.75k
    {
2408
2.75k
      OUTS (outf, "B[");
2409
2.75k
      OUTS (outf, pregs (ptr));
2410
2.75k
      OUTS (outf, "--] = ");
2411
2.75k
      OUTS (outf, dregs (reg));
2412
2.75k
    }
2413
41.8k
  else if (aop == 2 && sz == 0 && Z == 0 && W == 1)
2414
1.76k
    {
2415
1.76k
      OUTS (outf, "[");
2416
1.76k
      OUTS (outf, pregs (ptr));
2417
1.76k
      OUTS (outf, "] = ");
2418
1.76k
      OUTS (outf, dregs (reg));
2419
1.76k
    }
2420
40.0k
  else if (aop == 2 && sz == 0 && Z == 1 && W == 1)
2421
1.04k
    {
2422
1.04k
      OUTS (outf, "[");
2423
1.04k
      OUTS (outf, pregs (ptr));
2424
1.04k
      OUTS (outf, "] = ");
2425
1.04k
      OUTS (outf, pregs (reg));
2426
1.04k
    }
2427
39.0k
  else if (aop == 2 && sz == 1 && Z == 0 && W == 1)
2428
921
    {
2429
921
      OUTS (outf, "W[");
2430
921
      OUTS (outf, pregs (ptr));
2431
921
      OUTS (outf, "] = ");
2432
921
      OUTS (outf, dregs (reg));
2433
921
    }
2434
38.0k
  else if (aop == 2 && sz == 2 && Z == 0 && W == 1)
2435
1.53k
    {
2436
1.53k
      OUTS (outf, "B[");
2437
1.53k
      OUTS (outf, pregs (ptr));
2438
1.53k
      OUTS (outf, "] = ");
2439
1.53k
      OUTS (outf, dregs (reg));
2440
1.53k
    }
2441
36.5k
  else
2442
36.5k
    return 0;
2443
2444
64.7k
  return 2;
2445
101k
}
2446
2447
static int
2448
decode_LDSTiiFP_0 (TIword iw0, disassemble_info *outf)
2449
26.8k
{
2450
  /* LDSTiiFP
2451
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
2452
     | 1 | 0 | 1 | 1 | 1 | 0 |.W.|.offset............|.reg...........|
2453
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+  */
2454
26.8k
  int reg = ((iw0 >> LDSTiiFP_reg_bits) & LDSTiiFP_reg_mask);
2455
26.8k
  int offset = ((iw0 >> LDSTiiFP_offset_bits) & LDSTiiFP_offset_mask);
2456
26.8k
  int W = ((iw0 >> LDSTiiFP_W_bits) & LDSTiiFP_W_mask);
2457
2458
26.8k
  if (W == 0)
2459
16.3k
    {
2460
16.3k
      OUTS (outf, dpregs (reg));
2461
16.3k
      OUTS (outf, " = [FP ");
2462
16.3k
      OUTS (outf, negimm5s4 (offset));
2463
16.3k
      OUTS (outf, "]");
2464
16.3k
    }
2465
10.5k
  else if (W == 1)
2466
10.5k
    {
2467
10.5k
      OUTS (outf, "[FP ");
2468
10.5k
      OUTS (outf, negimm5s4 (offset));
2469
10.5k
      OUTS (outf, "] = ");
2470
10.5k
      OUTS (outf, dpregs (reg));
2471
10.5k
    }
2472
0
  else
2473
0
    return 0;
2474
2475
26.8k
  return 2;
2476
26.8k
}
2477
2478
static int
2479
decode_LDSTii_0 (TIword iw0, disassemble_info *outf)
2480
158k
{
2481
  /* LDSTii
2482
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
2483
     | 1 | 0 | 1 |.W.|.op....|.offset........|.ptr.......|.reg.......|
2484
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+  */
2485
158k
  int reg = ((iw0 >> LDSTii_reg_bit) & LDSTii_reg_mask);
2486
158k
  int ptr = ((iw0 >> LDSTii_ptr_bit) & LDSTii_ptr_mask);
2487
158k
  int offset = ((iw0 >> LDSTii_offset_bit) & LDSTii_offset_mask);
2488
158k
  int op = ((iw0 >> LDSTii_op_bit) & LDSTii_op_mask);
2489
158k
  int W = ((iw0 >> LDSTii_W_bit) & LDSTii_W_mask);
2490
2491
158k
  if (W == 0 && op == 0)
2492
32.3k
    {
2493
32.3k
      OUTS (outf, dregs (reg));
2494
32.3k
      OUTS (outf, " = [");
2495
32.3k
      OUTS (outf, pregs (ptr));
2496
32.3k
      OUTS (outf, " + ");
2497
32.3k
      OUTS (outf, uimm4s4 (offset));
2498
32.3k
      OUTS (outf, "]");
2499
32.3k
    }
2500
126k
  else if (W == 0 && op == 1)
2501
23.0k
    {
2502
23.0k
      OUTS (outf, dregs (reg));
2503
23.0k
      OUTS (outf, " = W[");
2504
23.0k
      OUTS (outf, pregs (ptr));
2505
23.0k
      OUTS (outf, " + ");
2506
23.0k
      OUTS (outf, uimm4s2 (offset));
2507
23.0k
      OUTS (outf, "] (Z)");
2508
23.0k
    }
2509
103k
  else if (W == 0 && op == 2)
2510
17.8k
    {
2511
17.8k
      OUTS (outf, dregs (reg));
2512
17.8k
      OUTS (outf, " = W[");
2513
17.8k
      OUTS (outf, pregs (ptr));
2514
17.8k
      OUTS (outf, " + ");
2515
17.8k
      OUTS (outf, uimm4s2 (offset));
2516
17.8k
      OUTS (outf, "] (X)");
2517
17.8k
    }
2518
85.5k
  else if (W == 0 && op == 3)
2519
20.9k
    {
2520
20.9k
      OUTS (outf, pregs (reg));
2521
20.9k
      OUTS (outf, " = [");
2522
20.9k
      OUTS (outf, pregs (ptr));
2523
20.9k
      OUTS (outf, " + ");
2524
20.9k
      OUTS (outf, uimm4s4 (offset));
2525
20.9k
      OUTS (outf, "]");
2526
20.9k
    }
2527
64.6k
  else if (W == 1 && op == 0)
2528
17.1k
    {
2529
17.1k
      OUTS (outf, "[");
2530
17.1k
      OUTS (outf, pregs (ptr));
2531
17.1k
      OUTS (outf, " + ");
2532
17.1k
      OUTS (outf, uimm4s4 (offset));
2533
17.1k
      OUTS (outf, "] = ");
2534
17.1k
      OUTS (outf, dregs (reg));
2535
17.1k
    }
2536
47.4k
  else if (W == 1 && op == 1)
2537
17.9k
    {
2538
17.9k
      OUTS (outf, "W[");
2539
17.9k
      OUTS (outf, pregs (ptr));
2540
17.9k
      OUTS (outf, " + ");
2541
17.9k
      OUTS (outf, uimm4s2 (offset));
2542
17.9k
      OUTS (outf, "] = ");
2543
17.9k
      OUTS (outf, dregs (reg));
2544
17.9k
    }
2545
29.5k
  else if (W == 1 && op == 3)
2546
29.5k
    {
2547
29.5k
      OUTS (outf, "[");
2548
29.5k
      OUTS (outf, pregs (ptr));
2549
29.5k
      OUTS (outf, " + ");
2550
29.5k
      OUTS (outf, uimm4s4 (offset));
2551
29.5k
      OUTS (outf, "] = ");
2552
29.5k
      OUTS (outf, pregs (reg));
2553
29.5k
    }
2554
0
  else
2555
0
    return 0;
2556
2557
158k
  return 2;
2558
158k
}
2559
2560
static int
2561
decode_LoopSetup_0 (TIword iw0, TIword iw1, bfd_vma pc, disassemble_info *outf)
2562
7.28k
{
2563
7.28k
  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.28k
  int c   = ((iw0 >> (LoopSetup_c_bits - 16)) & LoopSetup_c_mask);
2570
7.28k
  int reg = ((iw1 >> LoopSetup_reg_bits) & LoopSetup_reg_mask);
2571
7.28k
  int rop = ((iw0 >> (LoopSetup_rop_bits - 16)) & LoopSetup_rop_mask);
2572
7.28k
  int soffset = ((iw0 >> (LoopSetup_soffset_bits - 16)) & LoopSetup_soffset_mask);
2573
7.28k
  int eoffset = ((iw1 >> LoopSetup_eoffset_bits) & LoopSetup_eoffset_mask);
2574
2575
7.28k
  if (priv->parallel)
2576
437
    return 0;
2577
2578
6.85k
  if (reg > 7)
2579
4.40k
    return 0;
2580
2581
2.44k
  if (rop == 0)
2582
426
    {
2583
426
      OUTS (outf, "LSETUP");
2584
426
      OUTS (outf, "(0x");
2585
426
      OUTS (outf, pcrel4 (soffset));
2586
426
      OUTS (outf, ", 0x");
2587
426
      OUTS (outf, lppcrel10 (eoffset));
2588
426
      OUTS (outf, ") ");
2589
426
      OUTS (outf, counters (c));
2590
426
    }
2591
2.02k
  else if (rop == 1)
2592
566
    {
2593
566
      OUTS (outf, "LSETUP");
2594
566
      OUTS (outf, "(0x");
2595
566
      OUTS (outf, pcrel4 (soffset));
2596
566
      OUTS (outf, ", 0x");
2597
566
      OUTS (outf, lppcrel10 (eoffset));
2598
566
      OUTS (outf, ") ");
2599
566
      OUTS (outf, counters (c));
2600
566
      OUTS (outf, " = ");
2601
566
      OUTS (outf, pregs (reg));
2602
566
    }
2603
1.45k
  else if (rop == 3)
2604
973
    {
2605
973
      OUTS (outf, "LSETUP");
2606
973
      OUTS (outf, "(0x");
2607
973
      OUTS (outf, pcrel4 (soffset));
2608
973
      OUTS (outf, ", 0x");
2609
973
      OUTS (outf, lppcrel10 (eoffset));
2610
973
      OUTS (outf, ") ");
2611
973
      OUTS (outf, counters (c));
2612
973
      OUTS (outf, " = ");
2613
973
      OUTS (outf, pregs (reg));
2614
973
      OUTS (outf, " >> 0x1");
2615
973
    }
2616
484
  else
2617
484
    return 0;
2618
2619
1.96k
  return 4;
2620
2.44k
}
2621
2622
static int
2623
decode_LDIMMhalf_0 (TIword iw0, TIword iw1, disassemble_info *outf)
2624
19.7k
{
2625
19.7k
  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.7k
  int H = ((iw0 >> (LDIMMhalf_H_bits - 16)) & LDIMMhalf_H_mask);
2632
19.7k
  int Z = ((iw0 >> (LDIMMhalf_Z_bits - 16)) & LDIMMhalf_Z_mask);
2633
19.7k
  int S = ((iw0 >> (LDIMMhalf_S_bits - 16)) & LDIMMhalf_S_mask);
2634
19.7k
  int reg = ((iw0 >> (LDIMMhalf_reg_bits - 16)) & LDIMMhalf_reg_mask);
2635
19.7k
  int grp = ((iw0 >> (LDIMMhalf_grp_bits - 16)) & LDIMMhalf_grp_mask);
2636
19.7k
  int hword = ((iw1 >> LDIMMhalf_hword_bits) & LDIMMhalf_hword_mask);
2637
2638
19.7k
  bu32 *pval = get_allreg (grp, reg);
2639
2640
19.7k
  if (priv->parallel)
2641
1.33k
    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.4k
  if (H == 0 && S == 1 && Z == 0)
2647
1.69k
    {
2648
      /* regs = imm16 (x) */
2649
1.69k
      *pval = imm16_val (hword);
2650
1.69k
      if (hword & 0x8000)
2651
808
  *pval |= 0xFFFF0000;
2652
886
      else
2653
886
  *pval &= 0xFFFF;
2654
1.69k
    }
2655
16.7k
  else if (H == 0 && S == 0 && Z == 1)
2656
1.67k
    {
2657
      /* regs = luimm16 (Z) */
2658
1.67k
      *pval = luimm16_val (hword);
2659
1.67k
      *pval &= 0xFFFF;
2660
1.67k
    }
2661
15.0k
  else if (H == 0 && S == 0 && Z == 0)
2662
4.72k
    {
2663
      /* regs_lo = luimm16 */
2664
4.72k
      *pval &= 0xFFFF0000;
2665
4.72k
      *pval |= luimm16_val (hword);
2666
4.72k
    }
2667
10.3k
  else if (H == 1 && S == 0 && Z == 0)
2668
1.30k
    {
2669
      /* regs_hi = huimm16 */
2670
1.30k
      *pval &= 0xFFFF;
2671
1.30k
      *pval |= luimm16_val (hword) << 16;
2672
1.30k
    }
2673
2674
  /* Here we do the disassembly */
2675
18.4k
  if (grp == 0 && H == 0 && S == 0 && Z == 0)
2676
3.15k
    {
2677
3.15k
      OUTS (outf, dregs_lo (reg));
2678
3.15k
      OUTS (outf, " = ");
2679
3.15k
      OUTS (outf, uimm16 (hword));
2680
3.15k
    }
2681
15.3k
  else if (grp == 0 && H == 1 && S == 0 && Z == 0)
2682
532
    {
2683
532
      OUTS (outf, dregs_hi (reg));
2684
532
      OUTS (outf, " = ");
2685
532
      OUTS (outf, uimm16 (hword));
2686
532
    }
2687
14.7k
  else if (grp == 0 && H == 0 && S == 1 && Z == 0)
2688
617
    {
2689
617
      OUTS (outf, dregs (reg));
2690
617
      OUTS (outf, " = ");
2691
617
      OUTS (outf, imm16 (hword));
2692
617
      OUTS (outf, " (X)");
2693
617
    }
2694
14.1k
  else if (H == 0 && S == 1 && Z == 0)
2695
1.07k
    {
2696
1.07k
      OUTS (outf, regs (reg, grp));
2697
1.07k
      OUTS (outf, " = ");
2698
1.07k
      OUTS (outf, imm16 (hword));
2699
1.07k
      OUTS (outf, " (X)");
2700
1.07k
    }
2701
13.0k
  else if (H == 0 && S == 0 && Z == 1)
2702
1.67k
    {
2703
1.67k
      OUTS (outf, regs (reg, grp));
2704
1.67k
      OUTS (outf, " = ");
2705
1.67k
      OUTS (outf, uimm16 (hword));
2706
1.67k
      OUTS (outf, " (Z)");
2707
1.67k
    }
2708
11.4k
  else if (H == 0 && S == 0 && Z == 0)
2709
1.57k
    {
2710
1.57k
      OUTS (outf, regs_lo (reg, grp));
2711
1.57k
      OUTS (outf, " = ");
2712
1.57k
      OUTS (outf, uimm16 (hword));
2713
1.57k
    }
2714
9.83k
  else if (H == 1 && S == 0 && Z == 0)
2715
777
    {
2716
777
      OUTS (outf, regs_hi (reg, grp));
2717
777
      OUTS (outf, " = ");
2718
777
      OUTS (outf, uimm16 (hword));
2719
777
    }
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.40k
  if (S == 0 && Z == 0)
2725
6.03k
    {
2726
6.03k
      OUTS (outf, ";\t\t/* (");
2727
6.03k
      OUTS (outf, imm16d (hword));
2728
6.03k
      OUTS (outf, ")\t");
2729
2730
      /* If it is an MMR, don't print the symbol.  */
2731
6.03k
      if (*pval < 0xFFC00000 && grp == 1)
2732
342
  {
2733
342
    OUTS (outf, regs (reg, grp));
2734
342
    OUTS (outf, "=0x");
2735
342
    OUTS (outf, huimm32e (*pval));
2736
342
  }
2737
5.69k
      else
2738
5.69k
  {
2739
5.69k
    OUTS (outf, regs (reg, grp));
2740
5.69k
    OUTS (outf, "=0x");
2741
5.69k
    OUTS (outf, huimm32e (*pval));
2742
5.69k
    OUTS (outf, "(");
2743
5.69k
    OUTS (outf, imm32 (*pval));
2744
5.69k
    OUTS (outf, ")");
2745
5.69k
  }
2746
2747
6.03k
      OUTS (outf, " */");
2748
6.03k
      priv->comment = true;
2749
6.03k
    }
2750
9.40k
  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.40k
  return 4;
2762
18.4k
}
2763
2764
static int
2765
decode_CALLa_0 (TIword iw0, TIword iw1, bfd_vma pc, disassemble_info *outf)
2766
17.3k
{
2767
17.3k
  struct private *priv = outf->private_data;
2768
  /* CALLa
2769
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
2770
     | 1 | 1 | 1 | 0 | 0 | 0 | 1 |.S.|.msw...........................|
2771
     |.lsw...........................................................|
2772
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+  */
2773
17.3k
  int S   = ((iw0 >> (CALLa_S_bits - 16)) & CALLa_S_mask);
2774
17.3k
  int lsw = ((iw1 >> 0) & 0xffff);
2775
17.3k
  int msw = ((iw0 >> 0) & 0xff);
2776
2777
17.3k
  if (priv->parallel)
2778
1.03k
    return 0;
2779
2780
16.3k
  if (S == 1)
2781
8.06k
    OUTS (outf, "CALL 0x");
2782
8.25k
  else if (S == 0)
2783
8.25k
    OUTS (outf, "JUMP.L 0x");
2784
0
  else
2785
0
    return 0;
2786
2787
16.3k
  OUTS (outf, pcrel24 (((msw) << 16) | (lsw)));
2788
16.3k
  return 4;
2789
16.3k
}
2790
2791
static int
2792
decode_LDSTidxI_0 (TIword iw0, TIword iw1, disassemble_info *outf)
2793
27.3k
{
2794
  /* LDSTidxI
2795
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
2796
     | 1 | 1 | 1 | 0 | 0 | 1 |.W.|.Z.|.sz....|.ptr.......|.reg.......|
2797
     |.offset........................................................|
2798
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+  */
2799
27.3k
  int Z = ((iw0 >> (LDSTidxI_Z_bits - 16)) & LDSTidxI_Z_mask);
2800
27.3k
  int W = ((iw0 >> (LDSTidxI_W_bits - 16)) & LDSTidxI_W_mask);
2801
27.3k
  int sz = ((iw0 >> (LDSTidxI_sz_bits - 16)) & LDSTidxI_sz_mask);
2802
27.3k
  int reg = ((iw0 >> (LDSTidxI_reg_bits - 16)) & LDSTidxI_reg_mask);
2803
27.3k
  int ptr = ((iw0 >> (LDSTidxI_ptr_bits - 16)) & LDSTidxI_ptr_mask);
2804
27.3k
  int offset = ((iw1 >> LDSTidxI_offset_bits) & LDSTidxI_offset_mask);
2805
2806
27.3k
  if (W == 0 && sz == 0 && Z == 0)
2807
1.46k
    {
2808
1.46k
      OUTS (outf, dregs (reg));
2809
1.46k
      OUTS (outf, " = [");
2810
1.46k
      OUTS (outf, pregs (ptr));
2811
1.46k
      OUTS (outf, " + ");
2812
1.46k
      OUTS (outf, imm16s4 (offset));
2813
1.46k
      OUTS (outf, "]");
2814
1.46k
    }
2815
25.9k
  else if (W == 0 && sz == 0 && Z == 1)
2816
1.31k
    {
2817
1.31k
      OUTS (outf, pregs (reg));
2818
1.31k
      OUTS (outf, " = [");
2819
1.31k
      OUTS (outf, pregs (ptr));
2820
1.31k
      OUTS (outf, " + ");
2821
1.31k
      OUTS (outf, imm16s4 (offset));
2822
1.31k
      OUTS (outf, "]");
2823
1.31k
    }
2824
24.5k
  else if (W == 0 && sz == 1 && Z == 0)
2825
783
    {
2826
783
      OUTS (outf, dregs (reg));
2827
783
      OUTS (outf, " = W[");
2828
783
      OUTS (outf, pregs (ptr));
2829
783
      OUTS (outf, " + ");
2830
783
      OUTS (outf, imm16s2 (offset));
2831
783
      OUTS (outf, "] (Z)");
2832
783
    }
2833
23.8k
  else if (W == 0 && sz == 1 && Z == 1)
2834
1.14k
    {
2835
1.14k
      OUTS (outf, dregs (reg));
2836
1.14k
      OUTS (outf, " = W[");
2837
1.14k
      OUTS (outf, pregs (ptr));
2838
1.14k
      OUTS (outf, " + ");
2839
1.14k
      OUTS (outf, imm16s2 (offset));
2840
1.14k
      OUTS (outf, "] (X)");
2841
1.14k
    }
2842
22.6k
  else if (W == 0 && sz == 2 && Z == 0)
2843
1.00k
    {
2844
1.00k
      OUTS (outf, dregs (reg));
2845
1.00k
      OUTS (outf, " = B[");
2846
1.00k
      OUTS (outf, pregs (ptr));
2847
1.00k
      OUTS (outf, " + ");
2848
1.00k
      OUTS (outf, imm16 (offset));
2849
1.00k
      OUTS (outf, "] (Z)");
2850
1.00k
    }
2851
21.6k
  else if (W == 0 && sz == 2 && Z == 1)
2852
1.13k
    {
2853
1.13k
      OUTS (outf, dregs (reg));
2854
1.13k
      OUTS (outf, " = B[");
2855
1.13k
      OUTS (outf, pregs (ptr));
2856
1.13k
      OUTS (outf, " + ");
2857
1.13k
      OUTS (outf, imm16 (offset));
2858
1.13k
      OUTS (outf, "] (X)");
2859
1.13k
    }
2860
20.5k
  else if (W == 1 && sz == 0 && Z == 0)
2861
1.41k
    {
2862
1.41k
      OUTS (outf, "[");
2863
1.41k
      OUTS (outf, pregs (ptr));
2864
1.41k
      OUTS (outf, " + ");
2865
1.41k
      OUTS (outf, imm16s4 (offset));
2866
1.41k
      OUTS (outf, "] = ");
2867
1.41k
      OUTS (outf, dregs (reg));
2868
1.41k
    }
2869
19.1k
  else if (W == 1 && sz == 0 && Z == 1)
2870
1.65k
    {
2871
1.65k
      OUTS (outf, "[");
2872
1.65k
      OUTS (outf, pregs (ptr));
2873
1.65k
      OUTS (outf, " + ");
2874
1.65k
      OUTS (outf, imm16s4 (offset));
2875
1.65k
      OUTS (outf, "] = ");
2876
1.65k
      OUTS (outf, pregs (reg));
2877
1.65k
    }
2878
17.4k
  else if (W == 1 && sz == 1 && Z == 0)
2879
1.65k
    {
2880
1.65k
      OUTS (outf, "W[");
2881
1.65k
      OUTS (outf, pregs (ptr));
2882
1.65k
      OUTS (outf, " + ");
2883
1.65k
      OUTS (outf, imm16s2 (offset));
2884
1.65k
      OUTS (outf, "] = ");
2885
1.65k
      OUTS (outf, dregs (reg));
2886
1.65k
    }
2887
15.8k
  else if (W == 1 && sz == 2 && Z == 0)
2888
2.36k
    {
2889
2.36k
      OUTS (outf, "B[");
2890
2.36k
      OUTS (outf, pregs (ptr));
2891
2.36k
      OUTS (outf, " + ");
2892
2.36k
      OUTS (outf, imm16 (offset));
2893
2.36k
      OUTS (outf, "] = ");
2894
2.36k
      OUTS (outf, dregs (reg));
2895
2.36k
    }
2896
13.4k
  else
2897
13.4k
    return 0;
2898
2899
13.9k
  return 4;
2900
27.3k
}
2901
2902
static int
2903
decode_linkage_0 (TIword iw0, TIword iw1, disassemble_info *outf)
2904
2.43k
{
2905
2.43k
  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.43k
  int R = ((iw0 >> (Linkage_R_bits - 16)) & Linkage_R_mask);
2912
2.43k
  int framesize = ((iw1 >> Linkage_framesize_bits) & Linkage_framesize_mask);
2913
2914
2.43k
  if (priv->parallel)
2915
440
    return 0;
2916
2917
1.99k
  if (R == 0)
2918
1.35k
    {
2919
1.35k
      OUTS (outf, "LINK ");
2920
1.35k
      OUTS (outf, uimm16s4 (framesize));
2921
1.35k
      OUTS (outf, ";\t\t/* (");
2922
1.35k
      OUTS (outf, uimm16s4d (framesize));
2923
1.35k
      OUTS (outf, ") */");
2924
1.35k
      priv->comment = true;
2925
1.35k
    }
2926
638
  else if (R == 1)
2927
638
    OUTS (outf, "UNLINK");
2928
0
  else
2929
0
    return 0;
2930
2931
1.99k
  return 4;
2932
1.99k
}
2933
2934
static int
2935
decode_dsp32mac_0 (TIword iw0, TIword iw1, disassemble_info *outf)
2936
46.2k
{
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
46.2k
  int op1  = ((iw0 >> (DSP32Mac_op1_bits - 16)) & DSP32Mac_op1_mask);
2943
46.2k
  int w1   = ((iw0 >> (DSP32Mac_w1_bits - 16)) & DSP32Mac_w1_mask);
2944
46.2k
  int P    = ((iw0 >> (DSP32Mac_p_bits - 16)) & DSP32Mac_p_mask);
2945
46.2k
  int MM   = ((iw0 >> (DSP32Mac_MM_bits - 16)) & DSP32Mac_MM_mask);
2946
46.2k
  int mmod = ((iw0 >> (DSP32Mac_mmod_bits - 16)) & DSP32Mac_mmod_mask);
2947
46.2k
  int w0   = ((iw1 >> DSP32Mac_w0_bits) & DSP32Mac_w0_mask);
2948
46.2k
  int src0 = ((iw1 >> DSP32Mac_src0_bits) & DSP32Mac_src0_mask);
2949
46.2k
  int src1 = ((iw1 >> DSP32Mac_src1_bits) & DSP32Mac_src1_mask);
2950
46.2k
  int dst  = ((iw1 >> DSP32Mac_dst_bits) & DSP32Mac_dst_mask);
2951
46.2k
  int h10  = ((iw1 >> DSP32Mac_h10_bits) & DSP32Mac_h10_mask);
2952
46.2k
  int h00  = ((iw1 >> DSP32Mac_h00_bits) & DSP32Mac_h00_mask);
2953
46.2k
  int op0  = ((iw1 >> DSP32Mac_op0_bits) & DSP32Mac_op0_mask);
2954
46.2k
  int h11  = ((iw1 >> DSP32Mac_h11_bits) & DSP32Mac_h11_mask);
2955
46.2k
  int h01  = ((iw1 >> DSP32Mac_h01_bits) & DSP32Mac_h01_mask);
2956
2957
46.2k
  if (w0 == 0 && w1 == 0 && op1 == 3 && op0 == 3)
2958
496
    return 0;
2959
2960
45.7k
  if (op1 == 3 && MM)
2961
3.60k
    return 0;
2962
2963
42.1k
  if ((w1 || w0) && mmod == M_W32)
2964
1.16k
    return 0;
2965
2966
41.0k
  if (((1 << mmod) & (P ? 0x131b : 0x1b5f)) == 0)
2967
15.0k
    return 0;
2968
2969
25.9k
  if (w1 == 1 || op1 != 3)
2970
23.7k
    {
2971
23.7k
      if (w1)
2972
7.65k
  OUTS (outf, P ? dregs (dst + 1) : dregs_hi (dst));
2973
2974
23.7k
      if (op1 == 3)
2975
740
  OUTS (outf, " = A1");
2976
23.0k
      else
2977
23.0k
  {
2978
23.0k
    if (w1)
2979
6.91k
      OUTS (outf, " = (");
2980
23.0k
    decode_macfunc (1, op1, h01, h11, src0, src1, outf);
2981
23.0k
    if (w1)
2982
6.91k
      OUTS (outf, ")");
2983
23.0k
  }
2984
2985
23.7k
      if (w0 == 1 || op0 != 3)
2986
21.9k
  {
2987
21.9k
    if (MM)
2988
7.92k
      OUTS (outf, " (M)");
2989
21.9k
    OUTS (outf, ", ");
2990
21.9k
  }
2991
23.7k
    }
2992
2993
25.9k
  if (w0 == 1 || op0 != 3)
2994
24.0k
    {
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
24.0k
      MM = 0;
2998
2999
24.0k
      if (w0)
3000
9.87k
  OUTS (outf, P ? dregs (dst) : dregs_lo (dst));
3001
3002
24.0k
      if (op0 == 3)
3003
2.18k
  OUTS (outf, " = A0");
3004
21.8k
      else
3005
21.8k
  {
3006
21.8k
    if (w0)
3007
7.69k
      OUTS (outf, " = (");
3008
21.8k
    decode_macfunc (0, op0, h00, h10, src0, src1, outf);
3009
21.8k
    if (w0)
3010
7.69k
      OUTS (outf, ")");
3011
21.8k
  }
3012
24.0k
    }
3013
3014
25.9k
  decode_optmode (mmod, MM, outf);
3015
3016
25.9k
  return 4;
3017
41.0k
}
3018
3019
static int
3020
decode_dsp32mult_0 (TIword iw0, TIword iw1, disassemble_info *outf)
3021
29.4k
{
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
29.4k
  int w1   = ((iw0 >> (DSP32Mac_w1_bits - 16)) & DSP32Mac_w1_mask);
3028
29.4k
  int P    = ((iw0 >> (DSP32Mac_p_bits - 16)) & DSP32Mac_p_mask);
3029
29.4k
  int MM   = ((iw0 >> (DSP32Mac_MM_bits - 16)) & DSP32Mac_MM_mask);
3030
29.4k
  int mmod = ((iw0 >> (DSP32Mac_mmod_bits - 16)) & DSP32Mac_mmod_mask);
3031
29.4k
  int w0   = ((iw1 >> DSP32Mac_w0_bits) & DSP32Mac_w0_mask);
3032
29.4k
  int src0 = ((iw1 >> DSP32Mac_src0_bits) & DSP32Mac_src0_mask);
3033
29.4k
  int src1 = ((iw1 >> DSP32Mac_src1_bits) & DSP32Mac_src1_mask);
3034
29.4k
  int dst  = ((iw1 >> DSP32Mac_dst_bits) & DSP32Mac_dst_mask);
3035
29.4k
  int h10  = ((iw1 >> DSP32Mac_h10_bits) & DSP32Mac_h10_mask);
3036
29.4k
  int h00  = ((iw1 >> DSP32Mac_h00_bits) & DSP32Mac_h00_mask);
3037
29.4k
  int h11  = ((iw1 >> DSP32Mac_h11_bits) & DSP32Mac_h11_mask);
3038
29.4k
  int h01  = ((iw1 >> DSP32Mac_h01_bits) & DSP32Mac_h01_mask);
3039
3040
29.4k
  if (w1 == 0 && w0 == 0)
3041
10.7k
    return 0;
3042
3043
18.6k
  if (((1 << mmod) & (P ? 0x313 : 0x1b57)) == 0)
3044
10.2k
    return 0;
3045
3046
8.41k
  if (w1)
3047
4.99k
    {
3048
4.99k
      OUTS (outf, P ? dregs (dst + 1) : dregs_hi (dst));
3049
4.99k
      OUTS (outf, " = ");
3050
4.99k
      decode_multfunc (h01, h11, src0, src1, outf);
3051
3052
4.99k
      if (w0)
3053
2.37k
  {
3054
2.37k
    if (MM)
3055
936
      OUTS (outf, " (M)");
3056
2.37k
    MM = 0;
3057
2.37k
    OUTS (outf, ", ");
3058
2.37k
  }
3059
4.99k
    }
3060
3061
8.41k
  if (w0)
3062
5.79k
    {
3063
5.79k
      OUTS (outf, P ? dregs (dst) : dregs_lo (dst));
3064
5.79k
      OUTS (outf, " = ");
3065
5.79k
      decode_multfunc (h00, h10, src0, src1, outf);
3066
5.79k
    }
3067
3068
8.41k
  decode_optmode (mmod, MM, outf);
3069
8.41k
  return 4;
3070
18.6k
}
3071
3072
static int
3073
decode_dsp32alu_0 (TIword iw0, TIword iw1, disassemble_info *outf)
3074
95.1k
{
3075
  /* dsp32alu
3076
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
3077
     | 1 | 1 | 0 | 0 |.M.| 1 | 0 | - | - | - |.HL|.aopcde............|
3078
     |.aop...|.s.|.x.|.dst0......|.dst1......|.src0......|.src1......|
3079
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+  */
3080
95.1k
  int s    = ((iw1 >> DSP32Alu_s_bits) & DSP32Alu_s_mask);
3081
95.1k
  int x    = ((iw1 >> DSP32Alu_x_bits) & DSP32Alu_x_mask);
3082
95.1k
  int aop  = ((iw1 >> DSP32Alu_aop_bits) & DSP32Alu_aop_mask);
3083
95.1k
  int src0 = ((iw1 >> DSP32Alu_src0_bits) & DSP32Alu_src0_mask);
3084
95.1k
  int src1 = ((iw1 >> DSP32Alu_src1_bits) & DSP32Alu_src1_mask);
3085
95.1k
  int dst0 = ((iw1 >> DSP32Alu_dst0_bits) & DSP32Alu_dst0_mask);
3086
95.1k
  int dst1 = ((iw1 >> DSP32Alu_dst1_bits) & DSP32Alu_dst1_mask);
3087
95.1k
  int HL   = ((iw0 >> (DSP32Alu_HL_bits - 16)) & DSP32Alu_HL_mask);
3088
95.1k
  int aopcde = ((iw0 >> (DSP32Alu_aopcde_bits - 16)) & DSP32Alu_aopcde_mask);
3089
3090
95.1k
  if (aop == 0 && aopcde == 9 && HL == 0 && s == 0)
3091
755
    {
3092
755
      OUTS (outf, "A0.L = ");
3093
755
      OUTS (outf, dregs_lo (src0));
3094
755
    }
3095
94.3k
  else if (aop == 2 && aopcde == 9 && HL == 1 && s == 0)
3096
326
    {
3097
326
      OUTS (outf, "A1.H = ");
3098
326
      OUTS (outf, dregs_hi (src0));
3099
326
    }
3100
94.0k
  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
93.6k
  else if (aop == 0 && aopcde == 9 && HL == 1 && s == 0)
3106
203
    {
3107
203
      OUTS (outf, "A0.H = ");
3108
203
      OUTS (outf, dregs_hi (src0));
3109
203
    }
3110
93.4k
  else if (x == 1 && HL == 1 && aop == 3 && aopcde == 5)
3111
1.15k
    {
3112
1.15k
      OUTS (outf, dregs_hi (dst0));
3113
1.15k
      OUTS (outf, " = ");
3114
1.15k
      OUTS (outf, dregs (src0));
3115
1.15k
      OUTS (outf, " - ");
3116
1.15k
      OUTS (outf, dregs (src1));
3117
1.15k
      OUTS (outf, " (RND20)");
3118
1.15k
    }
3119
92.3k
  else if (x == 1 && HL == 1 && aop == 2 && aopcde == 5)
3120
150
    {
3121
150
      OUTS (outf, dregs_hi (dst0));
3122
150
      OUTS (outf, " = ");
3123
150
      OUTS (outf, dregs (src0));
3124
150
      OUTS (outf, " + ");
3125
150
      OUTS (outf, dregs (src1));
3126
150
      OUTS (outf, " (RND20)");
3127
150
    }
3128
92.1k
  else if (x == 0 && HL == 0 && aop == 1 && aopcde == 5)
3129
1.30k
    {
3130
1.30k
      OUTS (outf, dregs_lo (dst0));
3131
1.30k
      OUTS (outf, " = ");
3132
1.30k
      OUTS (outf, dregs (src0));
3133
1.30k
      OUTS (outf, " - ");
3134
1.30k
      OUTS (outf, dregs (src1));
3135
1.30k
      OUTS (outf, " (RND12)");
3136
1.30k
    }
3137
90.8k
  else if (x == 0 && HL == 0 && aop == 0 && aopcde == 5)
3138
133
    {
3139
133
      OUTS (outf, dregs_lo (dst0));
3140
133
      OUTS (outf, " = ");
3141
133
      OUTS (outf, dregs (src0));
3142
133
      OUTS (outf, " + ");
3143
133
      OUTS (outf, dregs (src1));
3144
133
      OUTS (outf, " (RND12)");
3145
133
    }
3146
90.7k
  else if (x == 1 && HL == 0 && aop == 3 && aopcde == 5)
3147
831
    {
3148
831
      OUTS (outf, dregs_lo (dst0));
3149
831
      OUTS (outf, " = ");
3150
831
      OUTS (outf, dregs (src0));
3151
831
      OUTS (outf, " - ");
3152
831
      OUTS (outf, dregs (src1));
3153
831
      OUTS (outf, " (RND20)");
3154
831
    }
3155
89.8k
  else if (x == 0 && HL == 1 && aop == 0 && aopcde == 5)
3156
613
    {
3157
613
      OUTS (outf, dregs_hi (dst0));
3158
613
      OUTS (outf, " = ");
3159
613
      OUTS (outf, dregs (src0));
3160
613
      OUTS (outf, " + ");
3161
613
      OUTS (outf, dregs (src1));
3162
613
      OUTS (outf, " (RND12)");
3163
613
    }
3164
89.2k
  else if (x == 1 && HL == 0 && aop == 2 && aopcde == 5)
3165
130
    {
3166
130
      OUTS (outf, dregs_lo (dst0));
3167
130
      OUTS (outf, " = ");
3168
130
      OUTS (outf, dregs (src0));
3169
130
      OUTS (outf, " + ");
3170
130
      OUTS (outf, dregs (src1));
3171
130
      OUTS (outf, " (RND20)");
3172
130
    }
3173
89.1k
  else if (x == 0 && HL == 1 && aop == 1 && aopcde == 5)
3174
711
    {
3175
711
      OUTS (outf, dregs_hi (dst0));
3176
711
      OUTS (outf, " = ");
3177
711
      OUTS (outf, dregs (src0));
3178
711
      OUTS (outf, " - ");
3179
711
      OUTS (outf, dregs (src1));
3180
711
      OUTS (outf, " (RND12)");
3181
711
    }
3182
88.4k
  else if (HL == 1 && aop == 0 && aopcde == 2)
3183
605
    {
3184
605
      OUTS (outf, dregs_hi (dst0));
3185
605
      OUTS (outf, " = ");
3186
605
      OUTS (outf, dregs_lo (src0));
3187
605
      OUTS (outf, " + ");
3188
605
      OUTS (outf, dregs_lo (src1));
3189
605
      amod1 (s, x, outf);
3190
605
    }
3191
87.8k
  else if (HL == 1 && aop == 1 && aopcde == 2)
3192
1.16k
    {
3193
1.16k
      OUTS (outf, dregs_hi (dst0));
3194
1.16k
      OUTS (outf, " = ");
3195
1.16k
      OUTS (outf, dregs_lo (src0));
3196
1.16k
      OUTS (outf, " + ");
3197
1.16k
      OUTS (outf, dregs_hi (src1));
3198
1.16k
      amod1 (s, x, outf);
3199
1.16k
    }
3200
86.6k
  else if (HL == 1 && aop == 2 && aopcde == 2)
3201
441
    {
3202
441
      OUTS (outf, dregs_hi (dst0));
3203
441
      OUTS (outf, " = ");
3204
441
      OUTS (outf, dregs_hi (src0));
3205
441
      OUTS (outf, " + ");
3206
441
      OUTS (outf, dregs_lo (src1));
3207
441
      amod1 (s, x, outf);
3208
441
    }
3209
86.2k
  else if (HL == 1 && aop == 3 && aopcde == 2)
3210
954
    {
3211
954
      OUTS (outf, dregs_hi (dst0));
3212
954
      OUTS (outf, " = ");
3213
954
      OUTS (outf, dregs_hi (src0));
3214
954
      OUTS (outf, " + ");
3215
954
      OUTS (outf, dregs_hi (src1));
3216
954
      amod1 (s, x, outf);
3217
954
    }
3218
85.2k
  else if (HL == 0 && aop == 0 && aopcde == 3)
3219
1.52k
    {
3220
1.52k
      OUTS (outf, dregs_lo (dst0));
3221
1.52k
      OUTS (outf, " = ");
3222
1.52k
      OUTS (outf, dregs_lo (src0));
3223
1.52k
      OUTS (outf, " - ");
3224
1.52k
      OUTS (outf, dregs_lo (src1));
3225
1.52k
      amod1 (s, x, outf);
3226
1.52k
    }
3227
83.7k
  else if (HL == 0 && aop == 1 && aopcde == 3)
3228
646
    {
3229
646
      OUTS (outf, dregs_lo (dst0));
3230
646
      OUTS (outf, " = ");
3231
646
      OUTS (outf, dregs_lo (src0));
3232
646
      OUTS (outf, " - ");
3233
646
      OUTS (outf, dregs_hi (src1));
3234
646
      amod1 (s, x, outf);
3235
646
    }
3236
83.1k
  else if (HL == 0 && aop == 3 && aopcde == 2)
3237
496
    {
3238
496
      OUTS (outf, dregs_lo (dst0));
3239
496
      OUTS (outf, " = ");
3240
496
      OUTS (outf, dregs_hi (src0));
3241
496
      OUTS (outf, " + ");
3242
496
      OUTS (outf, dregs_hi (src1));
3243
496
      amod1 (s, x, outf);
3244
496
    }
3245
82.6k
  else if (HL == 1 && aop == 0 && aopcde == 3)
3246
1.15k
    {
3247
1.15k
      OUTS (outf, dregs_hi (dst0));
3248
1.15k
      OUTS (outf, " = ");
3249
1.15k
      OUTS (outf, dregs_lo (src0));
3250
1.15k
      OUTS (outf, " - ");
3251
1.15k
      OUTS (outf, dregs_lo (src1));
3252
1.15k
      amod1 (s, x, outf);
3253
1.15k
    }
3254
81.4k
  else if (HL == 1 && aop == 1 && aopcde == 3)
3255
810
    {
3256
810
      OUTS (outf, dregs_hi (dst0));
3257
810
      OUTS (outf, " = ");
3258
810
      OUTS (outf, dregs_lo (src0));
3259
810
      OUTS (outf, " - ");
3260
810
      OUTS (outf, dregs_hi (src1));
3261
810
      amod1 (s, x, outf);
3262
810
    }
3263
80.6k
  else if (HL == 1 && aop == 2 && aopcde == 3)
3264
305
    {
3265
305
      OUTS (outf, dregs_hi (dst0));
3266
305
      OUTS (outf, " = ");
3267
305
      OUTS (outf, dregs_hi (src0));
3268
305
      OUTS (outf, " - ");
3269
305
      OUTS (outf, dregs_lo (src1));
3270
305
      amod1 (s, x, outf);
3271
305
    }
3272
80.3k
  else if (HL == 1 && aop == 3 && aopcde == 3)
3273
133
    {
3274
133
      OUTS (outf, dregs_hi (dst0));
3275
133
      OUTS (outf, " = ");
3276
133
      OUTS (outf, dregs_hi (src0));
3277
133
      OUTS (outf, " - ");
3278
133
      OUTS (outf, dregs_hi (src1));
3279
133
      amod1 (s, x, outf);
3280
133
    }
3281
80.2k
  else if (HL == 0 && aop == 2 && aopcde == 2)
3282
397
    {
3283
397
      OUTS (outf, dregs_lo (dst0));
3284
397
      OUTS (outf, " = ");
3285
397
      OUTS (outf, dregs_hi (src0));
3286
397
      OUTS (outf, " + ");
3287
397
      OUTS (outf, dregs_lo (src1));
3288
397
      amod1 (s, x, outf);
3289
397
    }
3290
79.8k
  else if (HL == 0 && aop == 1 && aopcde == 2)
3291
314
    {
3292
314
      OUTS (outf, dregs_lo (dst0));
3293
314
      OUTS (outf, " = ");
3294
314
      OUTS (outf, dregs_lo (src0));
3295
314
      OUTS (outf, " + ");
3296
314
      OUTS (outf, dregs_hi (src1));
3297
314
      amod1 (s, x, outf);
3298
314
    }
3299
79.4k
  else if (HL == 0 && aop == 2 && aopcde == 3)
3300
534
    {
3301
534
      OUTS (outf, dregs_lo (dst0));
3302
534
      OUTS (outf, " = ");
3303
534
      OUTS (outf, dregs_hi (src0));
3304
534
      OUTS (outf, " - ");
3305
534
      OUTS (outf, dregs_lo (src1));
3306
534
      amod1 (s, x, outf);
3307
534
    }
3308
78.9k
  else if (HL == 0 && aop == 3 && aopcde == 3)
3309
1.32k
    {
3310
1.32k
      OUTS (outf, dregs_lo (dst0));
3311
1.32k
      OUTS (outf, " = ");
3312
1.32k
      OUTS (outf, dregs_hi (src0));
3313
1.32k
      OUTS (outf, " - ");
3314
1.32k
      OUTS (outf, dregs_hi (src1));
3315
1.32k
      amod1 (s, x, outf);
3316
1.32k
    }
3317
77.6k
  else if (HL == 0 && aop == 0 && aopcde == 2)
3318
1.77k
    {
3319
1.77k
      OUTS (outf, dregs_lo (dst0));
3320
1.77k
      OUTS (outf, " = ");
3321
1.77k
      OUTS (outf, dregs_lo (src0));
3322
1.77k
      OUTS (outf, " + ");
3323
1.77k
      OUTS (outf, dregs_lo (src1));
3324
1.77k
      amod1 (s, x, outf);
3325
1.77k
    }
3326
75.8k
  else if (aop == 0 && aopcde == 9 && s == 1)
3327
1.46k
    {
3328
1.46k
      OUTS (outf, "A0 = ");
3329
1.46k
      OUTS (outf, dregs (src0));
3330
1.46k
    }
3331
74.3k
  else if (aop == 3 && aopcde == 11 && s == 0)
3332
988
    OUTS (outf, "A0 -= A1");
3333
3334
73.4k
  else if (aop == 3 && aopcde == 11 && s == 1)
3335
391
    OUTS (outf, "A0 -= A1 (W32)");
3336
3337
73.0k
  else if (aop == 1 && aopcde == 22 && HL == 1)
3338
682
    {
3339
682
      OUTS (outf, dregs (dst0));
3340
682
      OUTS (outf, " = BYTEOP2P (");
3341
682
      OUTS (outf, dregs (src0 + 1));
3342
682
      OUTS (outf, ":");
3343
682
      OUTS (outf, imm5d (src0));
3344
682
      OUTS (outf, ", ");
3345
682
      OUTS (outf, dregs (src1 + 1));
3346
682
      OUTS (outf, ":");
3347
682
      OUTS (outf, imm5d (src1));
3348
682
      OUTS (outf, ") (TH");
3349
682
      if (s == 1)
3350
633
  OUTS (outf, ", R)");
3351
49
      else
3352
49
  OUTS (outf, ")");
3353
682
    }
3354
72.3k
  else if (aop == 1 && aopcde == 22 && HL == 0)
3355
1.71k
    {
3356
1.71k
      OUTS (outf, dregs (dst0));
3357
1.71k
      OUTS (outf, " = BYTEOP2P (");
3358
1.71k
      OUTS (outf, dregs (src0 + 1));
3359
1.71k
      OUTS (outf, ":");
3360
1.71k
      OUTS (outf, imm5d (src0));
3361
1.71k
      OUTS (outf, ", ");
3362
1.71k
      OUTS (outf, dregs (src1 + 1));
3363
1.71k
      OUTS (outf, ":");
3364
1.71k
      OUTS (outf, imm5d (src1));
3365
1.71k
      OUTS (outf, ") (TL");
3366
1.71k
      if (s == 1)
3367
1.42k
  OUTS (outf, ", R)");
3368
288
      else
3369
288
  OUTS (outf, ")");
3370
1.71k
    }
3371
70.6k
  else if (aop == 0 && aopcde == 22 && HL == 1)
3372
1.39k
    {
3373
1.39k
      OUTS (outf, dregs (dst0));
3374
1.39k
      OUTS (outf, " = BYTEOP2P (");
3375
1.39k
      OUTS (outf, dregs (src0 + 1));
3376
1.39k
      OUTS (outf, ":");
3377
1.39k
      OUTS (outf, imm5d (src0));
3378
1.39k
      OUTS (outf, ", ");
3379
1.39k
      OUTS (outf, dregs (src1 + 1));
3380
1.39k
      OUTS (outf, ":");
3381
1.39k
      OUTS (outf, imm5d (src1));
3382
1.39k
      OUTS (outf, ") (RNDH");
3383
1.39k
      if (s == 1)
3384
693
  OUTS (outf, ", R)");
3385
700
      else
3386
700
  OUTS (outf, ")");
3387
1.39k
    }
3388
69.2k
  else if (aop == 0 && aopcde == 22 && HL == 0)
3389
585
    {
3390
585
      OUTS (outf, dregs (dst0));
3391
585
      OUTS (outf, " = BYTEOP2P (");
3392
585
      OUTS (outf, dregs (src0 + 1));
3393
585
      OUTS (outf, ":");
3394
585
      OUTS (outf, imm5d (src0));
3395
585
      OUTS (outf, ", ");
3396
585
      OUTS (outf, dregs (src1 + 1));
3397
585
      OUTS (outf, ":");
3398
585
      OUTS (outf, imm5d (src1));
3399
585
      OUTS (outf, ") (RNDL");
3400
585
      if (s == 1)
3401
468
  OUTS (outf, ", R)");
3402
117
      else
3403
117
  OUTS (outf, ")");
3404
585
    }
3405
68.6k
  else if (aop == 0 && s == 0 && aopcde == 8)
3406
259
    OUTS (outf, "A0 = 0");
3407
3408
68.3k
  else if (aop == 0 && s == 1 && aopcde == 8)
3409
448
    OUTS (outf, "A0 = A0 (S)");
3410
3411
67.9k
  else if (aop == 1 && s == 0 && aopcde == 8)
3412
357
    OUTS (outf, "A1 = 0");
3413
3414
67.5k
  else if (aop == 1 && s == 1 && aopcde == 8)
3415
187
    OUTS (outf, "A1 = A1 (S)");
3416
3417
67.3k
  else if (aop == 2 && s == 0 && aopcde == 8)
3418
209
    OUTS (outf, "A1 = A0 = 0");
3419
3420
67.1k
  else if (aop == 2 && s == 1 && aopcde == 8)
3421
204
    OUTS (outf, "A1 = A1 (S), A0 = A0 (S)");
3422
3423
66.9k
  else if (aop == 3 && s == 0 && aopcde == 8)
3424
250
    OUTS (outf, "A0 = A1");
3425
3426
66.7k
  else if (aop == 3 && s == 1 && aopcde == 8)
3427
1.92k
    OUTS (outf, "A1 = A0");
3428
3429
64.8k
  else if (aop == 1 && aopcde == 9 && s == 0)
3430
488
    {
3431
488
      OUTS (outf, "A0.X = ");
3432
488
      OUTS (outf, dregs_lo (src0));
3433
488
    }
3434
64.3k
  else if (aop == 1 && HL == 0 && aopcde == 11)
3435
268
    {
3436
268
      OUTS (outf, dregs_lo (dst0));
3437
268
      OUTS (outf, " = (A0 += A1)");
3438
268
    }
3439
64.0k
  else if (aop == 3 && HL == 0 && aopcde == 16)
3440
1.99k
    OUTS (outf, "A1 = ABS A1, A0 = ABS A0");
3441
3442
62.0k
  else if (aop == 0 && aopcde == 23 && HL == 1)
3443
1.10k
    {
3444
1.10k
      OUTS (outf, dregs (dst0));
3445
1.10k
      OUTS (outf, " = BYTEOP3P (");
3446
1.10k
      OUTS (outf, dregs (src0 + 1));
3447
1.10k
      OUTS (outf, ":");
3448
1.10k
      OUTS (outf, imm5d (src0));
3449
1.10k
      OUTS (outf, ", ");
3450
1.10k
      OUTS (outf, dregs (src1 + 1));
3451
1.10k
      OUTS (outf, ":");
3452
1.10k
      OUTS (outf, imm5d (src1));
3453
1.10k
      OUTS (outf, ") (HI");
3454
1.10k
      if (s == 1)
3455
593
  OUTS (outf, ", R)");
3456
513
      else
3457
513
  OUTS (outf, ")");
3458
1.10k
    }
3459
60.9k
  else if (aop == 3 && aopcde == 9 && s == 0)
3460
527
    {
3461
527
      OUTS (outf, "A1.X = ");
3462
527
      OUTS (outf, dregs_lo (src0));
3463
527
    }
3464
60.4k
  else if (aop == 1 && HL == 1 && aopcde == 16)
3465
255
    OUTS (outf, "A1 = ABS A1");
3466
3467
60.1k
  else if (aop == 0 && HL == 1 && aopcde == 16)
3468
638
    OUTS (outf, "A1 = ABS A0");
3469
3470
59.5k
  else if (aop == 2 && aopcde == 9 && s == 1)
3471
286
    {
3472
286
      OUTS (outf, "A1 = ");
3473
286
      OUTS (outf, dregs (src0));
3474
286
    }
3475
59.2k
  else if (HL == 0 && aop == 3 && aopcde == 12)
3476
242
    {
3477
242
      OUTS (outf, dregs_lo (dst0));
3478
242
      OUTS (outf, " = ");
3479
242
      OUTS (outf, dregs (src0));
3480
242
      OUTS (outf, " (RND)");
3481
242
    }
3482
59.0k
  else if (aop == 1 && HL == 0 && aopcde == 16)
3483
555
    OUTS (outf, "A0 = ABS A1");
3484
3485
58.4k
  else if (aop == 0 && HL == 0 && aopcde == 16)
3486
1.36k
    OUTS (outf, "A0 = ABS A0");
3487
3488
57.0k
  else if (aop == 3 && HL == 0 && aopcde == 15)
3489
161
    {
3490
161
      OUTS (outf, dregs (dst0));
3491
161
      OUTS (outf, " = -");
3492
161
      OUTS (outf, dregs (src0));
3493
161
      OUTS (outf, " (V)");
3494
161
    }
3495
56.9k
  else if (aop == 3 && s == 1 && HL == 0 && aopcde == 7)
3496
303
    {
3497
303
      OUTS (outf, dregs (dst0));
3498
303
      OUTS (outf, " = -");
3499
303
      OUTS (outf, dregs (src0));
3500
303
      OUTS (outf, " (S)");
3501
303
    }
3502
56.6k
  else if (aop == 3 && s == 0 && HL == 0 && aopcde == 7)
3503
235
    {
3504
235
      OUTS (outf, dregs (dst0));
3505
235
      OUTS (outf, " = -");
3506
235
      OUTS (outf, dregs (src0));
3507
235
      OUTS (outf, " (NS)");
3508
235
    }
3509
56.3k
  else if (aop == 1 && HL == 1 && aopcde == 11)
3510
1.42k
    {
3511
1.42k
      OUTS (outf, dregs_hi (dst0));
3512
1.42k
      OUTS (outf, " = (A0 += A1)");
3513
1.42k
    }
3514
54.9k
  else if (aop == 2 && aopcde == 11 && s == 0)
3515
526
    OUTS (outf, "A0 += A1");
3516
3517
54.4k
  else if (aop == 2 && aopcde == 11 && s == 1)
3518
226
    OUTS (outf, "A0 += A1 (W32)");
3519
3520
54.1k
  else if (aop == 3 && HL == 0 && aopcde == 14)
3521
73
    OUTS (outf, "A1 = -A1, A0 = -A0");
3522
3523
54.1k
  else if (HL == 1 && aop == 3 && aopcde == 12)
3524
247
    {
3525
247
      OUTS (outf, dregs_hi (dst0));
3526
247
      OUTS (outf, " = ");
3527
247
      OUTS (outf, dregs (src0));
3528
247
      OUTS (outf, " (RND)");
3529
247
    }
3530
53.8k
  else if (aop == 0 && aopcde == 23 && HL == 0)
3531
377
    {
3532
377
      OUTS (outf, dregs (dst0));
3533
377
      OUTS (outf, " = BYTEOP3P (");
3534
377
      OUTS (outf, dregs (src0 + 1));
3535
377
      OUTS (outf, ":");
3536
377
      OUTS (outf, imm5d (src0));
3537
377
      OUTS (outf, ", ");
3538
377
      OUTS (outf, dregs (src1 + 1));
3539
377
      OUTS (outf, ":");
3540
377
      OUTS (outf, imm5d (src1));
3541
377
      OUTS (outf, ") (LO");
3542
377
      if (s == 1)
3543
283
  OUTS (outf, ", R)");
3544
94
      else
3545
94
  OUTS (outf, ")");
3546
377
    }
3547
53.5k
  else if (aop == 0 && HL == 0 && aopcde == 14)
3548
140
    OUTS (outf, "A0 = -A0");
3549
3550
53.3k
  else if (aop == 1 && HL == 0 && aopcde == 14)
3551
211
    OUTS (outf, "A0 = -A1");
3552
3553
53.1k
  else if (aop == 0 && HL == 1 && aopcde == 14)
3554
364
    OUTS (outf, "A1 = -A0");
3555
3556
52.7k
  else if (aop == 1 && HL == 1 && aopcde == 14)
3557
189
    OUTS (outf, "A1 = -A1");
3558
3559
52.5k
  else if (aop == 0 && aopcde == 12)
3560
1.00k
    {
3561
1.00k
      OUTS (outf, dregs_hi (dst0));
3562
1.00k
      OUTS (outf, " = ");
3563
1.00k
      OUTS (outf, dregs_lo (dst0));
3564
1.00k
      OUTS (outf, " = SIGN (");
3565
1.00k
      OUTS (outf, dregs_hi (src0));
3566
1.00k
      OUTS (outf, ") * ");
3567
1.00k
      OUTS (outf, dregs_hi (src1));
3568
1.00k
      OUTS (outf, " + SIGN (");
3569
1.00k
      OUTS (outf, dregs_lo (src0));
3570
1.00k
      OUTS (outf, ") * ");
3571
1.00k
      OUTS (outf, dregs_lo (src1));
3572
1.00k
    }
3573
51.5k
  else if (aop == 2 && aopcde == 0)
3574
375
    {
3575
375
      OUTS (outf, dregs (dst0));
3576
375
      OUTS (outf, " = ");
3577
375
      OUTS (outf, dregs (src0));
3578
375
      OUTS (outf, " -|+ ");
3579
375
      OUTS (outf, dregs (src1));
3580
375
      amod0 (s, x, outf);
3581
375
    }
3582
51.2k
  else if (aop == 1 && aopcde == 12)
3583
536
    {
3584
536
      OUTS (outf, dregs (dst1));
3585
536
      OUTS (outf, " = A1.L + A1.H, ");
3586
536
      OUTS (outf, dregs (dst0));
3587
536
      OUTS (outf, " = A0.L + A0.H");
3588
536
    }
3589
50.6k
  else if (aop == 2 && aopcde == 4)
3590
249
    {
3591
249
      OUTS (outf, dregs (dst1));
3592
249
      OUTS (outf, " = ");
3593
249
      OUTS (outf, dregs (src0));
3594
249
      OUTS (outf, " + ");
3595
249
      OUTS (outf, dregs (src1));
3596
249
      OUTS (outf, ", ");
3597
249
      OUTS (outf, dregs (dst0));
3598
249
      OUTS (outf, " = ");
3599
249
      OUTS (outf, dregs (src0));
3600
249
      OUTS (outf, " - ");
3601
249
      OUTS (outf, dregs (src1));
3602
249
      amod1 (s, x, outf);
3603
249
    }
3604
50.4k
  else if (HL == 0 && aopcde == 1)
3605
4.43k
    {
3606
4.43k
      OUTS (outf, dregs (dst1));
3607
4.43k
      OUTS (outf, " = ");
3608
4.43k
      OUTS (outf, dregs (src0));
3609
4.43k
      OUTS (outf, " +|+ ");
3610
4.43k
      OUTS (outf, dregs (src1));
3611
4.43k
      OUTS (outf, ", ");
3612
4.43k
      OUTS (outf, dregs (dst0));
3613
4.43k
      OUTS (outf, " = ");
3614
4.43k
      OUTS (outf, dregs (src0));
3615
4.43k
      OUTS (outf, " -|- ");
3616
4.43k
      OUTS (outf, dregs (src1));
3617
4.43k
      amod0amod2 (s, x, aop, outf);
3618
4.43k
    }
3619
45.9k
  else if (aop == 0 && aopcde == 11)
3620
3.19k
    {
3621
3.19k
      OUTS (outf, dregs (dst0));
3622
3.19k
      OUTS (outf, " = (A0 += A1)");
3623
3.19k
    }
3624
42.8k
  else if (aop == 0 && aopcde == 10)
3625
1.56k
    {
3626
1.56k
      OUTS (outf, dregs_lo (dst0));
3627
1.56k
      OUTS (outf, " = A0.X");
3628
1.56k
    }
3629
41.2k
  else if (aop == 1 && aopcde == 10)
3630
637
    {
3631
637
      OUTS (outf, dregs_lo (dst0));
3632
637
      OUTS (outf, " = A1.X");
3633
637
    }
3634
40.6k
  else if (aop == 1 && aopcde == 0)
3635
1.77k
    {
3636
1.77k
      OUTS (outf, dregs (dst0));
3637
1.77k
      OUTS (outf, " = ");
3638
1.77k
      OUTS (outf, dregs (src0));
3639
1.77k
      OUTS (outf, " +|- ");
3640
1.77k
      OUTS (outf, dregs (src1));
3641
1.77k
      amod0 (s, x, outf);
3642
1.77k
    }
3643
38.8k
  else if (aop == 3 && aopcde == 0)
3644
4.73k
    {
3645
4.73k
      OUTS (outf, dregs (dst0));
3646
4.73k
      OUTS (outf, " = ");
3647
4.73k
      OUTS (outf, dregs (src0));
3648
4.73k
      OUTS (outf, " -|- ");
3649
4.73k
      OUTS (outf, dregs (src1));
3650
4.73k
      amod0 (s, x, outf);
3651
4.73k
    }
3652
34.0k
  else if (aop == 1 && aopcde == 4)
3653
724
    {
3654
724
      OUTS (outf, dregs (dst0));
3655
724
      OUTS (outf, " = ");
3656
724
      OUTS (outf, dregs (src0));
3657
724
      OUTS (outf, " - ");
3658
724
      OUTS (outf, dregs (src1));
3659
724
      amod1 (s, x, outf);
3660
724
    }
3661
33.3k
  else if (aop == 0 && aopcde == 17)
3662
2.86k
    {
3663
2.86k
      OUTS (outf, dregs (dst1));
3664
2.86k
      OUTS (outf, " = A1 + A0, ");
3665
2.86k
      OUTS (outf, dregs (dst0));
3666
2.86k
      OUTS (outf, " = A1 - A0");
3667
2.86k
      amod1 (s, x, outf);
3668
2.86k
    }
3669
30.5k
  else if (aop == 1 && aopcde == 17)
3670
1.53k
    {
3671
1.53k
      OUTS (outf, dregs (dst1));
3672
1.53k
      OUTS (outf, " = A0 + A1, ");
3673
1.53k
      OUTS (outf, dregs (dst0));
3674
1.53k
      OUTS (outf, " = A0 - A1");
3675
1.53k
      amod1 (s, x, outf);
3676
1.53k
    }
3677
28.9k
  else if (aop == 0 && aopcde == 18)
3678
955
    {
3679
955
      OUTS (outf, "SAA (");
3680
955
      OUTS (outf, dregs (src0 + 1));
3681
955
      OUTS (outf, ":");
3682
955
      OUTS (outf, imm5d (src0));
3683
955
      OUTS (outf, ", ");
3684
955
      OUTS (outf, dregs (src1 + 1));
3685
955
      OUTS (outf, ":");
3686
955
      OUTS (outf, imm5d (src1));
3687
955
      OUTS (outf, ")");
3688
955
      aligndir (s, outf);
3689
955
    }
3690
28.0k
  else if (aop == 3 && aopcde == 18)
3691
312
    OUTS (outf, "DISALGNEXCPT");
3692
3693
27.7k
  else if (aop == 0 && aopcde == 20)
3694
768
    {
3695
768
      OUTS (outf, dregs (dst0));
3696
768
      OUTS (outf, " = BYTEOP1P (");
3697
768
      OUTS (outf, dregs (src0 + 1));
3698
768
      OUTS (outf, ":");
3699
768
      OUTS (outf, imm5d (src0));
3700
768
      OUTS (outf, ", ");
3701
768
      OUTS (outf, dregs (src1 + 1));
3702
768
      OUTS (outf, ":");
3703
768
      OUTS (outf, imm5d (src1));
3704
768
      OUTS (outf, ")");
3705
768
      aligndir (s, outf);
3706
768
    }
3707
26.9k
  else if (aop == 1 && aopcde == 20)
3708
573
    {
3709
573
      OUTS (outf, dregs (dst0));
3710
573
      OUTS (outf, " = BYTEOP1P (");
3711
573
      OUTS (outf, dregs (src0 + 1));
3712
573
      OUTS (outf, ":");
3713
573
      OUTS (outf, imm5d (src0));
3714
573
      OUTS (outf, ", ");
3715
573
      OUTS (outf, dregs (src1 + 1));
3716
573
      OUTS (outf, ":");
3717
573
      OUTS (outf, imm5d (src1));
3718
573
      OUTS (outf, ") (T");
3719
573
      if (s == 1)
3720
318
  OUTS (outf, ", R)");
3721
255
      else
3722
255
  OUTS (outf, ")");
3723
573
    }
3724
26.3k
  else if (aop == 0 && aopcde == 21)
3725
969
    {
3726
969
      OUTS (outf, "(");
3727
969
      OUTS (outf, dregs (dst1));
3728
969
      OUTS (outf, ", ");
3729
969
      OUTS (outf, dregs (dst0));
3730
969
      OUTS (outf, ") = BYTEOP16P (");
3731
969
      OUTS (outf, dregs (src0 + 1));
3732
969
      OUTS (outf, ":");
3733
969
      OUTS (outf, imm5d (src0));
3734
969
      OUTS (outf, ", ");
3735
969
      OUTS (outf, dregs (src1 + 1));
3736
969
      OUTS (outf, ":");
3737
969
      OUTS (outf, imm5d (src1));
3738
969
      OUTS (outf, ")");
3739
969
      aligndir (s, outf);
3740
969
    }
3741
25.3k
  else if (aop == 1 && aopcde == 21)
3742
859
    {
3743
859
      OUTS (outf, "(");
3744
859
      OUTS (outf, dregs (dst1));
3745
859
      OUTS (outf, ", ");
3746
859
      OUTS (outf, dregs (dst0));
3747
859
      OUTS (outf, ") = BYTEOP16M (");
3748
859
      OUTS (outf, dregs (src0 + 1));
3749
859
      OUTS (outf, ":");
3750
859
      OUTS (outf, imm5d (src0));
3751
859
      OUTS (outf, ", ");
3752
859
      OUTS (outf, dregs (src1 + 1));
3753
859
      OUTS (outf, ":");
3754
859
      OUTS (outf, imm5d (src1));
3755
859
      OUTS (outf, ")");
3756
859
      aligndir (s, outf);
3757
859
    }
3758
24.5k
  else if (aop == 2 && aopcde == 7)
3759
382
    {
3760
382
      OUTS (outf, dregs (dst0));
3761
382
      OUTS (outf, " = ABS ");
3762
382
      OUTS (outf, dregs (src0));
3763
382
    }
3764
24.1k
  else if (aop == 1 && aopcde == 7)
3765
363
    {
3766
363
      OUTS (outf, dregs (dst0));
3767
363
      OUTS (outf, " = MIN (");
3768
363
      OUTS (outf, dregs (src0));
3769
363
      OUTS (outf, ", ");
3770
363
      OUTS (outf, dregs (src1));
3771
363
      OUTS (outf, ")");
3772
363
    }
3773
23.7k
  else if (aop == 0 && aopcde == 7)
3774
568
    {
3775
568
      OUTS (outf, dregs (dst0));
3776
568
      OUTS (outf, " = MAX (");
3777
568
      OUTS (outf, dregs (src0));
3778
568
      OUTS (outf, ", ");
3779
568
      OUTS (outf, dregs (src1));
3780
568
      OUTS (outf, ")");
3781
568
    }
3782
23.2k
  else if (aop == 2 && aopcde == 6)
3783
337
    {
3784
337
      OUTS (outf, dregs (dst0));
3785
337
      OUTS (outf, " = ABS ");
3786
337
      OUTS (outf, dregs (src0));
3787
337
      OUTS (outf, " (V)");
3788
337
    }
3789
22.8k
  else if (aop == 1 && aopcde == 6)
3790
221
    {
3791
221
      OUTS (outf, dregs (dst0));
3792
221
      OUTS (outf, " = MIN (");
3793
221
      OUTS (outf, dregs (src0));
3794
221
      OUTS (outf, ", ");
3795
221
      OUTS (outf, dregs (src1));
3796
221
      OUTS (outf, ") (V)");
3797
221
    }
3798
22.6k
  else if (aop == 0 && aopcde == 6)
3799
931
    {
3800
931
      OUTS (outf, dregs (dst0));
3801
931
      OUTS (outf, " = MAX (");
3802
931
      OUTS (outf, dregs (src0));
3803
931
      OUTS (outf, ", ");
3804
931
      OUTS (outf, dregs (src1));
3805
931
      OUTS (outf, ") (V)");
3806
931
    }
3807
21.7k
  else if (HL == 1 && aopcde == 1)
3808
2.81k
    {
3809
2.81k
      OUTS (outf, dregs (dst1));
3810
2.81k
      OUTS (outf, " = ");
3811
2.81k
      OUTS (outf, dregs (src0));
3812
2.81k
      OUTS (outf, " +|- ");
3813
2.81k
      OUTS (outf, dregs (src1));
3814
2.81k
      OUTS (outf, ", ");
3815
2.81k
      OUTS (outf, dregs (dst0));
3816
2.81k
      OUTS (outf, " = ");
3817
2.81k
      OUTS (outf, dregs (src0));
3818
2.81k
      OUTS (outf, " -|+ ");
3819
2.81k
      OUTS (outf, dregs (src1));
3820
2.81k
      amod0amod2 (s, x, aop, outf);
3821
2.81k
    }
3822
18.9k
  else if (aop == 0 && aopcde == 4)
3823
951
    {
3824
951
      OUTS (outf, dregs (dst0));
3825
951
      OUTS (outf, " = ");
3826
951
      OUTS (outf, dregs (src0));
3827
951
      OUTS (outf, " + ");
3828
951
      OUTS (outf, dregs (src1));
3829
951
      amod1 (s, x, outf);
3830
951
    }
3831
17.9k
  else if (aop == 0 && aopcde == 0)
3832
4.89k
    {
3833
4.89k
      OUTS (outf, dregs (dst0));
3834
4.89k
      OUTS (outf, " = ");
3835
4.89k
      OUTS (outf, dregs (src0));
3836
4.89k
      OUTS (outf, " +|+ ");
3837
4.89k
      OUTS (outf, dregs (src1));
3838
4.89k
      amod0 (s, x, outf);
3839
4.89k
    }
3840
13.0k
  else if (aop == 0 && aopcde == 24)
3841
352
    {
3842
352
      OUTS (outf, dregs (dst0));
3843
352
      OUTS (outf, " = BYTEPACK (");
3844
352
      OUTS (outf, dregs (src0));
3845
352
      OUTS (outf, ", ");
3846
352
      OUTS (outf, dregs (src1));
3847
352
      OUTS (outf, ")");
3848
352
    }
3849
12.7k
  else if (aop == 1 && aopcde == 24)
3850
1.01k
    {
3851
1.01k
      OUTS (outf, "(");
3852
1.01k
      OUTS (outf, dregs (dst1));
3853
1.01k
      OUTS (outf, ", ");
3854
1.01k
      OUTS (outf, dregs (dst0));
3855
1.01k
      OUTS (outf, ") = BYTEUNPACK ");
3856
1.01k
      OUTS (outf, dregs (src0 + 1));
3857
1.01k
      OUTS (outf, ":");
3858
1.01k
      OUTS (outf, imm5d (src0));
3859
1.01k
      aligndir (s, outf);
3860
1.01k
    }
3861
11.7k
  else if (aopcde == 13)
3862
2.23k
    {
3863
2.23k
      OUTS (outf, "(");
3864
2.23k
      OUTS (outf, dregs (dst1));
3865
2.23k
      OUTS (outf, ", ");
3866
2.23k
      OUTS (outf, dregs (dst0));
3867
2.23k
      OUTS (outf, ") = SEARCH ");
3868
2.23k
      OUTS (outf, dregs (src0));
3869
2.23k
      OUTS (outf, " (");
3870
2.23k
      searchmod (aop, outf);
3871
2.23k
      OUTS (outf, ")");
3872
2.23k
    }
3873
9.46k
  else
3874
9.46k
    return 0;
3875
3876
85.6k
  return 4;
3877
95.1k
}
3878
3879
static int
3880
decode_dsp32shift_0 (TIword iw0, TIword iw1, disassemble_info *outf)
3881
35.1k
{
3882
  /* dsp32shift
3883
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
3884
     | 1 | 1 | 0 | 0 |.M.| 1 | 1 | 0 | 0 | - | - |.sopcde............|
3885
     |.sop...|.HLs...|.dst0......| - | - | - |.src0......|.src1......|
3886
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+  */
3887
35.1k
  int HLs  = ((iw1 >> DSP32Shift_HLs_bits) & DSP32Shift_HLs_mask);
3888
35.1k
  int sop  = ((iw1 >> DSP32Shift_sop_bits) & DSP32Shift_sop_mask);
3889
35.1k
  int src0 = ((iw1 >> DSP32Shift_src0_bits) & DSP32Shift_src0_mask);
3890
35.1k
  int src1 = ((iw1 >> DSP32Shift_src1_bits) & DSP32Shift_src1_mask);
3891
35.1k
  int dst0 = ((iw1 >> DSP32Shift_dst0_bits) & DSP32Shift_dst0_mask);
3892
35.1k
  int sopcde = ((iw0 >> (DSP32Shift_sopcde_bits - 16)) & DSP32Shift_sopcde_mask);
3893
35.1k
  const char *acc01 = (HLs & 1) == 0 ? "A0" : "A1";
3894
3895
35.1k
  if (HLs == 0 && sop == 0 && sopcde == 0)
3896
1.09k
    {
3897
1.09k
      OUTS (outf, dregs_lo (dst0));
3898
1.09k
      OUTS (outf, " = ASHIFT ");
3899
1.09k
      OUTS (outf, dregs_lo (src1));
3900
1.09k
      OUTS (outf, " BY ");
3901
1.09k
      OUTS (outf, dregs_lo (src0));
3902
1.09k
    }
3903
34.0k
  else if (HLs == 1 && sop == 0 && sopcde == 0)
3904
638
    {
3905
638
      OUTS (outf, dregs_lo (dst0));
3906
638
      OUTS (outf, " = ASHIFT ");
3907
638
      OUTS (outf, dregs_hi (src1));
3908
638
      OUTS (outf, " BY ");
3909
638
      OUTS (outf, dregs_lo (src0));
3910
638
    }
3911
33.4k
  else if (HLs == 2 && sop == 0 && sopcde == 0)
3912
900
    {
3913
900
      OUTS (outf, dregs_hi (dst0));
3914
900
      OUTS (outf, " = ASHIFT ");
3915
900
      OUTS (outf, dregs_lo (src1));
3916
900
      OUTS (outf, " BY ");
3917
900
      OUTS (outf, dregs_lo (src0));
3918
900
    }
3919
32.5k
  else if (HLs == 3 && sop == 0 && sopcde == 0)
3920
432
    {
3921
432
      OUTS (outf, dregs_hi (dst0));
3922
432
      OUTS (outf, " = ASHIFT ");
3923
432
      OUTS (outf, dregs_hi (src1));
3924
432
      OUTS (outf, " BY ");
3925
432
      OUTS (outf, dregs_lo (src0));
3926
432
    }
3927
32.1k
  else if (HLs == 0 && sop == 1 && sopcde == 0)
3928
1.77k
    {
3929
1.77k
      OUTS (outf, dregs_lo (dst0));
3930
1.77k
      OUTS (outf, " = ASHIFT ");
3931
1.77k
      OUTS (outf, dregs_lo (src1));
3932
1.77k
      OUTS (outf, " BY ");
3933
1.77k
      OUTS (outf, dregs_lo (src0));
3934
1.77k
      OUTS (outf, " (S)");
3935
1.77k
    }
3936
30.3k
  else if (HLs == 1 && sop == 1 && sopcde == 0)
3937
498
    {
3938
498
      OUTS (outf, dregs_lo (dst0));
3939
498
      OUTS (outf, " = ASHIFT ");
3940
498
      OUTS (outf, dregs_hi (src1));
3941
498
      OUTS (outf, " BY ");
3942
498
      OUTS (outf, dregs_lo (src0));
3943
498
      OUTS (outf, " (S)");
3944
498
    }
3945
29.8k
  else if (HLs == 2 && sop == 1 && sopcde == 0)
3946
1.12k
    {
3947
1.12k
      OUTS (outf, dregs_hi (dst0));
3948
1.12k
      OUTS (outf, " = ASHIFT ");
3949
1.12k
      OUTS (outf, dregs_lo (src1));
3950
1.12k
      OUTS (outf, " BY ");
3951
1.12k
      OUTS (outf, dregs_lo (src0));
3952
1.12k
      OUTS (outf, " (S)");
3953
1.12k
    }
3954
28.7k
  else if (HLs == 3 && sop == 1 && sopcde == 0)
3955
324
    {
3956
324
      OUTS (outf, dregs_hi (dst0));
3957
324
      OUTS (outf, " = ASHIFT ");
3958
324
      OUTS (outf, dregs_hi (src1));
3959
324
      OUTS (outf, " BY ");
3960
324
      OUTS (outf, dregs_lo (src0));
3961
324
      OUTS (outf, " (S)");
3962
324
    }
3963
28.4k
  else if (sop == 2 && sopcde == 0)
3964
1.06k
    {
3965
1.06k
      OUTS (outf, (HLs & 2) == 0 ? dregs_lo (dst0) : dregs_hi (dst0));
3966
1.06k
      OUTS (outf, " = LSHIFT ");
3967
1.06k
      OUTS (outf, (HLs & 1) == 0 ? dregs_lo (src1) : dregs_hi (src1));
3968
1.06k
      OUTS (outf, " BY ");
3969
1.06k
      OUTS (outf, dregs_lo (src0));
3970
1.06k
    }
3971
27.3k
  else if (sop == 0 && sopcde == 3)
3972
503
    {
3973
503
      OUTS (outf, acc01);
3974
503
      OUTS (outf, " = ASHIFT ");
3975
503
      OUTS (outf, acc01);
3976
503
      OUTS (outf, " BY ");
3977
503
      OUTS (outf, dregs_lo (src0));
3978
503
    }
3979
26.8k
  else if (sop == 1 && sopcde == 3)
3980
867
    {
3981
867
      OUTS (outf, acc01);
3982
867
      OUTS (outf, " = LSHIFT ");
3983
867
      OUTS (outf, acc01);
3984
867
      OUTS (outf, " BY ");
3985
867
      OUTS (outf, dregs_lo (src0));
3986
867
    }
3987
25.9k
  else if (sop == 2 && sopcde == 3)
3988
162
    {
3989
162
      OUTS (outf, acc01);
3990
162
      OUTS (outf, " = ROT ");
3991
162
      OUTS (outf, acc01);
3992
162
      OUTS (outf, " BY ");
3993
162
      OUTS (outf, dregs_lo (src0));
3994
162
    }
3995
25.8k
  else if (sop == 3 && sopcde == 3)
3996
417
    {
3997
417
      OUTS (outf, dregs (dst0));
3998
417
      OUTS (outf, " = ROT ");
3999
417
      OUTS (outf, dregs (src1));
4000
417
      OUTS (outf, " BY ");
4001
417
      OUTS (outf, dregs_lo (src0));
4002
417
    }
4003
25.3k
  else if (sop == 1 && sopcde == 1)
4004
162
    {
4005
162
      OUTS (outf, dregs (dst0));
4006
162
      OUTS (outf, " = ASHIFT ");
4007
162
      OUTS (outf, dregs (src1));
4008
162
      OUTS (outf, " BY ");
4009
162
      OUTS (outf, dregs_lo (src0));
4010
162
      OUTS (outf, " (V, S)");
4011
162
    }
4012
25.2k
  else if (sop == 0 && sopcde == 1)
4013
755
    {
4014
755
      OUTS (outf, dregs (dst0));
4015
755
      OUTS (outf, " = ASHIFT ");
4016
755
      OUTS (outf, dregs (src1));
4017
755
      OUTS (outf, " BY ");
4018
755
      OUTS (outf, dregs_lo (src0));
4019
755
      OUTS (outf, " (V)");
4020
755
    }
4021
24.4k
  else if (sop == 0 && sopcde == 2)
4022
1.86k
    {
4023
1.86k
      OUTS (outf, dregs (dst0));
4024
1.86k
      OUTS (outf, " = ASHIFT ");
4025
1.86k
      OUTS (outf, dregs (src1));
4026
1.86k
      OUTS (outf, " BY ");
4027
1.86k
      OUTS (outf, dregs_lo (src0));
4028
1.86k
    }
4029
22.6k
  else if (sop == 1 && sopcde == 2)
4030
1.02k
    {
4031
1.02k
      OUTS (outf, dregs (dst0));
4032
1.02k
      OUTS (outf, " = ASHIFT ");
4033
1.02k
      OUTS (outf, dregs (src1));
4034
1.02k
      OUTS (outf, " BY ");
4035
1.02k
      OUTS (outf, dregs_lo (src0));
4036
1.02k
      OUTS (outf, " (S)");
4037
1.02k
    }
4038
21.5k
  else if (sop == 2 && sopcde == 2)
4039
1.10k
    {
4040
1.10k
      OUTS (outf, dregs (dst0));
4041
1.10k
      OUTS (outf, " = LSHIFT ");
4042
1.10k
      OUTS (outf, dregs (src1));
4043
1.10k
      OUTS (outf, " BY ");
4044
1.10k
      OUTS (outf, dregs_lo (src0));
4045
1.10k
    }
4046
20.4k
  else if (sop == 3 && sopcde == 2)
4047
550
    {
4048
550
      OUTS (outf, dregs (dst0));
4049
550
      OUTS (outf, " = ROT ");
4050
550
      OUTS (outf, dregs (src1));
4051
550
      OUTS (outf, " BY ");
4052
550
      OUTS (outf, dregs_lo (src0));
4053
550
    }
4054
19.9k
  else if (sop == 2 && sopcde == 1)
4055
319
    {
4056
319
      OUTS (outf, dregs (dst0));
4057
319
      OUTS (outf, " = LSHIFT ");
4058
319
      OUTS (outf, dregs (src1));
4059
319
      OUTS (outf, " BY ");
4060
319
      OUTS (outf, dregs_lo (src0));
4061
319
      OUTS (outf, " (V)");
4062
319
    }
4063
19.6k
  else if (sop == 0 && sopcde == 4)
4064
671
    {
4065
671
      OUTS (outf, dregs (dst0));
4066
671
      OUTS (outf, " = PACK (");
4067
671
      OUTS (outf, dregs_lo (src1));
4068
671
      OUTS (outf, ", ");
4069
671
      OUTS (outf, dregs_lo (src0));
4070
671
      OUTS (outf, ")");
4071
671
    }
4072
18.9k
  else if (sop == 1 && sopcde == 4)
4073
551
    {
4074
551
      OUTS (outf, dregs (dst0));
4075
551
      OUTS (outf, " = PACK (");
4076
551
      OUTS (outf, dregs_lo (src1));
4077
551
      OUTS (outf, ", ");
4078
551
      OUTS (outf, dregs_hi (src0));
4079
551
      OUTS (outf, ")");
4080
551
    }
4081
18.3k
  else if (sop == 2 && sopcde == 4)
4082
286
    {
4083
286
      OUTS (outf, dregs (dst0));
4084
286
      OUTS (outf, " = PACK (");
4085
286
      OUTS (outf, dregs_hi (src1));
4086
286
      OUTS (outf, ", ");
4087
286
      OUTS (outf, dregs_lo (src0));
4088
286
      OUTS (outf, ")");
4089
286
    }
4090
18.1k
  else if (sop == 3 && sopcde == 4)
4091
742
    {
4092
742
      OUTS (outf, dregs (dst0));
4093
742
      OUTS (outf, " = PACK (");
4094
742
      OUTS (outf, dregs_hi (src1));
4095
742
      OUTS (outf, ", ");
4096
742
      OUTS (outf, dregs_hi (src0));
4097
742
      OUTS (outf, ")");
4098
742
    }
4099
17.3k
  else if (sop == 0 && sopcde == 5)
4100
438
    {
4101
438
      OUTS (outf, dregs_lo (dst0));
4102
438
      OUTS (outf, " = SIGNBITS ");
4103
438
      OUTS (outf, dregs (src1));
4104
438
    }
4105
16.9k
  else if (sop == 1 && sopcde == 5)
4106
226
    {
4107
226
      OUTS (outf, dregs_lo (dst0));
4108
226
      OUTS (outf, " = SIGNBITS ");
4109
226
      OUTS (outf, dregs_lo (src1));
4110
226
    }
4111
16.7k
  else if (sop == 2 && sopcde == 5)
4112
145
    {
4113
145
      OUTS (outf, dregs_lo (dst0));
4114
145
      OUTS (outf, " = SIGNBITS ");
4115
145
      OUTS (outf, dregs_hi (src1));
4116
145
    }
4117
16.5k
  else if (sop == 0 && sopcde == 6)
4118
280
    {
4119
280
      OUTS (outf, dregs_lo (dst0));
4120
280
      OUTS (outf, " = SIGNBITS A0");
4121
280
    }
4122
16.2k
  else if (sop == 1 && sopcde == 6)
4123
89
    {
4124
89
      OUTS (outf, dregs_lo (dst0));
4125
89
      OUTS (outf, " = SIGNBITS A1");
4126
89
    }
4127
16.1k
  else if (sop == 3 && sopcde == 6)
4128
398
    {
4129
398
      OUTS (outf, dregs_lo (dst0));
4130
398
      OUTS (outf, " = ONES ");
4131
398
      OUTS (outf, dregs (src1));
4132
398
    }
4133
15.7k
  else if (sop == 0 && sopcde == 7)
4134
731
    {
4135
731
      OUTS (outf, dregs_lo (dst0));
4136
731
      OUTS (outf, " = EXPADJ (");
4137
731
      OUTS (outf, dregs (src1));
4138
731
      OUTS (outf, ", ");
4139
731
      OUTS (outf, dregs_lo (src0));
4140
731
      OUTS (outf, ")");
4141
731
    }
4142
15.0k
  else if (sop == 1 && sopcde == 7)
4143
940
    {
4144
940
      OUTS (outf, dregs_lo (dst0));
4145
940
      OUTS (outf, " = EXPADJ (");
4146
940
      OUTS (outf, dregs (src1));
4147
940
      OUTS (outf, ", ");
4148
940
      OUTS (outf, dregs_lo (src0));
4149
940
      OUTS (outf, ") (V)");
4150
940
    }
4151
14.1k
  else if (sop == 2 && sopcde == 7)
4152
51
    {
4153
51
      OUTS (outf, dregs_lo (dst0));
4154
51
      OUTS (outf, " = EXPADJ (");
4155
51
      OUTS (outf, dregs_lo (src1));
4156
51
      OUTS (outf, ", ");
4157
51
      OUTS (outf, dregs_lo (src0));
4158
51
      OUTS (outf, ")");
4159
51
    }
4160
14.0k
  else if (sop == 3 && sopcde == 7)
4161
1.41k
    {
4162
1.41k
      OUTS (outf, dregs_lo (dst0));
4163
1.41k
      OUTS (outf, " = EXPADJ (");
4164
1.41k
      OUTS (outf, dregs_hi (src1));
4165
1.41k
      OUTS (outf, ", ");
4166
1.41k
      OUTS (outf, dregs_lo (src0));
4167
1.41k
      OUTS (outf, ")");
4168
1.41k
    }
4169
12.6k
  else if (sop == 0 && sopcde == 8)
4170
333
    {
4171
333
      OUTS (outf, "BITMUX (");
4172
333
      OUTS (outf, dregs (src0));
4173
333
      OUTS (outf, ", ");
4174
333
      OUTS (outf, dregs (src1));
4175
333
      OUTS (outf, ", A0) (ASR)");
4176
333
    }
4177
12.3k
  else if (sop == 1 && sopcde == 8)
4178
209
    {
4179
209
      OUTS (outf, "BITMUX (");
4180
209
      OUTS (outf, dregs (src0));
4181
209
      OUTS (outf, ", ");
4182
209
      OUTS (outf, dregs (src1));
4183
209
      OUTS (outf, ", A0) (ASL)");
4184
209
    }
4185
12.1k
  else if (sop == 0 && sopcde == 9)
4186
1.30k
    {
4187
1.30k
      OUTS (outf, dregs_lo (dst0));
4188
1.30k
      OUTS (outf, " = VIT_MAX (");
4189
1.30k
      OUTS (outf, dregs (src1));
4190
1.30k
      OUTS (outf, ") (ASL)");
4191
1.30k
    }
4192
10.8k
  else if (sop == 1 && sopcde == 9)
4193
425
    {
4194
425
      OUTS (outf, dregs_lo (dst0));
4195
425
      OUTS (outf, " = VIT_MAX (");
4196
425
      OUTS (outf, dregs (src1));
4197
425
      OUTS (outf, ") (ASR)");
4198
425
    }
4199
10.3k
  else if (sop == 2 && sopcde == 9)
4200
814
    {
4201
814
      OUTS (outf, dregs (dst0));
4202
814
      OUTS (outf, " = VIT_MAX (");
4203
814
      OUTS (outf, dregs (src1));
4204
814
      OUTS (outf, ", ");
4205
814
      OUTS (outf, dregs (src0));
4206
814
      OUTS (outf, ") (ASL)");
4207
814
    }
4208
9.56k
  else if (sop == 3 && sopcde == 9)
4209
742
    {
4210
742
      OUTS (outf, dregs (dst0));
4211
742
      OUTS (outf, " = VIT_MAX (");
4212
742
      OUTS (outf, dregs (src1));
4213
742
      OUTS (outf, ", ");
4214
742
      OUTS (outf, dregs (src0));
4215
742
      OUTS (outf, ") (ASR)");
4216
742
    }
4217
8.82k
  else if (sop == 0 && sopcde == 10)
4218
393
    {
4219
393
      OUTS (outf, dregs (dst0));
4220
393
      OUTS (outf, " = EXTRACT (");
4221
393
      OUTS (outf, dregs (src1));
4222
393
      OUTS (outf, ", ");
4223
393
      OUTS (outf, dregs_lo (src0));
4224
393
      OUTS (outf, ") (Z)");
4225
393
    }
4226
8.42k
  else if (sop == 1 && sopcde == 10)
4227
73
    {
4228
73
      OUTS (outf, dregs (dst0));
4229
73
      OUTS (outf, " = EXTRACT (");
4230
73
      OUTS (outf, dregs (src1));
4231
73
      OUTS (outf, ", ");
4232
73
      OUTS (outf, dregs_lo (src0));
4233
73
      OUTS (outf, ") (X)");
4234
73
    }
4235
8.35k
  else if (sop == 2 && sopcde == 10)
4236
451
    {
4237
451
      OUTS (outf, dregs (dst0));
4238
451
      OUTS (outf, " = DEPOSIT (");
4239
451
      OUTS (outf, dregs (src1));
4240
451
      OUTS (outf, ", ");
4241
451
      OUTS (outf, dregs (src0));
4242
451
      OUTS (outf, ")");
4243
451
    }
4244
7.90k
  else if (sop == 3 && sopcde == 10)
4245
393
    {
4246
393
      OUTS (outf, dregs (dst0));
4247
393
      OUTS (outf, " = DEPOSIT (");
4248
393
      OUTS (outf, dregs (src1));
4249
393
      OUTS (outf, ", ");
4250
393
      OUTS (outf, dregs (src0));
4251
393
      OUTS (outf, ") (X)");
4252
393
    }
4253
7.51k
  else if (sop == 0 && sopcde == 11)
4254
242
    {
4255
242
      OUTS (outf, dregs_lo (dst0));
4256
242
      OUTS (outf, " = CC = BXORSHIFT (A0, ");
4257
242
      OUTS (outf, dregs (src0));
4258
242
      OUTS (outf, ")");
4259
242
    }
4260
7.27k
  else if (sop == 1 && sopcde == 11)
4261
838
    {
4262
838
      OUTS (outf, dregs_lo (dst0));
4263
838
      OUTS (outf, " = CC = BXOR (A0, ");
4264
838
      OUTS (outf, dregs (src0));
4265
838
      OUTS (outf, ")");
4266
838
    }
4267
6.43k
  else if (sop == 0 && sopcde == 12)
4268
443
    OUTS (outf, "A0 = BXORSHIFT (A0, A1, CC)");
4269
4270
5.98k
  else if (sop == 1 && sopcde == 12)
4271
230
    {
4272
230
      OUTS (outf, dregs_lo (dst0));
4273
230
      OUTS (outf, " = CC = BXOR (A0, A1, CC)");
4274
230
    }
4275
5.75k
  else if (sop == 0 && sopcde == 13)
4276
117
    {
4277
117
      OUTS (outf, dregs (dst0));
4278
117
      OUTS (outf, " = ALIGN8 (");
4279
117
      OUTS (outf, dregs (src1));
4280
117
      OUTS (outf, ", ");
4281
117
      OUTS (outf, dregs (src0));
4282
117
      OUTS (outf, ")");
4283
117
    }
4284
5.64k
  else if (sop == 1 && sopcde == 13)
4285
58
    {
4286
58
      OUTS (outf, dregs (dst0));
4287
58
      OUTS (outf, " = ALIGN16 (");
4288
58
      OUTS (outf, dregs (src1));
4289
58
      OUTS (outf, ", ");
4290
58
      OUTS (outf, dregs (src0));
4291
58
      OUTS (outf, ")");
4292
58
    }
4293
5.58k
  else if (sop == 2 && sopcde == 13)
4294
217
    {
4295
217
      OUTS (outf, dregs (dst0));
4296
217
      OUTS (outf, " = ALIGN24 (");
4297
217
      OUTS (outf, dregs (src1));
4298
217
      OUTS (outf, ", ");
4299
217
      OUTS (outf, dregs (src0));
4300
217
      OUTS (outf, ")");
4301
217
    }
4302
5.36k
  else
4303
5.36k
    return 0;
4304
4305
29.8k
  return 4;
4306
35.1k
}
4307
4308
static int
4309
decode_dsp32shiftimm_0 (TIword iw0, TIword iw1, disassemble_info *outf)
4310
30.5k
{
4311
  /* dsp32shiftimm
4312
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
4313
     | 1 | 1 | 0 | 0 |.M.| 1 | 1 | 0 | 1 | - | - |.sopcde............|
4314
     |.sop...|.HLs...|.dst0......|.immag.................|.src1......|
4315
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+  */
4316
30.5k
  int src1     = ((iw1 >> DSP32ShiftImm_src1_bits) & DSP32ShiftImm_src1_mask);
4317
30.5k
  int sop      = ((iw1 >> DSP32ShiftImm_sop_bits) & DSP32ShiftImm_sop_mask);
4318
30.5k
  int bit8     = ((iw1 >> 8) & 0x1);
4319
30.5k
  int immag    = ((iw1 >> DSP32ShiftImm_immag_bits) & DSP32ShiftImm_immag_mask);
4320
30.5k
  int newimmag = (-(iw1 >> DSP32ShiftImm_immag_bits) & DSP32ShiftImm_immag_mask);
4321
30.5k
  int dst0     = ((iw1 >> DSP32ShiftImm_dst0_bits) & DSP32ShiftImm_dst0_mask);
4322
30.5k
  int sopcde   = ((iw0 >> (DSP32ShiftImm_sopcde_bits - 16)) & DSP32ShiftImm_sopcde_mask);
4323
30.5k
  int HLs      = ((iw1 >> DSP32ShiftImm_HLs_bits) & DSP32ShiftImm_HLs_mask);
4324
4325
30.5k
  if (sop == 0 && sopcde == 0)
4326
1.53k
    {
4327
1.53k
      OUTS (outf, (HLs & 2) ? dregs_hi (dst0) : dregs_lo (dst0));
4328
1.53k
      OUTS (outf, " = ");
4329
1.53k
      OUTS (outf, (HLs & 1) ? dregs_hi (src1) : dregs_lo (src1));
4330
1.53k
      OUTS (outf, " >>> ");
4331
1.53k
      OUTS (outf, uimm4 (newimmag));
4332
1.53k
    }
4333
29.0k
  else if (sop == 1 && sopcde == 0 && bit8 == 0)
4334
1.14k
    {
4335
1.14k
      OUTS (outf, (HLs & 2) ? dregs_hi (dst0) : dregs_lo (dst0));
4336
1.14k
      OUTS (outf, " = ");
4337
1.14k
      OUTS (outf, (HLs & 1) ? dregs_hi (src1) : dregs_lo (src1));
4338
1.14k
      OUTS (outf, " << ");
4339
1.14k
      OUTS (outf, uimm4 (immag));
4340
1.14k
      OUTS (outf, " (S)");
4341
1.14k
    }
4342
27.8k
  else if (sop == 1 && sopcde == 0 && bit8 == 1)
4343
308
    {
4344
308
      OUTS (outf, (HLs & 2) ? dregs_hi (dst0) : dregs_lo (dst0));
4345
308
      OUTS (outf, " = ");
4346
308
      OUTS (outf, (HLs & 1) ? dregs_hi (src1) : dregs_lo (src1));
4347
308
      OUTS (outf, " >>> ");
4348
308
      OUTS (outf, uimm4 (newimmag));
4349
308
      OUTS (outf, " (S)");
4350
308
    }
4351
27.5k
  else if (sop == 2 && sopcde == 0 && bit8 == 0)
4352
332
    {
4353
332
      OUTS (outf, (HLs & 2) ? dregs_hi (dst0) : dregs_lo (dst0));
4354
332
      OUTS (outf, " = ");
4355
332
      OUTS (outf, (HLs & 1) ? dregs_hi (src1) : dregs_lo (src1));
4356
332
      OUTS (outf, " << ");
4357
332
      OUTS (outf, uimm4 (immag));
4358
332
    }
4359
27.2k
  else if (sop == 2 && sopcde == 0 && bit8 == 1)
4360
429
    {
4361
429
      OUTS (outf, (HLs & 2) ? dregs_hi (dst0) : dregs_lo (dst0));
4362
429
      OUTS (outf, " = ");
4363
429
      OUTS (outf, (HLs & 1) ? dregs_hi (src1) : dregs_lo (src1));
4364
429
      OUTS (outf, " >> ");
4365
429
      OUTS (outf, uimm4 (newimmag));
4366
429
    }
4367
26.8k
  else if (sop == 2 && sopcde == 3 && HLs == 1)
4368
332
    {
4369
332
      OUTS (outf, "A1 = ROT A1 BY ");
4370
332
      OUTS (outf, imm6 (immag));
4371
332
    }
4372
26.4k
  else if (sop == 0 && sopcde == 3 && HLs == 0 && bit8 == 0)
4373
426
    {
4374
426
      OUTS (outf, "A0 = A0 << ");
4375
426
      OUTS (outf, uimm5 (immag));
4376
426
    }
4377
26.0k
  else if (sop == 0 && sopcde == 3 && HLs == 0 && bit8 == 1)
4378
174
    {
4379
174
      OUTS (outf, "A0 = A0 >>> ");
4380
174
      OUTS (outf, uimm5 (newimmag));
4381
174
    }
4382
25.8k
  else if (sop == 0 && sopcde == 3 && HLs == 1 && bit8 == 0)
4383
531
    {
4384
531
      OUTS (outf, "A1 = A1 << ");
4385
531
      OUTS (outf, uimm5 (immag));
4386
531
    }
4387
25.3k
  else if (sop == 0 && sopcde == 3 && HLs == 1 && bit8 == 1)
4388
1.00k
    {
4389
1.00k
      OUTS (outf, "A1 = A1 >>> ");
4390
1.00k
      OUTS (outf, uimm5 (newimmag));
4391
1.00k
    }
4392
24.3k
  else if (sop == 1 && sopcde == 3 && HLs == 0)
4393
225
    {
4394
225
      OUTS (outf, "A0 = A0 >> ");
4395
225
      OUTS (outf, uimm5 (newimmag));
4396
225
    }
4397
24.1k
  else if (sop == 1 && sopcde == 3 && HLs == 1)
4398
128
    {
4399
128
      OUTS (outf, "A1 = A1 >> ");
4400
128
      OUTS (outf, uimm5 (newimmag));
4401
128
    }
4402
23.9k
  else if (sop == 2 && sopcde == 3 && HLs == 0)
4403
521
    {
4404
521
      OUTS (outf, "A0 = ROT A0 BY ");
4405
521
      OUTS (outf, imm6 (immag));
4406
521
    }
4407
23.4k
  else if (sop == 1 && sopcde == 1 && bit8 == 0)
4408
1.84k
    {
4409
1.84k
      OUTS (outf, dregs (dst0));
4410
1.84k
      OUTS (outf, " = ");
4411
1.84k
      OUTS (outf, dregs (src1));
4412
1.84k
      OUTS (outf, " << ");
4413
1.84k
      OUTS (outf, uimm5 (immag));
4414
1.84k
      OUTS (outf, " (V, S)");
4415
1.84k
    }
4416
21.6k
  else if (sop == 1 && sopcde == 1 && bit8 == 1)
4417
171
    {
4418
171
      OUTS (outf, dregs (dst0));
4419
171
      OUTS (outf, " = ");
4420
171
      OUTS (outf, dregs (src1));
4421
171
      OUTS (outf, " >>> ");
4422
171
      OUTS (outf, imm5 (-immag));
4423
171
      OUTS (outf, " (V, S)");
4424
171
    }
4425
21.4k
  else if (sop == 2 && sopcde == 1 && bit8 == 1)
4426
137
    {
4427
137
      OUTS (outf, dregs (dst0));
4428
137
      OUTS (outf, " = ");
4429
137
      OUTS (outf, dregs (src1));
4430
137
      OUTS (outf, " >> ");
4431
137
      OUTS (outf, uimm5 (newimmag));
4432
137
      OUTS (outf, " (V)");
4433
137
    }
4434
21.3k
  else if (sop == 2 && sopcde == 1 && bit8 == 0)
4435
383
    {
4436
383
      OUTS (outf, dregs (dst0));
4437
383
      OUTS (outf, " = ");
4438
383
      OUTS (outf, dregs (src1));
4439
383
      OUTS (outf, " << ");
4440
383
      OUTS (outf, imm5 (immag));
4441
383
      OUTS (outf, " (V)");
4442
383
    }
4443
20.9k
  else if (sop == 0 && sopcde == 1)
4444
877
    {
4445
877
      OUTS (outf, dregs (dst0));
4446
877
      OUTS (outf, " = ");
4447
877
      OUTS (outf, dregs (src1));
4448
877
      OUTS (outf, " >>> ");
4449
877
      OUTS (outf, uimm5 (newimmag));
4450
877
      OUTS (outf, " (V)");
4451
877
    }
4452
20.0k
  else if (sop == 1 && sopcde == 2)
4453
122
    {
4454
122
      OUTS (outf, dregs (dst0));
4455
122
      OUTS (outf, " = ");
4456
122
      OUTS (outf, dregs (src1));
4457
122
      OUTS (outf, " << ");
4458
122
      OUTS (outf, uimm5 (immag));
4459
122
      OUTS (outf, " (S)");
4460
122
    }
4461
19.9k
  else if (sop == 2 && sopcde == 2 && bit8 == 1)
4462
504
    {
4463
504
      OUTS (outf, dregs (dst0));
4464
504
      OUTS (outf, " = ");
4465
504
      OUTS (outf, dregs (src1));
4466
504
      OUTS (outf, " >> ");
4467
504
      OUTS (outf, uimm5 (newimmag));
4468
504
    }
4469
19.4k
  else if (sop == 2 && sopcde == 2 && bit8 == 0)
4470
328
    {
4471
328
      OUTS (outf, dregs (dst0));
4472
328
      OUTS (outf, " = ");
4473
328
      OUTS (outf, dregs (src1));
4474
328
      OUTS (outf, " << ");
4475
328
      OUTS (outf, uimm5 (immag));
4476
328
    }
4477
19.1k
  else if (sop == 3 && sopcde == 2)
4478
1.04k
    {
4479
1.04k
      OUTS (outf, dregs (dst0));
4480
1.04k
      OUTS (outf, " = ROT ");
4481
1.04k
      OUTS (outf, dregs (src1));
4482
1.04k
      OUTS (outf, " BY ");
4483
1.04k
      OUTS (outf, imm6 (immag));
4484
1.04k
    }
4485
18.0k
  else if (sop == 0 && sopcde == 2)
4486
541
    {
4487
541
      OUTS (outf, dregs (dst0));
4488
541
      OUTS (outf, " = ");
4489
541
      OUTS (outf, dregs (src1));
4490
541
      OUTS (outf, " >>> ");
4491
541
      OUTS (outf, uimm5 (newimmag));
4492
541
    }
4493
17.5k
  else
4494
17.5k
    return 0;
4495
4496
13.0k
  return 4;
4497
30.5k
}
4498
4499
static int
4500
decode_pseudoDEBUG_0 (TIword iw0, disassemble_info *outf)
4501
21.0k
{
4502
21.0k
  struct private *priv = outf->private_data;
4503
  /* pseudoDEBUG
4504
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
4505
     | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 0 |.fn....|.grp.......|.reg.......|
4506
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+  */
4507
21.0k
  int fn  = ((iw0 >> PseudoDbg_fn_bits) & PseudoDbg_fn_mask);
4508
21.0k
  int grp = ((iw0 >> PseudoDbg_grp_bits) & PseudoDbg_grp_mask);
4509
21.0k
  int reg = ((iw0 >> PseudoDbg_reg_bits) & PseudoDbg_reg_mask);
4510
4511
21.0k
  if (priv->parallel)
4512
1.03k
    return 0;
4513
4514
19.9k
  if (reg == 0 && fn == 3)
4515
5.49k
    OUTS (outf, "DBG A0");
4516
4517
14.4k
  else if (reg == 1 && fn == 3)
4518
645
    OUTS (outf, "DBG A1");
4519
4520
13.8k
  else if (reg == 3 && fn == 3)
4521
468
    OUTS (outf, "ABORT");
4522
4523
13.3k
  else if (reg == 4 && fn == 3)
4524
1.00k
    OUTS (outf, "HLT");
4525
4526
12.3k
  else if (reg == 5 && fn == 3)
4527
156
    OUTS (outf, "DBGHALT");
4528
4529
12.2k
  else if (reg == 6 && fn == 3)
4530
535
    {
4531
535
      OUTS (outf, "DBGCMPLX (");
4532
535
      OUTS (outf, dregs (grp));
4533
535
      OUTS (outf, ")");
4534
535
    }
4535
11.6k
  else if (reg == 7 && fn == 3)
4536
1.28k
    OUTS (outf, "DBG");
4537
4538
10.3k
  else if (grp == 0 && fn == 2)
4539
315
    {
4540
315
      OUTS (outf, "OUTC ");
4541
315
      OUTS (outf, dregs (reg));
4542
315
    }
4543
10.0k
  else if (fn == 0)
4544
5.98k
    {
4545
5.98k
      OUTS (outf, "DBG ");
4546
5.98k
      OUTS (outf, allregs (reg, grp));
4547
5.98k
    }
4548
4.08k
  else if (fn == 1)
4549
1.92k
    {
4550
1.92k
      OUTS (outf, "PRNT ");
4551
1.92k
      OUTS (outf, allregs (reg, grp));
4552
1.92k
    }
4553
2.15k
  else
4554
2.15k
    return 0;
4555
4556
17.8k
  return 2;
4557
19.9k
}
4558
4559
static int
4560
decode_pseudoOChar_0 (TIword iw0, disassemble_info *outf)
4561
11.7k
{
4562
11.7k
  struct private *priv = outf->private_data;
4563
  /* psedoOChar
4564
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
4565
     | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 1 |.ch............................|
4566
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+  */
4567
11.7k
  int ch = ((iw0 >> PseudoChr_ch_bits) & PseudoChr_ch_mask);
4568
4569
11.7k
  if (priv->parallel)
4570
195
    return 0;
4571
4572
11.5k
  OUTS (outf, "OUTC ");
4573
11.5k
  OUTS (outf, uimm8 (ch));
4574
4575
11.5k
  return 2;
4576
11.7k
}
4577
4578
static int
4579
decode_pseudodbg_assert_0 (TIword iw0, TIword iw1, disassemble_info *outf)
4580
11.1k
{
4581
11.1k
  struct private *priv = outf->private_data;
4582
  /* pseudodbg_assert
4583
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
4584
     | 1 | 1 | 1 | 1 | 0 | - | - | - | dbgop |.grp.......|.regtest...|
4585
     |.expected......................................................|
4586
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+  */
4587
11.1k
  int expected = ((iw1 >> PseudoDbg_Assert_expected_bits) & PseudoDbg_Assert_expected_mask);
4588
11.1k
  int dbgop    = ((iw0 >> (PseudoDbg_Assert_dbgop_bits - 16)) & PseudoDbg_Assert_dbgop_mask);
4589
11.1k
  int grp      = ((iw0 >> (PseudoDbg_Assert_grp_bits - 16)) & PseudoDbg_Assert_grp_mask);
4590
11.1k
  int regtest  = ((iw0 >> (PseudoDbg_Assert_regtest_bits - 16)) & PseudoDbg_Assert_regtest_mask);
4591
4592
11.1k
  if (priv->parallel)
4593
667
    return 0;
4594
4595
10.4k
  if (dbgop == 0)
4596
3.83k
    {
4597
3.83k
      OUTS (outf, "DBGA (");
4598
3.83k
      OUTS (outf, regs_lo (regtest, grp));
4599
3.83k
      OUTS (outf, ", ");
4600
3.83k
      OUTS (outf, uimm16 (expected));
4601
3.83k
      OUTS (outf, ")");
4602
3.83k
    }
4603
6.62k
  else if (dbgop == 1)
4604
1.73k
    {
4605
1.73k
      OUTS (outf, "DBGA (");
4606
1.73k
      OUTS (outf, regs_hi (regtest, grp));
4607
1.73k
      OUTS (outf, ", ");
4608
1.73k
      OUTS (outf, uimm16 (expected));
4609
1.73k
      OUTS (outf, ")");
4610
1.73k
    }
4611
4.89k
  else if (dbgop == 2)
4612
1.12k
    {
4613
1.12k
      OUTS (outf, "DBGAL (");
4614
1.12k
      OUTS (outf, allregs (regtest, grp));
4615
1.12k
      OUTS (outf, ", ");
4616
1.12k
      OUTS (outf, uimm16 (expected));
4617
1.12k
      OUTS (outf, ")");
4618
1.12k
    }
4619
3.77k
  else if (dbgop == 3)
4620
3.77k
    {
4621
3.77k
      OUTS (outf, "DBGAH (");
4622
3.77k
      OUTS (outf, allregs (regtest, grp));
4623
3.77k
      OUTS (outf, ", ");
4624
3.77k
      OUTS (outf, uimm16 (expected));
4625
3.77k
      OUTS (outf, ")");
4626
3.77k
    }
4627
0
  else
4628
0
    return 0;
4629
10.4k
  return 4;
4630
10.4k
}
4631
4632
static int
4633
ifetch (bfd_vma pc, disassemble_info *outf, TIword *iw)
4634
4.39M
{
4635
4.39M
  bfd_byte buf[2];
4636
4.39M
  int status;
4637
4638
4.39M
  status = (*outf->read_memory_func) (pc, buf, 2, outf);
4639
4.39M
  if (status != 0)
4640
1.98k
    {
4641
1.98k
      (*outf->memory_error_func) (status, pc, outf);
4642
1.98k
      return -1;
4643
1.98k
    }
4644
4645
4.39M
  *iw = bfd_getl16 (buf);
4646
4.39M
  return 0;
4647
4.39M
}
4648
4649
static int
4650
_print_insn_bfin (bfd_vma pc, disassemble_info *outf)
4651
3.52M
{
4652
3.52M
  struct private *priv = outf->private_data;
4653
3.52M
  TIword iw0;
4654
3.52M
  TIword iw1;
4655
3.52M
  int rv = 0;
4656
4657
  /* The PC must be 16-bit aligned.  */
4658
3.52M
  if (pc & 1)
4659
29
    {
4660
29
      OUTS (outf, "ILLEGAL (UNALIGNED)");
4661
      /* For people dumping data, just re-align the return value.  */
4662
29
      return 1;
4663
29
    }
4664
4665
3.52M
  if (ifetch (pc, outf, &iw0))
4666
1.54k
    return -1;
4667
3.52M
  priv->iw0 = iw0;
4668
4669
3.52M
  if (((iw0 & 0xc000) == 0xc000) && ((iw0 & 0xff00) != 0xf800))
4670
873k
    {
4671
      /* 32-bit insn.  */
4672
873k
      if (ifetch (pc + 2, outf, &iw1))
4673
442
  return -1;
4674
873k
    }
4675
2.65M
  else
4676
    /* 16-bit insn.  */
4677
2.65M
    iw1 = 0;
4678
4679
3.52M
  if ((iw0 & 0xf7ff) == 0xc003 && iw1 == 0x1800)
4680
136
    {
4681
136
      if (priv->parallel)
4682
39
  {
4683
39
    OUTS (outf, "ILLEGAL");
4684
39
    return 0;
4685
39
  }
4686
97
      OUTS (outf, "MNOP");
4687
97
      return 4;
4688
136
    }
4689
3.52M
  else if ((iw0 & 0xff00) == 0x0000)
4690
667k
    rv = decode_ProgCtrl_0 (iw0, outf);
4691
2.85M
  else if ((iw0 & 0xffc0) == 0x0240)
4692
5.02k
    rv = decode_CaCTRL_0 (iw0, outf);
4693
2.85M
  else if ((iw0 & 0xff80) == 0x0100)
4694
36.7k
    rv = decode_PushPopReg_0 (iw0, outf);
4695
2.81M
  else if ((iw0 & 0xfe00) == 0x0400)
4696
47.4k
    rv = decode_PushPopMultiple_0 (iw0, outf);
4697
2.76M
  else if ((iw0 & 0xfe00) == 0x0600)
4698
55.1k
    rv = decode_ccMV_0 (iw0, outf);
4699
2.71M
  else if ((iw0 & 0xf800) == 0x0800)
4700
134k
    rv = decode_CCflag_0 (iw0, outf);
4701
2.57M
  else if ((iw0 & 0xffe0) == 0x0200)
4702
16.0k
    rv = decode_CC2dreg_0 (iw0, outf);
4703
2.56M
  else if ((iw0 & 0xff00) == 0x0300)
4704
28.4k
    rv = decode_CC2stat_0 (iw0, outf);
4705
2.53M
  else if ((iw0 & 0xf000) == 0x1000)
4706
135k
    rv = decode_BRCC_0 (iw0, pc, outf);
4707
2.39M
  else if ((iw0 & 0xf000) == 0x2000)
4708
190k
    rv = decode_UJUMP_0 (iw0, pc, outf);
4709
2.20M
  else if ((iw0 & 0xf000) == 0x3000)
4710
195k
    rv = decode_REGMV_0 (iw0, outf);
4711
2.01M
  else if ((iw0 & 0xfc00) == 0x4000)
4712
59.2k
    rv = decode_ALU2op_0 (iw0, outf);
4713
1.95M
  else if ((iw0 & 0xfe00) == 0x4400)
4714
19.8k
    rv = decode_PTR2op_0 (iw0, outf);
4715
1.93M
  else if ((iw0 & 0xf800) == 0x4800)
4716
69.6k
    rv = decode_LOGI2op_0 (iw0, outf);
4717
1.86M
  else if ((iw0 & 0xf000) == 0x5000)
4718
101k
    rv = decode_COMP3op_0 (iw0, outf);
4719
1.76M
  else if ((iw0 & 0xf800) == 0x6000)
4720
120k
    rv = decode_COMPI2opD_0 (iw0, outf);
4721
1.64M
  else if ((iw0 & 0xf800) == 0x6800)
4722
101k
    rv = decode_COMPI2opP_0 (iw0, outf);
4723
1.54M
  else if ((iw0 & 0xf000) == 0x8000)
4724
128k
    rv = decode_LDSTpmod_0 (iw0, outf);
4725
1.41M
  else if ((iw0 & 0xff60) == 0x9e60)
4726
2.18k
    rv = decode_dagMODim_0 (iw0, outf);
4727
1.40M
  else if ((iw0 & 0xfff0) == 0x9f60)
4728
2.27k
    rv = decode_dagMODik_0 (iw0, outf);
4729
1.40M
  else if ((iw0 & 0xfc00) == 0x9c00)
4730
32.0k
    rv = decode_dspLDST_0 (iw0, outf);
4731
1.37M
  else if ((iw0 & 0xf000) == 0x9000)
4732
101k
    rv = decode_LDST_0 (iw0, outf);
4733
1.27M
  else if ((iw0 & 0xfc00) == 0xb800)
4734
26.8k
    rv = decode_LDSTiiFP_0 (iw0, outf);
4735
1.24M
  else if ((iw0 & 0xe000) == 0xA000)
4736
158k
    rv = decode_LDSTii_0 (iw0, outf);
4737
1.08M
  else if ((iw0 & 0xff80) == 0xe080 && (iw1 & 0x0C00) == 0x0000)
4738
7.28k
    rv = decode_LoopSetup_0 (iw0, iw1, pc, outf);
4739
1.08M
  else if ((iw0 & 0xff00) == 0xe100 && (iw1 & 0x0000) == 0x0000)
4740
19.7k
    rv = decode_LDIMMhalf_0 (iw0, iw1, outf);
4741
1.06M
  else if ((iw0 & 0xfe00) == 0xe200 && (iw1 & 0x0000) == 0x0000)
4742
17.3k
    rv = decode_CALLa_0 (iw0, iw1, pc, outf);
4743
1.04M
  else if ((iw0 & 0xfc00) == 0xe400 && (iw1 & 0x0000) == 0x0000)
4744
27.3k
    rv = decode_LDSTidxI_0 (iw0, iw1, outf);
4745
1.01M
  else if ((iw0 & 0xfffe) == 0xe800 && (iw1 & 0x0000) == 0x0000)
4746
2.43k
    rv = decode_linkage_0 (iw0, iw1, outf);
4747
1.01M
  else if ((iw0 & 0xf600) == 0xc000 && (iw1 & 0x0000) == 0x0000)
4748
46.2k
    rv = decode_dsp32mac_0 (iw0, iw1, outf);
4749
967k
  else if ((iw0 & 0xf600) == 0xc200 && (iw1 & 0x0000) == 0x0000)
4750
29.4k
    rv = decode_dsp32mult_0 (iw0, iw1, outf);
4751
937k
  else if ((iw0 & 0xf7c0) == 0xc400 && (iw1 & 0x0000) == 0x0000)
4752
95.1k
    rv = decode_dsp32alu_0 (iw0, iw1, outf);
4753
842k
  else if ((iw0 & 0xf780) == 0xc600 && (iw1 & 0x01c0) == 0x0000)
4754
35.1k
    rv = decode_dsp32shift_0 (iw0, iw1, outf);
4755
807k
  else if ((iw0 & 0xf780) == 0xc680 && (iw1 & 0x0000) == 0x0000)
4756
30.5k
    rv = decode_dsp32shiftimm_0 (iw0, iw1, outf);
4757
776k
  else if ((iw0 & 0xff00) == 0xf800)
4758
21.0k
    rv = decode_pseudoDEBUG_0 (iw0, outf);
4759
755k
  else if ((iw0 & 0xFF00) == 0xF900)
4760
11.7k
    rv = decode_pseudoOChar_0 (iw0, outf);
4761
744k
  else if ((iw0 & 0xFF00) == 0xf000 && (iw1 & 0x0000) == 0x0000)
4762
11.1k
    rv = decode_pseudodbg_assert_0 (iw0, iw1, outf);
4763
4764
3.52M
  if (rv == 0)
4765
1.29M
    OUTS (outf, "ILLEGAL");
4766
4767
3.52M
  return rv;
4768
3.52M
}
4769
4770
int
4771
print_insn_bfin (bfd_vma pc, disassemble_info *outf)
4772
3.32M
{
4773
3.32M
  struct private priv;
4774
3.32M
  int count;
4775
4776
3.32M
  priv.parallel = false;
4777
3.32M
  priv.comment = false;
4778
3.32M
  outf->private_data = &priv;
4779
4780
3.32M
  count = _print_insn_bfin (pc, outf);
4781
3.32M
  if (count == -1)
4782
1.83k
    return -1;
4783
4784
  /* Proper display of multiple issue instructions.  */
4785
4786
3.32M
  if (count == 4 && (priv.iw0 & 0xc000) == 0xc000 && (priv.iw0 & BIT_MULTI_INS)
4787
102k
      && ((priv.iw0 & 0xe800) != 0xe800 /* Not Linkage.  */ ))
4788
100k
    {
4789
100k
      bool legal = true;
4790
100k
      int len;
4791
4792
100k
      priv.parallel = true;
4793
100k
      OUTS (outf, " || ");
4794
100k
      len = _print_insn_bfin (pc + 4, outf);
4795
100k
      if (len == -1)
4796
77
  return -1;
4797
100k
      OUTS (outf, " || ");
4798
100k
      if (len != 2)
4799
80.7k
  legal = false;
4800
100k
      len = _print_insn_bfin (pc + 6, outf);
4801
100k
      if (len == -1)
4802
72
  return -1;
4803
100k
      if (len != 2)
4804
76.9k
  legal = false;
4805
4806
100k
      if (legal)
4807
6.99k
  count = 8;
4808
93.5k
      else
4809
93.5k
  {
4810
93.5k
    OUTS (outf, ";\t\t/* ILLEGAL PARALLEL INSTRUCTION */");
4811
93.5k
    priv.comment = true;
4812
93.5k
    count = 0;
4813
93.5k
  }
4814
100k
    }
4815
4816
3.32M
  if (!priv.comment)
4817
2.96M
    OUTS (outf, ";");
4818
4819
3.32M
  if (count == 0)
4820
1.26M
    return 2;
4821
4822
2.05M
  return count;
4823
3.32M
}