OpenCores
URL https://opencores.org/ocsvn/openrisc_me/openrisc_me/trunk

Subversion Repositories openrisc_me

[/] [openrisc/] [trunk/] [gnu-src/] [gdb-6.8/] [opcodes/] [bfin-dis.c] - Blame information for rev 203

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 24 jeremybenn
/* Disassemble ADI Blackfin Instructions.
2
   Copyright 2005, 2007 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 <stdio.h>
22
#include <stdlib.h>
23
#include <string.h>
24
 
25
#include "opcode/bfin.h"
26
 
27
#define M_S2RND 1
28
#define M_T     2
29
#define M_W32   3
30
#define M_FU    4
31
#define M_TFU   6
32
#define M_IS    8
33
#define M_ISS2  9
34
#define M_IH    11
35
#define M_IU    12
36
 
37
#ifndef PRINTF
38
#define PRINTF printf
39
#endif
40
 
41
#ifndef EXIT
42
#define EXIT exit
43
#endif
44
 
45
typedef long TIword;
46
 
47
#define HOST_LONG_WORD_SIZE (sizeof (long) * 8)
48
#define XFIELD(w,p,s)       (((w) & ((1 << (s)) - 1) << (p)) >> (p))
49
#define SIGNEXTEND(v, n)    ((v << (HOST_LONG_WORD_SIZE - (n))) >> (HOST_LONG_WORD_SIZE - (n)))
50
#define MASKBITS(val, bits) (val & ((1 << bits) - 1))
51
 
52
#include "dis-asm.h"
53
 
54
typedef enum
55
{
56
  c_0, c_1, c_4, c_2, c_uimm2, c_uimm3, c_imm3, c_pcrel4,
57
  c_imm4, c_uimm4s4, c_uimm4, c_uimm4s2, c_negimm5s4, c_imm5, c_uimm5, c_imm6,
58
  c_imm7, c_imm8, c_uimm8, c_pcrel8, c_uimm8s4, c_pcrel8s4, c_lppcrel10, c_pcrel10,
59
  c_pcrel12, c_imm16s4, c_luimm16, c_imm16, c_huimm16, c_rimm16, c_imm16s2, c_uimm16s4,
60
  c_uimm16, c_pcrel24,
61
} const_forms_t;
62
 
63
static struct
64
{
65
  char *name;
66
  int nbits;
67
  char reloc;
68
  char issigned;
69
  char pcrel;
70
  char scale;
71
  char offset;
72
  char negative;
73
  char positive;
74
} constant_formats[] =
75
{
76
  { "0", 0, 0, 1, 0, 0, 0, 0, 0},
77
  { "1", 0, 0, 1, 0, 0, 0, 0, 0},
78
  { "4", 0, 0, 1, 0, 0, 0, 0, 0},
79
  { "2", 0, 0, 1, 0, 0, 0, 0, 0},
80
  { "uimm2", 2, 0, 0, 0, 0, 0, 0, 0},
81
  { "uimm3", 3, 0, 0, 0, 0, 0, 0, 0},
82
  { "imm3", 3, 0, 1, 0, 0, 0, 0, 0},
83
  { "pcrel4", 4, 1, 0, 1, 1, 0, 0, 0},
84
  { "imm4", 4, 0, 1, 0, 0, 0, 0, 0},
85
  { "uimm4s4", 4, 0, 0, 0, 2, 0, 0, 1},
86
  { "uimm4", 4, 0, 0, 0, 0, 0, 0, 0},
87
  { "uimm4s2", 4, 0, 0, 0, 1, 0, 0, 1},
88
  { "negimm5s4", 5, 0, 1, 0, 2, 0, 1, 0},
89
  { "imm5", 5, 0, 1, 0, 0, 0, 0, 0},
90
  { "uimm5", 5, 0, 0, 0, 0, 0, 0, 0},
91
  { "imm6", 6, 0, 1, 0, 0, 0, 0, 0},
92
  { "imm7", 7, 0, 1, 0, 0, 0, 0, 0},
93
  { "imm8", 8, 0, 1, 0, 0, 0, 0, 0},
94
  { "uimm8", 8, 0, 0, 0, 0, 0, 0, 0},
95
  { "pcrel8", 8, 1, 0, 1, 1, 0, 0, 0},
96
  { "uimm8s4", 8, 0, 0, 0, 2, 0, 0, 0},
97
  { "pcrel8s4", 8, 1, 1, 1, 2, 0, 0, 0},
98
  { "lppcrel10", 10, 1, 0, 1, 1, 0, 0, 0},
99
  { "pcrel10", 10, 1, 1, 1, 1, 0, 0, 0},
100
  { "pcrel12", 12, 1, 1, 1, 1, 0, 0, 0},
101
  { "imm16s4", 16, 0, 1, 0, 2, 0, 0, 0},
102
  { "luimm16", 16, 1, 0, 0, 0, 0, 0, 0},
103
  { "imm16", 16, 0, 1, 0, 0, 0, 0, 0},
104
  { "huimm16", 16, 1, 0, 0, 0, 0, 0, 0},
105
  { "rimm16", 16, 1, 1, 0, 0, 0, 0, 0},
106
  { "imm16s2", 16, 0, 1, 0, 1, 0, 0, 0},
107
  { "uimm16s4", 16, 0, 0, 0, 2, 0, 0, 0},
108
  { "uimm16", 16, 0, 0, 0, 0, 0, 0, 0},
109
  { "pcrel24", 24, 1, 1, 1, 1, 0, 0, 0}
110
};
111
 
112
int _print_insn_bfin (bfd_vma pc, disassemble_info * outf);
113
int print_insn_bfin (bfd_vma pc, disassemble_info * outf);
114
 
115
static char *
116
fmtconst (const_forms_t cf, TIword x, bfd_vma pc, disassemble_info * outf)
117
{
118
  static char buf[60];
119
 
120
  if (constant_formats[cf].reloc)
121
    {
122
      bfd_vma ea = (((constant_formats[cf].pcrel ? SIGNEXTEND (x, constant_formats[cf].nbits)
123
                      : x) + constant_formats[cf].offset) << constant_formats[cf].scale);
124
      if (constant_formats[cf].pcrel)
125
        ea += pc;
126
 
127
      outf->print_address_func (ea, outf);
128
      return "";
129
    }
130
 
131
  /* Negative constants have an implied sign bit.  */
132
  if (constant_formats[cf].negative)
133
    {
134
      int nb = constant_formats[cf].nbits + 1;
135
 
136
      x = x | (1 << constant_formats[cf].nbits);
137
      x = SIGNEXTEND (x, nb);
138
    }
139
  else
140
    x = constant_formats[cf].issigned ? SIGNEXTEND (x, constant_formats[cf].nbits) : x;
141
 
142
  if (constant_formats[cf].offset)
143
    x += constant_formats[cf].offset;
144
 
145
  if (constant_formats[cf].scale)
146
    x <<= constant_formats[cf].scale;
147
 
148
  if (constant_formats[cf].issigned && x < 0)
149
    sprintf (buf, "%ld", x);
150
  else
151
    sprintf (buf, "0x%lx", x);
152
 
153
  return buf;
154
}
155
 
156
enum machine_registers
157
{
158
  REG_RL0, REG_RL1, REG_RL2, REG_RL3, REG_RL4, REG_RL5, REG_RL6, REG_RL7,
159
  REG_RH0, REG_RH1, REG_RH2, REG_RH3, REG_RH4, REG_RH5, REG_RH6, REG_RH7,
160
  REG_R0, REG_R1, REG_R2, REG_R3, REG_R4, REG_R5, REG_R6, REG_R7,
161
  REG_R1_0, REG_R3_2, REG_R5_4, REG_R7_6, REG_P0, REG_P1, REG_P2, REG_P3,
162
  REG_P4, REG_P5, REG_SP, REG_FP, REG_A0x, REG_A1x, REG_A0w, REG_A1w,
163
  REG_A0, REG_A1, REG_I0, REG_I1, REG_I2, REG_I3, REG_M0, REG_M1,
164
  REG_M2, REG_M3, REG_B0, REG_B1, REG_B2, REG_B3, REG_L0, REG_L1,
165
  REG_L2, REG_L3,
166
  REG_AZ, REG_AN, REG_AC0, REG_AC1, REG_AV0, REG_AV1, REG_AV0S, REG_AV1S,
167
  REG_AQ, REG_V, REG_VS,
168
  REG_sftreset, REG_omode, REG_excause, REG_emucause, REG_idle_req, REG_hwerrcause, REG_CC, REG_LC0,
169
  REG_LC1, REG_GP, REG_ASTAT, REG_RETS, REG_LT0, REG_LB0, REG_LT1, REG_LB1,
170
  REG_CYCLES, REG_CYCLES2, REG_USP, REG_SEQSTAT, REG_SYSCFG, REG_RETI, REG_RETX, REG_RETN,
171
  REG_RETE, REG_EMUDAT, REG_BR0, REG_BR1, REG_BR2, REG_BR3, REG_BR4, REG_BR5, REG_BR6,
172
  REG_BR7, REG_PL0, REG_PL1, REG_PL2, REG_PL3, REG_PL4, REG_PL5, REG_SLP, REG_FLP,
173
  REG_PH0, REG_PH1, REG_PH2, REG_PH3, REG_PH4, REG_PH5, REG_SHP, REG_FHP,
174
  REG_IL0, REG_IL1, REG_IL2, REG_IL3, REG_ML0, REG_ML1, REG_ML2, REG_ML3,
175
  REG_BL0, REG_BL1, REG_BL2, REG_BL3, REG_LL0, REG_LL1, REG_LL2, REG_LL3,
176
  REG_IH0, REG_IH1, REG_IH2, REG_IH3, REG_MH0, REG_MH1, REG_MH2, REG_MH3,
177
  REG_BH0, REG_BH1, REG_BH2, REG_BH3, REG_LH0, REG_LH1, REG_LH2, REG_LH3,
178
  REG_LASTREG,
179
};
180
 
181
enum reg_class
182
{
183
  rc_dregs_lo, rc_dregs_hi, rc_dregs, rc_dregs_pair, rc_pregs, rc_spfp, rc_dregs_hilo, rc_accum_ext,
184
  rc_accum_word, rc_accum, rc_iregs, rc_mregs, rc_bregs, rc_lregs, rc_dpregs, rc_gregs,
185
  rc_regs, rc_statbits, rc_ignore_bits, rc_ccstat, rc_counters, rc_dregs2_sysregs1, rc_open, rc_sysregs2,
186
  rc_sysregs3, rc_allregs,
187
  LIM_REG_CLASSES
188
};
189
 
190
static char *reg_names[] =
191
{
192
  "R0.L", "R1.L", "R2.L", "R3.L", "R4.L", "R5.L", "R6.L", "R7.L",
193
  "R0.H", "R1.H", "R2.H", "R3.H", "R4.H", "R5.H", "R6.H", "R7.H",
194
  "R0", "R1", "R2", "R3", "R4", "R5", "R6", "R7",
195
  "R1:0", "R3:2", "R5:4", "R7:6", "P0", "P1", "P2", "P3",
196
  "P4", "P5", "SP", "FP", "A0.x", "A1.x", "A0.w", "A1.w",
197
  "A0", "A1", "I0", "I1", "I2", "I3", "M0", "M1",
198
  "M2", "M3", "B0", "B1", "B2", "B3", "L0", "L1",
199
  "L2", "L3",
200
  "AZ", "AN", "AC0", "AC1", "AV0", "AV1", "AV0S", "AV1S",
201
  "AQ", "V", "VS",
202
  "sftreset", "omode", "excause", "emucause", "idle_req", "hwerrcause", "CC", "LC0",
203
  "LC1", "GP", "ASTAT", "RETS", "LT0", "LB0", "LT1", "LB1",
204
  "CYCLES", "CYCLES2", "USP", "SEQSTAT", "SYSCFG", "RETI", "RETX", "RETN",
205
  "RETE", "EMUDAT",
206
  "R0.B", "R1.B", "R2.B", "R3.B", "R4.B", "R5.B", "R6.B", "R7.B",
207
  "P0.L", "P1.L", "P2.L", "P3.L", "P4.L", "P5.L", "SP.L", "FP.L",
208
  "P0.H", "P1.H", "P2.H", "P3.H", "P4.H", "P5.H", "SP.H", "FP.H",
209
  "I0.L", "I1.L", "I2.L", "I3.L", "M0.L", "M1.L", "M2.L", "M3.L",
210
  "B0.L", "B1.L", "B2.L", "B3.L", "L0.L", "L1.L", "L2.L", "L3.L",
211
  "I0.H", "I1.H", "I2.H", "I3.H", "M0.H", "M1.H", "M2.H", "M3.H",
212
  "B0.H", "B1.H", "B2.H", "B3.H", "L0.H", "L1.H", "L2.H", "L3.H",
213
  "LASTREG",
214
 
215
};
216
 
217
#define REGNAME(x) ((x) < REG_LASTREG ? (reg_names[x]) : "...... Illegal register .......")
218
 
219
/* RL(0..7).  */
220
static enum machine_registers decode_dregs_lo[] =
221
{
222
  REG_RL0, REG_RL1, REG_RL2, REG_RL3, REG_RL4, REG_RL5, REG_RL6, REG_RL7,
223
};
224
 
225
#define dregs_lo(x) REGNAME (decode_dregs_lo[(x) & 7])
226
 
227
/* RH(0..7).  */
228
static enum machine_registers decode_dregs_hi[] =
229
{
230
  REG_RH0, REG_RH1, REG_RH2, REG_RH3, REG_RH4, REG_RH5, REG_RH6, REG_RH7,
231
};
232
 
233
#define dregs_hi(x) REGNAME (decode_dregs_hi[(x) & 7])
234
 
235
/* R(0..7).  */
236
static enum machine_registers decode_dregs[] =
237
{
238
  REG_R0, REG_R1, REG_R2, REG_R3, REG_R4, REG_R5, REG_R6, REG_R7,
239
};
240
 
241
#define dregs(x) REGNAME (decode_dregs[(x) & 7])
242
 
243
/* R BYTE(0..7).  */
244
static enum machine_registers decode_dregs_byte[] =
245
{
246
  REG_BR0, REG_BR1, REG_BR2, REG_BR3, REG_BR4, REG_BR5, REG_BR6, REG_BR7,
247
};
248
 
249
#define dregs_byte(x) REGNAME (decode_dregs_byte[(x) & 7])
250
#define dregs_pair(x) REGNAME (decode_dregs_pair[(x) & 7])
251
 
252
/* P(0..5) SP FP.  */
253
static enum machine_registers decode_pregs[] =
254
{
255
  REG_P0, REG_P1, REG_P2, REG_P3, REG_P4, REG_P5, REG_SP, REG_FP,
256
};
257
 
258
#define pregs(x)        REGNAME (decode_pregs[(x) & 7])
259
#define spfp(x)         REGNAME (decode_spfp[(x) & 1])
260
#define dregs_hilo(x,i) REGNAME (decode_dregs_hilo[((i) << 3)|x])
261
#define accum_ext(x)    REGNAME (decode_accum_ext[(x) & 1])
262
#define accum_word(x)   REGNAME (decode_accum_word[(x) & 1])
263
#define accum(x)        REGNAME (decode_accum[(x) & 1])
264
 
265
/* I(0..3).  */
266
static enum machine_registers decode_iregs[] =
267
{
268
  REG_I0, REG_I1, REG_I2, REG_I3,
269
};
270
 
271
#define iregs(x) REGNAME (decode_iregs[(x) & 3])
272
 
273
/* M(0..3).  */
274
static enum machine_registers decode_mregs[] =
275
{
276
  REG_M0, REG_M1, REG_M2, REG_M3,
277
};
278
 
279
#define mregs(x) REGNAME (decode_mregs[(x) & 3])
280
#define bregs(x) REGNAME (decode_bregs[(x) & 3])
281
#define lregs(x) REGNAME (decode_lregs[(x) & 3])
282
 
283
/* dregs pregs.  */
284
static enum machine_registers decode_dpregs[] =
285
{
286
  REG_R0, REG_R1, REG_R2, REG_R3, REG_R4, REG_R5, REG_R6, REG_R7,
287
  REG_P0, REG_P1, REG_P2, REG_P3, REG_P4, REG_P5, REG_SP, REG_FP,
288
};
289
 
290
#define dpregs(x) REGNAME (decode_dpregs[(x) & 15])
291
 
292
/* [dregs pregs].  */
293
static enum machine_registers decode_gregs[] =
294
{
295
  REG_R0, REG_R1, REG_R2, REG_R3, REG_R4, REG_R5, REG_R6, REG_R7,
296
  REG_P0, REG_P1, REG_P2, REG_P3, REG_P4, REG_P5, REG_SP, REG_FP,
297
};
298
 
299
#define gregs(x,i) REGNAME (decode_gregs[((i) << 3)|x])
300
 
301
/* [dregs pregs (iregs mregs) (bregs lregs)].  */
302
static enum machine_registers decode_regs[] =
303
{
304
  REG_R0, REG_R1, REG_R2, REG_R3, REG_R4, REG_R5, REG_R6, REG_R7,
305
  REG_P0, REG_P1, REG_P2, REG_P3, REG_P4, REG_P5, REG_SP, REG_FP,
306
  REG_I0, REG_I1, REG_I2, REG_I3, REG_M0, REG_M1, REG_M2, REG_M3,
307
  REG_B0, REG_B1, REG_B2, REG_B3, REG_L0, REG_L1, REG_L2, REG_L3,
308
};
309
 
310
#define regs(x,i) REGNAME (decode_regs[((i) << 3)|x])
311
 
312
/* [dregs pregs (iregs mregs) (bregs lregs) Low Half].  */
313
static enum machine_registers decode_regs_lo[] =
314
{
315
  REG_RL0, REG_RL1, REG_RL2, REG_RL3, REG_RL4, REG_RL5, REG_RL6, REG_RL7,
316
  REG_PL0, REG_PL1, REG_PL2, REG_PL3, REG_PL4, REG_PL5, REG_SLP, REG_FLP,
317
  REG_IL0, REG_IL1, REG_IL2, REG_IL3, REG_ML0, REG_ML1, REG_ML2, REG_ML3,
318
  REG_BL0, REG_BL1, REG_BL2, REG_BL3, REG_LL0, REG_LL1, REG_LL2, REG_LL3,
319
};
320
 
321
#define regs_lo(x,i) REGNAME (decode_regs_lo[((i) << 3)|x])
322
/* [dregs pregs (iregs mregs) (bregs lregs) High Half].  */
323
static enum machine_registers decode_regs_hi[] =
324
{
325
  REG_RH0, REG_RH1, REG_RH2, REG_RH3, REG_RH4, REG_RH5, REG_RH6, REG_RH7,
326
  REG_PH0, REG_PH1, REG_PH2, REG_PH3, REG_PH4, REG_PH5, REG_SHP, REG_FHP,
327
  REG_IH0, REG_IH1, REG_IH2, REG_IH3, REG_MH0, REG_MH1, REG_LH2, REG_MH3,
328
  REG_BH0, REG_BH1, REG_BH2, REG_BH3, REG_LH0, REG_LH1, REG_LH2, REG_LH3,
329
};
330
 
331
#define regs_hi(x,i) REGNAME (decode_regs_hi[((i) << 3)|x])
332
 
333
static enum machine_registers decode_statbits[] =
334
{
335
  REG_AZ, REG_AN, REG_LASTREG, REG_LASTREG, REG_LASTREG, REG_LASTREG, REG_AQ, REG_LASTREG,
336
  REG_LASTREG, REG_LASTREG, REG_LASTREG, REG_LASTREG, REG_AC0, REG_AC1, REG_LASTREG, REG_LASTREG,
337
  REG_AV0, REG_AV0S, REG_AV1, REG_AV1S, REG_LASTREG, REG_LASTREG, REG_LASTREG, REG_LASTREG,
338
  REG_V, REG_VS, REG_LASTREG, REG_LASTREG, REG_LASTREG, REG_LASTREG, REG_LASTREG, REG_LASTREG,
339
};
340
 
341
#define statbits(x)     REGNAME (decode_statbits[(x) & 31])
342
#define ignore_bits(x)  REGNAME (decode_ignore_bits[(x) & 7])
343
#define ccstat(x)       REGNAME (decode_ccstat[(x) & 0])
344
 
345
/* LC0 LC1.  */
346
static enum machine_registers decode_counters[] =
347
{
348
  REG_LC0, REG_LC1,
349
};
350
 
351
#define counters(x)        REGNAME (decode_counters[(x) & 1])
352
#define dregs2_sysregs1(x) REGNAME (decode_dregs2_sysregs1[(x) & 7])
353
 
354
/* [dregs pregs (iregs mregs) (bregs lregs)
355
   dregs2_sysregs1 open sysregs2 sysregs3].  */
356
static enum machine_registers decode_allregs[] =
357
{
358
  REG_R0, REG_R1, REG_R2, REG_R3, REG_R4, REG_R5, REG_R6, REG_R7,
359
  REG_P0, REG_P1, REG_P2, REG_P3, REG_P4, REG_P5, REG_SP, REG_FP,
360
  REG_I0, REG_I1, REG_I2, REG_I3, REG_M0, REG_M1, REG_M2, REG_M3,
361
  REG_B0, REG_B1, REG_B2, REG_B3, REG_L0, REG_L1, REG_L2, REG_L3,
362
  REG_A0x, REG_A0w, REG_A1x, REG_A1w, REG_GP, REG_LASTREG, REG_ASTAT, REG_RETS,
363
  REG_LASTREG, REG_LASTREG, REG_LASTREG, REG_LASTREG, REG_LASTREG, REG_LASTREG, REG_LASTREG, REG_LASTREG,
364
  REG_LC0, REG_LT0, REG_LB0, REG_LC1, REG_LT1, REG_LB1, REG_CYCLES, REG_CYCLES2,
365
  REG_USP, REG_SEQSTAT, REG_SYSCFG, REG_RETI, REG_RETX, REG_RETN, REG_RETE, REG_EMUDAT, REG_LASTREG,
366
};
367
 
368
#define allregs(x,i)    REGNAME (decode_allregs[((i) << 3) | x])
369
#define uimm16s4(x)     fmtconst (c_uimm16s4, x, 0, outf)
370
#define pcrel4(x)       fmtconst (c_pcrel4, x, pc, outf)
371
#define pcrel8(x)       fmtconst (c_pcrel8, x, pc, outf)
372
#define pcrel8s4(x)     fmtconst (c_pcrel8s4, x, pc, outf)
373
#define pcrel10(x)      fmtconst (c_pcrel10, x, pc, outf)
374
#define pcrel12(x)      fmtconst (c_pcrel12, x, pc, outf)
375
#define negimm5s4(x)    fmtconst (c_negimm5s4, x, 0, outf)
376
#define rimm16(x)       fmtconst (c_rimm16, x, 0, outf)
377
#define huimm16(x)      fmtconst (c_huimm16, x, 0, outf)
378
#define imm16(x)        fmtconst (c_imm16, x, 0, outf)
379
#define uimm2(x)        fmtconst (c_uimm2, x, 0, outf)
380
#define uimm3(x)        fmtconst (c_uimm3, x, 0, outf)
381
#define luimm16(x)      fmtconst (c_luimm16, x, 0, outf)
382
#define uimm4(x)        fmtconst (c_uimm4, x, 0, outf)
383
#define uimm5(x)        fmtconst (c_uimm5, x, 0, outf)
384
#define imm16s2(x)      fmtconst (c_imm16s2, x, 0, outf)
385
#define uimm8(x)        fmtconst (c_uimm8, x, 0, outf)
386
#define imm16s4(x)      fmtconst (c_imm16s4, x, 0, outf)
387
#define uimm4s2(x)      fmtconst (c_uimm4s2, x, 0, outf)
388
#define uimm4s4(x)      fmtconst (c_uimm4s4, x, 0, outf)
389
#define lppcrel10(x)    fmtconst (c_lppcrel10, x, pc, outf)
390
#define imm3(x)         fmtconst (c_imm3, x, 0, outf)
391
#define imm4(x)         fmtconst (c_imm4, x, 0, outf)
392
#define uimm8s4(x)      fmtconst (c_uimm8s4, x, 0, outf)
393
#define imm5(x)         fmtconst (c_imm5, x, 0, outf)
394
#define imm6(x)         fmtconst (c_imm6, x, 0, outf)
395
#define imm7(x)         fmtconst (c_imm7, x, 0, outf)
396
#define imm8(x)         fmtconst (c_imm8, x, 0, outf)
397
#define pcrel24(x)      fmtconst (c_pcrel24, x, pc, outf)
398
#define uimm16(x)       fmtconst (c_uimm16, x, 0, outf)
399
 
