Coverage Report

Created: 2025-07-08 11:15

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