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