400
/* (arch.pm)arch_disassembler_functions.  */
401
#ifndef OUTS
402
#define OUTS(p, txt) ((p) ? (((txt)[0]) ? (p->fprintf_func)(p->stream, txt) :0) :0)
403
#endif
404
 
405
static void
406
amod0 (int s0, int x0, disassemble_info *outf)
407
{
408
  if (s0 == 1 && x0 == 0)
409
    OUTS (outf, "(S)");
410
  else if (s0 == 0 && x0 == 1)
411
    OUTS (outf, "(CO)");
412
  else if (s0 == 1 && x0 == 1)
413
    OUTS (outf, "(SCO)");
414
}
415
 
416
static void
417
amod1 (int s0, int x0, disassemble_info *outf)
418
{
419
  if (s0 == 0 && x0 == 0)
420
    OUTS (outf, "(NS)");
421
  else if (s0 == 1 && x0 == 0)
422
    OUTS (outf, "(S)");
423
}
424
 
425
static void
426
amod0amod2 (int s0, int x0, int aop0, disassemble_info *outf)
427
{
428
  if (s0 == 1 && x0 == 0 && aop0 == 0)
429
    OUTS (outf, "(S)");
430
  else if (s0 == 0 && x0 == 1 && aop0 == 0)
431
    OUTS (outf, "(CO)");
432
  else if (s0 == 1 && x0 == 1 && aop0 == 0)
433
    OUTS (outf, "(SCO)");
434
  else if (s0 == 0 && x0 == 0 && aop0 == 2)
435
    OUTS (outf, "(ASR)");
436
  else if (s0 == 1 && x0 == 0 && aop0 == 2)
437
    OUTS (outf, "(S,ASR)");
438
  else if (s0 == 0 && x0 == 1 && aop0 == 2)
439
    OUTS (outf, "(CO,ASR)");
440
  else if (s0 == 1 && x0 == 1 && aop0 == 2)
441
    OUTS (outf, "(SCO,ASR)");
442
  else if (s0 == 0 && x0 == 0 && aop0 == 3)
443
    OUTS (outf, "(ASL)");
444
  else if (s0 == 1 && x0 == 0 && aop0 == 3)
445
    OUTS (outf, "(S,ASL)");
446
  else if (s0 == 0 && x0 == 1 && aop0 == 3)
447
    OUTS (outf, "(CO,ASL)");
448
  else if (s0 == 1 && x0 == 1 && aop0 == 3)
449
    OUTS (outf, "(SCO,ASL)");
450
}
451
 
452
static void
453
searchmod (int r0, disassemble_info *outf)
454
{
455
  if (r0 == 0)
456
    OUTS (outf, "GT");
457
  else if (r0 == 1)
458
    OUTS (outf, "GE");
459
  else if (r0 == 2)
460
    OUTS (outf, "LT");
461
  else if (r0 == 3)
462
    OUTS (outf, "LE");
463
}
464
 
465
static void
466
aligndir (int r0, disassemble_info *outf)
467
{
468
  if (r0 == 1)
469
    OUTS (outf, "(R)");
470
}
471
 
472
static int
473
decode_multfunc (int h0, int h1, int src0, int src1, disassemble_info * outf)
474
{
475
  char *s0, *s1;
476
 
477
  if (h0)
478
    s0 = dregs_hi (src0);
479
  else
480
    s0 = dregs_lo (src0);
481
 
482
  if (h1)
483
    s1 = dregs_hi (src1);
484
  else
485
    s1 = dregs_lo (src1);
486
 
487
  OUTS (outf, s0);
488
  OUTS (outf, " * ");
489
  OUTS (outf, s1);
490
  return 0;
491
}
492
 
493
static int
494
decode_macfunc (int which, int op, int h0, int h1, int src0, int src1, disassemble_info * outf)
495
{
496
  char *a;
497
  char *sop = "<unknown op>";
498
 
499
  if (which)
500
    a = "a1";
501
  else
502
    a = "a0";
503
 
504
  if (op == 3)
505
    {
506
      OUTS (outf, a);
507
      return 0;
508
    }
509
 
510
  switch (op)
511
    {
512
    case 0: sop = "=";   break;
513
    case 1: sop = "+=";  break;
514
    case 2: sop = "-=";  break;
515
    default: break;
516
    }
517
 
518
  OUTS (outf, a);
519
  OUTS (outf, " ");
520
  OUTS (outf, sop);
521
  OUTS (outf, " ");
522
  decode_multfunc (h0, h1, src0, src1, outf);
523
 
524
  return 0;
525
}
526
 
527
static void
528
decode_optmode (int mod, int MM, disassemble_info *outf)
529
{
530
  if (mod == 0 && MM == 0)
531
    return;
532
 
533
  OUTS (outf, " (");
534
 
535
  if (MM && !mod)
536
    {
537
      OUTS (outf, "M)");
538
      return;
539
    }
540
 
541
  if (MM)
542
    OUTS (outf, "M, ");
543
 
544
  if (mod == M_S2RND)
545
    OUTS (outf, "S2RND");
546
  else if (mod == M_T)
547
    OUTS (outf, "T");
548
  else if (mod == M_W32)
549
    OUTS (outf, "W32");
550
  else if (mod == M_FU)
551
    OUTS (outf, "FU");
552
  else if (mod == M_TFU)
553
    OUTS (outf, "TFU");
554
  else if (mod == M_IS)
555
    OUTS (outf, "IS");
556
  else if (mod == M_ISS2)
557
    OUTS (outf, "ISS2");
558
  else if (mod == M_IH)
559
    OUTS (outf, "IH");
560
  else if (mod == M_IU)
561
    OUTS (outf, "IU");
562
  else
563
    abort ();
564
 
565
  OUTS (outf, ")");
566
}
567
 
568
static int
569
decode_ProgCtrl_0 (TIword iw0, disassemble_info *outf)
570
{
571
  /* ProgCtrl
572
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
573
     | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |.prgfunc.......|.poprnd........|
574
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+  */
575
  int poprnd  = ((iw0 >> ProgCtrl_poprnd_bits) & ProgCtrl_poprnd_mask);
576
  int prgfunc = ((iw0 >> ProgCtrl_prgfunc_bits) & ProgCtrl_prgfunc_mask);
577
 
578
  if (prgfunc == 0 && poprnd == 0)
579
    OUTS (outf, "NOP");
580
  else if (prgfunc == 1 && poprnd == 0)
581
    OUTS (outf, "RTS");
582
  else if (prgfunc == 1 && poprnd == 1)
583
    OUTS (outf, "RTI");
584
  else if (prgfunc == 1 && poprnd == 2)
585
    OUTS (outf, "RTX");
586
  else if (prgfunc == 1 && poprnd == 3)
587
    OUTS (outf, "RTN");
588
  else if (prgfunc == 1 && poprnd == 4)
589
    OUTS (outf, "RTE");
590
  else if (prgfunc == 2 && poprnd == 0)
591
    OUTS (outf, "IDLE");
592
  else if (prgfunc == 2 && poprnd == 3)
593
    OUTS (outf, "CSYNC");
594
  else if (prgfunc == 2 && poprnd == 4)
595
    OUTS (outf, "SSYNC");
596
  else if (prgfunc == 2 && poprnd == 5)
597
    OUTS (outf, "EMUEXCPT");
598
  else if (prgfunc == 3)
599
    {
600
      OUTS (outf, "CLI  ");
601
      OUTS (outf, dregs (poprnd));
602
    }
603
  else if (prgfunc == 4)
604
    {
605
      OUTS (outf, "STI  ");
606
      OUTS (outf, dregs (poprnd));
607
    }
608
  else if (prgfunc == 5)
609
    {
610
      OUTS (outf, "JUMP  (");
611
      OUTS (outf, pregs (poprnd));
612
      OUTS (outf, ")");
613
    }
614
  else if (prgfunc == 6)
615
    {
616
      OUTS (outf, "CALL  (");
617
      OUTS (outf, pregs (poprnd));
618
      OUTS (outf, ")");
619
    }
620
  else if (prgfunc == 7)
621
    {
622
      OUTS (outf, "CALL  (PC+");
623
      OUTS (outf, pregs (poprnd));
624
      OUTS (outf, ")");
625
    }
626
  else if (prgfunc == 8)
627
    {
628
      OUTS (outf, "JUMP  (PC+");
629
      OUTS (outf, pregs (poprnd));
630
      OUTS (outf, ")");
631
    }
632
  else if (prgfunc == 9)
633
    {
634
      OUTS (outf, "RAISE  ");
635
      OUTS (outf, uimm4 (poprnd));
636
    }
637
  else if (prgfunc == 10)
638
    {
639
      OUTS (outf, "EXCPT  ");
640
      OUTS (outf, uimm4 (poprnd));
641
    }
642
  else if (prgfunc == 11)
643
    {
644
      OUTS (outf, "TESTSET  (");
645
      OUTS (outf, pregs (poprnd));
646
      OUTS (outf, ")");
647
    }
648
  else
649
    return 0;
650
  return 2;
651
}
652
 
653
static int
654
decode_CaCTRL_0 (TIword iw0, disassemble_info *outf)
655
{
656
  /* CaCTRL
657
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
658
     | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 |.a.|.op....|.reg.......|
659
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+  */
660
  int a   = ((iw0 >> CaCTRL_a_bits) & CaCTRL_a_mask);
661
  int op  = ((iw0 >> CaCTRL_op_bits) & CaCTRL_op_mask);
662
  int reg = ((iw0 >> CaCTRL_reg_bits) & CaCTRL_reg_mask);
663
 
664
  if (a == 0 && op == 0)
665
    {
666
      OUTS (outf, "PREFETCH[");
667
      OUTS (outf, pregs (reg));
668
      OUTS (outf, "]");
669
    }
670
  else if (a == 0 && op == 1)
671
    {
672
      OUTS (outf, "FLUSHINV[");
673
      OUTS (outf, pregs (reg));
674
      OUTS (outf, "]");
675
    }
676
  else if (a == 0 && op == 2)
677
    {
678
      OUTS (outf, "FLUSH[");
679
      OUTS (outf, pregs (reg));
680
      OUTS (outf, "]");
681
    }
682
  else if (a == 0 && op == 3)
683
    {
684
      OUTS (outf, "IFLUSH[");
685
      OUTS (outf, pregs (reg));
686
      OUTS (outf, "]");
687
    }
688
  else if (a == 1 && op == 0)
689
    {
690
      OUTS (outf, "PREFETCH[");
691
      OUTS (outf, pregs (reg));
692
      OUTS (outf, "++]");
693
    }
694
  else if (a == 1 && op == 1)
695
    {
696
      OUTS (outf, "FLUSHINV[");
697
      OUTS (outf, pregs (reg));
698
      OUTS (outf, "++]");
699
    }
700
  else if (a == 1 && op == 2)
701
    {
702
      OUTS (outf, "FLUSH[");
703
      OUTS (outf, pregs (reg));
704
      OUTS (outf, "++]");
705
    }
706
  else if (a == 1 && op == 3)
707
    {
708
      OUTS (outf, "IFLUSH[");
709
      OUTS (outf, pregs (reg));
710
      OUTS (outf, "++]");
711
    }
712
  else
713
    return 0;
714
  return 2;
715
}
716
 
717
static int
718
decode_PushPopReg_0 (TIword iw0, disassemble_info *outf)
719
{
720
  /* PushPopReg
721
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
722
     | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 |.W.|.grp.......|.reg.......|
723
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+  */
724
  int W   = ((iw0 >> PushPopReg_W_bits) & PushPopReg_W_mask);
725
  int grp = ((iw0 >> PushPopReg_grp_bits) & PushPopReg_grp_mask);
726
  int reg = ((iw0 >> PushPopReg_reg_bits) & PushPopReg_reg_mask);
727
 
728
  if (W == 0)
729
    {
730
      OUTS (outf, allregs (reg, grp));
731
      OUTS (outf, " = [SP++]");
732
    }
733
  else if (W == 1)
734
    {
735
      OUTS (outf, "[--SP] = ");
736
      OUTS (outf, allregs (reg, grp));
737
    }
738
  else
739
    return 0;
740
  return 2;
741
}
742
 
743
static int
744
decode_PushPopMultiple_0 (TIword iw0, disassemble_info *outf)
745
{
746
  /* PushPopMultiple
747
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
748
     | 0 | 0 | 0 | 0 | 0 | 1 | 0 |.d.|.p.|.W.|.dr........|.pr........|
749
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+  */
750
  int p  = ((iw0 >> PushPopMultiple_p_bits) & PushPopMultiple_p_mask);
751
  int d  = ((iw0 >> PushPopMultiple_d_bits) & PushPopMultiple_d_mask);
752
  int W  = ((iw0 >> PushPopMultiple_W_bits) & PushPopMultiple_W_mask);
753
  int dr = ((iw0 >> PushPopMultiple_dr_bits) & PushPopMultiple_dr_mask);
754
  int pr = ((iw0 >> PushPopMultiple_pr_bits) & PushPopMultiple_pr_mask);
755
  char ps[5], ds[5];
756
 
757
  sprintf (ps, "%d", pr);
758
  sprintf (ds, "%d", dr);
759
 
760
  if (W == 1 && d == 1 && p == 1)
761
    {
762
      OUTS (outf, "[--SP] = (R7:");
763
      OUTS (outf, ds);
764
      OUTS (outf, ", P5:");
765
      OUTS (outf, ps);
766
      OUTS (outf, ")");
767
    }
768
  else if (W == 1 && d == 1 && p == 0)
769
    {
770
      OUTS (outf, "[--SP] = (R7:");
771
      OUTS (outf, ds);
772
      OUTS (outf, ")");
773
    }
774
  else if (W == 1 && d == 0 && p == 1)
775
    {
776
      OUTS (outf, "[--SP] = (P5:");
777
      OUTS (outf, ps);
778
      OUTS (outf, ")");
779
    }
780
  else if (W == 0 && d == 1 && p == 1)
781
    {
782
      OUTS (outf, "(R7:");
783
      OUTS (outf, ds);
784
      OUTS (outf, ", P5:");
785
      OUTS (outf, ps);
786
      OUTS (outf, ") = [SP++]");
787
    }
788
  else if (W == 0 && d == 1 && p == 0)
789
    {
790
      OUTS (outf, "(R7:");
791
      OUTS (outf, ds);
792
      OUTS (outf, ") = [SP++]");
793
    }
794
  else if (W == 0 && d == 0 && p == 1)
795
    {
796
      OUTS (outf, "(P5:");
797
      OUTS (outf, ps);
798
      OUTS (outf, ") = [SP++]");
799
    }
800
  else
801
    return 0;
802
  return 2;
803
}
804
 
805
static int
806
decode_ccMV_0 (TIword iw0, disassemble_info *outf)
807
{
808
  /* ccMV
809
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
810
     | 0 | 0 | 0 | 0 | 0 | 1 | 1 |.T.|.d.|.s.|.dst.......|.src.......|
811
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+  */
812
  int s  = ((iw0 >> CCmv_s_bits) & CCmv_s_mask);
813
  int d  = ((iw0 >> CCmv_d_bits) & CCmv_d_mask);
814
  int T  = ((iw0 >> CCmv_T_bits) & CCmv_T_mask);
815
  int src = ((iw0 >> CCmv_src_bits) & CCmv_src_mask);
816
  int dst = ((iw0 >> CCmv_dst_bits) & CCmv_dst_mask);
817
 
818
  if (T == 1)
819
    {
820
      OUTS (outf, "IF CC ");
821
      OUTS (outf, gregs (dst, d));
822
      OUTS (outf, " = ");
823
      OUTS (outf, gregs (src, s));
824
    }
825
  else if (T == 0)
826
    {
827
      OUTS (outf, "IF ! CC ");
828
      OUTS (outf, gregs (dst, d));
829
      OUTS (outf, " = ");
830
      OUTS (outf, gregs (src, s));
831
    }
832
  else
833
    return 0;
834
  return 2;
835
}
836
 
837
static int
838
decode_CCflag_0 (TIword iw0, disassemble_info *outf)
839
{
840
  /* CCflag
841
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
842
     | 0 | 0 | 0 | 0 | 1 |.I.|.opc.......|.G.|.y.........|.x.........|
843
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+  */
844
  int x = ((iw0 >> CCflag_x_bits) & CCflag_x_mask);
845
  int y = ((iw0 >> CCflag_y_bits) & CCflag_y_mask);
846
  int I = ((iw0 >> CCflag_I_bits) & CCflag_I_mask);
847
  int G = ((iw0 >> CCflag_G_bits) & CCflag_G_mask);
848
  int opc = ((iw0 >> CCflag_opc_bits) & CCflag_opc_mask);
849
 
850
  if (opc == 0 && I == 0 && G == 0)
851
    {
852
      OUTS (outf, "CC=");
853
      OUTS (outf, dregs (x));
854
      OUTS (outf, "==");
855
      OUTS (outf, dregs (y));
856
    }
857
  else if (opc == 1 && I == 0 && G == 0)
858
    {
859
      OUTS (outf, "CC=");
860
      OUTS (outf, dregs (x));
861
      OUTS (outf, "<");
862
      OUTS (outf, dregs (y));
863
    }
864
  else if (opc == 2 && I == 0 && G == 0)
865
    {
866
      OUTS (outf, "CC=");
867
      OUTS (outf, dregs (x));
868
      OUTS (outf, "<=");
869
      OUTS (outf, dregs (y));
870
    }
871
  else if (opc == 3 && I == 0 && G == 0)
872
    {
873
      OUTS (outf, "CC=");
874
      OUTS (outf, dregs (x));
875
      OUTS (outf, "<");
876
      OUTS (outf, dregs (y));
877
      OUTS (outf, "(IU)");
878
    }
879
  else if (opc == 4 && I == 0 && G == 0)
880
    {
881
      OUTS (outf, "CC=");
882
      OUTS (outf, dregs (x));
883
      OUTS (outf, "<=");
884
      OUTS (outf, dregs (y));
885
      OUTS (outf, "(IU)");
886
    }
887
  else if (opc == 0 && I == 1 && G == 0)
888
    {
889
      OUTS (outf, "CC=");
890
      OUTS (outf, dregs (x));
891
      OUTS (outf, "==");
892
      OUTS (outf, imm3 (y));
893
    }
894
  else if (opc == 1 && I == 1 && G == 0)
895
    {
896
      OUTS (outf, "CC=");
897
      OUTS (outf, dregs (x));
898
      OUTS (outf, "<");
899
      OUTS (outf, imm3 (y));
900
    }
901
  else if (opc == 2 && I == 1 && G == 0)
902
    {
903
      OUTS (outf, "CC=");
904
      OUTS (outf, dregs (x));
905
      OUTS (outf, "<=");
906
      OUTS (outf, imm3 (y));
907
    }
908
  else if (opc == 3 && I == 1 && G == 0)
909
    {
910
      OUTS (outf, "CC=");
911
      OUTS (outf, dregs (x));
912
      OUTS (outf, "<");
913
      OUTS (outf, uimm3 (y));
914
      OUTS (outf, "(IU)");
915
    }
916
  else if (opc == 4 && I == 1 && G == 0)
917
    {
918
      OUTS (outf, "CC=");
919
      OUTS (outf, dregs (x));
920
      OUTS (outf, "<=");
921
      OUTS (outf, uimm3 (y));
922
      OUTS (outf, "(IU)");
923
    }
924
  else if (opc == 0 && I == 0 && G == 1)
925
    {
926
      OUTS (outf, "CC=");
927
      OUTS (outf, pregs (x));
928
      OUTS (outf, "==");
929
      OUTS (outf, pregs (y));
930
    }
931
  else if (opc == 1 && I == 0 && G == 1)
932
    {
933
      OUTS (outf, "CC=");
934
      OUTS (outf, pregs (x));
935
      OUTS (outf, "<");
936
      OUTS (outf, pregs (y));
937
    }
938
  else if (opc == 2 && I == 0 && G == 1)
939
    {
940
      OUTS (outf, "CC=");
941
      OUTS (outf, pregs (x));
942
      OUTS (outf, "<=");
943
      OUTS (outf, pregs (y));
944
    }
945
  else if (opc == 3 && I == 0 && G == 1)
946
    {
947
      OUTS (outf, "CC=");
948
      OUTS (outf, pregs (x));
949
      OUTS (outf, "<");
950
      OUTS (outf, pregs (y));
951
      OUTS (outf, "(IU)");
952
    }
953
  else if (opc == 4 && I == 0 && G == 1)
954
    {
955
      OUTS (outf, "CC=");
956
      OUTS (outf, pregs (x));
957
      OUTS (outf, "<=");
958
      OUTS (outf, pregs (y));
959
      OUTS (outf, "(IU)");
960
    }
961
  else if (opc == 0 && I == 1 && G == 1)
962
    {
963
      OUTS (outf, "CC=");
964
      OUTS (outf, pregs (x));
965
      OUTS (outf, "==");
966
      OUTS (outf, imm3 (y));
967
    }
968
  else if (opc == 1 && I == 1 && G == 1)
969
    {
970
      OUTS (outf, "CC=");
971
      OUTS (outf, pregs (x));
972
      OUTS (outf, "<");
973
      OUTS (outf, imm3 (y));
974
    }
975
  else if (opc == 2 && I == 1 && G == 1)
976
    {
977
      OUTS (outf, "CC=");
978
      OUTS (outf, pregs (x));
979
      OUTS (outf, "<=");
980
      OUTS (outf, imm3 (y));
981
    }
982
  else if (opc == 3 && I == 1 && G == 1)
983
    {
984
      OUTS (outf, "CC=");
985
      OUTS (outf, pregs (x));
986
      OUTS (outf, "<");
987
      OUTS (outf, uimm3 (y));
988
      OUTS (outf, "(IU)");
989
    }
990
  else if (opc == 4 && I == 1 && G == 1)
991
    {
992
      OUTS (outf, "CC=");
993
      OUTS (outf, pregs (x));
994
      OUTS (outf, "<=");
995
      OUTS (outf, uimm3 (y));
996
      OUTS (outf, "(IU)");
997
    }
998
  else if (opc == 5 && I == 0 && G == 0)
999
    OUTS (outf, "CC=A0==A1");
1000
 
1001
  else if (opc == 6 && I == 0 && G == 0)
1002
    OUTS (outf, "CC=A0<A1");
1003
 
1004
  else if (opc == 7 && I == 0 && G == 0)
1005
    OUTS (outf, "CC=A0<=A1");
1006
 
1007
  else
1008
    return 0;
1009
  return 2;
1010
}
1011
 
1012
static int
1013
decode_CC2dreg_0 (TIword iw0, disassemble_info *outf)
1014
{
1015
  /* CC2dreg
1016
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
1017
     | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 |.op....|.reg.......|
1018
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+  */
1019
  int op  = ((iw0 >> CC2dreg_op_bits) & CC2dreg_op_mask);
1020
  int reg = ((iw0 >> CC2dreg_reg_bits) & CC2dreg_reg_mask);
1021
 
1022
  if (op == 0)
1023
    {
1024
      OUTS (outf, dregs (reg));
1025
      OUTS (outf, "=CC");
1026
    }
1027
  else if (op == 1)
1028
    {
1029
      OUTS (outf, "CC=");
1030
      OUTS (outf, dregs (reg));
1031
    }
1032
  else if (op == 3)
1033
    OUTS (outf, "CC=!CC");
1034
  else
1035
    return 0;
1036
 
1037
  return 2;
1038
}
1039
 
