Coverage Report

Created: 2026-04-04 08:16

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