Coverage Report

Created: 2023-06-29 07:13

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