1040
static int
1041
decode_CC2stat_0 (TIword iw0, disassemble_info *outf)
1042
{
1043
  /* CC2stat
1044
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
1045
     | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 |.D.|.op....|.cbit..............|
1046
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+  */
1047
  int D    = ((iw0 >> CC2stat_D_bits) & CC2stat_D_mask);
1048
  int op   = ((iw0 >> CC2stat_op_bits) & CC2stat_op_mask);
1049
  int cbit = ((iw0 >> CC2stat_cbit_bits) & CC2stat_cbit_mask);
1050
 
1051
  if (op == 0 && D == 0)
1052
    {
1053
      OUTS (outf, "CC = ");
1054
      OUTS (outf, statbits (cbit));
1055
    }
1056
  else if (op == 1 && D == 0)
1057
    {
1058
      OUTS (outf, "CC|=");
1059
      OUTS (outf, statbits (cbit));
1060
    }
1061
  else if (op == 2 && D == 0)
1062
    {
1063
      OUTS (outf, "CC&=");
1064
      OUTS (outf, statbits (cbit));
1065
    }
1066
  else if (op == 3 && D == 0)
1067
    {
1068
      OUTS (outf, "CC^=");
1069
      OUTS (outf, statbits (cbit));
1070
    }
1071
  else if (op == 0 && D == 1)
1072
    {
1073
      OUTS (outf, statbits (cbit));
1074
      OUTS (outf, "=CC");
1075
    }
1076
  else if (op == 1 && D == 1)
1077
    {
1078
      OUTS (outf, statbits (cbit));
1079
      OUTS (outf, "|=CC");
1080
    }
1081
  else if (op == 2 && D == 1)
1082
    {
1083
      OUTS (outf, statbits (cbit));
1084
      OUTS (outf, "&=CC");
1085
    }
1086
  else if (op == 3 && D == 1)
1087
    {
1088
      OUTS (outf, statbits (cbit));
1089
      OUTS (outf, "^=CC");
1090
    }
1091
  else
1092
    return 0;
1093
 
1094
  return 2;
1095
}
1096
 
1097
static int
1098
decode_BRCC_0 (TIword iw0, bfd_vma pc, disassemble_info *outf)
1099
{
1100
  /* BRCC
1101
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
1102
     | 0 | 0 | 0 | 1 |.T.|.B.|.offset................................|
1103
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+  */
1104
  int B = ((iw0 >> BRCC_B_bits) & BRCC_B_mask);
1105
  int T = ((iw0 >> BRCC_T_bits) & BRCC_T_mask);
1106
  int offset = ((iw0 >> BRCC_offset_bits) & BRCC_offset_mask);
1107
 
1108
  if (T == 1 && B == 1)
1109
    {
1110
      OUTS (outf, "IF CC JUMP ");
1111
      OUTS (outf, pcrel10 (offset));
1112
      OUTS (outf, "(BP)");
1113
    }
1114
  else if (T == 0 && B == 1)
1115
    {
1116
      OUTS (outf, "IF ! CC JUMP ");
1117
      OUTS (outf, pcrel10 (offset));
1118
      OUTS (outf, "(BP)");
1119
    }
1120
  else if (T == 1)
1121
    {
1122
      OUTS (outf, "IF CC JUMP ");
1123
      OUTS (outf, pcrel10 (offset));
1124
    }
1125
  else if (T == 0)
1126
    {
1127
      OUTS (outf, "IF ! CC JUMP ");
1128
      OUTS (outf, pcrel10 (offset));
1129
    }
1130
  else
1131
    return 0;
1132
 
1133
  return 2;
1134
}
1135
 
1136
static int
1137
decode_UJUMP_0 (TIword iw0, bfd_vma pc, disassemble_info *outf)
1138
{
1139
  /* UJUMP
1140
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
1141
     | 0 | 0 | 1 | 0 |.offset........................................|
1142
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+  */
1143
  int offset = ((iw0 >> UJump_offset_bits) & UJump_offset_mask);
1144
 
1145
  OUTS (outf, "JUMP.S  ");
1146
  OUTS (outf, pcrel12 (offset));
1147
  return 2;
1148
}
1149
 
1150
static int
1151
decode_REGMV_0 (TIword iw0, disassemble_info *outf)
1152
{
1153
  /* REGMV
1154
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
1155
     | 0 | 0 | 1 | 1 |.gd........|.gs........|.dst.......|.src.......|
1156
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+  */
1157
  int gs  = ((iw0 >> RegMv_gs_bits) & RegMv_gs_mask);
1158
  int gd  = ((iw0 >> RegMv_gd_bits) & RegMv_gd_mask);
1159
  int src = ((iw0 >> RegMv_src_bits) & RegMv_src_mask);
1160
  int dst = ((iw0 >> RegMv_dst_bits) & RegMv_dst_mask);
1161
 
1162
  OUTS (outf, allregs (dst, gd));
1163
  OUTS (outf, "=");
1164
  OUTS (outf, allregs (src, gs));
1165
  return 2;
1166
}
1167
 
1168
static int
1169
decode_ALU2op_0 (TIword iw0, disassemble_info *outf)
1170
{
1171
  /* ALU2op
1172
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
1173
     | 0 | 1 | 0 | 0 | 0 | 0 |.opc...........|.src.......|.dst.......|
1174
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+  */
1175
  int src = ((iw0 >> ALU2op_src_bits) & ALU2op_src_mask);
1176
  int opc = ((iw0 >> ALU2op_opc_bits) & ALU2op_opc_mask);
1177
  int dst = ((iw0 >> ALU2op_dst_bits) & ALU2op_dst_mask);
1178
 
1179
  if (opc == 0)
1180
    {
1181
      OUTS (outf, dregs (dst));
1182
      OUTS (outf, ">>>=");
1183
      OUTS (outf, dregs (src));
1184
    }
1185
  else if (opc == 1)
1186
    {
1187
      OUTS (outf, dregs (dst));
1188
      OUTS (outf, ">>=");
1189
      OUTS (outf, dregs (src));
1190
    }
1191
  else if (opc == 2)
1192
    {
1193
      OUTS (outf, dregs (dst));
1194
      OUTS (outf, "<<=");
1195
      OUTS (outf, dregs (src));
1196
    }
1197
  else if (opc == 3)
1198
    {
1199
      OUTS (outf, dregs (dst));
1200
      OUTS (outf, "*=");
1201
      OUTS (outf, dregs (src));
1202
    }
1203
  else if (opc == 4)
1204
    {
1205
      OUTS (outf, dregs (dst));
1206
      OUTS (outf, "=(");
1207
      OUTS (outf, dregs (dst));
1208
      OUTS (outf, "+");
1209
      OUTS (outf, dregs (src));
1210
      OUTS (outf, ")<<1");
1211
    }
1212
  else if (opc == 5)
1213
    {
1214
      OUTS (outf, dregs (dst));
1215
      OUTS (outf, "=(");
1216
      OUTS (outf, dregs (dst));
1217
      OUTS (outf, "+");
1218
      OUTS (outf, dregs (src));
1219
      OUTS (outf, ")<<2");
1220
    }
1221
  else if (opc == 8)
1222
    {
1223
      OUTS (outf, "DIVQ(");
1224
      OUTS (outf, dregs (dst));
1225
      OUTS (outf, ",");
1226
      OUTS (outf, dregs (src));
1227
      OUTS (outf, ")");
1228
    }
1229
  else if (opc == 9)
1230
    {
1231
      OUTS (outf, "DIVS(");
1232
      OUTS (outf, dregs (dst));
1233
      OUTS (outf, ",");
1234
      OUTS (outf, dregs (src));
1235
      OUTS (outf, ")");
1236
    }
1237
  else if (opc == 10)
1238
    {
1239
      OUTS (outf, dregs (dst));
1240
      OUTS (outf, "=");
1241
      OUTS (outf, dregs_lo (src));
1242
      OUTS (outf, "(X)");
1243
    }
1244
  else if (opc == 11)
1245
    {
1246
      OUTS (outf, dregs (dst));
1247
      OUTS (outf, "=");
1248
      OUTS (outf, dregs_lo (src));
1249
      OUTS (outf, "(Z)");
1250
    }
1251
  else if (opc == 12)
1252
    {
1253
      OUTS (outf, dregs (dst));
1254
      OUTS (outf, "=");
1255
      OUTS (outf, dregs_byte (src));
1256
      OUTS (outf, "(X)");
1257
    }
1258
  else if (opc == 13)
1259
    {
1260
      OUTS (outf, dregs (dst));
1261
      OUTS (outf, "=");
1262
      OUTS (outf, dregs_byte (src));
1263
      OUTS (outf, "(Z)");
1264
    }
1265
  else if (opc == 14)
1266
    {
1267
      OUTS (outf, dregs (dst));
1268
      OUTS (outf, "=-");
1269
      OUTS (outf, dregs (src));
1270
    }
1271
  else if (opc == 15)
1272
    {
1273
      OUTS (outf, dregs (dst));
1274
      OUTS (outf, "=~");
1275
      OUTS (outf, dregs (src));
1276
    }
1277
  else
1278
    return 0;
1279
 
1280
  return 2;
1281
}
1282
 
1283
static int
1284
decode_PTR2op_0 (TIword iw0, disassemble_info *outf)
1285
{
1286
  /* PTR2op
1287
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
1288
     | 0 | 1 | 0 | 0 | 0 | 1 | 0 |.opc.......|.src.......|.dst.......|
1289
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+  */
1290
  int src = ((iw0 >> PTR2op_src_bits) & PTR2op_dst_mask);
1291
  int opc = ((iw0 >> PTR2op_opc_bits) & PTR2op_opc_mask);
1292
  int dst = ((iw0 >> PTR2op_dst_bits) & PTR2op_dst_mask);
1293
 
1294
  if (opc == 0)
1295
    {
1296
      OUTS (outf, pregs (dst));
1297
      OUTS (outf, "-=");
1298
      OUTS (outf, pregs (src));
1299
    }
1300
  else if (opc == 1)
1301
    {
1302
      OUTS (outf, pregs (dst));
1303
      OUTS (outf, "=");
1304
      OUTS (outf, pregs (src));
1305
      OUTS (outf, "<<2");
1306
    }
1307
  else if (opc == 3)
1308
    {
1309
      OUTS (outf, pregs (dst));
1310
      OUTS (outf, "=");
1311
      OUTS (outf, pregs (src));
1312
      OUTS (outf, ">>2");
1313
    }
1314
  else if (opc == 4)
1315
    {
1316
      OUTS (outf, pregs (dst));
1317
      OUTS (outf, "=");
1318
      OUTS (outf, pregs (src));
1319
      OUTS (outf, ">>1");
1320
    }
1321
  else if (opc == 5)
1322
    {
1323
      OUTS (outf, pregs (dst));
1324
      OUTS (outf, "+=");
1325
      OUTS (outf, pregs (src));
1326
      OUTS (outf, "(BREV)");
1327
    }
1328
  else if (opc == 6)
1329
    {
1330
      OUTS (outf, pregs (dst));
1331
      OUTS (outf, "=(");
1332
      OUTS (outf, pregs (dst));
1333
      OUTS (outf, "+");
1334
      OUTS (outf, pregs (src));
1335
      OUTS (outf, ")<<1");
1336
    }
1337
  else if (opc == 7)
1338
    {
1339
      OUTS (outf, pregs (dst));
1340
      OUTS (outf, "=(");
1341
      OUTS (outf, pregs (dst));
1342
      OUTS (outf, "+");
1343
      OUTS (outf, pregs (src));
1344
      OUTS (outf, ")<<2");
1345
    }
1346
  else
1347
    return 0;
1348
 
1349
  return 2;
1350
}
1351
 
1352
static int
1353
decode_LOGI2op_0 (TIword iw0, disassemble_info *outf)
1354
{
1355
  /* LOGI2op
1356
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
1357
     | 0 | 1 | 0 | 0 | 1 |.opc.......|.src...............|.dst.......|
1358
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+  */
1359
  int src = ((iw0 >> LOGI2op_src_bits) & LOGI2op_src_mask);
1360
  int opc = ((iw0 >> LOGI2op_opc_bits) & LOGI2op_opc_mask);
1361
  int dst = ((iw0 >> LOGI2op_dst_bits) & LOGI2op_dst_mask);
1362
 
1363
  if (opc == 0)
1364
    {
1365
      OUTS (outf, "CC = ! BITTST (");
1366
      OUTS (outf, dregs (dst));
1367
      OUTS (outf, ",");
1368
      OUTS (outf, uimm5 (src));
1369
      OUTS (outf, ")");
1370
    }
1371
  else if (opc == 1)
1372
    {
1373
      OUTS (outf, "CC = BITTST (");
1374
      OUTS (outf, dregs (dst));
1375
      OUTS (outf, ",");
1376
      OUTS (outf, uimm5 (src));
1377
      OUTS (outf, ")");
1378
    }
1379
  else if (opc == 2)
1380
    {
1381
      OUTS (outf, "BITSET (");
1382
      OUTS (outf, dregs (dst));
1383
      OUTS (outf, ",");
1384
      OUTS (outf, uimm5 (src));
1385
      OUTS (outf, ")");
1386
    }
1387
  else if (opc == 3)
1388
    {
1389
      OUTS (outf, "BITTGL (");
1390
      OUTS (outf, dregs (dst));
1391
      OUTS (outf, ",");
1392
      OUTS (outf, uimm5 (src));
1393
      OUTS (outf, ")");
1394
    }
1395
  else if (opc == 4)
1396
    {
1397
      OUTS (outf, "BITCLR (");
1398
      OUTS (outf, dregs (dst));
1399
      OUTS (outf, ",");
1400
      OUTS (outf, uimm5 (src));
1401
      OUTS (outf, ")");
1402
    }
1403
  else if (opc == 5)
1404
    {
1405
      OUTS (outf, dregs (dst));
1406
      OUTS (outf, ">>>=");
1407
      OUTS (outf, uimm5 (src));
1408
    }
1409
  else if (opc == 6)
1410
    {
1411
      OUTS (outf, dregs (dst));
1412
      OUTS (outf, ">>=");
1413
      OUTS (outf, uimm5 (src));
1414
    }
1415
  else if (opc == 7)
1416
    {
1417
      OUTS (outf, dregs (dst));
1418
      OUTS (outf, "<<=");
1419
      OUTS (outf, uimm5 (src));
1420
    }
1421
  else
1422
    return 0;
1423
 
1424
  return 2;
1425
}
1426
 
1427
static int
1428
decode_COMP3op_0 (TIword iw0, disassemble_info *outf)
1429
{
1430
  /* COMP3op
1431
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
1432
     | 0 | 1 | 0 | 1 |.opc.......|.dst.......|.src1......|.src0......|
1433
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+  */
1434
  int opc  = ((iw0 >> COMP3op_opc_bits) & COMP3op_opc_mask);
1435
  int dst  = ((iw0 >> COMP3op_dst_bits) & COMP3op_dst_mask);
1436
  int src0 = ((iw0 >> COMP3op_src0_bits) & COMP3op_src0_mask);
1437
  int src1 = ((iw0 >> COMP3op_src1_bits) & COMP3op_src1_mask);
1438
 
1439
  if (opc == 5 && src1 == src0)
1440
    {
1441
      OUTS (outf, pregs (dst));
1442
      OUTS (outf, "=");
1443
      OUTS (outf, pregs (src0));
1444
      OUTS (outf, "<<1");
1445
    }
1446
  else if (opc == 1)
1447
    {
1448
      OUTS (outf, dregs (dst));
1449
      OUTS (outf, "=");
1450
      OUTS (outf, dregs (src0));
1451
      OUTS (outf, "-");
1452
      OUTS (outf, dregs (src1));
1453
    }
1454
  else if (opc == 2)
1455
    {
1456
      OUTS (outf, dregs (dst));
1457
      OUTS (outf, "=");
1458
      OUTS (outf, dregs (src0));
1459
      OUTS (outf, "&");
1460
      OUTS (outf, dregs (src1));
1461
    }
1462
  else if (opc == 3)
1463
    {
1464
      OUTS (outf, dregs (dst));
1465
      OUTS (outf, "=");
1466
      OUTS (outf, dregs (src0));
1467
      OUTS (outf, "|");
1468
      OUTS (outf, dregs (src1));
1469
    }
1470
  else if (opc == 4)
1471
    {
1472
      OUTS (outf, dregs (dst));
1473
      OUTS (outf, "=");
1474
      OUTS (outf, dregs (src0));
1475
      OUTS (outf, "^");
1476
      OUTS (outf, dregs (src1));
1477
    }
1478
  else if (opc == 5)
1479
    {
1480
      OUTS (outf, pregs (dst));
1481
      OUTS (outf, "=");
1482
      OUTS (outf, pregs (src0));
1483
      OUTS (outf, "+");
1484
      OUTS (outf, pregs (src1));
1485
    }
1486
  else if (opc == 6)
1487
    {
1488
      OUTS (outf, pregs (dst));
1489
      OUTS (outf, "=");
1490
      OUTS (outf, pregs (src0));
1491
      OUTS (outf, "+(");
1492
      OUTS (outf, pregs (src1));
1493
      OUTS (outf, "<<1)");
1494
    }
1495
  else if (opc == 7)
1496
    {
1497
      OUTS (outf, pregs (dst));
1498
      OUTS (outf, "=");
1499
      OUTS (outf, pregs (src0));
1500
      OUTS (outf, "+(");
1501
      OUTS (outf, pregs (src1));
1502
      OUTS (outf, "<<2)");
1503
    }
1504
  else if (opc == 0)
1505
    {
1506
      OUTS (outf, dregs (dst));
1507
      OUTS (outf, "=");
1508
      OUTS (outf, dregs (src0));
1509
      OUTS (outf, "+");
1510
      OUTS (outf, dregs (src1));
1511
    }
1512
  else
1513
    return 0;
1514
 
1515
  return 2;
1516
}
1517
 
1518
static int
1519
decode_COMPI2opD_0 (TIword iw0, disassemble_info *outf)
1520
{
1521
  /* COMPI2opD
1522
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
1523
     | 0 | 1 | 1 | 0 | 0 |.op|..src......................|.dst.......|
1524
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+  */
1525
  int op  = ((iw0 >> COMPI2opD_op_bits) & COMPI2opD_op_mask);
1526
  int dst = ((iw0 >> COMPI2opD_dst_bits) & COMPI2opD_dst_mask);
1527
  int src = ((iw0 >> COMPI2opD_src_bits) & COMPI2opD_src_mask);
1528
 
1529
  if (op == 0)
1530
    {
1531
      OUTS (outf, dregs (dst));
1532
      OUTS (outf, "=");
1533
      OUTS (outf, imm7 (src));
1534
      OUTS (outf, "(x)");
1535
    }
1536
  else if (op == 1)
1537
    {
1538
      OUTS (outf, dregs (dst));
1539
      OUTS (outf, "+=");
1540
      OUTS (outf, imm7 (src));
1541
    }
1542
  else
1543
    return 0;
1544
 
1545
  return 2;
1546
}
1547
 
1548
static int
1549
decode_COMPI2opP_0 (TIword iw0, disassemble_info *outf)
1550
{
1551
  /* COMPI2opP
1552
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
1553
     | 0 | 1 | 1 | 0 | 1 |.op|.src.......................|.dst.......|
1554
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+  */
1555
  int op  = ((iw0 >> COMPI2opP_op_bits) & COMPI2opP_op_mask);
1556
  int src = ((iw0 >> COMPI2opP_src_bits) & COMPI2opP_src_mask);
1557
  int dst = ((iw0 >> COMPI2opP_dst_bits) & COMPI2opP_dst_mask);
1558
 
1559
  if (op == 0)
1560
    {
1561
      OUTS (outf, pregs (dst));
1562
      OUTS (outf, "=");
1563
      OUTS (outf, imm7 (src));
1564
    }
1565
  else if (op == 1)
1566
    {
1567
      OUTS (outf, pregs (dst));
1568
      OUTS (outf, "+=");
1569
      OUTS (outf, imm7 (src));
1570
    }
1571
  else
1572
    return 0;
1573
 
1574
  return 2;
1575
}
1576
 
1577
static int
1578
decode_LDSTpmod_0 (TIword iw0, disassemble_info *outf)
1579
{
1580
  /* LDSTpmod
1581
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
1582
     | 1 | 0 | 0 | 0 |.W.|.aop...|.reg.......|.idx.......|.ptr.......|
1583
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+  */
1584
  int W   = ((iw0 >> LDSTpmod_W_bits) & LDSTpmod_W_mask);
1585
  int aop = ((iw0 >> LDSTpmod_aop_bits) & LDSTpmod_aop_mask);
1586
  int idx = ((iw0 >> LDSTpmod_idx_bits) & LDSTpmod_idx_mask);
1587
  int ptr = ((iw0 >> LDSTpmod_ptr_bits) & LDSTpmod_ptr_mask);
1588
  int reg = ((iw0 >> LDSTpmod_reg_bits) & LDSTpmod_reg_mask);
1589
 
1590
  if (aop == 1 && W == 0 && idx == ptr)
1591
    {
1592
      OUTS (outf, dregs_lo (reg));
1593
      OUTS (outf, "=W[");
1594
      OUTS (outf, pregs (ptr));
1595
      OUTS (outf, "]");
1596
    }
1597
  else if (aop == 2 && W == 0 && idx == ptr)
1598
    {
1599
      OUTS (outf, dregs_hi (reg));
1600
      OUTS (outf, "=W[");
1601
      OUTS (outf, pregs (ptr));
1602
      OUTS (outf, "]");
1603
    }
1604
  else if (aop == 1 && W == 1 && idx == ptr)
1605
    {
1606
      OUTS (outf, "W[");
1607
      OUTS (outf, pregs (ptr));
1608
      OUTS (outf, "]=");
1609
      OUTS (outf, dregs_lo (reg));
1610
    }
1611
  else if (aop == 2 && W == 1 && idx == ptr)
1612
    {
1613
      OUTS (outf, "W[");
1614
      OUTS (outf, pregs (ptr));
1615
      OUTS (outf, "]=");
1616
      OUTS (outf, dregs_hi (reg));
1617
    }
1618
  else if (aop == 0 && W == 0)
1619
    {
1620
      OUTS (outf, dregs (reg));
1621
      OUTS (outf, "=[");
1622
      OUTS (outf, pregs (ptr));
1623
      OUTS (outf, "++");
1624
      OUTS (outf, pregs (idx));
1625
      OUTS (outf, "]");
1626
    }
1627
  else if (aop == 1 && W == 0)
1628
    {
1629
      OUTS (outf, dregs_lo (reg));
1630
      OUTS (outf, "=W[");
1631
      OUTS (outf, pregs (ptr));
1632
      OUTS (outf, "++");
1633
      OUTS (outf, pregs (idx));
1634
      OUTS (outf, "]");
1635
    }
1636
  else if (aop == 2 && W == 0)
1637
    {
1638
      OUTS (outf, dregs_hi (reg));
1639
      OUTS (outf, "=W[");
1640
      OUTS (outf, pregs (ptr));
1641
      OUTS (outf, "++");
1642
      OUTS (outf, pregs (idx));
1643
      OUTS (outf, "]");
1644
    }
1645
  else if (aop == 3 && W == 0)
1646
    {
1647
      OUTS (outf, dregs (reg));
1648
      OUTS (outf, "=W[");
1649
      OUTS (outf, pregs (ptr));
1650
      OUTS (outf, "++");
1651
      OUTS (outf, pregs (idx));
1652
      OUTS (outf, "] (Z)");
1653
    }
1654
  else if (aop == 3 && W == 1)
1655
    {
1656
      OUTS (outf, dregs (reg));
1657
      OUTS (outf, "=W[");
1658
      OUTS (outf, pregs (ptr));
1659
      OUTS (outf, "++");
1660
      OUTS (outf, pregs (idx));
1661
      OUTS (outf, "](X)");
1662
    }
1663
  else if (aop == 0 && W == 1)
1664
    {
1665
      OUTS (outf, "[");
1666
      OUTS (outf, pregs (ptr));
1667
      OUTS (outf, "++");
1668
      OUTS (outf, pregs (idx));
1669
      OUTS (outf, "]=");
1670
      OUTS (outf, dregs (reg));
1671
    }
1672
  else if (aop == 1 && W == 1)
1673
    {
1674
      OUTS (outf, "W[");
1675
      OUTS (outf, pregs (ptr));
1676
      OUTS (outf, "++");
1677
      OUTS (outf, pregs (idx));
1678
      OUTS (outf, "]=");
1679
      OUTS (outf, dregs_lo (reg));
1680
    }
1681
  else if (aop == 2 && W == 1)
1682
    {
1683
      OUTS (outf, "W[");
1684
      OUTS (outf, pregs (ptr));
1685
      OUTS (outf, "++");
1686
      OUTS (outf, pregs (idx));
1687
      OUTS (outf, "]=");
1688
      OUTS (outf, dregs_hi (reg));
1689
    }
1690
  else
1691
    return 0;
1692
 
1693
  return 2;
1694
}
1695
 
