Coverage Report

Created: 2023-08-28 06:31

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