Coverage Report

Created: 2026-10-02 09:53

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