1696
static int
1697
decode_dagMODim_0 (TIword iw0, disassemble_info *outf)
1698
{
1699
  /* dagMODim
1700
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
1701
     | 1 | 0 | 0 | 1 | 1 | 1 | 1 | 0 |.br| 1 | 1 |.op|.m.....|.i.....|
1702
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+  */
1703
  int i  = ((iw0 >> DagMODim_i_bits) & DagMODim_i_mask);
1704
  int m  = ((iw0 >> DagMODim_m_bits) & DagMODim_m_mask);
1705
  int br = ((iw0 >> DagMODim_br_bits) & DagMODim_br_mask);
1706
  int op = ((iw0 >> DagMODim_op_bits) & DagMODim_op_mask);
1707
 
1708
  if (op == 0 && br == 1)
1709
    {
1710
      OUTS (outf, iregs (i));
1711
      OUTS (outf, "+=");
1712
      OUTS (outf, mregs (m));
1713
      OUTS (outf, "(BREV)");
1714
    }
1715
  else if (op == 0)
1716
    {
1717
      OUTS (outf, iregs (i));
1718
      OUTS (outf, "+=");
1719
      OUTS (outf, mregs (m));
1720
    }
1721
  else if (op == 1)
1722
    {
1723
      OUTS (outf, iregs (i));
1724
      OUTS (outf, "-=");
1725
      OUTS (outf, mregs (m));
1726
    }
1727
  else
1728
    return 0;
1729
 
1730
  return 2;
1731
}
1732
 
1733
static int
1734
decode_dagMODik_0 (TIword iw0, disassemble_info *outf)
1735
{
1736
  /* dagMODik
1737
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
1738
     | 1 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 1 | 0 |.op....|.i.....|
1739
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+  */
1740
  int i  = ((iw0 >> DagMODik_i_bits) & DagMODik_i_mask);
1741
  int op = ((iw0 >> DagMODik_op_bits) & DagMODik_op_mask);
1742
 
1743
  if (op == 0)
1744
    {
1745
      OUTS (outf, iregs (i));
1746
      OUTS (outf, "+=2");
1747
    }
1748
  else if (op == 1)
1749
    {
1750
      OUTS (outf, iregs (i));
1751
      OUTS (outf, "-=2");
1752
    }
1753
  else if (op == 2)
1754
    {
1755
      OUTS (outf, iregs (i));
1756
      OUTS (outf, "+=4");
1757
    }
1758
  else if (op == 3)
1759
    {
1760
      OUTS (outf, iregs (i));
1761
      OUTS (outf, "-=4");
1762
    }
1763
  else
1764
    return 0;
1765
 
1766
  return 2;
1767
}
1768
 
1769
static int
1770
decode_dspLDST_0 (TIword iw0, disassemble_info *outf)
1771
{
1772
  /* dspLDST
1773
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
1774
     | 1 | 0 | 0 | 1 | 1 | 1 |.W.|.aop...|.m.....|.i.....|.reg.......|
1775
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+  */
1776
  int i   = ((iw0 >> DspLDST_i_bits) & DspLDST_i_mask);
1777
  int m   = ((iw0 >> DspLDST_m_bits) & DspLDST_m_mask);
1778
  int W   = ((iw0 >> DspLDST_W_bits) & DspLDST_W_mask);
1779
  int aop = ((iw0 >> DspLDST_aop_bits) & DspLDST_aop_mask);
1780
  int reg = ((iw0 >> DspLDST_reg_bits) & DspLDST_reg_mask);
1781
 
1782
  if (aop == 0 && W == 0 && m == 0)
1783
    {
1784
      OUTS (outf, dregs (reg));
1785
      OUTS (outf, "=[");
1786
      OUTS (outf, iregs (i));
1787
      OUTS (outf, "++]");
1788
    }
1789
  else if (aop == 0 && W == 0 && m == 1)
1790
    {
1791
      OUTS (outf, dregs_lo (reg));
1792
      OUTS (outf, "=W[");
1793
      OUTS (outf, iregs (i));
1794
      OUTS (outf, "++]");
1795
    }
1796
  else if (aop == 0 && W == 0 && m == 2)
1797
    {
1798
      OUTS (outf, dregs_hi (reg));
1799
      OUTS (outf, "=W[");
1800
      OUTS (outf, iregs (i));
1801
      OUTS (outf, "++]");
1802
    }
1803
  else if (aop == 1 && W == 0 && m == 0)
1804
    {
1805
      OUTS (outf, dregs (reg));
1806
      OUTS (outf, "=[");
1807
      OUTS (outf, iregs (i));
1808
      OUTS (outf, "--]");
1809
    }
1810
  else if (aop == 1 && W == 0 && m == 1)
1811
    {
1812
      OUTS (outf, dregs_lo (reg));
1813
      OUTS (outf, "=W[");
1814
      OUTS (outf, iregs (i));
1815
      OUTS (outf, "--]");
1816
    }
1817
  else if (aop == 1 && W == 0 && m == 2)
1818
    {
1819
      OUTS (outf, dregs_hi (reg));
1820
      OUTS (outf, "=W[");
1821
      OUTS (outf, iregs (i));
1822
      OUTS (outf, "--]");
1823
    }
1824
  else if (aop == 2 && W == 0 && m == 0)
1825
    {
1826
      OUTS (outf, dregs (reg));
1827
      OUTS (outf, "=[");
1828
      OUTS (outf, iregs (i));
1829
      OUTS (outf, "]");
1830
    }
1831
  else if (aop == 2 && W == 0 && m == 1)
1832
    {
1833
      OUTS (outf, dregs_lo (reg));
1834
      OUTS (outf, "=W[");
1835
      OUTS (outf, iregs (i));
1836
      OUTS (outf, "]");
1837
    }
1838
  else if (aop == 2 && W == 0 && m == 2)
1839
    {
1840
      OUTS (outf, dregs_hi (reg));
1841
      OUTS (outf, "=W[");
1842
      OUTS (outf, iregs (i));
1843
      OUTS (outf, "]");
1844
    }
1845
  else if (aop == 0 && W == 1 && m == 0)
1846
    {
1847
      OUTS (outf, "[");
1848
      OUTS (outf, iregs (i));
1849
      OUTS (outf, "++]=");
1850
      OUTS (outf, dregs (reg));
1851
    }
1852
  else if (aop == 0 && W == 1 && m == 1)
1853
    {
1854
      OUTS (outf, "W[");
1855
      OUTS (outf, iregs (i));
1856
      OUTS (outf, "++]=");
1857
      OUTS (outf, dregs_lo (reg));
1858
    }
1859
  else if (aop == 0 && W == 1 && m == 2)
1860
    {
1861
      OUTS (outf, "W[");
1862
      OUTS (outf, iregs (i));
1863
      OUTS (outf, "++]=");
1864
      OUTS (outf, dregs_hi (reg));
1865
    }
1866
  else if (aop == 1 && W == 1 && m == 0)
1867
    {
1868
      OUTS (outf, "[");
1869
      OUTS (outf, iregs (i));
1870
      OUTS (outf, "--]=");
1871
      OUTS (outf, dregs (reg));
1872
    }
1873
  else if (aop == 1 && W == 1 && m == 1)
1874
    {
1875
      OUTS (outf, "W[");
1876
      OUTS (outf, iregs (i));
1877
      OUTS (outf, "--]=");
1878
      OUTS (outf, dregs_lo (reg));
1879
    }
1880
  else if (aop == 1 && W == 1 && m == 2)
1881
    {
1882
      OUTS (outf, "W[");
1883
      OUTS (outf, iregs (i));
1884
      OUTS (outf, "--]=");
1885
      OUTS (outf, dregs_hi (reg));
1886
    }
1887
  else if (aop == 2 && W == 1 && m == 0)
1888
    {
1889
      OUTS (outf, "[");
1890
      OUTS (outf, iregs (i));
1891
      OUTS (outf, "]=");
1892
      OUTS (outf, dregs (reg));
1893
    }
1894
  else if (aop == 2 && W == 1 && m == 1)
1895
    {
1896
      OUTS (outf, "W[");
1897
      OUTS (outf, iregs (i));
1898
      OUTS (outf, "]=");
1899
      OUTS (outf, dregs_lo (reg));
1900
    }
1901
  else if (aop == 2 && W == 1 && m == 2)
1902
    {
1903
      OUTS (outf, "W[");
1904
      OUTS (outf, iregs (i));
1905
      OUTS (outf, "]=");
1906
      OUTS (outf, dregs_hi (reg));
1907
    }
1908
  else if (aop == 3 && W == 0)
1909
    {
1910
      OUTS (outf, dregs (reg));
1911
      OUTS (outf, "=[");
1912
      OUTS (outf, iregs (i));
1913
      OUTS (outf, "++");
1914
      OUTS (outf, mregs (m));
1915
      OUTS (outf, "]");
1916
    }
1917
  else if (aop == 3 && W == 1)
1918
    {
1919
      OUTS (outf, "[");
1920
      OUTS (outf, iregs (i));
1921
      OUTS (outf, "++");
1922
      OUTS (outf, mregs (m));
1923
      OUTS (outf, "]=");
1924
      OUTS (outf, dregs (reg));
1925
    }
1926
  else
1927
    return 0;
1928
 
1929
  return 2;
1930
}
1931
 
1932
static int
1933
decode_LDST_0 (TIword iw0, disassemble_info *outf)
1934
{
1935
  /* LDST
1936
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
1937
     | 1 | 0 | 0 | 1 |.sz....|.W.|.aop...|.Z.|.ptr.......|.reg.......|
1938
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+  */
1939
  int Z   = ((iw0 >> LDST_Z_bits) & LDST_Z_mask);
1940
  int W   = ((iw0 >> LDST_W_bits) & LDST_W_mask);
1941
  int sz  = ((iw0 >> LDST_sz_bits) & LDST_sz_mask);
1942
  int aop = ((iw0 >> LDST_aop_bits) & LDST_aop_mask);
1943
  int reg = ((iw0 >> LDST_reg_bits) & LDST_reg_mask);
1944
  int ptr = ((iw0 >> LDST_ptr_bits) & LDST_ptr_mask);
1945
 
1946
  if (aop == 0 && sz == 0 && Z == 0 && W == 0)
1947
    {
1948
      OUTS (outf, dregs (reg));
1949
      OUTS (outf, "=[");
1950
      OUTS (outf, pregs (ptr));
1951
      OUTS (outf, "++]");
1952
    }
1953
  else if (aop == 0 && sz == 0 && Z == 1 && W == 0)
1954
    {
1955
      OUTS (outf, pregs (reg));
1956
      OUTS (outf, "=[");
1957
      OUTS (outf, pregs (ptr));
1958
      OUTS (outf, "++]");
1959
    }
1960
  else if (aop == 0 && sz == 1 && Z == 0 && W == 0)
1961
    {
1962
      OUTS (outf, dregs (reg));
1963
      OUTS (outf, "=W[");
1964
      OUTS (outf, pregs (ptr));
1965
      OUTS (outf, "++] (Z)");
1966
    }
1967
  else if (aop == 0 && sz == 1 && Z == 1 && W == 0)
1968
    {
1969
      OUTS (outf, dregs (reg));
1970
      OUTS (outf, "=W[");
1971
      OUTS (outf, pregs (ptr));
1972
      OUTS (outf, "++](X)");
1973
    }
1974
  else if (aop == 0 && sz == 2 && Z == 0 && W == 0)
1975
    {
1976
      OUTS (outf, dregs (reg));
1977
      OUTS (outf, "=B[");
1978
      OUTS (outf, pregs (ptr));
1979
      OUTS (outf, "++] (Z)");
1980
    }
1981
  else if (aop == 0 && sz == 2 && Z == 1 && W == 0)
1982
    {
1983
      OUTS (outf, dregs (reg));
1984
      OUTS (outf, "=B[");
1985
      OUTS (outf, pregs (ptr));
1986
      OUTS (outf, "++](X)");
1987
    }
1988
  else if (aop == 1 && sz == 0 && Z == 0 && W == 0)
1989
    {
1990
      OUTS (outf, dregs (reg));
1991
      OUTS (outf, "=[");
1992
      OUTS (outf, pregs (ptr));
1993
      OUTS (outf, "--]");
1994
    }
1995
  else if (aop == 1 && sz == 0 && Z == 1 && W == 0)
1996
    {
1997
      OUTS (outf, pregs (reg));
1998
      OUTS (outf, "=[");
1999
      OUTS (outf, pregs (ptr));
2000
      OUTS (outf, "--]");
2001
    }
2002
  else if (aop == 1 && sz == 1 && Z == 0 && W == 0)
2003
    {
2004
      OUTS (outf, dregs (reg));
2005
      OUTS (outf, "=W[");
2006
      OUTS (outf, pregs (ptr));
2007
      OUTS (outf, "--] (Z)");
2008
    }
2009
  else if (aop == 1 && sz == 1 && Z == 1 && W == 0)
2010
    {
2011
      OUTS (outf, dregs (reg));
2012
      OUTS (outf, "=W[");
2013
      OUTS (outf, pregs (ptr));
2014
      OUTS (outf, "--](X)");
2015
    }
2016
  else if (aop == 1 && sz == 2 && Z == 0 && W == 0)
2017
    {
2018
      OUTS (outf, dregs (reg));
2019
      OUTS (outf, "=B[");
2020
      OUTS (outf, pregs (ptr));
2021
      OUTS (outf, "--] (Z)");
2022
    }
2023
  else if (aop == 1 && sz == 2 && Z == 1 && W == 0)
2024
    {
2025
      OUTS (outf, dregs (reg));
2026
      OUTS (outf, "=B[");
2027
      OUTS (outf, pregs (ptr));
2028
      OUTS (outf, "--](X)");
2029
    }
2030
  else if (aop == 2 && sz == 0 && Z == 0 && W == 0)
2031
    {
2032
      OUTS (outf, dregs (reg));
2033
      OUTS (outf, "=[");
2034
      OUTS (outf, pregs (ptr));
2035
      OUTS (outf, "]");
2036
    }
2037
  else if (aop == 2 && sz == 0 && Z == 1 && W == 0)
2038
    {
2039
      OUTS (outf, pregs (reg));
2040
      OUTS (outf, "=[");
2041
      OUTS (outf, pregs (ptr));
2042
      OUTS (outf, "]");
2043
    }
2044
  else if (aop == 2 && sz == 1 && Z == 0 && W == 0)
2045
    {
2046
      OUTS (outf, dregs (reg));
2047
      OUTS (outf, "=W[");
2048
      OUTS (outf, pregs (ptr));
2049
      OUTS (outf, "] (Z)");
2050
    }
2051
  else if (aop == 2 && sz == 1 && Z == 1 && W == 0)
2052
    {
2053
      OUTS (outf, dregs (reg));
2054
      OUTS (outf, "=W[");
2055
      OUTS (outf, pregs (ptr));
2056
      OUTS (outf, "](X)");
2057
    }
2058
  else if (aop == 2 && sz == 2 && Z == 0 && W == 0)
2059
    {
2060
      OUTS (outf, dregs (reg));
2061
      OUTS (outf, "=B[");
2062
      OUTS (outf, pregs (ptr));
2063
      OUTS (outf, "] (Z)");
2064
    }
2065
  else if (aop == 2 && sz == 2 && Z == 1 && W == 0)
2066
    {
2067
      OUTS (outf, dregs (reg));
2068
      OUTS (outf, "=B[");
2069
      OUTS (outf, pregs (ptr));
2070
      OUTS (outf, "](X)");
2071
    }
2072
  else if (aop == 0 && sz == 0 && Z == 0 && W == 1)
2073
    {
2074
      OUTS (outf, "[");
2075
      OUTS (outf, pregs (ptr));
2076
      OUTS (outf, "++]=");
2077
      OUTS (outf, dregs (reg));
2078
    }
2079
  else if (aop == 0 && sz == 0 && Z == 1 && W == 1)
2080
    {
2081
      OUTS (outf, "[");
2082
      OUTS (outf, pregs (ptr));
2083
      OUTS (outf, "++]=");
2084
      OUTS (outf, pregs (reg));
2085
    }
2086
  else if (aop == 0 && sz == 1 && Z == 0 && W == 1)
2087
    {
2088
      OUTS (outf, "W[");
2089
      OUTS (outf, pregs (ptr));
2090
      OUTS (outf, "++]=");
2091
      OUTS (outf, dregs (reg));
2092
    }
2093
  else if (aop == 0 && sz == 2 && Z == 0 && W == 1)
2094
    {
2095
      OUTS (outf, "B[");
2096
      OUTS (outf, pregs (ptr));
2097
      OUTS (outf, "++]=");
2098
      OUTS (outf, dregs (reg));
2099
    }
2100
  else if (aop == 1 && sz == 0 && Z == 0 && W == 1)
2101
    {
2102
      OUTS (outf, "[");
2103
      OUTS (outf, pregs (ptr));
2104
      OUTS (outf, "--]=");
2105
      OUTS (outf, dregs (reg));
2106
    }
2107
  else if (aop == 1 && sz == 0 && Z == 1 && W == 1)
2108
    {
2109
      OUTS (outf, "[");
2110
      OUTS (outf, pregs (ptr));
2111
      OUTS (outf, "--]=");
2112
      OUTS (outf, pregs (reg));
2113
    }
2114
  else if (aop == 1 && sz == 1 && Z == 0 && W == 1)
2115
    {
2116
      OUTS (outf, "W[");
2117
      OUTS (outf, pregs (ptr));
2118
      OUTS (outf, "--]=");
2119
      OUTS (outf, dregs (reg));
2120
    }
2121
  else if (aop == 1 && sz == 2 && Z == 0 && W == 1)
2122
    {
2123
      OUTS (outf, "B[");
2124
      OUTS (outf, pregs (ptr));
2125
      OUTS (outf, "--]=");
2126
      OUTS (outf, dregs (reg));
2127
    }
2128
  else if (aop == 2 && sz == 0 && Z == 0 && W == 1)
2129
    {
2130
      OUTS (outf, "[");
2131
      OUTS (outf, pregs (ptr));
2132
      OUTS (outf, "]=");
2133
      OUTS (outf, dregs (reg));
2134
    }
2135
  else if (aop == 2 && sz == 0 && Z == 1 && W == 1)
2136
    {
2137
      OUTS (outf, "[");
2138
      OUTS (outf, pregs (ptr));
2139
      OUTS (outf, "]=");
2140
      OUTS (outf, pregs (reg));
2141
    }
2142
  else if (aop == 2 && sz == 1 && Z == 0 && W == 1)
2143
    {
2144
      OUTS (outf, "W[");
2145
      OUTS (outf, pregs (ptr));
2146
      OUTS (outf, "]=");
2147
      OUTS (outf, dregs (reg));
2148
    }
2149
  else if (aop == 2 && sz == 2 && Z == 0 && W == 1)
2150
    {
2151
      OUTS (outf, "B[");
2152
      OUTS (outf, pregs (ptr));
2153
      OUTS (outf, "]=");
2154
      OUTS (outf, dregs (reg));
2155
    }
2156
  else
2157
    return 0;
2158
 
2159
  return 2;
2160
}
2161
 
2162
static int
2163
decode_LDSTiiFP_0 (TIword iw0, disassemble_info *outf)
2164
{
2165
  /* LDSTiiFP
2166
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
2167
     | 1 | 0 | 1 | 1 | 1 | 0 |.W.|.offset............|.reg...........|
2168
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+  */
2169
  int reg = ((iw0 >> LDSTiiFP_reg_bits) & LDSTiiFP_reg_mask);
2170
  int offset = ((iw0 >> LDSTiiFP_offset_bits) & LDSTiiFP_offset_mask);
2171
  int W = ((iw0 >> LDSTiiFP_W_bits) & LDSTiiFP_W_mask);
2172
 
2173
  if (W == 0)
2174
    {
2175
      OUTS (outf, dpregs (reg));
2176
      OUTS (outf, "=[FP");
2177
      OUTS (outf, negimm5s4 (offset));
2178
      OUTS (outf, "]");
2179
    }
2180
  else if (W == 1)
2181
    {
2182
      OUTS (outf, "[FP");
2183
      OUTS (outf, negimm5s4 (offset));
2184
      OUTS (outf, "]=");
2185
      OUTS (outf, dpregs (reg));
2186
    }
2187
  else
2188
    return 0;
2189
 
2190
  return 2;
2191
}
2192
 
2193
static int
2194
decode_LDSTii_0 (TIword iw0, disassemble_info *outf)
2195
{
2196
  /* LDSTii
2197
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
2198
     | 1 | 0 | 1 |.W.|.op....|.offset........|.ptr.......|.reg.......|
2199
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+  */
2200
  int reg = ((iw0 >> LDSTii_reg_bit) & LDSTii_reg_mask);
2201
  int ptr = ((iw0 >> LDSTii_ptr_bit) & LDSTii_ptr_mask);
2202
  int offset = ((iw0 >> LDSTii_offset_bit) & LDSTii_offset_mask);
2203
  int op = ((iw0 >> LDSTii_op_bit) & LDSTii_op_mask);
2204
  int W = ((iw0 >> LDSTii_W_bit) & LDSTii_W_mask);
2205
 
2206
  if (W == 0 && op == 0)
2207
    {
2208
      OUTS (outf, dregs (reg));
2209
      OUTS (outf, "=[");
2210
      OUTS (outf, pregs (ptr));
2211
      OUTS (outf, "+");
2212
      OUTS (outf, uimm4s4 (offset));
2213
      OUTS (outf, "]");
2214
    }
2215
  else if (W == 0 && op == 1)
2216
    {
2217
      OUTS (outf, dregs (reg));
2218
      OUTS (outf, "=W[");
2219
      OUTS (outf, pregs (ptr));
2220
      OUTS (outf, "+");
2221
      OUTS (outf, uimm4s2 (offset));
2222
      OUTS (outf, "] (Z)");
2223
    }
2224
  else if (W == 0 && op == 2)
2225
    {
2226
      OUTS (outf, dregs (reg));
2227
      OUTS (outf, "=W[");
2228
      OUTS (outf, pregs (ptr));
2229
      OUTS (outf, "+");
2230
      OUTS (outf, uimm4s2 (offset));
2231
      OUTS (outf, "](X)");
2232
    }
2233
  else if (W == 0 && op == 3)
2234
    {
2235
      OUTS (outf, pregs (reg));
2236
      OUTS (outf, "=[");
2237
      OUTS (outf, pregs (ptr));
2238
      OUTS (outf, "+");
2239
      OUTS (outf, uimm4s4 (offset));
2240
      OUTS (outf, "]");
2241
    }
2242
  else if (W == 1 && op == 0)
2243
    {
2244
      OUTS (outf, "[");
2245
      OUTS (outf, pregs (ptr));
2246
      OUTS (outf, "+");
2247
      OUTS (outf, uimm4s4 (offset));
2248
      OUTS (outf, "]=");
2249
      OUTS (outf, dregs (reg));
2250
    }
2251
  else if (W == 1 && op == 1)
2252
    {
2253
      OUTS (outf, "W");
2254
      OUTS (outf, "[");
2255
      OUTS (outf, pregs (ptr));
2256
      OUTS (outf, "+");
2257
      OUTS (outf, uimm4s2 (offset));
2258
      OUTS (outf, "]");
2259
      OUTS (outf, "=");
2260
      OUTS (outf, dregs (reg));
2261
    }
2262
  else if (W == 1 && op == 3)
2263
    {
2264
      OUTS (outf, "[");
2265
      OUTS (outf, pregs (ptr));
2266
      OUTS (outf, "+");
2267
      OUTS (outf, uimm4s4 (offset));
2268
      OUTS (outf, "]=");
2269
      OUTS (outf, pregs (reg));
2270
    }
2271
  else
2272
    return 0;
2273
 
2274
  return 2;
2275
}
2276
 
