Coverage Report

Created: 2025-06-24 06:45

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