Coverage Report

Created: 2026-09-14 08:07

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