2277
static int
2278
decode_LoopSetup_0 (TIword iw0, TIword iw1, bfd_vma pc, disassemble_info *outf)
2279
{
2280
  /* LoopSetup
2281
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
2282
     | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 1 |.rop...|.c.|.soffset.......|
2283
     |.reg...........| - | - |.eoffset...............................|
2284
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+  */
2285
  int c   = ((iw0 >> (LoopSetup_c_bits - 16)) & LoopSetup_c_mask);
2286
  int reg = ((iw1 >> LoopSetup_reg_bits) & LoopSetup_reg_mask);
2287
  int rop = ((iw0 >> (LoopSetup_rop_bits - 16)) & LoopSetup_rop_mask);
2288
  int soffset = ((iw0 >> (LoopSetup_soffset_bits - 16)) & LoopSetup_soffset_mask);
2289
  int eoffset = ((iw1 >> LoopSetup_eoffset_bits) & LoopSetup_eoffset_mask);
2290
 
2291
  if (rop == 0)
2292
    {
2293
      OUTS (outf, "LSETUP");
2294
      OUTS (outf, "(");
2295
      OUTS (outf, pcrel4 (soffset));
2296
      OUTS (outf, ",");
2297
      OUTS (outf, lppcrel10 (eoffset));
2298
      OUTS (outf, ")");
2299
      OUTS (outf, counters (c));
2300
    }
2301
  else if (rop == 1)
2302
    {
2303
      OUTS (outf, "LSETUP");
2304
      OUTS (outf, "(");
2305
      OUTS (outf, pcrel4 (soffset));
2306
      OUTS (outf, ",");
2307
      OUTS (outf, lppcrel10 (eoffset));
2308
      OUTS (outf, ")");
2309
      OUTS (outf, counters (c));
2310
      OUTS (outf, "=");
2311
      OUTS (outf, pregs (reg));
2312
    }
2313
  else if (rop == 3)
2314
    {
2315
      OUTS (outf, "LSETUP");
2316
      OUTS (outf, "(");
2317
      OUTS (outf, pcrel4 (soffset));
2318
      OUTS (outf, ",");
2319
      OUTS (outf, lppcrel10 (eoffset));
2320
      OUTS (outf, ")");
2321
      OUTS (outf, counters (c));
2322
      OUTS (outf, "=");
2323
      OUTS (outf, pregs (reg));
2324
      OUTS (outf, ">>1");
2325
    }
2326
  else
2327
    return 0;
2328
 
2329
  return 4;
2330
}
2331
 
2332
static int
2333
decode_LDIMMhalf_0 (TIword iw0, TIword iw1, disassemble_info *outf)
2334
{
2335
  /* LDIMMhalf
2336
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
2337
     | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 1 |.Z.|.H.|.S.|.grp...|.reg.......|
2338
     |.hword.........................................................|
2339
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+  */
2340
  int H = ((iw0 >> (LDIMMhalf_H_bits - 16)) & LDIMMhalf_H_mask);
2341
  int Z = ((iw0 >> (LDIMMhalf_Z_bits - 16)) & LDIMMhalf_Z_mask);
2342
  int S = ((iw0 >> (LDIMMhalf_S_bits - 16)) & LDIMMhalf_S_mask);
2343
  int reg = ((iw0 >> (LDIMMhalf_reg_bits - 16)) & LDIMMhalf_reg_mask);
2344
  int grp = ((iw0 >> (LDIMMhalf_grp_bits - 16)) & LDIMMhalf_grp_mask);
2345
  int hword = ((iw1 >> LDIMMhalf_hword_bits) & LDIMMhalf_hword_mask);
2346
 
2347
  if (grp == 0 && H == 0 && S == 0 && Z == 0)
2348
    {
2349
      OUTS (outf, dregs_lo (reg));
2350
      OUTS (outf, "=");
2351
      OUTS (outf, imm16 (hword));
2352
    }
2353
  else if (grp == 0 && H == 1 && S == 0 && Z == 0)
2354
    {
2355
      OUTS (outf, dregs_hi (reg));
2356
      OUTS (outf, "=");
2357
      OUTS (outf, imm16 (hword));
2358
    }
2359
  else if (grp == 0 && H == 0 && S == 1 && Z == 0)
2360
    {
2361
      OUTS (outf, dregs (reg));
2362
      OUTS (outf, "=");
2363
      OUTS (outf, imm16 (hword));
2364
      OUTS (outf, " (X)");
2365
    }
2366
  else if (H == 0 && S == 1 && Z == 0)
2367
    {
2368
      OUTS (outf, regs (reg, grp));
2369
      OUTS (outf, "=");
2370
      OUTS (outf, imm16 (hword));
2371
      OUTS (outf, " (X)");
2372
    }
2373
  else if (H == 0 && S == 0 && Z == 1)
2374
    {
2375
      OUTS (outf, regs (reg, grp));
2376
      OUTS (outf, "=");
2377
      OUTS (outf, luimm16 (hword));
2378
      OUTS (outf, "(Z)");
2379
    }
2380
  else if (H == 0 && S == 0 && Z == 0)
2381
    {
2382
      OUTS (outf, regs_lo (reg, grp));
2383
      OUTS (outf, "=");
2384
      OUTS (outf, luimm16 (hword));
2385
    }
2386
  else if (H == 1 && S == 0 && Z == 0)
2387
    {
2388
      OUTS (outf, regs_hi (reg, grp));
2389
      OUTS (outf, "=");
2390
      OUTS (outf, huimm16 (hword));
2391
    }
2392
  else
2393
    return 0;
2394
 
2395
  return 4;
2396
}
2397
 
2398
static int
2399
decode_CALLa_0 (TIword iw0, TIword iw1, bfd_vma pc, disassemble_info *outf)
2400
{
2401
  /* CALLa
2402
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
2403
     | 1 | 1 | 1 | 0 | 0 | 0 | 1 |.S.|.msw...........................|
2404
     |.lsw...........................................................|
2405
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+  */
2406
  int S   = ((iw0 >> (CALLa_S_bits - 16)) & CALLa_S_mask);
2407
  int lsw = ((iw1 >> 0) & 0xffff);
2408
  int msw = ((iw0 >> 0) & 0xff);
2409
 
2410
  if (S == 1)
2411
    OUTS (outf, "CALL  ");
2412
  else if (S == 0)
2413
    OUTS (outf, "JUMP.L  ");
2414
  else
2415
    return 0;
2416
 
2417
  OUTS (outf, pcrel24 (((msw) << 16) | (lsw)));
2418
  return 4;
2419
}
2420
 
2421
static int
2422
decode_LDSTidxI_0 (TIword iw0, TIword iw1, disassemble_info *outf)
2423
{
2424
  /* LDSTidxI
2425
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
2426
     | 1 | 1 | 1 | 0 | 0 | 1 |.W.|.Z.|.sz....|.ptr.......|.reg.......|
2427
     |.offset........................................................|
2428
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+  */
2429
  int Z = ((iw0 >> (LDSTidxI_Z_bits - 16)) & LDSTidxI_Z_mask);
2430
  int W = ((iw0 >> (LDSTidxI_W_bits - 16)) & LDSTidxI_W_mask);
2431
  int sz = ((iw0 >> (LDSTidxI_sz_bits - 16)) & LDSTidxI_sz_mask);
2432
  int reg = ((iw0 >> (LDSTidxI_reg_bits - 16)) & LDSTidxI_reg_mask);
2433
  int ptr = ((iw0 >> (LDSTidxI_ptr_bits - 16)) & LDSTidxI_ptr_mask);
2434
  int offset = ((iw1 >> LDSTidxI_offset_bits) & LDSTidxI_offset_mask);
2435
 
2436
  if (W == 0 && sz == 0 && Z == 0)
2437
    {
2438
      OUTS (outf, dregs (reg));
2439
      OUTS (outf, "=[");
2440
      OUTS (outf, pregs (ptr));
2441
      OUTS (outf, "+");
2442
      OUTS (outf, imm16s4 (offset));
2443
      OUTS (outf, "]");
2444
    }
2445
  else if (W == 0 && sz == 0 && Z == 1)
2446
    {
2447
      OUTS (outf, pregs (reg));
2448
      OUTS (outf, "=[");
2449
      OUTS (outf, pregs (ptr));
2450
      OUTS (outf, "+");
2451
      OUTS (outf, imm16s4 (offset));
2452
      OUTS (outf, "]");
2453
    }
2454
  else if (W == 0 && sz == 1 && Z == 0)
2455
    {
2456
      OUTS (outf, dregs (reg));
2457
      OUTS (outf, "=W[");
2458
      OUTS (outf, pregs (ptr));
2459
      OUTS (outf, "+");
2460
      OUTS (outf, imm16s2 (offset));
2461
      OUTS (outf, "] (Z)");
2462
    }
2463
  else if (W == 0 && sz == 1 && Z == 1)
2464
    {
2465
      OUTS (outf, dregs (reg));
2466
      OUTS (outf, "=W[");
2467
      OUTS (outf, pregs (ptr));
2468
      OUTS (outf, "+");
2469
      OUTS (outf, imm16s2 (offset));
2470
      OUTS (outf, "](X)");
2471
    }
2472
  else if (W == 0 && sz == 2 && Z == 0)
2473
    {
2474
      OUTS (outf, dregs (reg));
2475
      OUTS (outf, "=B[");
2476
      OUTS (outf, pregs (ptr));
2477
      OUTS (outf, "+");
2478
      OUTS (outf, imm16 (offset));
2479
      OUTS (outf, "] (Z)");
2480
    }
2481
  else if (W == 0 && sz == 2 && Z == 1)
2482
    {
2483
      OUTS (outf, dregs (reg));
2484
      OUTS (outf, "=B[");
2485
      OUTS (outf, pregs (ptr));
2486
      OUTS (outf, "+");
2487
      OUTS (outf, imm16 (offset));
2488
      OUTS (outf, "](X)");
2489
    }
2490
  else if (W == 1 && sz == 0 && Z == 0)
2491
    {
2492
      OUTS (outf, "[");
2493
      OUTS (outf, pregs (ptr));
2494
      OUTS (outf, "+");
2495
      OUTS (outf, imm16s4 (offset));
2496
      OUTS (outf, "]=");
2497
      OUTS (outf, dregs (reg));
2498
    }
2499
  else if (W == 1 && sz == 0 && Z == 1)
2500
    {
2501
      OUTS (outf, "[");
2502
      OUTS (outf, pregs (ptr));
2503
      OUTS (outf, "+");
2504
      OUTS (outf, imm16s4 (offset));
2505
      OUTS (outf, "]=");
2506
      OUTS (outf, pregs (reg));
2507
    }
2508
  else if (W == 1 && sz == 1 && Z == 0)
2509
    {
2510
      OUTS (outf, "W[");
2511
      OUTS (outf, pregs (ptr));
2512
      OUTS (outf, "+");
2513
      OUTS (outf, imm16s2 (offset));
2514
      OUTS (outf, "]=");
2515
      OUTS (outf, dregs (reg));
2516
    }
2517
  else if (W == 1 && sz == 2 && Z == 0)
2518
    {
2519
      OUTS (outf, "B[");
2520
      OUTS (outf, pregs (ptr));
2521
      OUTS (outf, "+");
2522
      OUTS (outf, imm16 (offset));
2523
      OUTS (outf, "]=");
2524
      OUTS (outf, dregs (reg));
2525
    }
2526
  else
2527
    return 0;
2528
 
2529
  return 4;
2530
}
2531
 
2532
static int
2533
decode_linkage_0 (TIword iw0, TIword iw1, disassemble_info *outf)
2534
{
2535
  /* linkage
2536
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
2537
     | 1 | 1 | 1 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |.R.|
2538
     |.framesize.....................................................|
2539
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+  */
2540
  int R = ((iw0 >> (Linkage_R_bits - 16)) & Linkage_R_mask);
2541
  int framesize = ((iw1 >> Linkage_framesize_bits) & Linkage_framesize_mask);
2542
 
2543
  if (R == 0)
2544
    {
2545
      OUTS (outf, "LINK ");
2546
      OUTS (outf, uimm16s4 (framesize));
2547
    }
2548
  else if (R == 1)
2549
    OUTS (outf, "UNLINK");
2550
  else
2551
    return 0;
2552
 
2553
  return 4;
2554
}
2555
 
2556
static int
2557
decode_dsp32mac_0 (TIword iw0, TIword iw1, disassemble_info *outf)
2558
{
2559
  /* dsp32mac
2560
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
2561
     | 1 | 1 | 0 | 0 |.M.| 0 | 0 |.mmod..........|.MM|.P.|.w1|.op1...|
2562
     |.h01|.h11|.w0|.op0...|.h00|.h10|.dst.......|.src0......|.src1..|
2563
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+  */
2564
  int op1  = ((iw0 >> (DSP32Mac_op1_bits - 16)) & DSP32Mac_op1_mask);
2565
  int w1   = ((iw0 >> (DSP32Mac_w1_bits - 16)) & DSP32Mac_w1_mask);
2566
  int P    = ((iw0 >> (DSP32Mac_p_bits - 16)) & DSP32Mac_p_mask);
2567
  int MM   = ((iw0 >> (DSP32Mac_MM_bits - 16)) & DSP32Mac_MM_mask);
2568
  int mmod = ((iw0 >> (DSP32Mac_mmod_bits - 16)) & DSP32Mac_mmod_mask);
2569
  int w0   = ((iw1 >> DSP32Mac_w0_bits) & DSP32Mac_w0_mask);
2570
  int src0 = ((iw1 >> DSP32Mac_src0_bits) & DSP32Mac_src0_mask);
2571
  int src1 = ((iw1 >> DSP32Mac_src1_bits) & DSP32Mac_src1_mask);
2572
  int dst  = ((iw1 >> DSP32Mac_dst_bits) & DSP32Mac_dst_mask);
2573
  int h10  = ((iw1 >> DSP32Mac_h10_bits) & DSP32Mac_h10_mask);
2574
  int h00  = ((iw1 >> DSP32Mac_h00_bits) & DSP32Mac_h00_mask);
2575
  int op0  = ((iw1 >> DSP32Mac_op0_bits) & DSP32Mac_op0_mask);
2576
  int h11  = ((iw1 >> DSP32Mac_h11_bits) & DSP32Mac_h11_mask);
2577
  int h01  = ((iw1 >> DSP32Mac_h01_bits) & DSP32Mac_h01_mask);
2578
 
2579
  if (w0 == 0 && w1 == 0 && op1 == 3 && op0 == 3)
2580
    return 0;
2581
 
2582
  if (op1 == 3 && MM)
2583
    return 0;
2584
 
2585
  if ((w1 || w0) && mmod == M_W32)
2586
    return 0;
2587
 
2588
  if (((1 << mmod) & (P ? 0x31b : 0x1b5f)) == 0)
2589
    return 0;
2590
 
2591
  if (w1 == 1 || op1 != 3)
2592
    {
2593
      if (w1)
2594
        OUTS (outf, P ? dregs (dst + 1) : dregs_hi (dst));
2595
 
2596
      if (op1 == 3)
2597
        OUTS (outf, " = A1");
2598
      else
2599
        {
2600
          if (w1)
2601
            OUTS (outf, " = (");
2602
          decode_macfunc (1, op1, h01, h11, src0, src1, outf);
2603
          if (w1)
2604
            OUTS (outf, ")");
2605
        }
2606
 
2607
      if (w0 == 1 || op0 != 3)
2608
        {
2609
          if (MM)
2610
            OUTS (outf, " (M)");
2611
          MM = 0;
2612
          OUTS (outf, ", ");
2613
        }
2614
    }
2615
 
2616
  if (w0 == 1 || op0 != 3)
2617
    {
2618
      if (w0)
2619
        OUTS (outf, P ? dregs (dst) : dregs_lo (dst));
2620
 
2621
      if (op0 == 3)
2622
        OUTS (outf, " = A0");
2623
      else
2624
        {
2625
          if (w0)
2626
            OUTS (outf, " = (");
2627
          decode_macfunc (0, op0, h00, h10, src0, src1, outf);
2628
          if (w0)
2629
            OUTS (outf, ")");
2630
        }
2631
    }
2632
 
2633
  decode_optmode (mmod, MM, outf);
2634
 
2635
  return 4;
2636
}
2637
 
2638
static int
2639
decode_dsp32mult_0 (TIword iw0, TIword iw1, disassemble_info *outf)
2640
{
2641
  /* dsp32mult
2642
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
2643
     | 1 | 1 | 0 | 0 |.M.| 0 | 1 |.mmod..........|.MM|.P.|.w1|.op1...|
2644
     |.h01|.h11|.w0|.op0...|.h00|.h10|.dst.......|.src0......|.src1..|
2645
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+  */
2646
  int w1   = ((iw0 >> (DSP32Mac_w1_bits - 16)) & DSP32Mac_w1_mask);
2647
  int P    = ((iw0 >> (DSP32Mac_p_bits - 16)) & DSP32Mac_p_mask);
2648
  int MM   = ((iw0 >> (DSP32Mac_MM_bits - 16)) & DSP32Mac_MM_mask);
2649
  int mmod = ((iw0 >> (DSP32Mac_mmod_bits - 16)) & DSP32Mac_mmod_mask);
2650
  int w0   = ((iw1 >> DSP32Mac_w0_bits) & DSP32Mac_w0_mask);
2651
  int src0 = ((iw1 >> DSP32Mac_src0_bits) & DSP32Mac_src0_mask);
2652
  int src1 = ((iw1 >> DSP32Mac_src1_bits) & DSP32Mac_src1_mask);
2653
  int dst  = ((iw1 >> DSP32Mac_dst_bits) & DSP32Mac_dst_mask);
2654
  int h10  = ((iw1 >> DSP32Mac_h10_bits) & DSP32Mac_h10_mask);
2655
  int h00  = ((iw1 >> DSP32Mac_h00_bits) & DSP32Mac_h00_mask);
2656
  int h11  = ((iw1 >> DSP32Mac_h11_bits) & DSP32Mac_h11_mask);
2657
  int h01  = ((iw1 >> DSP32Mac_h01_bits) & DSP32Mac_h01_mask);
2658
 
2659
  if (w1 == 0 && w0 == 0)
2660
    return 0;
2661
 
2662
  if (((1 << mmod) & (P ? 0x313 : 0x1b57)) == 0)
2663
    return 0;
2664
 
2665
  if (w1)
2666
    {
2667
      OUTS (outf, P ? dregs (dst | 1) : dregs_hi (dst));
2668
      OUTS (outf, " = ");
2669
      decode_multfunc (h01, h11, src0, src1, outf);
2670
 
2671
      if (w0)
2672
        {
2673
          if (MM)
2674
            OUTS (outf, " (M)");
2675
          MM = 0;
2676
          OUTS (outf, ", ");
2677
        }
2678
    }
2679
 
2680
  if (w0)
2681
    {
2682
      OUTS (outf, dregs (dst));
2683
      OUTS (outf, " = ");
2684
      decode_multfunc (h00, h10, src0, src1, outf);
2685
    }
2686
 
2687
  decode_optmode (mmod, MM, outf);
2688
  return 4;
2689
}
2690
 
