Coverage Report

Created: 2026-03-10 08:46

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