2691
static int
2692
decode_dsp32alu_0 (TIword iw0, TIword iw1, disassemble_info *outf)
2693
{
2694
  /* dsp32alu
2695
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
2696
     | 1 | 1 | 0 | 0 |.M.| 1 | 0 | - | - | - |.HL|.aopcde............|
2697
     |.aop...|.s.|.x.|.dst0......|.dst1......|.src0......|.src1......|
2698
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+  */
2699
  int s    = ((iw1 >> DSP32Alu_s_bits) & DSP32Alu_s_mask);
2700
  int x    = ((iw1 >> DSP32Alu_x_bits) & DSP32Alu_x_mask);
2701
  int aop  = ((iw1 >> DSP32Alu_aop_bits) & DSP32Alu_aop_mask);
2702
  int src0 = ((iw1 >> DSP32Alu_src0_bits) & DSP32Alu_src0_mask);
2703
  int src1 = ((iw1 >> DSP32Alu_src1_bits) & DSP32Alu_src1_mask);
2704
  int dst0 = ((iw1 >> DSP32Alu_dst0_bits) & DSP32Alu_dst0_mask);
2705
  int dst1 = ((iw1 >> DSP32Alu_dst1_bits) & DSP32Alu_dst1_mask);
2706
  int HL   = ((iw0 >> (DSP32Alu_HL_bits - 16)) & DSP32Alu_HL_mask);
2707
  int aopcde = ((iw0 >> (DSP32Alu_aopcde_bits - 16)) & DSP32Alu_aopcde_mask);
2708
 
2709
  if (aop == 0 && aopcde == 9 && HL == 0 && s == 0)
2710
    {
2711
      OUTS (outf, "A0.L=");
2712
      OUTS (outf, dregs_lo (src0));
2713
    }
2714
  else if (aop == 2 && aopcde == 9 && HL == 1 && s == 0)
2715
    {
2716
      OUTS (outf, "A1.H=");
2717
      OUTS (outf, dregs_hi (src0));
2718
    }
2719
  else if (aop == 2 && aopcde == 9 && HL == 0 && s == 0)
2720
    {
2721
      OUTS (outf, "A1.L=");
2722
      OUTS (outf, dregs_lo (src0));
2723
    }
2724
  else if (aop == 0 && aopcde == 9 && HL == 1 && s == 0)
2725
    {
2726
      OUTS (outf, "A0.H=");
2727
      OUTS (outf, dregs_hi (src0));
2728
    }
2729
  else if (x == 1 && HL == 1 && aop == 3 && aopcde == 5)
2730
    {
2731
      OUTS (outf, dregs_hi (dst0));
2732
      OUTS (outf, "=");
2733
      OUTS (outf, dregs (src0));
2734
      OUTS (outf, "-");
2735
      OUTS (outf, dregs (src1));
2736
      OUTS (outf, "(RND20)");
2737
    }
2738
  else if (x == 1 && HL == 1 && aop == 2 && aopcde == 5)
2739
    {
2740
      OUTS (outf, dregs_hi (dst0));
2741
      OUTS (outf, "=");
2742
      OUTS (outf, dregs (src0));
2743
      OUTS (outf, "+");
2744
      OUTS (outf, dregs (src1));
2745
      OUTS (outf, "(RND20)");
2746
    }
2747
  else if (x == 0 && HL == 0 && aop == 1 && aopcde == 5)
2748
    {
2749
      OUTS (outf, dregs_lo (dst0));
2750
      OUTS (outf, "=");
2751
      OUTS (outf, dregs (src0));
2752
      OUTS (outf, "-");
2753
      OUTS (outf, dregs (src1));
2754
      OUTS (outf, "(RND12)");
2755
    }
2756
  else if (x == 0 && HL == 0 && aop == 0 && aopcde == 5)
2757
    {
2758
      OUTS (outf, dregs_lo (dst0));
2759
      OUTS (outf, "=");
2760
      OUTS (outf, dregs (src0));
2761
      OUTS (outf, "+");
2762
      OUTS (outf, dregs (src1));
2763
      OUTS (outf, "(RND12)");
2764
    }
2765
  else if (x == 1 && HL == 0 && aop == 3 && aopcde == 5)
2766
    {
2767
      OUTS (outf, dregs_lo (dst0));
2768
      OUTS (outf, "=");
2769
      OUTS (outf, dregs (src0));
2770
      OUTS (outf, "-");
2771
      OUTS (outf, dregs (src1));
2772
      OUTS (outf, "(RND20)");
2773
    }
2774
  else if (x == 0 && HL == 1 && aop == 0 && aopcde == 5)
2775
    {
2776
      OUTS (outf, dregs_hi (dst0));
2777
      OUTS (outf, "=");
2778
      OUTS (outf, dregs (src0));
2779
      OUTS (outf, "+");
2780
      OUTS (outf, dregs (src1));
2781
      OUTS (outf, "(RND12)");
2782
    }
2783
  else if (x == 1 && HL == 0 && aop == 2 && aopcde == 5)
2784
    {
2785
      OUTS (outf, dregs_lo (dst0));
2786
      OUTS (outf, "=");
2787
      OUTS (outf, dregs (src0));
2788
      OUTS (outf, "+");
2789
      OUTS (outf, dregs (src1));
2790
      OUTS (outf, "(RND20)");
2791
    }
2792
  else if (x == 0 && HL == 1 && aop == 1 && aopcde == 5)
2793
    {
2794
      OUTS (outf, dregs_hi (dst0));
2795
      OUTS (outf, "=");
2796
      OUTS (outf, dregs (src0));
2797
      OUTS (outf, "-");
2798
      OUTS (outf, dregs (src1));
2799
      OUTS (outf, "(RND12)");
2800
    }
2801
  else if (HL == 1 && aop == 0 && aopcde == 2)
2802
    {
2803
      OUTS (outf, dregs_hi (dst0));
2804
      OUTS (outf, "=");
2805
      OUTS (outf, dregs_lo (src0));
2806
      OUTS (outf, "+");
2807
      OUTS (outf, dregs_lo (src1));
2808
      OUTS (outf, " ");
2809
      amod1 (s, x, outf);
2810
    }
2811
  else if (HL == 1 && aop == 1 && aopcde == 2)
2812
    {
2813
      OUTS (outf, dregs_hi (dst0));
2814
      OUTS (outf, "=");
2815
      OUTS (outf, dregs_lo (src0));
2816
      OUTS (outf, "+");
2817
      OUTS (outf, dregs_hi (src1));
2818
      OUTS (outf, " ");
2819
      amod1 (s, x, outf);
2820
    }
2821
  else if (HL == 1 && aop == 2 && aopcde == 2)
2822
    {
2823
      OUTS (outf, dregs_hi (dst0));
2824
      OUTS (outf, "=");
2825
      OUTS (outf, dregs_hi (src0));
2826
      OUTS (outf, "+");
2827
      OUTS (outf, dregs_lo (src1));
2828
      OUTS (outf, " ");
2829
      amod1 (s, x, outf);
2830
    }
2831
  else if (HL == 1 && aop == 3 && aopcde == 2)
2832
    {
2833
      OUTS (outf, dregs_hi (dst0));
2834
      OUTS (outf, "=");
2835
      OUTS (outf, dregs_hi (src0));
2836
      OUTS (outf, "+");
2837
      OUTS (outf, dregs_hi (src1));
2838
      OUTS (outf, " ");
2839
      amod1 (s, x, outf);
2840
    }
2841
  else if (HL == 0 && aop == 0 && aopcde == 3)
2842
    {
2843
      OUTS (outf, dregs_lo (dst0));
2844
      OUTS (outf, "=");
2845
      OUTS (outf, dregs_lo (src0));
2846
      OUTS (outf, "-");
2847
      OUTS (outf, dregs_lo (src1));
2848
      OUTS (outf, " ");
2849
      amod1 (s, x, outf);
2850
    }
2851
  else if (HL == 0 && aop == 1 && aopcde == 3)
2852
    {
2853
      OUTS (outf, dregs_lo (dst0));
2854
      OUTS (outf, "=");
2855
      OUTS (outf, dregs_lo (src0));
2856
      OUTS (outf, "-");
2857
      OUTS (outf, dregs_hi (src1));
2858
      OUTS (outf, " ");
2859
      amod1 (s, x, outf);
2860
    }
2861
  else if (HL == 0 && aop == 3 && aopcde == 2)
2862
    {
2863
      OUTS (outf, dregs_lo (dst0));
2864
      OUTS (outf, "=");
2865
      OUTS (outf, dregs_hi (src0));
2866
      OUTS (outf, "+");
2867
      OUTS (outf, dregs_hi (src1));
2868
      OUTS (outf, " ");
2869
      amod1 (s, x, outf);
2870
    }
2871
  else if (HL == 1 && aop == 0 && aopcde == 3)
2872
    {
2873
      OUTS (outf, dregs_hi (dst0));
2874
      OUTS (outf, "=");
2875
      OUTS (outf, dregs_lo (src0));
2876
      OUTS (outf, "-");
2877
      OUTS (outf, dregs_lo (src1));
2878
      OUTS (outf, " ");
2879
      amod1 (s, x, outf);
2880
    }
2881
  else if (HL == 1 && aop == 1 && aopcde == 3)
2882
    {
2883
      OUTS (outf, dregs_hi (dst0));
2884
      OUTS (outf, "=");
2885
      OUTS (outf, dregs_lo (src0));
2886
      OUTS (outf, "-");
2887
      OUTS (outf, dregs_hi (src1));
2888
      OUTS (outf, " ");
2889
      amod1 (s, x, outf);
2890
    }
2891
  else if (HL == 1 && aop == 2 && aopcde == 3)
2892
    {
2893
      OUTS (outf, dregs_hi (dst0));
2894
      OUTS (outf, "=");
2895
      OUTS (outf, dregs_hi (src0));
2896
      OUTS (outf, "-");
2897
      OUTS (outf, dregs_lo (src1));
2898
      OUTS (outf, " ");
2899
      amod1 (s, x, outf);
2900
    }
2901
  else if (HL == 1 && aop == 3 && aopcde == 3)
2902
    {
2903
      OUTS (outf, dregs_hi (dst0));
2904
      OUTS (outf, "=");
2905
      OUTS (outf, dregs_hi (src0));
2906
      OUTS (outf, "-");
2907
      OUTS (outf, dregs_hi (src1));
2908
      OUTS (outf, " ");
2909
      amod1 (s, x, outf);
2910
    }
2911
  else if (HL == 0 && aop == 2 && aopcde == 2)
2912
    {
2913
      OUTS (outf, dregs_lo (dst0));
2914
      OUTS (outf, "=");
2915
      OUTS (outf, dregs_hi (src0));
2916
      OUTS (outf, "+");
2917
      OUTS (outf, dregs_lo (src1));
2918
      OUTS (outf, " ");
2919
      amod1 (s, x, outf);
2920
    }
2921
  else if (HL == 0 && aop == 1 && aopcde == 2)
2922
    {
2923
      OUTS (outf, dregs_lo (dst0));
2924
      OUTS (outf, "=");
2925
      OUTS (outf, dregs_lo (src0));
2926
      OUTS (outf, "+");
2927
      OUTS (outf, dregs_hi (src1));
2928
      OUTS (outf, " ");
2929
      amod1 (s, x, outf);
2930
    }
2931
  else if (HL == 0 && aop == 2 && aopcde == 3)
2932
    {
2933
      OUTS (outf, dregs_lo (dst0));
2934
      OUTS (outf, "=");
2935
      OUTS (outf, dregs_hi (src0));
2936
      OUTS (outf, "-");
2937
      OUTS (outf, dregs_lo (src1));
2938
      OUTS (outf, " ");
2939
      amod1 (s, x, outf);
2940
    }
2941
  else if (HL == 0 && aop == 3 && aopcde == 3)
2942
    {
2943
      OUTS (outf, dregs_lo (dst0));
2944
      OUTS (outf, "=");
2945
      OUTS (outf, dregs_hi (src0));
2946
      OUTS (outf, "-");
2947
      OUTS (outf, dregs_hi (src1));
2948
      OUTS (outf, " ");
2949
      amod1 (s, x, outf);
2950
    }
2951
  else if (HL == 0 && aop == 0 && aopcde == 2)
2952
    {
2953
      OUTS (outf, dregs_lo (dst0));
2954
      OUTS (outf, "=");
2955
      OUTS (outf, dregs_lo (src0));
2956
      OUTS (outf, "+");
2957
      OUTS (outf, dregs_lo (src1));
2958
      OUTS (outf, " ");
2959
      amod1 (s, x, outf);
2960
    }
2961
  else if (aop == 0 && aopcde == 9 && s == 1)
2962
    {
2963
      OUTS (outf, "A0=");
2964
      OUTS (outf, dregs (src0));
2965
    }
2966
  else if (aop == 3 && aopcde == 11 && s == 0)
2967
    OUTS (outf, "A0-=A1");
2968
 
2969
  else if (aop == 3 && aopcde == 11 && s == 1)
2970
    OUTS (outf, "A0-=A1(W32)");
2971
 
2972
  else if (aop == 3 && aopcde == 22 && HL == 1)
2973
    {
2974
      OUTS (outf, dregs (dst0));
2975
      OUTS (outf, "=BYTEOP2M(");
2976
      OUTS (outf, dregs (src0 + 1));
2977
      OUTS (outf, ":");
2978
      OUTS (outf, imm5 (src0));
2979
      OUTS (outf, ",");
2980
      OUTS (outf, dregs (src1 + 1));
2981
      OUTS (outf, ":");
2982
      OUTS (outf, imm5 (src1));
2983
      OUTS (outf, ")(TH");
2984
      if (s == 1)
2985
        OUTS (outf, ", R)");
2986
      else
2987
        OUTS (outf, ")");
2988
    }
2989
  else if (aop == 3 && aopcde == 22 && HL == 0)
2990
    {
2991
      OUTS (outf, dregs (dst0));
2992
      OUTS (outf, "=BYTEOP2M(");
2993
      OUTS (outf, dregs (src0 + 1));
2994
      OUTS (outf, ":");
2995
      OUTS (outf, imm5 (src0));
2996
      OUTS (outf, ",");
2997
      OUTS (outf, dregs (src1 + 1));
2998
      OUTS (outf, ":");
2999
      OUTS (outf, imm5 (src1));
3000
      OUTS (outf, ")(TL");
3001
      if (s == 1)
3002
        OUTS (outf, ", R)");
3003
      else
3004
        OUTS (outf, ")");
3005
    }
3006
  else if (aop == 2 && aopcde == 22 && HL == 1)
3007
    {
3008
      OUTS (outf, dregs (dst0));
3009
      OUTS (outf, "=BYTEOP2M(");
3010
      OUTS (outf, dregs (src0 + 1));
3011
      OUTS (outf, ":");
3012
      OUTS (outf, imm5 (src0));
3013
      OUTS (outf, ",");
3014
      OUTS (outf, dregs (src1 + 1));
3015
      OUTS (outf, ":");
3016
      OUTS (outf, imm5 (src1));
3017
      OUTS (outf, ")(RNDH");
3018
      if (s == 1)
3019
        OUTS (outf, ", R)");
3020
      else
3021
        OUTS (outf, ")");
3022
    }
3023
  else if (aop == 2 && aopcde == 22 && HL == 0)
3024
    {
3025
      OUTS (outf, dregs (dst0));
3026
      OUTS (outf, "=BYTEOP2M(");
3027
      OUTS (outf, dregs (src0 + 1));
3028
      OUTS (outf, ":");
3029
      OUTS (outf, imm5 (src0));
3030
      OUTS (outf, ",");
3031
      OUTS (outf, dregs (src1 + 1));
3032
      OUTS (outf, ":");
3033
      OUTS (outf, imm5 (src1));
3034
      OUTS (outf, ")(RNDL");
3035
      if (s == 1)
3036
        OUTS (outf, ", R)");
3037
      else
3038
        OUTS (outf, ")");
3039
    }
3040
  else if (aop == 1 && aopcde == 22 && HL == 1)
3041
    {
3042
      OUTS (outf, dregs (dst0));
3043
      OUTS (outf, "=BYTEOP2P(");
3044
      OUTS (outf, dregs (src0 + 1));
3045
      OUTS (outf, ":");
3046
      OUTS (outf, imm5 (src0));
3047
      OUTS (outf, ",");
3048
      OUTS (outf, dregs (src1 + 1));
3049
      OUTS (outf, ":");
3050
      OUTS (outf, imm5 (src1));
3051
      OUTS (outf, ")(TH");
3052
      if (s == 1)
3053
        OUTS (outf, ", R)");
3054
      else
3055
        OUTS (outf, ")");
3056
    }
3057
  else if (aop == 1 && aopcde == 22 && HL == 0)
3058
    {
3059
      OUTS (outf, dregs (dst0));
3060
      OUTS (outf, "=BYTEOP2P(");
3061
      OUTS (outf, dregs (src0 + 1));
3062
      OUTS (outf, ":");
3063
      OUTS (outf, imm5 (src0));
3064
      OUTS (outf, ",");
3065
      OUTS (outf, dregs (src1 + 1));
3066
      OUTS (outf, ":");
3067
      OUTS (outf, imm5 (src1));
3068
      OUTS (outf, ")(TL");
3069
      if (s == 1)
3070
        OUTS (outf, ", R)");
3071
      else
3072
        OUTS (outf, ")");
3073
    }
3074
  else if (aop == 0 && aopcde == 22 && HL == 1)
3075
    {
3076
      OUTS (outf, dregs (dst0));
3077
      OUTS (outf, "=BYTEOP2P(");
3078
      OUTS (outf, dregs (src0 + 1));
3079
      OUTS (outf, ":");
3080
      OUTS (outf, imm5 (src0));
3081
      OUTS (outf, ",");
3082
      OUTS (outf, dregs (src1 + 1));
3083
      OUTS (outf, ":");
3084
      OUTS (outf, imm5 (src1));
3085
      OUTS (outf, ")(RNDH");
3086
      if (s == 1)
3087
        OUTS (outf, ", R)");
3088
      else
3089
        OUTS (outf, ")");
3090
    }
3091
  else if (aop == 0 && aopcde == 22 && HL == 0)
3092
    {
3093
      OUTS (outf, dregs (dst0));
3094
      OUTS (outf, "=BYTEOP2P(");
3095
      OUTS (outf, dregs (src0 + 1));
3096
      OUTS (outf, ":");
3097
      OUTS (outf, imm5 (src0));
3098
      OUTS (outf, ",");
3099
      OUTS (outf, dregs (src1 + 1));
3100
      OUTS (outf, ":");
3101
      OUTS (outf, imm5 (src1));
3102
      OUTS (outf, ")(RNDL");
3103
      if (s == 1)
3104
        OUTS (outf, ", R)");
3105
      else
3106
        OUTS (outf, ")");
3107
    }
3108
  else if (aop == 0 && s == 0 && aopcde == 8)
3109
    OUTS (outf, "A0=0");
3110
 
3111
  else if (aop == 0 && s == 1 && aopcde == 8)
3112
    OUTS (outf, "A0=A0(S)");
3113
 
3114
  else if (aop == 1 && s == 0 && aopcde == 8)
3115
    OUTS (outf, "A1=0");
3116
 
3117
  else if (aop == 1 && s == 1 && aopcde == 8)
3118
    OUTS (outf, "A1=A1(S)");
3119
 
3120
  else if (aop == 2 && s == 0 && aopcde == 8)
3121
    OUTS (outf, "A1=A0=0");
3122
 
3123
  else if (aop == 2 && s == 1 && aopcde == 8)
3124
    OUTS (outf, "A1=A1(S),A0=A0(S)");
3125
 
3126
  else if (aop == 3 && s == 0 && aopcde == 8)
3127
    OUTS (outf, "A0=A1");
3128
 
3129
  else if (aop == 3 && s == 1 && aopcde == 8)
3130
    OUTS (outf, "A1=A0");
3131
 
3132
  else if (aop == 1 && aopcde == 9 && s == 0)
3133
    {
3134
      OUTS (outf, "A0.x=");
3135
      OUTS (outf, dregs_lo (src0));
3136
    }
3137
  else if (aop == 1 && HL == 0 && aopcde == 11)
3138
    {
3139
      OUTS (outf, dregs_lo (dst0));
3140
      OUTS (outf, "=(A0+=A1)");
3141
    }
3142
  else if (aop == 3 && HL == 0 && aopcde == 16)
3143
    OUTS (outf, "A1= ABS A0,A0= ABS A0");
3144
 
3145
  else if (aop == 0 && aopcde == 23 && HL == 1)
3146
    {
3147
      OUTS (outf, dregs (dst0));
3148
      OUTS (outf, "=BYTEOP3P(");
3149
      OUTS (outf, dregs (src0 + 1));
3150
      OUTS (outf, ":");
3151
      OUTS (outf, imm5 (src0));
3152
      OUTS (outf, ",");
3153
      OUTS (outf, dregs (src1 + 1));
3154
      OUTS (outf, ":");
3155
      OUTS (outf, imm5 (src1));
3156
      OUTS (outf, ")(HI");
3157
      if (s == 1)
3158
        OUTS (outf, ", R)");
3159
      else
3160
        OUTS (outf, ")");
3161
    }
3162
  else if (aop == 3 && aopcde == 9 && s == 0)
3163
    {
3164
      OUTS (outf, "A1.x=");
3165
      OUTS (outf, dregs_lo (src0));
3166
    }
3167
  else if (aop == 1 && HL == 1 && aopcde == 16)
3168
    OUTS (outf, "A1= ABS A1");
3169
 
3170
  else if (aop == 0 && HL == 1 && aopcde == 16)
3171
    OUTS (outf, "A1= ABS A0");
3172
 
3173
  else if (aop == 2 && aopcde == 9 && s == 1)
3174
    {
3175
      OUTS (outf, "A1=");
3176
      OUTS (outf, dregs (src0));
3177
    }
3178
  else if (HL == 0 && aop == 3 && aopcde == 12)
3179
    {
3180
      OUTS (outf, dregs_lo (dst0));
3181
      OUTS (outf, "=");
3182
      OUTS (outf, dregs (src0));
3183
      OUTS (outf, "(RND)");
3184
    }
3185
  else if (aop == 1 && HL == 0 && aopcde == 16)
3186
    OUTS (outf, "A0= ABS A1");
3187
 
3188
  else if (aop == 0 && HL == 0 && aopcde == 16)
3189
    OUTS (outf, "A0= ABS A0");
3190
 
3191
  else if (aop == 3 && HL == 0 && aopcde == 15)
3192
    {
3193
      OUTS (outf, dregs (dst0));
3194
      OUTS (outf, "=-");
3195
      OUTS (outf, dregs (src0));
3196
      OUTS (outf, "(V)");
3197
    }
3198
  else if (aop == 3 && s == 1 && HL == 0 && aopcde == 7)
3199
    {
3200
      OUTS (outf, dregs (dst0));
3201
      OUTS (outf, "=-");
3202
      OUTS (outf, dregs (src0));
3203
      OUTS (outf, "(S)");
3204
    }
3205
  else if (aop == 3 && s == 0 && HL == 0 && aopcde == 7)
3206
    {
3207
      OUTS (outf, dregs (dst0));
3208
      OUTS (outf, "=-");
3209
      OUTS (outf, dregs (src0));
3210
      OUTS (outf, "(NS)");
3211
    }
3212
  else if (aop == 1 && HL == 1 && aopcde == 11)
3213
    {
3214
      OUTS (outf, dregs_hi (dst0));
3215
      OUTS (outf, "=(A0+=A1)");
3216
    }
3217
  else if (aop == 2 && aopcde == 11 && s == 0)
3218
    OUTS (outf, "A0+=A1");
3219
 
3220
  else if (aop == 2 && aopcde == 11 && s == 1)
3221
    OUTS (outf, "A0+=A1(W32)");
3222
 
3223
  else if (aop == 3 && HL == 0 && aopcde == 14)
3224
    OUTS (outf, "A1=-A1,A0=-A0");
3225
 
3226
  else if (HL == 1 && aop == 3 && aopcde == 12)
3227
    {
3228
      OUTS (outf, dregs_hi (dst0));
3229
      OUTS (outf, "=");
3230
      OUTS (outf, dregs (src0));
3231
      OUTS (outf, "(RND)");
3232
    }
3233
  else if (aop == 0 && aopcde == 23 && HL == 0)
3234
    {
3235
      OUTS (outf, dregs (dst0));
3236
      OUTS (outf, "=BYTEOP3P(");
3237
      OUTS (outf, dregs (src0 + 1));
3238
      OUTS (outf, ":");
3239
      OUTS (outf, imm5 (src0));
3240
      OUTS (outf, ",");
3241
      OUTS (outf, dregs (src1 + 1));
3242
      OUTS (outf, ":");
3243
      OUTS (outf, imm5 (src1));
3244
      OUTS (outf, ")(LO");
3245
      if (s == 1)
3246
        OUTS (outf, ", R)");
3247
      else
3248
        OUTS (outf, ")");
3249
    }
3250
  else if (aop == 0 && HL == 0 && aopcde == 14)
3251
    OUTS (outf, "A0=-A0");
3252
 
3253
  else if (aop == 1 && HL == 0 && aopcde == 14)
3254
    OUTS (outf, "A0=-A1");
3255
 
3256
  else if (aop == 0 && HL == 1 && aopcde == 14)
3257
    OUTS (outf, "A1=-A0");
3258
 
3259
  else if (aop == 1 && HL == 1 && aopcde == 14)
3260
    OUTS (outf, "A1=-A1");
3261
 
3262
  else if (aop == 0 && aopcde == 12)
3263
    {
3264
      OUTS (outf, dregs_hi (dst0));
3265
      OUTS (outf, "=");
3266
      OUTS (outf, dregs_lo (dst0));
3267
      OUTS (outf, "=SIGN(");
3268
      OUTS (outf, dregs_hi (src0));
3269
      OUTS (outf, ")*");
3270
      OUTS (outf, dregs_hi (src1));
3271
      OUTS (outf, "+SIGN(");
3272
      OUTS (outf, dregs_lo (src0));
3273
      OUTS (outf, ")*");
3274
      OUTS (outf, dregs_lo (src1));
3275
      OUTS (outf, ")");
3276
    }
3277
  else if (aop == 2 && aopcde == 0)
3278
    {
3279
      OUTS (outf, dregs (dst0));
3280
      OUTS (outf, "=");
3281
      OUTS (outf, dregs (src0));
3282
      OUTS (outf, "-|+");
3283
      OUTS (outf, dregs (src1));
3284
      OUTS (outf, " ");
3285
      amod0 (s, x, outf);
3286
    }
3287
  else if (aop == 1 && aopcde == 12)
3288
    {
3289
      OUTS (outf, dregs (dst1));
3290
      OUTS (outf, "=A1.L+A1.H,");
3291
      OUTS (outf, dregs (dst0));
3292
      OUTS (outf, "=A0.L+A0.H");
3293
    }
3294
  else if (aop == 2 && aopcde == 4)
3295
    {
3296
      OUTS (outf, dregs (dst1));
3297
      OUTS (outf, "=");
3298
      OUTS (outf, dregs (src0));
3299
      OUTS (outf, "+");
3300
      OUTS (outf, dregs (src1));
3301
      OUTS (outf, ",");
3302
      OUTS (outf, dregs (dst0));
3303
      OUTS (outf, "=");
3304
      OUTS (outf, dregs (src0));
3305
      OUTS (outf, "-");
3306
      OUTS (outf, dregs (src1));
3307
      OUTS (outf, " ");
3308
      amod1 (s, x, outf);
3309
    }
3310
  else if (HL == 0 && aopcde == 1)
3311
    {
3312
      OUTS (outf, dregs (dst1));
3313
      OUTS (outf, "=");
3314
      OUTS (outf, dregs (src0));
3315
      OUTS (outf, "+|+");
3316
      OUTS (outf, dregs (src1));
3317
      OUTS (outf, ",");
3318
      OUTS (outf, dregs (dst0));
3319
      OUTS (outf, "=");
3320
      OUTS (outf, dregs (src0));
3321
      OUTS (outf, "-|-");
3322
      OUTS (outf, dregs (src1));
3323
      amod0amod2 (s, x, aop, outf);
3324
    }
3325
  else if (aop == 0 && aopcde == 11)
3326
    {
3327
      OUTS (outf, dregs (dst0));
3328
      OUTS (outf, "=(A0+=A1)");
3329
    }
3330
  else if (aop == 0 && aopcde == 10)
3331
    {
3332
      OUTS (outf, dregs_lo (dst0));
3333
      OUTS (outf, "=A0.x");
3334
    }
3335
  else if (aop == 1 && aopcde == 10)
3336
    {
3337
      OUTS (outf, dregs_lo (dst0));
3338
      OUTS (outf, "=A1.x");
3339
    }
3340
  else if (aop == 1 && aopcde == 0)
3341
    {
3342
      OUTS (outf, dregs (dst0));
3343
      OUTS (outf, "=");
3344
      OUTS (outf, dregs (src0));
3345
      OUTS (outf, "+|-");
3346
      OUTS (outf, dregs (src1));
3347
      OUTS (outf, " ");
3348
      amod0 (s, x, outf);
3349
    }
3350
  else if (aop == 3 && aopcde == 0)
3351
    {
3352
      OUTS (outf, dregs (dst0));
3353
      OUTS (outf, "=");
3354
      OUTS (outf, dregs (src0));
3355
      OUTS (outf, "-|-");
3356
      OUTS (outf, dregs (src1));
3357
      OUTS (outf, " ");
3358
      amod0 (s, x, outf);
3359
    }
3360
  else if (aop == 1 && aopcde == 4)
3361
    {
3362
      OUTS (outf, dregs (dst0));
3363
      OUTS (outf, "=");
3364
      OUTS (outf, dregs (src0));
3365
      OUTS (outf, "-");
3366
      OUTS (outf, dregs (src1));
3367
      OUTS (outf, " ");
3368
      amod1 (s, x, outf);
3369
    }
3370
  else if (aop == 0 && aopcde == 17)
3371
    {
3372
      OUTS (outf, dregs (dst1));
3373
      OUTS (outf, "=A1+A0,");
3374
      OUTS (outf, dregs (dst0));
3375
      OUTS (outf, "=A1-A0 ");
3376
      amod1 (s, x, outf);
3377
    }
3378
  else if (aop == 1 && aopcde == 17)
3379
    {
3380
      OUTS (outf, dregs (dst1));
3381
      OUTS (outf, "=A0+A1,");
3382
      OUTS (outf, dregs (dst0));
3383
      OUTS (outf, "=A0-A1 ");
3384
      amod1 (s, x, outf);
3385
    }
3386
  else if (aop == 0 && aopcde == 18)
3387
    {
3388
      OUTS (outf, "SAA(");
3389
      OUTS (outf, dregs (src0 + 1));
3390
      OUTS (outf, ":");
3391
      OUTS (outf, imm5 (src0));
3392
      OUTS (outf, ",");
3393
      OUTS (outf, dregs (src1 + 1));
3394
      OUTS (outf, ":");
3395
      OUTS (outf, imm5 (src1));
3396
      OUTS (outf, ") ");
3397
      aligndir (s, outf);
3398
    }
3399
  else if (aop == 3 && aopcde == 18)
3400
    OUTS (outf, "DISALGNEXCPT");
3401
 
3402
  else if (aop == 0 && aopcde == 20)
3403
    {
3404
      OUTS (outf, dregs (dst0));
3405
      OUTS (outf, "=BYTEOP1P(");
3406
      OUTS (outf, dregs (src0 + 1));
3407
      OUTS (outf, ":");
3408
      OUTS (outf, imm5 (src0));
3409
      OUTS (outf, ",");
3410
      OUTS (outf, dregs (src1 + 1));
3411
      OUTS (outf, ":");
3412
      OUTS (outf, imm5 (src1));
3413
      OUTS (outf, ")");
3414
      aligndir (s, outf);
3415
    }
3416
  else if (aop == 1 && aopcde == 20)
3417
    {
3418
      OUTS (outf, dregs (dst0));
3419
      OUTS (outf, "=BYTEOP1P(");
3420
      OUTS (outf, dregs (src0 + 1));
3421
      OUTS (outf, ":");
3422
      OUTS (outf, imm5 (src0));
3423
      OUTS (outf, ",");
3424
      OUTS (outf, dregs (src1 + 1));
3425
      OUTS (outf, ":");
3426
      OUTS (outf, imm5 (src1));
3427
      OUTS (outf, ")(T");
3428
      if (s == 1)
3429
        OUTS (outf, ", R)");
3430
      else
3431
        OUTS (outf, ")");
3432
    }
3433
  else if (aop == 0 && aopcde == 21)
3434
    {
3435
      OUTS (outf, "(");
3436
      OUTS (outf, dregs (dst1));
3437
      OUTS (outf, ",");
3438
      OUTS (outf, dregs (dst0));
3439
      OUTS (outf, ")=BYTEOP16P(");
3440
      OUTS (outf, dregs (src0 + 1));
3441
      OUTS (outf, ":");
3442
      OUTS (outf, imm5 (src0));
3443
      OUTS (outf, ",");
3444
      OUTS (outf, dregs (src1 + 1));
3445
      OUTS (outf, ":");
3446
      OUTS (outf, imm5 (src1));
3447
      OUTS (outf, ") ");
3448
      aligndir (s, outf);
3449
    }
3450
  else if (aop == 1 && aopcde == 21)
3451
    {
3452
      OUTS (outf, "(");
3453
      OUTS (outf, dregs (dst1));
3454
      OUTS (outf, ",");
3455
      OUTS (outf, dregs (dst0));
3456
      OUTS (outf, ")=BYTEOP16M(");
3457
      OUTS (outf, dregs (src0 + 1));
3458
      OUTS (outf, ":");
3459
      OUTS (outf, imm5 (src0));
3460
      OUTS (outf, ",");
3461
      OUTS (outf, dregs (src1 + 1));
3462
      OUTS (outf, ":");
3463
      OUTS (outf, imm5 (src1));
3464
      OUTS (outf, ") ");
3465
      aligndir (s, outf);
3466
    }
3467
  else if (aop == 2 && aopcde == 7)
3468
    {
3469
      OUTS (outf, dregs (dst0));
3470
      OUTS (outf, "= ABS ");
3471
      OUTS (outf, dregs (src0));
3472
    }
3473
  else if (aop == 1 && aopcde == 7)
3474
    {
3475
      OUTS (outf, dregs (dst0));
3476
      OUTS (outf, "=MIN(");
3477
      OUTS (outf, dregs (src0));
3478
      OUTS (outf, ",");
3479
      OUTS (outf, dregs (src1));
3480
      OUTS (outf, ")");
3481
    }
3482
  else if (aop == 0 && aopcde == 7)
3483
    {
3484
      OUTS (outf, dregs (dst0));
3485
      OUTS (outf, "=MAX(");
3486
      OUTS (outf, dregs (src0));
3487
      OUTS (outf, ",");
3488
      OUTS (outf, dregs (src1));
3489
      OUTS (outf, ")");
3490
    }
3491
  else if (aop == 2 && aopcde == 6)
3492
    {
3493
      OUTS (outf, dregs (dst0));
3494
      OUTS (outf, "= ABS ");
3495
      OUTS (outf, dregs (src0));
3496
      OUTS (outf, "(V)");
3497
    }
3498
  else if (aop == 1 && aopcde == 6)
3499
    {
3500
      OUTS (outf, dregs (dst0));
3501
      OUTS (outf, "=MIN(");
3502
      OUTS (outf, dregs (src0));
3503
      OUTS (outf, ",");
3504
      OUTS (outf, dregs (src1));
3505
      OUTS (outf, ")(V)");
3506
    }
3507
  else if (aop == 0 && aopcde == 6)
3508
    {
3509
      OUTS (outf, dregs (dst0));
3510
      OUTS (outf, "=MAX(");
3511
      OUTS (outf, dregs (src0));
3512
      OUTS (outf, ",");
3513
      OUTS (outf, dregs (src1));
3514
      OUTS (outf, ")(V)");
3515
    }
3516
  else if (HL == 1 && aopcde == 1)
3517
    {
3518
      OUTS (outf, dregs (dst1));
3519
      OUTS (outf, "=");
3520
      OUTS (outf, dregs (src0));
3521
      OUTS (outf, "+|-");
3522
      OUTS (outf, dregs (src1));
3523
      OUTS (outf, ",");
3524
      OUTS (outf, dregs (dst0));
3525
      OUTS (outf, "=");
3526
      OUTS (outf, dregs (src0));
3527
      OUTS (outf, "-|+");
3528
      OUTS (outf, dregs (src1));
3529
      amod0amod2 (s, x, aop, outf);
3530
    }
3531
  else if (aop == 0 && aopcde == 4)
3532
    {
3533
      OUTS (outf, dregs (dst0));
3534
      OUTS (outf, "=");
3535
      OUTS (outf, dregs (src0));
3536
      OUTS (outf, "+");
3537
      OUTS (outf, dregs (src1));
3538
      OUTS (outf, " ");
3539
      amod1 (s, x, outf);
3540
    }
3541
  else if (aop == 0 && aopcde == 0)
3542
    {
3543
      OUTS (outf, dregs (dst0));
3544
      OUTS (outf, "=");
3545
      OUTS (outf, dregs (src0));
3546
      OUTS (outf, "+|+");
3547
      OUTS (outf, dregs (src1));
3548
      OUTS (outf, " ");
3549
      amod0 (s, x, outf);
3550
    }
3551
  else if (aop == 0 && aopcde == 24)
3552
    {
3553
      OUTS (outf, dregs (dst0));
3554
      OUTS (outf, "=BYTEPACK(");
3555
      OUTS (outf, dregs (src0));
3556
      OUTS (outf, ",");
3557
      OUTS (outf, dregs (src1));
3558
      OUTS (outf, ")");
3559
    }
3560
  else if (aop == 1 && aopcde == 24)
3561
    {
3562
      OUTS (outf, "(");
3563
      OUTS (outf, dregs (dst1));
3564
      OUTS (outf, ",");
3565
      OUTS (outf, dregs (dst0));
3566
      OUTS (outf, ") = BYTEUNPACK ");
3567
      OUTS (outf, dregs (src0 + 1));
3568
      OUTS (outf, ":");
3569
      OUTS (outf, imm5 (src0));
3570
      OUTS (outf, " ");
3571
      aligndir (s, outf);
3572
    }
3573
  else if (aopcde == 13)
3574
    {
3575
      OUTS (outf, "(");
3576
      OUTS (outf, dregs (dst1));
3577
      OUTS (outf, ",");
3578
      OUTS (outf, dregs (dst0));
3579
      OUTS (outf, ") = SEARCH ");
3580
      OUTS (outf, dregs (src0));
3581
      OUTS (outf, "(");
3582
      searchmod (aop, outf);
3583
      OUTS (outf, ")");
3584
    }
3585
  else
3586
    return 0;
3587
 
3588
  return 4;
3589
}
3590
 
3591
static int
3592
decode_dsp32shift_0 (TIword iw0, TIword iw1, disassemble_info *outf)
3593
{
3594
  /* dsp32shift
3595
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
3596
     | 1 | 1 | 0 | 0 |.M.| 1 | 1 | 0 | 0 | - | - |.sopcde............|
3597
     |.sop...|.HLs...|.dst0......| - | - | - |.src0......|.src1......|
3598
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+  */
3599
  int HLs  = ((iw1 >> DSP32Shift_HLs_bits) & DSP32Shift_HLs_mask);
3600
  int sop  = ((iw1 >> DSP32Shift_sop_bits) & DSP32Shift_sop_mask);
3601
  int src0 = ((iw1 >> DSP32Shift_src0_bits) & DSP32Shift_src0_mask);
3602
  int src1 = ((iw1 >> DSP32Shift_src1_bits) & DSP32Shift_src1_mask);
3603
  int dst0 = ((iw1 >> DSP32Shift_dst0_bits) & DSP32Shift_dst0_mask);
3604
  int sopcde = ((iw0 >> (DSP32Shift_sopcde_bits - 16)) & DSP32Shift_sopcde_mask);
3605
  const char *acc01 = (HLs & 1) == 0 ? "A0" : "A1";
3606
 
3607
  if (HLs == 0 && sop == 0 && sopcde == 0)
3608
    {
3609
      OUTS (outf, dregs_lo (dst0));
3610
      OUTS (outf, "= ASHIFT ");
3611
      OUTS (outf, dregs_lo (src1));
3612
      OUTS (outf, " BY ");
3613
      OUTS (outf, dregs_lo (src0));
3614
    }
3615
  else if (HLs == 1 && sop == 0 && sopcde == 0)
3616
    {
3617
      OUTS (outf, dregs_lo (dst0));
3618
      OUTS (outf, "= ASHIFT ");
3619
      OUTS (outf, dregs_hi (src1));
3620
      OUTS (outf, " BY ");
3621
      OUTS (outf, dregs_lo (src0));
3622
    }
3623
  else if (HLs == 2 && sop == 0 && sopcde == 0)
3624
    {
3625
      OUTS (outf, dregs_hi (dst0));
3626
      OUTS (outf, "= ASHIFT ");
3627
      OUTS (outf, dregs_lo (src1));
3628
      OUTS (outf, " BY ");
3629
      OUTS (outf, dregs_lo (src0));
3630
    }
3631
  else if (HLs == 3 && sop == 0 && sopcde == 0)
3632
    {
3633
      OUTS (outf, dregs_hi (dst0));
3634
      OUTS (outf, "= ASHIFT ");
3635
      OUTS (outf, dregs_hi (src1));
3636
      OUTS (outf, " BY ");
3637
      OUTS (outf, dregs_lo (src0));
3638
    }
3639
  else if (HLs == 0 && sop == 1 && sopcde == 0)
3640
    {
3641
      OUTS (outf, dregs_lo (dst0));
3642
      OUTS (outf, "= ASHIFT ");
3643
      OUTS (outf, dregs_lo (src1));
3644
      OUTS (outf, " BY ");
3645
      OUTS (outf, dregs_lo (src0));
3646
      OUTS (outf, "(S)");
3647
    }
3648
  else if (HLs == 1 && sop == 1 && sopcde == 0)
3649
    {
3650
      OUTS (outf, dregs_lo (dst0));
3651
      OUTS (outf, "= ASHIFT ");
3652
      OUTS (outf, dregs_hi (src1));
3653
      OUTS (outf, " BY ");
3654
      OUTS (outf, dregs_lo (src0));
3655
      OUTS (outf, "(S)");
3656
    }
3657
  else if (HLs == 2 && sop == 1 && sopcde == 0)
3658
    {
3659
      OUTS (outf, dregs_hi (dst0));
3660
      OUTS (outf, "= ASHIFT ");
3661
      OUTS (outf, dregs_lo (src1));
3662
      OUTS (outf, " BY ");
3663
      OUTS (outf, dregs_lo (src0));
3664
      OUTS (outf, "(S)");
3665
    }
3666
  else if (HLs == 3 && sop == 1 && sopcde == 0)
3667
    {
3668
      OUTS (outf, dregs_hi (dst0));
3669
      OUTS (outf, "= ASHIFT ");
3670
      OUTS (outf, dregs_hi (src1));
3671
      OUTS (outf, " BY ");
3672
      OUTS (outf, dregs_lo (src0));
3673
      OUTS (outf, "(S)");
3674
    }
3675
  else if (sop == 2 && sopcde == 0)
3676
    {
3677
      OUTS (outf, (HLs & 2) == 0 ? dregs_lo (dst0) : dregs_hi (dst0));
3678
      OUTS (outf, "= LSHIFT ");
3679
      OUTS (outf, (HLs & 1) == 0 ? dregs_lo (src1) : dregs_hi (src1));
3680
      OUTS (outf, " BY ");
3681
      OUTS (outf, dregs_lo (src0));
3682
    }
3683
  else if (sop == 0 && sopcde == 3)
3684
    {
3685
      OUTS (outf, acc01);
3686
      OUTS (outf, "= ASHIFT ");
3687
      OUTS (outf, acc01);
3688
      OUTS (outf, " BY ");
3689
      OUTS (outf, dregs_lo (src0));
3690
    }
3691
  else if (sop == 1 && sopcde == 3)
3692
    {
3693
      OUTS (outf, acc01);
3694
      OUTS (outf, "= LSHIFT ");
3695
      OUTS (outf, acc01);
3696
      OUTS (outf, " BY ");
3697
      OUTS (outf, dregs_lo (src0));
3698
    }
3699
  else if (sop == 2 && sopcde == 3)
3700
    {
3701
      OUTS (outf, acc01);
3702
      OUTS (outf, "= ROT ");
3703
      OUTS (outf, acc01);
3704
      OUTS (outf, " BY ");
3705
      OUTS (outf, dregs_lo (src0));
3706
    }
3707
  else if (sop == 3 && sopcde == 3)
3708
    {
3709
      OUTS (outf, dregs (dst0));
3710
      OUTS (outf, "= ROT ");
3711
      OUTS (outf, dregs (src1));
3712
      OUTS (outf, " BY ");
3713
      OUTS (outf, dregs_lo (src0));
3714
    }
3715
  else if (sop == 1 && sopcde == 1)
3716
    {
3717
      OUTS (outf, dregs (dst0));
3718
      OUTS (outf, "= ASHIFT ");
3719
      OUTS (outf, dregs (src1));
3720
      OUTS (outf, " BY ");
3721
      OUTS (outf, dregs_lo (src0));
3722
      OUTS (outf, "(V,S)");
3723
    }
3724
  else if (sop == 0 && sopcde == 1)
3725
    {
3726
      OUTS (outf, dregs (dst0));
3727
      OUTS (outf, "= ASHIFT ");
3728
      OUTS (outf, dregs (src1));
3729
      OUTS (outf, " BY ");
3730
      OUTS (outf, dregs_lo (src0));
3731
      OUTS (outf, "(V)");
3732
    }
3733
  else if (sop == 0 && sopcde == 2)
3734
    {
3735
      OUTS (outf, dregs (dst0));
3736
      OUTS (outf, "= ASHIFT ");
3737
      OUTS (outf, dregs (src1));
3738
      OUTS (outf, " BY ");
3739
      OUTS (outf, dregs_lo (src0));
3740
    }
3741
  else if (sop == 1 && sopcde == 2)
3742
    {
3743
      OUTS (outf, dregs (dst0));
3744
      OUTS (outf, "= ASHIFT ");
3745
      OUTS (outf, dregs (src1));
3746
      OUTS (outf, " BY ");
3747
      OUTS (outf, dregs_lo (src0));
3748
      OUTS (outf, "(S)");
3749
    }
3750
  else if (sop == 2 && sopcde == 2)
3751
    {
3752
      OUTS (outf, dregs (dst0));
3753
      OUTS (outf, "=SHIFT ");
3754
      OUTS (outf, dregs (src1));
3755
      OUTS (outf, " BY ");
3756
      OUTS (outf, dregs_lo (src0));
3757
    }
3758
  else if (sop == 3 && sopcde == 2)
3759
    {
3760
      OUTS (outf, dregs (dst0));
3761
      OUTS (outf, "= ROT ");
3762
      OUTS (outf, dregs (src1));
3763
      OUTS (outf, " BY ");
3764
      OUTS (outf, dregs_lo (src0));
3765
    }
3766
  else if (sop == 2 && sopcde == 1)
3767
    {
3768
      OUTS (outf, dregs (dst0));
3769
      OUTS (outf, "=SHIFT ");
3770
      OUTS (outf, dregs (src1));
3771
      OUTS (outf, " BY ");
3772
      OUTS (outf, dregs_lo (src0));
3773
      OUTS (outf, "(V)");
3774
    }
3775
  else if (sop == 0 && sopcde == 4)
3776
    {
3777
      OUTS (outf, dregs (dst0));
3778
      OUTS (outf, "=PACK");
3779
      OUTS (outf, "(");
3780
      OUTS (outf, dregs_lo (src1));
3781
      OUTS (outf, ",");
3782
      OUTS (outf, dregs_lo (src0));
3783
      OUTS (outf, ")");
3784
    }
3785
  else if (sop == 1 && sopcde == 4)
3786
    {
3787
      OUTS (outf, dregs (dst0));
3788
      OUTS (outf, "=PACK(");
3789
      OUTS (outf, dregs_lo (src1));
3790
      OUTS (outf, ",");
3791
      OUTS (outf, dregs_hi (src0));
3792
      OUTS (outf, ")");
3793
    }
3794
  else if (sop == 2 && sopcde == 4)
3795
    {
3796
      OUTS (outf, dregs (dst0));
3797
      OUTS (outf, "=PACK(");
3798
      OUTS (outf, dregs_hi (src1));
3799
      OUTS (outf, ",");
3800
      OUTS (outf, dregs_lo (src0));
3801
      OUTS (outf, ")");
3802
    }
3803
  else if (sop == 3 && sopcde == 4)
3804
    {
3805
      OUTS (outf, dregs (dst0));
3806
      OUTS (outf, "=PACK(");
3807
      OUTS (outf, dregs_hi (src1));
3808
      OUTS (outf, ",");
3809
      OUTS (outf, dregs_hi (src0));
3810
      OUTS (outf, ")");
3811
    }
3812
  else if (sop == 0 && sopcde == 5)
3813
    {
3814
      OUTS (outf, dregs_lo (dst0));
3815
      OUTS (outf, "=SIGNBITS ");
3816
      OUTS (outf, dregs (src1));
3817
    }
3818
  else if (sop == 1 && sopcde == 5)
3819
    {
3820
      OUTS (outf, dregs_lo (dst0));
3821
      OUTS (outf, "=SIGNBITS ");
3822
      OUTS (outf, dregs_lo (src1));
3823
    }
3824
  else if (sop == 2 && sopcde == 5)
3825
    {
3826
      OUTS (outf, dregs_lo (dst0));
3827
      OUTS (outf, "=SIGNBITS ");
3828
      OUTS (outf, dregs_hi (src1));
3829
    }
3830
  else if (sop == 0 && sopcde == 6)
3831
    {
3832
      OUTS (outf, dregs_lo (dst0));
3833
      OUTS (outf, "=SIGNBITS A0");
3834
    }
3835
  else if (sop == 1 && sopcde == 6)
3836
    {
3837
      OUTS (outf, dregs_lo (dst0));
3838
      OUTS (outf, "=SIGNBITS A1");
3839
    }
3840
  else if (sop == 3 && sopcde == 6)
3841
    {
3842
      OUTS (outf, dregs_lo (dst0));
3843
      OUTS (outf, "=ONES ");
3844
      OUTS (outf, dregs (src1));
3845
    }
3846
  else if (sop == 0 && sopcde == 7)
3847
    {
3848
      OUTS (outf, dregs_lo (dst0));
3849
      OUTS (outf, "=EXPADJ (");
3850
      OUTS (outf, dregs (src1));
3851
      OUTS (outf, ",");
3852
      OUTS (outf, dregs_lo (src0));
3853
      OUTS (outf, ")");
3854
    }
3855
  else if (sop == 1 && sopcde == 7)
3856
    {
3857
      OUTS (outf, dregs_lo (dst0));
3858
      OUTS (outf, "=EXPADJ (");
3859
      OUTS (outf, dregs (src1));
3860
      OUTS (outf, ",");
3861
      OUTS (outf, dregs_lo (src0));
3862
      OUTS (outf, ") (V)");
3863
    }
3864
  else if (sop == 2 && sopcde == 7)
3865
    {
3866
      OUTS (outf, dregs_lo (dst0));
3867
      OUTS (outf, "=EXPADJ (");
3868
      OUTS (outf, dregs_lo (src1));
3869
      OUTS (outf, ",");
3870
      OUTS (outf, dregs_lo (src0));
3871
      OUTS (outf, ")");
3872
    }
3873
  else if (sop == 3 && sopcde == 7)
3874
    {
3875
      OUTS (outf, dregs_lo (dst0));
3876
      OUTS (outf, "=EXPADJ (");
3877
      OUTS (outf, dregs_hi (src1));
3878
      OUTS (outf, ",");
3879
      OUTS (outf, dregs_lo (src0));
3880
      OUTS (outf, ")");
3881
    }
3882
  else if (sop == 0 && sopcde == 8)
3883
    {
3884
      OUTS (outf, "BITMUX (");
3885
      OUTS (outf, dregs (src0));
3886
      OUTS (outf, ",");
3887
      OUTS (outf, dregs (src1));
3888
      OUTS (outf, ",A0 )(ASR)");
3889
    }
3890
  else if (sop == 1 && sopcde == 8)
3891
    {
3892
      OUTS (outf, "BITMUX (");
3893
      OUTS (outf, dregs (src0));
3894
      OUTS (outf, ",");
3895
      OUTS (outf, dregs (src1));
3896
      OUTS (outf, ",A0 )(ASL)");
3897
    }
3898
  else if (sop == 0 && sopcde == 9)
3899
    {
3900
      OUTS (outf, dregs_lo (dst0));
3901
      OUTS (outf, "=VIT_MAX (");
3902
      OUTS (outf, dregs (src1));
3903
      OUTS (outf, ") (ASL)");
3904
    }
3905
  else if (sop == 1 && sopcde == 9)
3906
    {
3907
      OUTS (outf, dregs_lo (dst0));
3908
      OUTS (outf, "=VIT_MAX (");
3909
      OUTS (outf, dregs (src1));
3910
      OUTS (outf, ") (ASR)");
3911
    }
3912
  else if (sop == 2 && sopcde == 9)
3913
    {
3914
      OUTS (outf, dregs (dst0));
3915
      OUTS (outf, "=VIT_MAX(");
3916
      OUTS (outf, dregs (src1));
3917
      OUTS (outf, ",");
3918
      OUTS (outf, dregs (src0));
3919
      OUTS (outf, ")(ASL)");
3920
    }
3921
  else if (sop == 3 && sopcde == 9)
3922
    {
3923
      OUTS (outf, dregs (dst0));
3924
      OUTS (outf, "=VIT_MAX(");
3925
      OUTS (outf, dregs (src1));
3926
      OUTS (outf, ",");
3927
      OUTS (outf, dregs (src0));
3928
      OUTS (outf, ")(ASR)");
3929
    }
3930
  else if (sop == 0 && sopcde == 10)
3931
    {
3932
      OUTS (outf, dregs (dst0));
3933
      OUTS (outf, "=EXTRACT(");
3934
      OUTS (outf, dregs (src1));
3935
      OUTS (outf, ",");
3936
      OUTS (outf, dregs_lo (src0));
3937
      OUTS (outf, ") (Z)");
3938
    }
3939
  else if (sop == 1 && sopcde == 10)
3940
    {
3941
      OUTS (outf, dregs (dst0));
3942
      OUTS (outf, "=EXTRACT(");
3943
      OUTS (outf, dregs (src1));
3944
      OUTS (outf, ",");
3945
      OUTS (outf, dregs_lo (src0));
3946
      OUTS (outf, ")(X)");
3947
    }
3948
  else if (sop == 2 && sopcde == 10)
3949
    {
3950
      OUTS (outf, dregs (dst0));
3951
      OUTS (outf, "=DEPOSIT(");
3952
      OUTS (outf, dregs (src1));
3953
      OUTS (outf, ",");
3954
      OUTS (outf, dregs (src0));
3955
      OUTS (outf, ")");
3956
    }
3957
  else if (sop == 3 && sopcde == 10)
3958
    {
3959
      OUTS (outf, dregs (dst0));
3960
      OUTS (outf, "=DEPOSIT(");
3961
      OUTS (outf, dregs (src1));
3962
      OUTS (outf, ",");
3963
      OUTS (outf, dregs (src0));
3964
      OUTS (outf, ")(X)");
3965
    }
3966
  else if (sop == 0 && sopcde == 11)
3967
    {
3968
      OUTS (outf, dregs_lo (dst0));
3969
      OUTS (outf, "=CC=BXORSHIFT(A0,");
3970
      OUTS (outf, dregs (src0));
3971
      OUTS (outf, ")");
3972
    }
3973
  else if (sop == 1 && sopcde == 11)
3974
    {
3975
      OUTS (outf, dregs_lo (dst0));
3976
      OUTS (outf, "=CC=BXOR(A0,");
3977
      OUTS (outf, dregs (src0));
3978
      OUTS (outf, ")");
3979
    }
3980
  else if (sop == 0 && sopcde == 12)
3981
    OUTS (outf, "A0=BXORSHIFT(A0,A1 ,CC)");
3982
 
3983
  else if (sop == 1 && sopcde == 12)
3984
    {
3985
      OUTS (outf, dregs_lo (dst0));
3986
      OUTS (outf, "=CC=BXOR( A0,A1 ,CC )");
3987
    }
3988
  else if (sop == 0 && sopcde == 13)
3989
    {
3990
      OUTS (outf, dregs (dst0));
3991
      OUTS (outf, "=ALIGN8(");
3992
      OUTS (outf, dregs (src1));
3993
      OUTS (outf, ",");
3994
      OUTS (outf, dregs (src0));
3995
      OUTS (outf, ")");
3996
    }
3997
  else if (sop == 1 && sopcde == 13)
3998
    {
3999
      OUTS (outf, dregs (dst0));
4000
      OUTS (outf, "=ALIGN16(");
4001
      OUTS (outf, dregs (src1));
4002
      OUTS (outf, ",");
4003
      OUTS (outf, dregs (src0));
4004
      OUTS (outf, ")");
4005
    }
4006
  else if (sop == 2 && sopcde == 13)
4007
    {
4008
      OUTS (outf, dregs (dst0));
4009
      OUTS (outf, "=ALIGN24(");
4010
      OUTS (outf, dregs (src1));
4011
      OUTS (outf, ",");
4012
      OUTS (outf, dregs (src0));
4013
      OUTS (outf, ")");
4014
    }
4015
  else
4016
    return 0;
4017
 
4018
  return 4;
4019
}
4020
 
4021
static int
4022
decode_dsp32shiftimm_0 (TIword iw0, TIword iw1, disassemble_info *outf)
4023
{
4024
  /* dsp32shiftimm
4025
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
4026
     | 1 | 1 | 0 | 0 |.M.| 1 | 1 | 0 | 1 | - | - |.sopcde............|
4027
     |.sop...|.HLs...|.dst0......|.immag.................|.src1......|
4028
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+  */
4029
  int src1     = ((iw1 >> DSP32ShiftImm_src1_bits) & DSP32ShiftImm_src1_mask);
4030
  int sop      = ((iw1 >> DSP32ShiftImm_sop_bits) & DSP32ShiftImm_sop_mask);
4031
  int bit8     = ((iw1 >> 8) & 0x1);
4032
  int immag    = ((iw1 >> DSP32ShiftImm_immag_bits) & DSP32ShiftImm_immag_mask);
4033
  int newimmag = (-(iw1 >> DSP32ShiftImm_immag_bits) & DSP32ShiftImm_immag_mask);
4034
  int dst0     = ((iw1 >> DSP32ShiftImm_dst0_bits) & DSP32ShiftImm_dst0_mask);
4035
  int sopcde   = ((iw0 >> (DSP32ShiftImm_sopcde_bits - 16)) & DSP32ShiftImm_sopcde_mask);
4036
  int HLs      = ((iw1 >> DSP32ShiftImm_HLs_bits) & DSP32ShiftImm_HLs_mask);
4037
 
4038
 
4039
  if (sop == 0 && sopcde == 0)
4040
    {
4041
      OUTS (outf, (HLs & 2) ? dregs_hi (dst0) : dregs_lo (dst0));
4042
      OUTS (outf, " = ");
4043
      OUTS (outf, (HLs & 1) ? dregs_hi (src1) : dregs_lo (src1));
4044
      OUTS (outf, " >>> ");
4045
      OUTS (outf, uimm4 (newimmag));
4046
    }
4047
  else if (sop == 1 && sopcde == 0 && bit8 == 0)
4048
    {
4049
      OUTS (outf, (HLs & 2) ? dregs_hi (dst0) : dregs_lo (dst0));
4050
      OUTS (outf, " = ");
4051
      OUTS (outf, (HLs & 1) ? dregs_hi (src1) : dregs_lo (src1));
4052
      OUTS (outf, " << ");
4053
      OUTS (outf, uimm4 (immag));
4054
      OUTS (outf, " (S)");
4055
    }
4056
  else if (sop == 1 && sopcde == 0 && bit8 == 1)
4057
    {
4058
      OUTS (outf, (HLs & 2) ? dregs_hi (dst0) : dregs_lo (dst0));
4059
      OUTS (outf, " = ");
4060
      OUTS (outf, (HLs & 1) ? dregs_hi (src1) : dregs_lo (src1));
4061
      OUTS (outf, " >>> ");
4062
      OUTS (outf, uimm4 (newimmag));
4063
      OUTS (outf, " (S)");
4064
    }
4065
  else if (sop == 2 && sopcde == 0 && bit8 == 0)
4066
    {
4067
      OUTS (outf, (HLs & 2) ? dregs_hi (dst0) : dregs_lo (dst0));
4068
      OUTS (outf, " = ");
4069
      OUTS (outf, (HLs & 1) ? dregs_hi (src1) : dregs_lo (src1));
4070
      OUTS (outf, " << ");
4071
      OUTS (outf, uimm4 (immag));
4072
    }
4073
  else if (sop == 2 && sopcde == 0 && bit8 == 1)
4074
    {
4075
      OUTS (outf, (HLs & 2) ? dregs_hi (dst0) : dregs_lo (dst0));
4076
      OUTS (outf, " = ");
4077
      OUTS (outf, (HLs & 1) ? dregs_hi (src1) : dregs_lo (src1));
4078
      OUTS (outf, " >> ");
4079
      OUTS (outf, uimm4 (newimmag));
4080
    }
4081
  else if (sop == 2 && sopcde == 3 && HLs == 1)
4082
    {
4083
      OUTS (outf, "A1= ROT A1 BY ");
4084
      OUTS (outf, imm6 (immag));
4085
    }
4086
  else if (sop == 0 && sopcde == 3 && HLs == 0 && bit8 == 0)
4087
    {
4088
      OUTS (outf, "A0=A0<<");
4089
      OUTS (outf, uimm5 (immag));
4090
    }
4091
  else if (sop == 0 && sopcde == 3 && HLs == 0 && bit8 == 1)
4092
    {
4093
      OUTS (outf, "A0=A0>>>");
4094
      OUTS (outf, uimm5 (newimmag));
4095
    }
4096
  else if (sop == 0 && sopcde == 3 && HLs == 1 && bit8 == 0)
4097
    {
4098
      OUTS (outf, "A1=A1<<");
4099
      OUTS (outf, uimm5 (immag));
4100
    }
4101
  else if (sop == 0 && sopcde == 3 && HLs == 1 && bit8 == 1)
4102
    {
4103
      OUTS (outf, "A1=A1>>>");
4104
      OUTS (outf, uimm5 (newimmag));
4105
    }
4106
  else if (sop == 1 && sopcde == 3 && HLs == 0)
4107
    {
4108
      OUTS (outf, "A0=A0>>");
4109
      OUTS (outf, uimm5 (newimmag));
4110
    }
4111
  else if (sop == 1 && sopcde == 3 && HLs == 1)
4112
    {
4113
      OUTS (outf, "A1=A1>>");
4114
      OUTS (outf, uimm5 (newimmag));
4115
    }
4116
  else if (sop == 2 && sopcde == 3 && HLs == 0)
4117
    {
4118
      OUTS (outf, "A0= ROT A0 BY ");
4119
      OUTS (outf, imm6 (immag));
4120
    }
4121
  else if (sop == 1 && sopcde == 1 && bit8 == 0)
4122
    {
4123
      OUTS (outf, dregs (dst0));
4124
      OUTS (outf, "=");
4125
      OUTS (outf, dregs (src1));
4126
      OUTS (outf, "<<");
4127
      OUTS (outf, uimm5 (immag));
4128
      OUTS (outf, " (V, S)");
4129
    }
4130
  else if (sop == 1 && sopcde == 1 && bit8 == 1)
4131
    {
4132
      OUTS (outf, dregs (dst0));
4133
      OUTS (outf, "=");
4134
      OUTS (outf, dregs (src1));
4135
      OUTS (outf, ">>>");
4136
      OUTS (outf, imm5 (-immag));
4137
      OUTS (outf, " (V)");
4138
    }
4139
  else if (sop == 2 && sopcde == 1 && bit8 == 1)
4140
    {
4141
      OUTS (outf, dregs (dst0));
4142
      OUTS (outf, "=");
4143
      OUTS (outf, dregs (src1));
4144
      OUTS (outf, " >> ");
4145
      OUTS (outf, uimm5 (newimmag));
4146
      OUTS (outf, " (V)");
4147
    }
4148
  else if (sop == 2 && sopcde == 1 && bit8 == 0)
4149
    {
4150
      OUTS (outf, dregs (dst0));
4151
      OUTS (outf, "=");
4152
      OUTS (outf, dregs (src1));
4153
      OUTS (outf, "<<");
4154
      OUTS (outf, imm5 (immag));
4155
      OUTS (outf, " (V)");
4156
    }
4157
  else if (sop == 0 && sopcde == 1)
4158
    {
4159
      OUTS (outf, dregs (dst0));
4160
      OUTS (outf, "=");
4161
      OUTS (outf, dregs (src1));
4162
      OUTS (outf, ">>>");
4163
      OUTS (outf, uimm5 (newimmag));
4164
      OUTS (outf, " (V)");
4165
    }
4166
  else if (sop == 1 && sopcde == 2)
4167
    {
4168
      OUTS (outf, dregs (dst0));
4169
      OUTS (outf, "=");
4170
      OUTS (outf, dregs (src1));
4171
      OUTS (outf, "<<");
4172
      OUTS (outf, uimm5 (immag));
4173
      OUTS (outf, "(S)");
4174
    }
4175
  else if (sop == 2 && sopcde == 2 && bit8 == 1)
4176
    {
4177
      OUTS (outf, dregs (dst0));
4178
      OUTS (outf, "=");
4179
      OUTS (outf, dregs (src1));
4180
      OUTS (outf, ">>");
4181
      OUTS (outf, uimm5 (newimmag));
4182
    }
4183
  else if (sop == 2 && sopcde == 2 && bit8 == 0)
4184
    {
4185
      OUTS (outf, dregs (dst0));
4186
      OUTS (outf, "=");
4187
      OUTS (outf, dregs (src1));
4188
      OUTS (outf, "<<");
4189
      OUTS (outf, uimm5 (immag));
4190
    }
4191
  else if (sop == 3 && sopcde == 2)
4192
    {
4193
      OUTS (outf, dregs (dst0));
4194
      OUTS (outf, "= ROT ");
4195
      OUTS (outf, dregs (src1));
4196
      OUTS (outf, " BY ");
4197
      OUTS (outf, imm6 (immag));
4198
    }
4199
  else if (sop == 0 && sopcde == 2)
4200
    {
4201
      OUTS (outf, dregs (dst0));
4202
      OUTS (outf, "=");
4203
      OUTS (outf, dregs (src1));
4204
      OUTS (outf, ">>>");
4205
      OUTS (outf, uimm5 (newimmag));
4206
    }
4207
  else
4208
    return 0;
4209
 
4210
  return 4;
4211
}
4212
 
4213
static int
4214
decode_pseudoDEBUG_0 (TIword iw0, disassemble_info *outf)
4215
{
4216
  /* pseudoDEBUG
4217
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
4218
     | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 0 |.fn....|.grp.......|.reg.......|
4219
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+  */
4220
  int fn  = ((iw0 >> PseudoDbg_fn_bits) & PseudoDbg_fn_mask);
4221
  int grp = ((iw0 >> PseudoDbg_grp_bits) & PseudoDbg_grp_mask);
4222
  int reg = ((iw0 >> PseudoDbg_reg_bits) & PseudoDbg_reg_mask);
4223
 
4224
  if (reg == 0 && fn == 3)
4225
    OUTS (outf, "DBG A0");
4226
 
4227
  else if (reg == 1 && fn == 3)
4228
    OUTS (outf, "DBG A1");
4229
 
4230
  else if (reg == 3 && fn == 3)
4231
    OUTS (outf, "ABORT");
4232
 
4233
  else if (reg == 4 && fn == 3)
4234
    OUTS (outf, "HLT");
4235
 
4236
  else if (reg == 5 && fn == 3)
4237
    OUTS (outf, "DBGHALT");
4238
 
4239
  else if (reg == 6 && fn == 3)
4240
    {
4241
      OUTS (outf, "DBGCMPLX(");
4242
      OUTS (outf, dregs (grp));
4243
      OUTS (outf, ")");
4244
    }
4245
  else if (reg == 7 && fn == 3)
4246
    OUTS (outf, "DBG");
4247
 
4248
  else if (grp == 0 && fn == 2)
4249
    {
4250
      OUTS (outf, "OUTC");
4251
      OUTS (outf, dregs (reg));
4252
    }
4253
  else if (fn == 0)
4254
    {
4255
      OUTS (outf, "DBG");
4256
      OUTS (outf, allregs (reg, grp));
4257
    }
4258
  else if (fn == 1)
4259
    {
4260
      OUTS (outf, "PRNT");
4261
      OUTS (outf, allregs (reg, grp));
4262
    }
4263
  else
4264
    return 0;
4265
 
4266
  return 2;
4267
}
4268
 
4269
static int
4270
decode_pseudodbg_assert_0 (TIword iw0, TIword iw1, disassemble_info *outf)
4271
{
4272
  /* pseudodbg_assert
4273
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
4274
     | 1 | 1 | 1 | 1 | 0 | - | - | - | - | - |.dbgop.....|.regtest...|
4275
     |.expected......................................................|
4276
     +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+  */
4277
  int expected = ((iw1 >> PseudoDbg_Assert_expected_bits) & PseudoDbg_Assert_expected_mask);
4278
  int dbgop    = ((iw0 >> (PseudoDbg_Assert_dbgop_bits - 16)) & PseudoDbg_Assert_dbgop_mask);
4279
  int regtest  = ((iw0 >> (PseudoDbg_Assert_regtest_bits - 16)) & PseudoDbg_Assert_regtest_mask);
4280
 
4281
  if (dbgop == 0)
4282
    {
4283
      OUTS (outf, "DBGA(");
4284
      OUTS (outf, dregs_lo (regtest));
4285
      OUTS (outf, ",");
4286
      OUTS (outf, uimm16 (expected));
4287
      OUTS (outf, ")");
4288
    }
4289
  else if (dbgop == 1)
4290
    {
4291
      OUTS (outf, "DBGA(");
4292
      OUTS (outf, dregs_hi (regtest));
4293
      OUTS (outf, ",");
4294
      OUTS (outf, uimm16 (expected));
4295
      OUTS (outf, ")");
4296
    }
4297
  else if (dbgop == 2)
4298
    {
4299
      OUTS (outf, "DBGAL(");
4300
      OUTS (outf, dregs (regtest));
4301
      OUTS (outf, ",");
4302
      OUTS (outf, uimm16 (expected));
4303
      OUTS (outf, ")");
4304
    }
4305
  else if (dbgop == 3)
4306
    {
4307
      OUTS (outf, "DBGAH(");
4308
      OUTS (outf, dregs (regtest));
4309
      OUTS (outf, ",");
4310
      OUTS (outf, uimm16 (expected));
4311
      OUTS (outf, ")");
4312
    }
4313
  else
4314
    return 0;
4315
  return 4;
4316
}
4317
 
4318
int
4319
_print_insn_bfin (bfd_vma pc, disassemble_info *outf)
4320
{
4321
  bfd_byte buf[4];
4322
  TIword iw0;
4323
  TIword iw1;
4324
  int status;
4325
  int rv = 0;
4326
 
4327
  status = (*outf->read_memory_func) (pc & ~0x1, buf, 2, outf);
4328
  status = (*outf->read_memory_func) ((pc + 2) & ~0x1, buf + 2, 2, outf);
4329
 
4330
  iw0 = bfd_getl16 (buf);
4331
  iw1 = bfd_getl16 (buf + 2);
4332
 
4333
  if ((iw0 & 0xf7ff) == 0xc003 && iw1 == 0x1800)
4334
    {
4335
      OUTS (outf, "mnop");
4336
      return 4;
4337
    }
4338
  else if ((iw0 & 0xff00) == 0x0000)
4339
    rv = decode_ProgCtrl_0 (iw0, outf);
4340
  else if ((iw0 & 0xffc0) == 0x0240)
4341
    rv = decode_CaCTRL_0 (iw0, outf);
4342
  else if ((iw0 & 0xff80) == 0x0100)
4343
    rv = decode_PushPopReg_0 (iw0, outf);
4344
  else if ((iw0 & 0xfe00) == 0x0400)
4345
    rv = decode_PushPopMultiple_0 (iw0, outf);
4346
  else if ((iw0 & 0xfe00) == 0x0600)
4347
    rv = decode_ccMV_0 (iw0, outf);
4348
  else if ((iw0 & 0xf800) == 0x0800)
4349
    rv = decode_CCflag_0 (iw0, outf);
4350
  else if ((iw0 & 0xffe0) == 0x0200)
4351
    rv = decode_CC2dreg_0 (iw0, outf);
4352
  else if ((iw0 & 0xff00) == 0x0300)
4353
    rv = decode_CC2stat_0 (iw0, outf);
4354
  else if ((iw0 & 0xf000) == 0x1000)
4355
    rv = decode_BRCC_0 (iw0, pc, outf);
4356
  else if ((iw0 & 0xf000) == 0x2000)
4357
    rv = decode_UJUMP_0 (iw0, pc, outf);
4358
  else if ((iw0 & 0xf000) == 0x3000)
4359
    rv = decode_REGMV_0 (iw0, outf);
4360
  else if ((iw0 & 0xfc00) == 0x4000)
4361
    rv = decode_ALU2op_0 (iw0, outf);
4362
  else if ((iw0 & 0xfe00) == 0x4400)
4363
    rv = decode_PTR2op_0 (iw0, outf);
4364
  else if ((iw0 & 0xf800) == 0x4800)
4365
    rv = decode_LOGI2op_0 (iw0, outf);
4366
  else if ((iw0 & 0xf000) == 0x5000)
4367
    rv = decode_COMP3op_0 (iw0, outf);
4368
  else if ((iw0 & 0xf800) == 0x6000)
4369
    rv = decode_COMPI2opD_0 (iw0, outf);
4370
  else if ((iw0 & 0xf800) == 0x6800)
4371
    rv = decode_COMPI2opP_0 (iw0, outf);
4372
  else if ((iw0 & 0xf000) == 0x8000)
4373
    rv = decode_LDSTpmod_0 (iw0, outf);
4374
  else if ((iw0 & 0xff60) == 0x9e60)
4375
    rv = decode_dagMODim_0 (iw0, outf);
4376
  else if ((iw0 & 0xfff0) == 0x9f60)
4377
    rv = decode_dagMODik_0 (iw0, outf);
4378
  else if ((iw0 & 0xfc00) == 0x9c00)
4379
    rv = decode_dspLDST_0 (iw0, outf);
4380
  else if ((iw0 & 0xf000) == 0x9000)
4381
    rv = decode_LDST_0 (iw0, outf);
4382
  else if ((iw0 & 0xfc00) == 0xb800)
4383
    rv = decode_LDSTiiFP_0 (iw0, outf);
4384
  else if ((iw0 & 0xe000) == 0xA000)
4385
    rv = decode_LDSTii_0 (iw0, outf);
4386
  else if ((iw0 & 0xff80) == 0xe080 && (iw1 & 0x0C00) == 0x0000)
4387
    rv = decode_LoopSetup_0 (iw0, iw1, pc, outf);
4388
  else if ((iw0 & 0xff00) == 0xe100 && (iw1 & 0x0000) == 0x0000)
4389
    rv = decode_LDIMMhalf_0 (iw0, iw1, outf);
4390
  else if ((iw0 & 0xfe00) == 0xe200 && (iw1 & 0x0000) == 0x0000)
4391
    rv = decode_CALLa_0 (iw0, iw1, pc, outf);
4392
  else if ((iw0 & 0xfc00) == 0xe400 && (iw1 & 0x0000) == 0x0000)
4393
    rv = decode_LDSTidxI_0 (iw0, iw1, outf);
4394
  else if ((iw0 & 0xfffe) == 0xe800 && (iw1 & 0x0000) == 0x0000)
4395
    rv = decode_linkage_0 (iw0, iw1, outf);
4396
  else if ((iw0 & 0xf600) == 0xc000 && (iw1 & 0x0000) == 0x0000)
4397
    rv = decode_dsp32mac_0 (iw0, iw1, outf);
4398
  else if ((iw0 & 0xf600) == 0xc200 && (iw1 & 0x0000) == 0x0000)
4399
    rv = decode_dsp32mult_0 (iw0, iw1, outf);
4400
  else if ((iw0 & 0xf7c0) == 0xc400 && (iw1 & 0x0000) == 0x0000)
4401
    rv = decode_dsp32alu_0 (iw0, iw1, outf);
4402
  else if ((iw0 & 0xf780) == 0xc600 && (iw1 & 0x01c0) == 0x0000)
4403
    rv = decode_dsp32shift_0 (iw0, iw1, outf);
4404
  else if ((iw0 & 0xf780) == 0xc680 && (iw1 & 0x0000) == 0x0000)
4405
    rv = decode_dsp32shiftimm_0 (iw0, iw1, outf);
4406
  else if ((iw0 & 0xff00) == 0xf800)
4407
    rv = decode_pseudoDEBUG_0 (iw0, outf);
4408
#if 0
4409
  else if ((iw0 & 0xFF00) == 0xF900)
4410
    rv = decode_pseudoOChar_0 (iw0, iw1, pc, outf);
4411
#endif
4412
  else if ((iw0 & 0xFFC0) == 0xf000 && (iw1 & 0x0000) == 0x0000)
4413
    rv = decode_pseudodbg_assert_0 (iw0, iw1, outf);
4414
 
4415
  return rv;
4416
}
4417
 
4418
 
4419
int
4420
print_insn_bfin (bfd_vma pc, disassemble_info *outf)
4421
{
4422
  bfd_byte buf[2];
4423
  unsigned short iw0;
4424
  int status;
4425
  int count = 0;
4426
 
4427
  status = (*outf->read_memory_func) (pc & ~0x01, buf, 2, outf);
4428
  iw0 = bfd_getl16 (buf);
4429
 
4430
  count += _print_insn_bfin (pc, outf);
4431
 
4432
  /* Proper display of multiple issue instructions.  */
4433
 
4434
  if ((iw0 & 0xc000) == 0xc000 && (iw0 & BIT_MULTI_INS)
4435
      && ((iw0 & 0xe800) != 0xe800 /* Not Linkage.  */ ))
4436
    {
4437
      outf->fprintf_func (outf->stream, " || ");
4438
      count += _print_insn_bfin (pc + 4, outf);
4439
      outf->fprintf_func (outf->stream, " || ");
4440
      count += _print_insn_bfin (pc + 6, outf);
4441
    }
4442
  if (count == 0)
4443
    {
4444
      outf->fprintf_func (outf->stream, "ILLEGAL");
4445
      return 2;
4446
    }
4447
  outf->fprintf_func (outf->stream, ";");
4448
  return count;
4449
}

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.