Coverage Report

Created: 2026-07-25 10:20

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/binutils-gdb/opcodes/m32c-dis.c
Line
Count
Source
1
/* DO NOT EDIT!  -*- buffer-read-only: t -*- vi:set ro:  */
2
/* Disassembler interface for targets using CGEN. -*- C -*-
3
   CGEN: Cpu tools GENerator
4
5
   THIS FILE IS MACHINE GENERATED WITH CGEN.
6
   - the resultant file is machine generated, cgen-dis.in isn't
7
8
   Copyright (C) 1996-2026 Free Software Foundation, Inc.
9
10
   This file is part of libopcodes.
11
12
   This library is free software; you can redistribute it and/or modify
13
   it under the terms of the GNU General Public License as published by
14
   the Free Software Foundation; either version 3, or (at your option)
15
   any later version.
16
17
   It is distributed in the hope that it will be useful, but WITHOUT
18
   ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
19
   or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
20
   License for more details.
21
22
   You should have received a copy of the GNU General Public License
23
   along with this program; if not, write to the Free Software Foundation, Inc.,
24
   51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.  */
25
26
/* ??? Eventually more and more of this stuff can go to cpu-independent files.
27
   Keep that in mind.  */
28
29
#include "sysdep.h"
30
#include <stdio.h>
31
#include "ansidecl.h"
32
#include "disassemble.h"
33
#include "bfd.h"
34
#include "symcat.h"
35
#include "libiberty.h"
36
#include "m32c-desc.h"
37
#include "m32c-opc.h"
38
#include "opintl.h"
39
40
/* Default text to print if an instruction isn't recognized.  */
41
27.8k
#define UNKNOWN_INSN_MSG _("*unknown*")
42
43
static void print_normal
44
  (CGEN_CPU_DESC, void *, long, unsigned int, bfd_vma, int);
45
static void print_address
46
  (CGEN_CPU_DESC, void *, bfd_vma, unsigned int, bfd_vma, int) ATTRIBUTE_UNUSED;
47
static void print_keyword
48
  (CGEN_CPU_DESC, void *, CGEN_KEYWORD *, long, unsigned int) ATTRIBUTE_UNUSED;
49
static void print_insn_normal
50
  (CGEN_CPU_DESC, void *, const CGEN_INSN *, CGEN_FIELDS *, bfd_vma, int);
51
static int print_insn
52
  (CGEN_CPU_DESC, bfd_vma,  disassemble_info *, bfd_byte *, unsigned);
53
static int default_print_insn
54
  (CGEN_CPU_DESC, bfd_vma, disassemble_info *) ATTRIBUTE_UNUSED;
55
static int read_insn
56
  (CGEN_CPU_DESC, bfd_vma, disassemble_info *, bfd_byte *, int, CGEN_EXTRACT_INFO *,
57
   unsigned long *);
58

59
/* -- disassembler routines inserted here.  */
60
61
/* -- dis.c */
62
63
#include "elf/m32c.h"
64
#include "elf-bfd.h"
65
66
/* Always print the short insn format suffix as ':<char>'.  */
67
68
static void
69
print_suffix (void * dis_info, char suffix)
70
158k
{
71
158k
  disassemble_info *info = dis_info;
72
73
158k
  (*info->fprintf_func) (info->stream, ":%c", suffix);
74
158k
}
75
76
static void
77
print_S (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED,
78
   void * dis_info,
79
   long value ATTRIBUTE_UNUSED,
80
   unsigned int attrs ATTRIBUTE_UNUSED,
81
   bfd_vma pc ATTRIBUTE_UNUSED,
82
   int length ATTRIBUTE_UNUSED)
83
109k
{
84
109k
  print_suffix (dis_info, 's');
85
109k
}
86
87
88
static void
89
print_G (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED,
90
   void * dis_info,
91
   long value ATTRIBUTE_UNUSED,
92
   unsigned int attrs ATTRIBUTE_UNUSED,
93
   bfd_vma pc ATTRIBUTE_UNUSED,
94
   int length ATTRIBUTE_UNUSED)
95
28.3k
{
96
28.3k
  print_suffix (dis_info, 'g');
97
28.3k
}
98
99
static void
100
print_Q (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED,
101
   void * dis_info,
102
   long value ATTRIBUTE_UNUSED,
103
   unsigned int attrs ATTRIBUTE_UNUSED,
104
   bfd_vma pc ATTRIBUTE_UNUSED,
105
   int length ATTRIBUTE_UNUSED)
106
16.3k
{
107
16.3k
  print_suffix (dis_info, 'q');
108
16.3k
}
109
110
static void
111
print_Z (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED,
112
   void * dis_info,
113
   long value ATTRIBUTE_UNUSED,
114
   unsigned int attrs ATTRIBUTE_UNUSED,
115
   bfd_vma pc ATTRIBUTE_UNUSED,
116
   int length ATTRIBUTE_UNUSED)
117
4.65k
{
118
4.65k
  print_suffix (dis_info, 'z');
119
4.65k
}
120
121
/* Print the empty suffix.  */
122
123
static void
124
print_X (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED,
125
   void * dis_info ATTRIBUTE_UNUSED,
126
   long value ATTRIBUTE_UNUSED,
127
   unsigned int attrs ATTRIBUTE_UNUSED,
128
   bfd_vma pc ATTRIBUTE_UNUSED,
129
   int length ATTRIBUTE_UNUSED)
130
10.6k
{
131
10.6k
  return;
132
10.6k
}
133
134
static void
135
print_r0l_r0h (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED,
136
         void * dis_info,
137
         long value,
138
         unsigned int attrs ATTRIBUTE_UNUSED,
139
         bfd_vma pc ATTRIBUTE_UNUSED,
140
         int length ATTRIBUTE_UNUSED)
141
9.08k
{
142
9.08k
  disassemble_info *info = dis_info;
143
144
9.08k
  if (value == 0)
145
6.11k
    (*info->fprintf_func) (info->stream, "r0h,r0l");
146
2.97k
  else
147
2.97k
    (*info->fprintf_func) (info->stream, "r0l,r0h");
148
9.08k
}
149
150
static void
151
print_unsigned_bitbase (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED,
152
      void * dis_info,
153
      unsigned long value,
154
      unsigned int attrs ATTRIBUTE_UNUSED,
155
      bfd_vma pc ATTRIBUTE_UNUSED,
156
      int length ATTRIBUTE_UNUSED)
157
19.6k
{
158
19.6k
  disassemble_info *info = dis_info;
159
160
19.6k
  (*info->fprintf_func) (info->stream, "%ld,0x%lx", value & 0x7, value >> 3);
161
19.6k
}
162
163
static void
164
print_signed_bitbase (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED,
165
          void * dis_info,
166
          signed long value,
167
          unsigned int attrs ATTRIBUTE_UNUSED,
168
          bfd_vma pc ATTRIBUTE_UNUSED,
169
          int length ATTRIBUTE_UNUSED)
170
1.16k
{
171
1.16k
  disassemble_info *info = dis_info;
172
173
1.16k
  (*info->fprintf_func) (info->stream, "%ld,%ld", value & 0x7, value >> 3);
174
1.16k
}
175
176
static void
177
print_size (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED,
178
      void * dis_info,
179
      long value ATTRIBUTE_UNUSED,
180
      unsigned int attrs ATTRIBUTE_UNUSED,
181
      bfd_vma pc ATTRIBUTE_UNUSED,
182
      int length ATTRIBUTE_UNUSED)
183
0
{
184
  /* Always print the size as '.w'.  */
185
0
  disassemble_info *info = dis_info;
186
187
0
  (*info->fprintf_func) (info->stream, ".w");
188
0
}
189
190
3.13k
#define POP  0
191
971
#define PUSH 1
192
193
static void print_pop_regset  (CGEN_CPU_DESC, void *, long, unsigned int, bfd_vma, int);
194
static void print_push_regset (CGEN_CPU_DESC, void *, long, unsigned int, bfd_vma, int);
195
196
/* Print a set of registers, R0,R1,A0,A1,SB,FB.  */
197
198
static void
199
print_regset (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED,
200
        void * dis_info,
201
        long value,
202
        unsigned int attrs ATTRIBUTE_UNUSED,
203
        bfd_vma pc ATTRIBUTE_UNUSED,
204
        int length ATTRIBUTE_UNUSED,
205
        int push)
206
4.10k
{
207
4.10k
  static char * m16c_register_names [] =
208
4.10k
  {
209
4.10k
    "r0", "r1", "r2", "r3", "a0", "a1", "sb", "fb"
210
4.10k
  };
211
4.10k
  disassemble_info *info = dis_info;
212
4.10k
  int mask;
213
4.10k
  int reg_index = 0;
214
4.10k
  char* comma = "";
215
216
4.10k
  if (push)
217
971
    mask = 0x80;
218
3.13k
  else
219
3.13k
    mask = 1;
220
221
4.10k
  if (value & mask)
222
2.83k
    {
223
2.83k
      (*info->fprintf_func) (info->stream, "%s", m16c_register_names [0]);
224
2.83k
      comma = ",";
225
2.83k
    }
226
227
32.8k
  for (reg_index = 1; reg_index <= 7; ++reg_index)
228
28.7k
    {
229
28.7k
      if (push)
230
6.79k
        mask >>= 1;
231
21.9k
      else
232
21.9k
        mask <<= 1;
233
234
28.7k
      if (value & mask)
235
17.5k
        {
236
17.5k
          (*info->fprintf_func) (info->stream, "%s%s", comma,
237
17.5k
         m16c_register_names [reg_index]);
238
17.5k
          comma = ",";
239
17.5k
        }
240
28.7k
    }
241
4.10k
}
242
243
static void
244
print_pop_regset (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED,
245
      void * dis_info,
246
      long value,
247
      unsigned int attrs ATTRIBUTE_UNUSED,
248
      bfd_vma pc ATTRIBUTE_UNUSED,
249
      int length ATTRIBUTE_UNUSED)
250
3.13k
{
251
3.13k
  print_regset (cd, dis_info, value, attrs, pc, length, POP);
252
3.13k
}
253
254
static void
255
print_push_regset (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED,
256
       void * dis_info,
257
       long value,
258
       unsigned int attrs ATTRIBUTE_UNUSED,
259
       bfd_vma pc ATTRIBUTE_UNUSED,
260
       int length ATTRIBUTE_UNUSED)
261
971
{
262
971
  print_regset (cd, dis_info, value, attrs, pc, length, PUSH);
263
971
}
264
265
static void
266
print_signed4n (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED,
267
    void * dis_info,
268
    signed long value,
269
    unsigned int attrs ATTRIBUTE_UNUSED,
270
    bfd_vma pc ATTRIBUTE_UNUSED,
271
    int length ATTRIBUTE_UNUSED)
272
3.20k
{
273
3.20k
  disassemble_info *info = dis_info;
274
275
3.20k
  (*info->fprintf_func) (info->stream, "%ld", -value);
276
3.20k
}
277
278
void m32c_cgen_print_operand
279
  (CGEN_CPU_DESC, int, void *, CGEN_FIELDS *, void const *, bfd_vma, int);
280
281
/* Main entry point for printing operands.
282
   XINFO is a `void *' and not a `disassemble_info *' to not put a requirement
283
   of dis-asm.h on cgen.h.
284
285
   This function is basically just a big switch statement.  Earlier versions
286
   used tables to look up the function to use, but
287
   - if the table contains both assembler and disassembler functions then
288
     the disassembler contains much of the assembler and vice-versa,
289
   - there's a lot of inlining possibilities as things grow,
290
   - using a switch statement avoids the function call overhead.
291
292
   This function could be moved into `print_insn_normal', but keeping it
293
   separate makes clear the interface between `print_insn_normal' and each of
294
   the handlers.  */
295
296
void
297
m32c_cgen_print_operand (CGEN_CPU_DESC cd,
298
         int opindex,
299
         void * xinfo,
300
         CGEN_FIELDS *fields,
301
         void const *attrs ATTRIBUTE_UNUSED,
302
         bfd_vma pc,
303
         int length)
304
541k
{
305
541k
  disassemble_info *info = (disassemble_info *) xinfo;
306
307
541k
  switch (opindex)
308
541k
    {
309
0
    case M32C_OPERAND_A0 :
310
0
      print_keyword (cd, info, & m32c_cgen_opval_h_a0, 0, 0);
311
0
      break;
312
0
    case M32C_OPERAND_A1 :
313
0
      print_keyword (cd, info, & m32c_cgen_opval_h_a1, 0, 0);
314
0
      break;
315
1.61k
    case M32C_OPERAND_AN16_PUSH_S :
316
1.61k
      print_keyword (cd, info, & m32c_cgen_opval_h_ar_HI, fields->f_4_1, 0);
317
1.61k
      break;
318
502
    case M32C_OPERAND_BIT16AN :
319
502
      print_keyword (cd, info, & m32c_cgen_opval_h_ar, fields->f_dst16_an, 0);
320
502
      break;
321
440
    case M32C_OPERAND_BIT16RN :
322
440
      print_keyword (cd, info, & m32c_cgen_opval_h_gr_HI, fields->f_dst16_rn, 0);
323
440
      break;
324
3.58k
    case M32C_OPERAND_BIT3_S :
325
3.58k
      print_normal (cd, info, fields->f_imm3_S, 0|(1<<CGEN_OPERAND_SIGNED)|(1<<CGEN_OPERAND_VIRTUAL), pc, length);
326
3.58k
      break;
327
688
    case M32C_OPERAND_BIT32ANPREFIXED :
328
688
      print_keyword (cd, info, & m32c_cgen_opval_h_ar, fields->f_dst32_an_prefixed, 0);
329
688
      break;
330
1.74k
    case M32C_OPERAND_BIT32ANUNPREFIXED :
331
1.74k
      print_keyword (cd, info, & m32c_cgen_opval_h_ar, fields->f_dst32_an_unprefixed, 0);
332
1.74k
      break;
333
105
    case M32C_OPERAND_BIT32RNPREFIXED :
334
105
      print_keyword (cd, info, & m32c_cgen_opval_h_gr_QI, fields->f_dst32_rn_prefixed_QI, 0);
335
105
      break;
336
858
    case M32C_OPERAND_BIT32RNUNPREFIXED :
337
858
      print_keyword (cd, info, & m32c_cgen_opval_h_gr_QI, fields->f_dst32_rn_unprefixed_QI, 0);
338
858
      break;
339
33
    case M32C_OPERAND_BITBASE16_16_S8 :
340
33
      print_signed_bitbase (cd, info, fields->f_dsp_16_s8, 0|(1<<CGEN_OPERAND_SIGNED), pc, length);
341
33
      break;
342
667
    case M32C_OPERAND_BITBASE16_16_U16 :
343
667
      print_unsigned_bitbase (cd, info, fields->f_dsp_16_u16, 0, pc, length);
344
667
      break;
345
919
    case M32C_OPERAND_BITBASE16_16_U8 :
346
919
      print_unsigned_bitbase (cd, info, fields->f_dsp_16_u8, 0, pc, length);
347
919
      break;
348
14.9k
    case M32C_OPERAND_BITBASE16_8_U11_S :
349
14.9k
      print_unsigned_bitbase (cd, info, fields->f_bitbase16_u11_S, 0|(1<<CGEN_OPERAND_VIRTUAL), pc, length);
350
14.9k
      break;
351
832
    case M32C_OPERAND_BITBASE32_16_S11_UNPREFIXED :
352
832
      print_signed_bitbase (cd, info, fields->f_bitbase32_16_s11_unprefixed, 0|(1<<CGEN_OPERAND_SIGNED)|(1<<CGEN_OPERAND_VIRTUAL), pc, length);
353
832
      break;
354
162
    case M32C_OPERAND_BITBASE32_16_S19_UNPREFIXED :
355
162
      print_signed_bitbase (cd, info, fields->f_bitbase32_16_s19_unprefixed, 0|(1<<CGEN_OPERAND_SIGNED)|(1<<CGEN_OPERAND_VIRTUAL), pc, length);
356
162
      break;
357
409
    case M32C_OPERAND_BITBASE32_16_U11_UNPREFIXED :
358
409
      print_unsigned_bitbase (cd, info, fields->f_bitbase32_16_u11_unprefixed, 0|(1<<CGEN_OPERAND_VIRTUAL), pc, length);
359
409
      break;
360
1.29k
    case M32C_OPERAND_BITBASE32_16_U19_UNPREFIXED :
361
1.29k
      print_unsigned_bitbase (cd, info, fields->f_bitbase32_16_u19_unprefixed, 0|(1<<CGEN_OPERAND_VIRTUAL), pc, length);
362
1.29k
      break;
363
750
    case M32C_OPERAND_BITBASE32_16_U27_UNPREFIXED :
364
750
      print_unsigned_bitbase (cd, info, fields->f_bitbase32_16_u27_unprefixed, 0|(1<<CGEN_OPERAND_VIRTUAL), pc, length);
365
750
      break;
366
48
    case M32C_OPERAND_BITBASE32_24_S11_PREFIXED :
367
48
      print_signed_bitbase (cd, info, fields->f_bitbase32_24_s11_prefixed, 0|(1<<CGEN_OPERAND_SIGNED)|(1<<CGEN_OPERAND_VIRTUAL), pc, length);
368
48
      break;
369
91
    case M32C_OPERAND_BITBASE32_24_S19_PREFIXED :
370
91
      print_signed_bitbase (cd, info, fields->f_bitbase32_24_s19_prefixed, 0|(1<<CGEN_OPERAND_SIGNED)|(1<<CGEN_OPERAND_VIRTUAL), pc, length);
371
91
      break;
372
166
    case M32C_OPERAND_BITBASE32_24_U11_PREFIXED :
373
166
      print_unsigned_bitbase (cd, info, fields->f_bitbase32_24_u11_prefixed, 0|(1<<CGEN_OPERAND_VIRTUAL), pc, length);
374
166
      break;
375
138
    case M32C_OPERAND_BITBASE32_24_U19_PREFIXED :
376
138
      print_unsigned_bitbase (cd, info, fields->f_bitbase32_24_u19_prefixed, 0|(1<<CGEN_OPERAND_VIRTUAL), pc, length);
377
138
      break;
378
393
    case M32C_OPERAND_BITBASE32_24_U27_PREFIXED :
379
393
      print_unsigned_bitbase (cd, info, fields->f_bitbase32_24_u27_prefixed, 0|(1<<CGEN_OPERAND_VIRTUAL), pc, length);
380
393
      break;
381
549
    case M32C_OPERAND_BITNO16R :
382
549
      print_normal (cd, info, fields->f_dsp_16_u8, 0, pc, length);
383
549
      break;
384
132
    case M32C_OPERAND_BITNO32PREFIXED :
385
132
      print_normal (cd, info, fields->f_bitno32_prefixed, 0, pc, length);
386
132
      break;
387
1.49k
    case M32C_OPERAND_BITNO32UNPREFIXED :
388
1.49k
      print_normal (cd, info, fields->f_bitno32_unprefixed, 0, pc, length);
389
1.49k
      break;
390
905
    case M32C_OPERAND_DSP_10_U6 :
391
905
      print_normal (cd, info, fields->f_dsp_10_u6, 0, pc, length);
392
905
      break;
393
1.60k
    case M32C_OPERAND_DSP_16_S16 :
394
1.60k
      print_normal (cd, info, fields->f_dsp_16_s16, 0|(1<<CGEN_OPERAND_SIGNED), pc, length);
395
1.60k
      break;
396
5.99k
    case M32C_OPERAND_DSP_16_S8 :
397
5.99k
      print_normal (cd, info, fields->f_dsp_16_s8, 0|(1<<CGEN_OPERAND_SIGNED), pc, length);
398
5.99k
      break;
399
13.6k
    case M32C_OPERAND_DSP_16_U16 :
400
13.6k
      print_normal (cd, info, fields->f_dsp_16_u16, 0, pc, length);
401
13.6k
      break;
402
607
    case M32C_OPERAND_DSP_16_U20 :
403
607
      print_normal (cd, info, fields->f_dsp_16_u24, 0|(1<<CGEN_OPERAND_VIRTUAL), pc, length);
404
607
      break;
405
4.24k
    case M32C_OPERAND_DSP_16_U24 :
406
4.24k
      print_normal (cd, info, fields->f_dsp_16_u24, 0|(1<<CGEN_OPERAND_VIRTUAL), pc, length);
407
4.24k
      break;
408
13.2k
    case M32C_OPERAND_DSP_16_U8 :
409
13.2k
      print_normal (cd, info, fields->f_dsp_16_u8, 0, pc, length);
410
13.2k
      break;
411
260
    case M32C_OPERAND_DSP_24_S16 :
412
260
      print_normal (cd, info, fields->f_dsp_24_s16, 0|(1<<CGEN_OPERAND_SIGNED)|(1<<CGEN_OPERAND_VIRTUAL), pc, length);
413
260
      break;
414
214
    case M32C_OPERAND_DSP_24_S8 :
415
214
      print_normal (cd, info, fields->f_dsp_24_s8, 0|(1<<CGEN_OPERAND_SIGNED), pc, length);
416
214
      break;
417
1.54k
    case M32C_OPERAND_DSP_24_U16 :
418
1.54k
      print_normal (cd, info, fields->f_dsp_24_u16, 0|(1<<CGEN_OPERAND_VIRTUAL), pc, length);
419
1.54k
      break;
420
465
    case M32C_OPERAND_DSP_24_U20 :
421
465
      print_normal (cd, info, fields->f_dsp_24_u24, 0|(1<<CGEN_OPERAND_VIRTUAL), pc, length);
422
465
      break;
423
2.16k
    case M32C_OPERAND_DSP_24_U24 :
424
2.16k
      print_normal (cd, info, fields->f_dsp_24_u24, 0|(1<<CGEN_OPERAND_VIRTUAL), pc, length);
425
2.16k
      break;
426
1.30k
    case M32C_OPERAND_DSP_24_U8 :
427
1.30k
      print_normal (cd, info, fields->f_dsp_24_u8, 0, pc, length);
428
1.30k
      break;
429
123
    case M32C_OPERAND_DSP_32_S16 :
430
123
      print_normal (cd, info, fields->f_dsp_32_s16, 0|(1<<CGEN_OPERAND_SIGNED), pc, length);
431
123
      break;
432
386
    case M32C_OPERAND_DSP_32_S8 :
433
386
      print_normal (cd, info, fields->f_dsp_32_s8, 0|(1<<CGEN_OPERAND_SIGNED), pc, length);
434
386
      break;
435
1.33k
    case M32C_OPERAND_DSP_32_U16 :
436
1.33k
      print_normal (cd, info, fields->f_dsp_32_u16, 0, pc, length);
437
1.33k
      break;
438
65
    case M32C_OPERAND_DSP_32_U20 :
439
65
      print_normal (cd, info, fields->f_dsp_32_u24, 0, pc, length);
440
65
      break;
441
1.20k
    case M32C_OPERAND_DSP_32_U24 :
442
1.20k
      print_normal (cd, info, fields->f_dsp_32_u24, 0, pc, length);
443
1.20k
      break;
444
1.29k
    case M32C_OPERAND_DSP_32_U8 :
445
1.29k
      print_normal (cd, info, fields->f_dsp_32_u8, 0, pc, length);
446
1.29k
      break;
447
325
    case M32C_OPERAND_DSP_40_S16 :
448
325
      print_normal (cd, info, fields->f_dsp_40_s16, 0|(1<<CGEN_OPERAND_SIGNED), pc, length);
449
325
      break;
450
126
    case M32C_OPERAND_DSP_40_S8 :
451
126
      print_normal (cd, info, fields->f_dsp_40_s8, 0|(1<<CGEN_OPERAND_SIGNED), pc, length);
452
126
      break;
453
342
    case M32C_OPERAND_DSP_40_U16 :
454
342
      print_normal (cd, info, fields->f_dsp_40_u16, 0, pc, length);
455
342
      break;
456
0
    case M32C_OPERAND_DSP_40_U20 :
457
0
      print_normal (cd, info, fields->f_dsp_40_u20, 0, pc, length);
458
0
      break;
459
533
    case M32C_OPERAND_DSP_40_U24 :
460
533
      print_normal (cd, info, fields->f_dsp_40_u24, 0, pc, length);
461
533
      break;
462
426
    case M32C_OPERAND_DSP_40_U8 :
463
426
      print_normal (cd, info, fields->f_dsp_40_u8, 0, pc, length);
464
426
      break;
465
441
    case M32C_OPERAND_DSP_48_S16 :
466
441
      print_normal (cd, info, fields->f_dsp_48_s16, 0|(1<<CGEN_OPERAND_SIGNED), pc, length);
467
441
      break;
468
36
    case M32C_OPERAND_DSP_48_S8 :
469
36
      print_normal (cd, info, fields->f_dsp_48_s8, 0|(1<<CGEN_OPERAND_SIGNED), pc, length);
470
36
      break;
471
244
    case M32C_OPERAND_DSP_48_U16 :
472
244
      print_normal (cd, info, fields->f_dsp_48_u16, 0, pc, length);
473
244
      break;
474
0
    case M32C_OPERAND_DSP_48_U20 :
475
0
      print_normal (cd, info, fields->f_dsp_48_u20, 0|(1<<CGEN_OPERAND_VIRTUAL), pc, length);
476
0
      break;
477
86
    case M32C_OPERAND_DSP_48_U24 :
478
86
      print_normal (cd, info, fields->f_dsp_48_u24, 0|(1<<CGEN_OPERAND_VIRTUAL), pc, length);
479
86
      break;
480
86
    case M32C_OPERAND_DSP_48_U8 :
481
86
      print_normal (cd, info, fields->f_dsp_48_u8, 0, pc, length);
482
86
      break;
483
296
    case M32C_OPERAND_DSP_8_S24 :
484
296
      print_normal (cd, info, fields->f_dsp_8_s24, 0|(1<<CGEN_OPERAND_SIGNED), pc, length);
485
296
      break;
486
20.1k
    case M32C_OPERAND_DSP_8_S8 :
487
20.1k
      print_normal (cd, info, fields->f_dsp_8_s8, 0|(1<<CGEN_OPERAND_SIGNED), pc, length);
488
20.1k
      break;
489
18.3k
    case M32C_OPERAND_DSP_8_U16 :
490
18.3k
      print_normal (cd, info, fields->f_dsp_8_u16, 0, pc, length);
491
18.3k
      break;
492
0
    case M32C_OPERAND_DSP_8_U24 :
493
0
      print_normal (cd, info, fields->f_dsp_8_u24, 0, pc, length);
494
0
      break;
495
116
    case M32C_OPERAND_DSP_8_U6 :
496
116
      print_normal (cd, info, fields->f_dsp_8_u6, 0, pc, length);
497
116
      break;
498
24.7k
    case M32C_OPERAND_DSP_8_U8 :
499
24.7k
      print_normal (cd, info, fields->f_dsp_8_u8, 0, pc, length);
500
24.7k
      break;
501
8.45k
    case M32C_OPERAND_DST16AN :
502
8.45k
      print_keyword (cd, info, & m32c_cgen_opval_h_ar, fields->f_dst16_an, 0);
503
8.45k
      break;
504
1.36k
    case M32C_OPERAND_DST16AN_S :
505
1.36k
      print_keyword (cd, info, & m32c_cgen_opval_h_ar_HI, fields->f_dst16_an_s, 0);
506
1.36k
      break;
507
1.57k
    case M32C_OPERAND_DST16ANHI :
508
1.57k
      print_keyword (cd, info, & m32c_cgen_opval_h_ar_HI, fields->f_dst16_an, 0);
509
1.57k
      break;
510
1.31k
    case M32C_OPERAND_DST16ANQI :
511
1.31k
      print_keyword (cd, info, & m32c_cgen_opval_h_ar_QI, fields->f_dst16_an, 0);
512
1.31k
      break;
513
3.49k
    case M32C_OPERAND_DST16ANQI_S :
514
3.49k
      print_keyword (cd, info, & m32c_cgen_opval_h_ar_QI, fields->f_dst16_rn_QI_s, 0);
515
3.49k
      break;
516
210
    case M32C_OPERAND_DST16ANSI :
517
210
      print_keyword (cd, info, & m32c_cgen_opval_h_ar_SI, fields->f_dst16_an, 0);
518
210
      break;
519
86
    case M32C_OPERAND_DST16RNEXTQI :
520
86
      print_keyword (cd, info, & m32c_cgen_opval_h_gr_ext_QI, fields->f_dst16_rn_ext, 0);
521
86
      break;
522
2.74k
    case M32C_OPERAND_DST16RNHI :
523
2.74k
      print_keyword (cd, info, & m32c_cgen_opval_h_gr_HI, fields->f_dst16_rn, 0);
524
2.74k
      break;
525
5.26k
    case M32C_OPERAND_DST16RNQI :
526
5.26k
      print_keyword (cd, info, & m32c_cgen_opval_h_gr_QI, fields->f_dst16_rn, 0);
527
5.26k
      break;
528
22.5k
    case M32C_OPERAND_DST16RNQI_S :
529
22.5k
      print_keyword (cd, info, & m32c_cgen_opval_h_r0l_r0h, fields->f_dst16_rn_QI_s, 0);
530
22.5k
      break;
531
151
    case M32C_OPERAND_DST16RNSI :
532
151
      print_keyword (cd, info, & m32c_cgen_opval_h_gr_SI, fields->f_dst16_rn, 0);
533
151
      break;
534
71
    case M32C_OPERAND_DST32ANEXTUNPREFIXED :
535
71
      print_keyword (cd, info, & m32c_cgen_opval_h_ar, fields->f_dst32_an_unprefixed, 0);
536
71
      break;
537
1.04k
    case M32C_OPERAND_DST32ANPREFIXED :
538
1.04k
      print_keyword (cd, info, & m32c_cgen_opval_h_ar, fields->f_dst32_an_prefixed, 0);
539
1.04k
      break;
540
316
    case M32C_OPERAND_DST32ANPREFIXEDHI :
541
316
      print_keyword (cd, info, & m32c_cgen_opval_h_ar_HI, fields->f_dst32_an_prefixed, 0);
542
316
      break;
543
568
    case M32C_OPERAND_DST32ANPREFIXEDQI :
544
568
      print_keyword (cd, info, & m32c_cgen_opval_h_ar_QI, fields->f_dst32_an_prefixed, 0);
545
568
      break;
546
70
    case M32C_OPERAND_DST32ANPREFIXEDSI :
547
70
      print_keyword (cd, info, & m32c_cgen_opval_h_ar, fields->f_dst32_an_prefixed, 0);
548
70
      break;
549
11.0k
    case M32C_OPERAND_DST32ANUNPREFIXED :
550
11.0k
      print_keyword (cd, info, & m32c_cgen_opval_h_ar, fields->f_dst32_an_unprefixed, 0);
551
11.0k
      break;
552
1.16k
    case M32C_OPERAND_DST32ANUNPREFIXEDHI :
553
1.16k
      print_keyword (cd, info, & m32c_cgen_opval_h_ar_HI, fields->f_dst32_an_unprefixed, 0);
554
1.16k
      break;
555
650
    case M32C_OPERAND_DST32ANUNPREFIXEDQI :
556
650
      print_keyword (cd, info, & m32c_cgen_opval_h_ar_QI, fields->f_dst32_an_unprefixed, 0);
557
650
      break;
558
2.42k
    case M32C_OPERAND_DST32ANUNPREFIXEDSI :
559
2.42k
      print_keyword (cd, info, & m32c_cgen_opval_h_ar, fields->f_dst32_an_unprefixed, 0);
560
2.42k
      break;
561
2.86k
    case M32C_OPERAND_DST32R0HI_S :
562
2.86k
      print_keyword (cd, info, & m32c_cgen_opval_h_r0, 0, 0);
563
2.86k
      break;
564
1.08k
    case M32C_OPERAND_DST32R0QI_S :
565
1.08k
      print_keyword (cd, info, & m32c_cgen_opval_h_r0l, 0, 0);
566
1.08k
      break;
567
76
    case M32C_OPERAND_DST32RNEXTUNPREFIXEDHI :
568
76
      print_keyword (cd, info, & m32c_cgen_opval_h_gr_ext_HI, fields->f_dst32_rn_ext_unprefixed, 0);
569
76
      break;
570
24
    case M32C_OPERAND_DST32RNEXTUNPREFIXEDQI :
571
24
      print_keyword (cd, info, & m32c_cgen_opval_h_gr_ext_QI, fields->f_dst32_rn_ext_unprefixed, 0);
572
24
      break;
573
147
    case M32C_OPERAND_DST32RNPREFIXEDHI :
574
147
      print_keyword (cd, info, & m32c_cgen_opval_h_gr_HI, fields->f_dst32_rn_prefixed_HI, 0);
575
147
      break;
576
354
    case M32C_OPERAND_DST32RNPREFIXEDQI :
577
354
      print_keyword (cd, info, & m32c_cgen_opval_h_gr_QI, fields->f_dst32_rn_prefixed_QI, 0);
578
354
      break;
579
48
    case M32C_OPERAND_DST32RNPREFIXEDSI :
580
48
      print_keyword (cd, info, & m32c_cgen_opval_h_gr_SI, fields->f_dst32_rn_prefixed_SI, 0);
581
48
      break;
582
3.58k
    case M32C_OPERAND_DST32RNUNPREFIXEDHI :
583
3.58k
      print_keyword (cd, info, & m32c_cgen_opval_h_gr_HI, fields->f_dst32_rn_unprefixed_HI, 0);
584
3.58k
      break;
585
1.74k
    case M32C_OPERAND_DST32RNUNPREFIXEDQI :
586
1.74k
      print_keyword (cd, info, & m32c_cgen_opval_h_gr_QI, fields->f_dst32_rn_unprefixed_QI, 0);
587
1.74k
      break;
588
1.86k
    case M32C_OPERAND_DST32RNUNPREFIXEDSI :
589
1.86k
      print_keyword (cd, info, & m32c_cgen_opval_h_gr_SI, fields->f_dst32_rn_unprefixed_SI, 0);
590
1.86k
      break;
591
28.3k
    case M32C_OPERAND_G :
592
28.3k
      print_G (cd, info, 0, 0|(1<<CGEN_OPERAND_SIGNED), pc, length);
593
28.3k
      break;
594
3.56k
    case M32C_OPERAND_IMM_12_S4 :
595
3.56k
      print_normal (cd, info, fields->f_imm_12_s4, 0|(1<<CGEN_OPERAND_SIGNED), pc, length);
596
3.56k
      break;
597
1.01k
    case M32C_OPERAND_IMM_12_S4N :
598
1.01k
      print_signed4n (cd, info, fields->f_imm_12_s4, 0|(1<<CGEN_OPERAND_SIGNED), pc, length);
599
1.01k
      break;
600
91
    case M32C_OPERAND_IMM_13_U3 :
601
91
      print_normal (cd, info, fields->f_imm_13_u3, 0|(1<<CGEN_OPERAND_SIGNED), pc, length);
602
91
      break;
603
3.88k
    case M32C_OPERAND_IMM_16_HI :
604
3.88k
      print_normal (cd, info, fields->f_dsp_16_s16, 0|(1<<CGEN_OPERAND_SIGNED), pc, length);
605
3.88k
      break;
606
8.75k
    case M32C_OPERAND_IMM_16_QI :
607
8.75k
      print_normal (cd, info, fields->f_dsp_16_s8, 0|(1<<CGEN_OPERAND_SIGNED), pc, length);
608
8.75k
      break;
609
87
    case M32C_OPERAND_IMM_16_SI :
610
87
      print_normal (cd, info, fields->f_dsp_16_s32, 0|(1<<CGEN_OPERAND_SIGNED)|(1<<CGEN_OPERAND_VIRTUAL), pc, length);
611
87
      break;
612
0
    case M32C_OPERAND_IMM_20_S4 :
613
0
      print_normal (cd, info, fields->f_imm_20_s4, 0|(1<<CGEN_OPERAND_SIGNED), pc, length);
614
0
      break;
615
1.48k
    case M32C_OPERAND_IMM_24_HI :
616
1.48k
      print_normal (cd, info, fields->f_dsp_24_s16, 0|(1<<CGEN_OPERAND_SIGNED)|(1<<CGEN_OPERAND_VIRTUAL), pc, length);
617
1.48k
      break;
618
1.84k
    case M32C_OPERAND_IMM_24_QI :
619
1.84k
      print_normal (cd, info, fields->f_dsp_24_s8, 0|(1<<CGEN_OPERAND_SIGNED), pc, length);
620
1.84k
      break;
621
96
    case M32C_OPERAND_IMM_24_SI :
622
96
      print_normal (cd, info, fields->f_dsp_24_s32, 0|(1<<CGEN_OPERAND_SIGNED)|(1<<CGEN_OPERAND_VIRTUAL), pc, length);
623
96
      break;
624
538
    case M32C_OPERAND_IMM_32_HI :
625
538
      print_normal (cd, info, fields->f_dsp_32_s16, 0|(1<<CGEN_OPERAND_SIGNED), pc, length);
626
538
      break;
627
831
    case M32C_OPERAND_IMM_32_QI :
628
831
      print_normal (cd, info, fields->f_dsp_32_s8, 0|(1<<CGEN_OPERAND_SIGNED), pc, length);
629
831
      break;
630
83
    case M32C_OPERAND_IMM_32_SI :
631
83
      print_normal (cd, info, fields->f_dsp_32_s32, 0|(1<<CGEN_OPERAND_SIGNED), pc, length);
632
83
      break;
633
428
    case M32C_OPERAND_IMM_40_HI :
634
428
      print_normal (cd, info, fields->f_dsp_40_s16, 0|(1<<CGEN_OPERAND_SIGNED), pc, length);
635
428
      break;
636
258
    case M32C_OPERAND_IMM_40_QI :
637
258
      print_normal (cd, info, fields->f_dsp_40_s8, 0|(1<<CGEN_OPERAND_SIGNED), pc, length);
638
258
      break;
639
334
    case M32C_OPERAND_IMM_40_SI :
640
334
      print_normal (cd, info, fields->f_dsp_40_s32, 0|(1<<CGEN_OPERAND_SIGNED)|(1<<CGEN_OPERAND_VIRTUAL), pc, length);
641
334
      break;
642
378
    case M32C_OPERAND_IMM_48_HI :
643
378
      print_normal (cd, info, fields->f_dsp_48_s16, 0|(1<<CGEN_OPERAND_SIGNED), pc, length);
644
378
      break;
645
69
    case M32C_OPERAND_IMM_48_QI :
646
69
      print_normal (cd, info, fields->f_dsp_48_s8, 0|(1<<CGEN_OPERAND_SIGNED), pc, length);
647
69
      break;
648
0
    case M32C_OPERAND_IMM_48_SI :
649
0
      print_normal (cd, info, fields->f_dsp_48_s32, 0|(1<<CGEN_OPERAND_SIGNED)|(1<<CGEN_OPERAND_VIRTUAL), pc, length);
650
0
      break;
651
130
    case M32C_OPERAND_IMM_56_HI :
652
130
      print_normal (cd, info, fields->f_dsp_56_s16, 0|(1<<CGEN_OPERAND_SIGNED)|(1<<CGEN_OPERAND_VIRTUAL), pc, length);
653
130
      break;
654
41
    case M32C_OPERAND_IMM_56_QI :
655
41
      print_normal (cd, info, fields->f_dsp_56_s8, 0|(1<<CGEN_OPERAND_SIGNED), pc, length);
656
41
      break;
657
78
    case M32C_OPERAND_IMM_64_HI :
658
78
      print_normal (cd, info, fields->f_dsp_64_s16, 0|(1<<CGEN_OPERAND_SIGNED), pc, length);
659
78
      break;
660
2.79k
    case M32C_OPERAND_IMM_8_HI :
661
2.79k
      print_normal (cd, info, fields->f_dsp_8_s16, 0|(1<<CGEN_OPERAND_SIGNED), pc, length);
662
2.79k
      break;
663
16.9k
    case M32C_OPERAND_IMM_8_QI :
664
16.9k
      print_normal (cd, info, fields->f_dsp_8_s8, 0|(1<<CGEN_OPERAND_SIGNED), pc, length);
665
16.9k
      break;
666
3.40k
    case M32C_OPERAND_IMM_8_S4 :
667
3.40k
      print_normal (cd, info, fields->f_imm_8_s4, 0|(1<<CGEN_OPERAND_SIGNED), pc, length);
668
3.40k
      break;
669
2.18k
    case M32C_OPERAND_IMM_8_S4N :
670
2.18k
      print_signed4n (cd, info, fields->f_imm_8_s4, 0|(1<<CGEN_OPERAND_SIGNED), pc, length);
671
2.18k
      break;
672
3.85k
    case M32C_OPERAND_IMM_SH_12_S4 :
673
3.85k
      print_keyword (cd, info, & m32c_cgen_opval_h_shimm, fields->f_imm_12_s4, 0);
674
3.85k
      break;
675
0
    case M32C_OPERAND_IMM_SH_20_S4 :
676
0
      print_keyword (cd, info, & m32c_cgen_opval_h_shimm, fields->f_imm_20_s4, 0);
677
0
      break;
678
2.04k
    case M32C_OPERAND_IMM_SH_8_S4 :
679
2.04k
      print_keyword (cd, info, & m32c_cgen_opval_h_shimm, fields->f_imm_8_s4, 0);
680
2.04k
      break;
681
2.48k
    case M32C_OPERAND_IMM1_S :
682
2.48k
      print_normal (cd, info, fields->f_imm1_S, 0|(1<<CGEN_OPERAND_SIGNED), pc, length);
683
2.48k
      break;
684
3.53k
    case M32C_OPERAND_IMM3_S :
685
3.53k
      print_normal (cd, info, fields->f_imm3_S, 0|(1<<CGEN_OPERAND_SIGNED)|(1<<CGEN_OPERAND_VIRTUAL), pc, length);
686
3.53k
      break;
687
1.37k
    case M32C_OPERAND_LAB_16_8 :
688
1.37k
      print_address (cd, info, fields->f_lab_16_8, 0|(1<<CGEN_OPERAND_RELAX)|(1<<CGEN_OPERAND_PCREL_ADDR), pc, length);
689
1.37k
      break;
690
1.16k
    case M32C_OPERAND_LAB_24_8 :
691
1.16k
      print_address (cd, info, fields->f_lab_24_8, 0|(1<<CGEN_OPERAND_RELAX)|(1<<CGEN_OPERAND_PCREL_ADDR), pc, length);
692
1.16k
      break;
693
832
    case M32C_OPERAND_LAB_32_8 :
694
832
      print_address (cd, info, fields->f_lab_32_8, 0|(1<<CGEN_OPERAND_RELAX)|(1<<CGEN_OPERAND_PCREL_ADDR), pc, length);
695
832
      break;
696
274
    case M32C_OPERAND_LAB_40_8 :
697
274
      print_address (cd, info, fields->f_lab_40_8, 0|(1<<CGEN_OPERAND_RELAX)|(1<<CGEN_OPERAND_PCREL_ADDR), pc, length);
698
274
      break;
699
4.73k
    case M32C_OPERAND_LAB_5_3 :
700
4.73k
      print_address (cd, info, fields->f_lab_5_3, 0|(1<<CGEN_OPERAND_RELAX)|(1<<CGEN_OPERAND_PCREL_ADDR), pc, length);
701
4.73k
      break;
702
1.24k
    case M32C_OPERAND_LAB_8_16 :
703
1.24k
      print_address (cd, info, fields->f_lab_8_16, 0|(1<<CGEN_OPERAND_RELAX)|(1<<CGEN_OPERAND_SIGN_OPT)|(1<<CGEN_OPERAND_PCREL_ADDR), pc, length);
704
1.24k
      break;
705
972
    case M32C_OPERAND_LAB_8_24 :
706
972
      print_address (cd, info, fields->f_lab_8_24, 0|(1<<CGEN_OPERAND_RELAX)|(1<<CGEN_OPERAND_ABS_ADDR), pc, length);
707
972
      break;
708
8.22k
    case M32C_OPERAND_LAB_8_8 :
709
8.22k
      print_address (cd, info, fields->f_lab_8_8, 0|(1<<CGEN_OPERAND_RELAX)|(1<<CGEN_OPERAND_PCREL_ADDR), pc, length);
710
8.22k
      break;
711
4.86k
    case M32C_OPERAND_LAB32_JMP_S :
712
4.86k
      print_address (cd, info, fields->f_lab32_jmp_s, 0|(1<<CGEN_OPERAND_RELAX)|(1<<CGEN_OPERAND_PCREL_ADDR)|(1<<CGEN_OPERAND_VIRTUAL), pc, length);
713
4.86k
      break;
714
16.3k
    case M32C_OPERAND_Q :
715
16.3k
      print_Q (cd, info, 0, 0|(1<<CGEN_OPERAND_SIGNED), pc, length);
716
16.3k
      break;
717
0
    case M32C_OPERAND_R0 :
718
0
      print_keyword (cd, info, & m32c_cgen_opval_h_r0, 0, 0);
719
0
      break;
720
0
    case M32C_OPERAND_R0H :
721
0
      print_keyword (cd, info, & m32c_cgen_opval_h_r0h, 0, 0);
722
0
      break;
723
0
    case M32C_OPERAND_R0L :
724
0
      print_keyword (cd, info, & m32c_cgen_opval_h_r0l, 0, 0);
725
0
      break;
726
0
    case M32C_OPERAND_R1 :
727
0
      print_keyword (cd, info, & m32c_cgen_opval_h_r1, 0, 0);
728
0
      break;
729
0
    case M32C_OPERAND_R1R2R0 :
730
0
      print_keyword (cd, info, & m32c_cgen_opval_h_r1r2r0, 0, 0);
731
0
      break;
732
0
    case M32C_OPERAND_R2 :
733
0
      print_keyword (cd, info, & m32c_cgen_opval_h_r2, 0, 0);
734
0
      break;
735
0
    case M32C_OPERAND_R2R0 :
736
0
      print_keyword (cd, info, & m32c_cgen_opval_h_r2r0, 0, 0);
737
0
      break;
738
68
    case M32C_OPERAND_R3 :
739
68
      print_keyword (cd, info, & m32c_cgen_opval_h_r3, 0, 0);
740
68
      break;
741
0
    case M32C_OPERAND_R3R1 :
742
0
      print_keyword (cd, info, & m32c_cgen_opval_h_r3r1, 0, 0);
743
0
      break;
744
3.13k
    case M32C_OPERAND_REGSETPOP :
745
3.13k
      print_pop_regset (cd, info, fields->f_8_8, 0, pc, length);
746
3.13k
      break;
747
971
    case M32C_OPERAND_REGSETPUSH :
748
971
      print_push_regset (cd, info, fields->f_8_8, 0, pc, length);
749
971
      break;
750
6.84k
    case M32C_OPERAND_RN16_PUSH_S :
751
6.84k
      print_keyword (cd, info, & m32c_cgen_opval_h_gr_QI, fields->f_4_1, 0);
752
6.84k
      break;
753
109k
    case M32C_OPERAND_S :
754
109k
      print_S (cd, info, 0, 0|(1<<CGEN_OPERAND_SIGNED), pc, length);
755
109k
      break;
756
3.86k
    case M32C_OPERAND_SRC16AN :
757
3.86k
      print_keyword (cd, info, & m32c_cgen_opval_h_ar, fields->f_src16_an, 0);
758
3.86k
      break;
759
491
    case M32C_OPERAND_SRC16ANHI :
760
491
      print_keyword (cd, info, & m32c_cgen_opval_h_ar_HI, fields->f_src16_an, 0);
761
491
      break;
762
294
    case M32C_OPERAND_SRC16ANQI :
763
294
      print_keyword (cd, info, & m32c_cgen_opval_h_ar_QI, fields->f_src16_an, 0);
764
294
      break;
765
1.42k
    case M32C_OPERAND_SRC16RNHI :
766
1.42k
      print_keyword (cd, info, & m32c_cgen_opval_h_gr_HI, fields->f_src16_rn, 0);
767
1.42k
      break;
768
2.34k
    case M32C_OPERAND_SRC16RNQI :
769
2.34k
      print_keyword (cd, info, & m32c_cgen_opval_h_gr_QI, fields->f_src16_rn, 0);
770
2.34k
      break;
771
1.09k
    case M32C_OPERAND_SRC32ANPREFIXED :
772
1.09k
      print_keyword (cd, info, & m32c_cgen_opval_h_ar, fields->f_src32_an_prefixed, 0);
773
1.09k
      break;
774
260
    case M32C_OPERAND_SRC32ANPREFIXEDHI :
775
260
      print_keyword (cd, info, & m32c_cgen_opval_h_ar_HI, fields->f_src32_an_prefixed, 0);
776
260
      break;
777
98
    case M32C_OPERAND_SRC32ANPREFIXEDQI :
778
98
      print_keyword (cd, info, & m32c_cgen_opval_h_ar_QI, fields->f_src32_an_prefixed, 0);
779
98
      break;
780
0
    case M32C_OPERAND_SRC32ANPREFIXEDSI :
781
0
      print_keyword (cd, info, & m32c_cgen_opval_h_ar, fields->f_src32_an_prefixed, 0);
782
0
      break;
783
7.77k
    case M32C_OPERAND_SRC32ANUNPREFIXED :
784
7.77k
      print_keyword (cd, info, & m32c_cgen_opval_h_ar, fields->f_src32_an_unprefixed, 0);
785
7.77k
      break;
786
209
    case M32C_OPERAND_SRC32ANUNPREFIXEDHI :
787
209
      print_keyword (cd, info, & m32c_cgen_opval_h_ar_HI, fields->f_src32_an_unprefixed, 0);
788
209
      break;
789
633
    case M32C_OPERAND_SRC32ANUNPREFIXEDQI :
790
633
      print_keyword (cd, info, & m32c_cgen_opval_h_ar_QI, fields->f_src32_an_unprefixed, 0);
791
633
      break;
792
342
    case M32C_OPERAND_SRC32ANUNPREFIXEDSI :
793
342
      print_keyword (cd, info, & m32c_cgen_opval_h_ar, fields->f_src32_an_unprefixed, 0);
794
342
      break;
795
41
    case M32C_OPERAND_SRC32RNPREFIXEDHI :
796
41
      print_keyword (cd, info, & m32c_cgen_opval_h_gr_HI, fields->f_src32_rn_prefixed_HI, 0);
797
41
      break;
798
1.10k
    case M32C_OPERAND_SRC32RNPREFIXEDQI :
799
1.10k
      print_keyword (cd, info, & m32c_cgen_opval_h_gr_QI, fields->f_src32_rn_prefixed_QI, 0);
800
1.10k
      break;
801
0
    case M32C_OPERAND_SRC32RNPREFIXEDSI :
802
0
      print_keyword (cd, info, & m32c_cgen_opval_h_gr_SI, fields->f_src32_rn_prefixed_SI, 0);
803
0
      break;
804
2.45k
    case M32C_OPERAND_SRC32RNUNPREFIXEDHI :
805
2.45k
      print_keyword (cd, info, & m32c_cgen_opval_h_gr_HI, fields->f_src32_rn_unprefixed_HI, 0);
806
2.45k
      break;
807
1.42k
    case M32C_OPERAND_SRC32RNUNPREFIXEDQI :
808
1.42k
      print_keyword (cd, info, & m32c_cgen_opval_h_gr_QI, fields->f_src32_rn_unprefixed_QI, 0);
809
1.42k
      break;
810
805
    case M32C_OPERAND_SRC32RNUNPREFIXEDSI :
811
805
      print_keyword (cd, info, & m32c_cgen_opval_h_gr_SI, fields->f_src32_rn_unprefixed_SI, 0);
812
805
      break;
813
9.08k
    case M32C_OPERAND_SRCDST16_R0L_R0H_S_NORMAL :
814
9.08k
      print_r0l_r0h (cd, info, fields->f_5_1, 0|(1<<CGEN_OPERAND_SIGNED), pc, length);
815
9.08k
      break;
816
10.6k
    case M32C_OPERAND_X :
817
10.6k
      print_X (cd, info, 0, 0|(1<<CGEN_OPERAND_SIGNED), pc, length);
818
10.6k
      break;
819
4.65k
    case M32C_OPERAND_Z :
820
4.65k
      print_Z (cd, info, 0, 0|(1<<CGEN_OPERAND_SIGNED), pc, length);
821
4.65k
      break;
822
154
    case M32C_OPERAND_COND16_16 :
823
154
      print_keyword (cd, info, & m32c_cgen_opval_h_cond16, fields->f_dsp_16_u8, 0);
824
154
      break;
825
1.03k
    case M32C_OPERAND_COND16_24 :
826
1.03k
      print_keyword (cd, info, & m32c_cgen_opval_h_cond16, fields->f_dsp_24_u8, 0);
827
1.03k
      break;
828
197
    case M32C_OPERAND_COND16_32 :
829
197
      print_keyword (cd, info, & m32c_cgen_opval_h_cond16, fields->f_dsp_32_u8, 0);
830
197
      break;
831
83
    case M32C_OPERAND_COND16C :
832
83
      print_keyword (cd, info, & m32c_cgen_opval_h_cond16c, fields->f_cond16, 0);
833
83
      break;
834
439
    case M32C_OPERAND_COND16J :
835
439
      print_keyword (cd, info, & m32c_cgen_opval_h_cond16j, fields->f_cond16, 0);
836
439
      break;
837
3.35k
    case M32C_OPERAND_COND16J5 :
838
3.35k
      print_keyword (cd, info, & m32c_cgen_opval_h_cond16j_5, fields->f_cond16j_5, 0);
839
3.35k
      break;
840
36
    case M32C_OPERAND_COND32 :
841
36
      print_keyword (cd, info, & m32c_cgen_opval_h_cond32, fields->f_cond32, 0|(1<<CGEN_OPERAND_VIRTUAL));
842
36
      break;
843
401
    case M32C_OPERAND_COND32_16 :
844
401
      print_keyword (cd, info, & m32c_cgen_opval_h_cond32, fields->f_dsp_16_u8, 0);
845
401
      break;
846
792
    case M32C_OPERAND_COND32_24 :
847
792
      print_keyword (cd, info, & m32c_cgen_opval_h_cond32, fields->f_dsp_24_u8, 0);
848
792
      break;
849
995
    case M32C_OPERAND_COND32_32 :
850
995
      print_keyword (cd, info, & m32c_cgen_opval_h_cond32, fields->f_dsp_32_u8, 0);
851
995
      break;
852
391
    case M32C_OPERAND_COND32_40 :
853
391
      print_keyword (cd, info, & m32c_cgen_opval_h_cond32, fields->f_dsp_40_u8, 0);
854
391
      break;
855
4.24k
    case M32C_OPERAND_COND32J :
856
4.24k
      print_keyword (cd, info, & m32c_cgen_opval_h_cond32, fields->f_cond32j, 0|(1<<CGEN_OPERAND_VIRTUAL));
857
4.24k
      break;
858
273
    case M32C_OPERAND_CR1_PREFIXED_32 :
859
273
      print_keyword (cd, info, & m32c_cgen_opval_h_cr1_32, fields->f_21_3, 0);
860
273
      break;
861
149
    case M32C_OPERAND_CR1_UNPREFIXED_32 :
862
149
      print_keyword (cd, info, & m32c_cgen_opval_h_cr1_32, fields->f_13_3, 0);
863
149
      break;
864
473
    case M32C_OPERAND_CR16 :
865
473
      print_keyword (cd, info, & m32c_cgen_opval_h_cr_16, fields->f_9_3, 0);
866
473
      break;
867
2.77k
    case M32C_OPERAND_CR2_32 :
868
2.77k
      print_keyword (cd, info, & m32c_cgen_opval_h_cr2_32, fields->f_13_3, 0);
869
2.77k
      break;
870
122
    case M32C_OPERAND_CR3_PREFIXED_32 :
871
122
      print_keyword (cd, info, & m32c_cgen_opval_h_cr3_32, fields->f_21_3, 0);
872
122
      break;
873
51
    case M32C_OPERAND_CR3_UNPREFIXED_32 :
874
51
      print_keyword (cd, info, & m32c_cgen_opval_h_cr3_32, fields->f_13_3, 0);
875
51
      break;
876
83
    case M32C_OPERAND_FLAGS16 :
877
83
      print_keyword (cd, info, & m32c_cgen_opval_h_flags, fields->f_9_3, 0);
878
83
      break;
879
86
    case M32C_OPERAND_FLAGS32 :
880
86
      print_keyword (cd, info, & m32c_cgen_opval_h_flags, fields->f_13_3, 0);
881
86
      break;
882
244
    case M32C_OPERAND_SCCOND32 :
883
244
      print_keyword (cd, info, & m32c_cgen_opval_h_cond32, fields->f_cond16, 0);
884
244
      break;
885
0
    case M32C_OPERAND_SIZE :
886
0
      print_size (cd, info, 0, 0|(1<<CGEN_OPERAND_SIGNED), pc, length);
887
0
      break;
888
889
0
    default :
890
      /* xgettext:c-format */
891
0
      opcodes_error_handler
892
0
  (_("internal error: unrecognized field %d while printing insn"),
893
0
   opindex);
894
0
      abort ();
895
541k
  }
896
541k
}
897
898
cgen_print_fn * const m32c_cgen_print_handlers[] =
899
{
900
  print_insn_normal,
901
};
902
903
904
void
905
m32c_cgen_init_dis (CGEN_CPU_DESC cd)
906
4
{
907
4
  m32c_cgen_init_opcode_table (cd);
908
4
  m32c_cgen_init_ibld_table (cd);
909
4
  cd->print_handlers = & m32c_cgen_print_handlers[0];
910
4
  cd->print_operand = m32c_cgen_print_operand;
911
4
}
912
913

914
/* Default print handler.  */
915
916
static void
917
print_normal (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED,
918
        void *dis_info,
919
        long value,
920
        unsigned int attrs,
921
        bfd_vma pc ATTRIBUTE_UNUSED,
922
        int length ATTRIBUTE_UNUSED)
923
174k
{
924
174k
  disassemble_info *info = (disassemble_info *) dis_info;
925
926
  /* Print the operand as directed by the attributes.  */
927
174k
  if (CGEN_BOOL_ATTR (attrs, CGEN_OPERAND_SEM_ONLY))
928
0
    ; /* nothing to do */
929
174k
  else if (CGEN_BOOL_ATTR (attrs, CGEN_OPERAND_SIGNED))
930
85.6k
    (*info->fprintf_func) (info->stream, "%ld", value);
931
89.0k
  else
932
89.0k
    (*info->fprintf_func) (info->stream, "0x%lx", value);
933
174k
}
934
935
/* Default address handler.  */
936
937
static void
938
print_address (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED,
939
         void *dis_info,
940
         bfd_vma value,
941
         unsigned int attrs,
942
         bfd_vma pc ATTRIBUTE_UNUSED,
943
         int length ATTRIBUTE_UNUSED)
944
23.6k
{
945
23.6k
  disassemble_info *info = (disassemble_info *) dis_info;
946
947
  /* Print the operand as directed by the attributes.  */
948
23.6k
  if (CGEN_BOOL_ATTR (attrs, CGEN_OPERAND_SEM_ONLY))
949
0
    ; /* Nothing to do.  */
950
23.6k
  else if (CGEN_BOOL_ATTR (attrs, CGEN_OPERAND_PCREL_ADDR))
951
22.7k
    (*info->print_address_func) (value, info);
952
972
  else if (CGEN_BOOL_ATTR (attrs, CGEN_OPERAND_ABS_ADDR))
953
972
    (*info->print_address_func) (value, info);
954
0
  else if (CGEN_BOOL_ATTR (attrs, CGEN_OPERAND_SIGNED))
955
0
    (*info->fprintf_func) (info->stream, "%ld", (long) value);
956
0
  else
957
0
    (*info->fprintf_func) (info->stream, "0x%lx", (long) value);
958
23.6k
}
959
960
/* Keyword print handler.  */
961
962
static void
963
print_keyword (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED,
964
         void *dis_info,
965
         CGEN_KEYWORD *keyword_table,
966
         long value,
967
         unsigned int attrs ATTRIBUTE_UNUSED)
968
136k
{
969
136k
  disassemble_info *info = (disassemble_info *) dis_info;
970
136k
  const CGEN_KEYWORD_ENTRY *ke;
971
972
136k
  ke = cgen_keyword_lookup_value (keyword_table, value);
973
136k
  if (ke != NULL)
974
130k
    (*info->fprintf_func) (info->stream, "%s", ke->name);
975
5.85k
  else
976
5.85k
    (*info->fprintf_func) (info->stream, "???");
977
136k
}
978

979
/* Default insn printer.
980
981
   DIS_INFO is defined as `void *' so the disassembler needn't know anything
982
   about disassemble_info.  */
983
984
static void
985
print_insn_normal (CGEN_CPU_DESC cd,
986
       void *dis_info,
987
       const CGEN_INSN *insn,
988
       CGEN_FIELDS *fields,
989
       bfd_vma pc,
990
       int length)
991
387k
{
992
387k
  const CGEN_SYNTAX *syntax = CGEN_INSN_SYNTAX (insn);
993
387k
  disassemble_info *info = (disassemble_info *) dis_info;
994
387k
  const CGEN_SYNTAX_CHAR_TYPE *syn;
995
996
387k
  CGEN_INIT_PRINT (cd);
997
998
2.26M
  for (syn = CGEN_SYNTAX_STRING (syntax); *syn; ++syn)
999
1.87M
    {
1000
1.87M
      if (CGEN_SYNTAX_MNEMONIC_P (*syn))
1001
387k
  {
1002
387k
    (*info->fprintf_func) (info->stream, "%s", CGEN_INSN_MNEMONIC (insn));
1003
387k
    continue;
1004
387k
  }
1005
1.49M
      if (CGEN_SYNTAX_CHAR_P (*syn))
1006
951k
  {
1007
951k
    (*info->fprintf_func) (info->stream, "%c", CGEN_SYNTAX_CHAR (*syn));
1008
951k
    continue;
1009
951k
  }
1010
1011
      /* We have an operand.  */
1012
541k
      m32c_cgen_print_operand (cd, CGEN_SYNTAX_FIELD (*syn), info,
1013
541k
         fields, CGEN_INSN_ATTRS (insn), pc, length);
1014
541k
    }
1015
387k
}
1016

1017
/* Subroutine of print_insn. Reads an insn into the given buffers and updates
1018
   the extract info.
1019
   Returns 0 if all is well, non-zero otherwise.  */
1020
1021
static int
1022
read_insn (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED,
1023
     bfd_vma pc,
1024
     disassemble_info *info,
1025
     bfd_byte *buf,
1026
     int buflen,
1027
     CGEN_EXTRACT_INFO *ex_info,
1028
     unsigned long *insn_value)
1029
19.5k
{
1030
19.5k
  int status = (*info->read_memory_func) (pc, buf, buflen, info);
1031
1032
19.5k
  if (status != 0)
1033
17
    {
1034
17
      (*info->memory_error_func) (status, pc, info);
1035
17
      return -1;
1036
17
    }
1037
1038
19.5k
  ex_info->dis_info = info;
1039
19.5k
  ex_info->valid = (1 << buflen) - 1;
1040
19.5k
  ex_info->insn_bytes = buf;
1041
1042
19.5k
  *insn_value = bfd_get_bits (buf, buflen * 8, info->endian == BFD_ENDIAN_BIG);
1043
19.5k
  return 0;
1044
19.5k
}
1045
1046
/* Utility to print an insn.
1047
   BUF is the base part of the insn, target byte order, BUFLEN bytes long.
1048
   The result is the size of the insn in bytes or zero for an unknown insn
1049
   or -1 if an error occurs fetching data (memory_error_func will have
1050
   been called).  */
1051
1052
static int
1053
print_insn (CGEN_CPU_DESC cd,
1054
      bfd_vma pc,
1055
      disassemble_info *info,
1056
      bfd_byte *buf,
1057
      unsigned int buflen)
1058
415k
{
1059
415k
  CGEN_INSN_INT insn_value;
1060
415k
  const CGEN_INSN_LIST *insn_list;
1061
415k
  CGEN_EXTRACT_INFO ex_info;
1062
415k
  int basesize;
1063
1064
  /* Extract base part of instruction, just in case CGEN_DIS_* uses it. */
1065
415k
  basesize = cd->base_insn_bitsize < buflen * 8 ?
1066
415k
                                     cd->base_insn_bitsize : buflen * 8;
1067
415k
  insn_value = cgen_get_insn_value (cd, buf, basesize, cd->insn_endian);
1068
1069
1070
  /* Fill in ex_info fields like read_insn would.  Don't actually call
1071
     read_insn, since the incoming buffer is already read (and possibly
1072
     modified a la m32r).  */
1073
415k
  ex_info.valid = (1 << buflen) - 1;
1074
415k
  ex_info.dis_info = info;
1075
415k
  ex_info.insn_bytes = buf;
1076
1077
  /* The instructions are stored in hash lists.
1078
     Pick the first one and keep trying until we find the right one.  */
1079
1080
415k
  insn_list = CGEN_DIS_LOOKUP_INSN (cd, (char *) buf, insn_value);
1081
4.77G
  while (insn_list != NULL)
1082
4.77G
    {
1083
4.77G
      const CGEN_INSN *insn = insn_list->insn;
1084
4.77G
      CGEN_FIELDS fields;
1085
4.77G
      int length;
1086
4.77G
      unsigned long insn_value_cropped;
1087
1088
4.77G
#ifdef CGEN_VALIDATE_INSN_SUPPORTED
1089
      /* Not needed as insn shouldn't be in hash lists if not supported.  */
1090
      /* Supported by this cpu?  */
1091
4.77G
      if (! m32c_cgen_insn_supported (cd, insn))
1092
2.38G
        {
1093
2.38G
          insn_list = CGEN_DIS_NEXT_INSN (insn_list);
1094
2.38G
    continue;
1095
2.38G
        }
1096
2.39G
#endif
1097
1098
      /* Basic bit mask must be correct.  */
1099
      /* ??? May wish to allow target to defer this check until the extract
1100
   handler.  */
1101
1102
      /* Base size may exceed this instruction's size.  Extract the
1103
         relevant part from the buffer. */
1104
2.39G
      if ((unsigned) (CGEN_INSN_BITSIZE (insn) / 8) < buflen &&
1105
586M
    (unsigned) (CGEN_INSN_BITSIZE (insn) / 8) <= sizeof (unsigned long))
1106
586M
  insn_value_cropped = bfd_get_bits (buf, CGEN_INSN_BITSIZE (insn),
1107
586M
             info->endian == BFD_ENDIAN_BIG);
1108
1.81G
      else
1109
1.81G
  insn_value_cropped = insn_value;
1110
1111
2.39G
      if ((insn_value_cropped & CGEN_INSN_BASE_MASK (insn))
1112
2.39G
    == CGEN_INSN_BASE_VALUE (insn))
1113
387k
  {
1114
    /* Printing is handled in two passes.  The first pass parses the
1115
       machine insn and extracts the fields.  The second pass prints
1116
       them.  */
1117
1118
    /* Make sure the entire insn is loaded into insn_value, if it
1119
       can fit.  */
1120
387k
    if (((unsigned) CGEN_INSN_BITSIZE (insn) > cd->base_insn_bitsize) &&
1121
20.2k
        (unsigned) (CGEN_INSN_BITSIZE (insn) / 8) <= sizeof (unsigned long))
1122
19.5k
      {
1123
19.5k
        unsigned long full_insn_value;
1124
19.5k
        int rc = read_insn (cd, pc, info, buf,
1125
19.5k
          CGEN_INSN_BITSIZE (insn) / 8,
1126
19.5k
          & ex_info, & full_insn_value);
1127
19.5k
        if (rc != 0)
1128
17
    return rc;
1129
19.5k
        length = CGEN_EXTRACT_FN (cd, insn)
1130
19.5k
    (cd, insn, &ex_info, full_insn_value, &fields, pc);
1131
19.5k
      }
1132
367k
    else
1133
367k
      length = CGEN_EXTRACT_FN (cd, insn)
1134
367k
        (cd, insn, &ex_info, insn_value_cropped, &fields, pc);
1135
1136
    /* Length < 0 -> error.  */
1137
387k
    if (length < 0)
1138
0
      return length;
1139
387k
    if (length > 0)
1140
387k
      {
1141
387k
        CGEN_PRINT_FN (cd, insn) (cd, info, insn, &fields, pc, length);
1142
        /* Length is in bits, result is in bytes.  */
1143
387k
        return length / 8;
1144
387k
      }
1145
387k
  }
1146
1147
2.39G
      insn_list = CGEN_DIS_NEXT_INSN (insn_list);
1148
2.39G
    }
1149
1150
27.8k
  return 0;
1151
415k
}
1152
1153
/* Default value for CGEN_PRINT_INSN.
1154
   The result is the size of the insn in bytes or zero for an unknown insn
1155
   or -1 if an error occured fetching bytes.  */
1156
1157
#ifndef CGEN_PRINT_INSN
1158
415k
#define CGEN_PRINT_INSN default_print_insn
1159
#endif
1160
1161
static int
1162
default_print_insn (CGEN_CPU_DESC cd, bfd_vma pc, disassemble_info *info)
1163
415k
{
1164
415k
  bfd_byte buf[CGEN_MAX_INSN_SIZE];
1165
415k
  int buflen;
1166
415k
  int status;
1167
1168
  /* Attempt to read the base part of the insn.  */
1169
415k
  buflen = cd->base_insn_bitsize / 8;
1170
415k
  status = (*info->read_memory_func) (pc, buf, buflen, info);
1171
1172
  /* Try again with the minimum part, if min < base.  */
1173
415k
  if (status != 0 && (cd->min_insn_bitsize < cd->base_insn_bitsize))
1174
1.14k
    {
1175
1.14k
      buflen = cd->min_insn_bitsize / 8;
1176
1.14k
      status = (*info->read_memory_func) (pc, buf, buflen, info);
1177
1.14k
    }
1178
1179
415k
  if (status != 0)
1180
1
    {
1181
1
      (*info->memory_error_func) (status, pc, info);
1182
1
      return -1;
1183
1
    }
1184
1185
415k
  return print_insn (cd, pc, info, buf, buflen);
1186
415k
}
1187
1188
/* Main entry point.
1189
   Print one instruction from PC on INFO->STREAM.
1190
   Return the size of the instruction (in bytes).  */
1191
1192
typedef struct cpu_desc_list
1193
{
1194
  struct cpu_desc_list *next;
1195
  CGEN_BITSET *isa;
1196
  int mach;
1197
  int endian;
1198
  int insn_endian;
1199
  CGEN_CPU_DESC cd;
1200
} cpu_desc_list;
1201
1202
int
1203
print_insn_m32c (bfd_vma pc, disassemble_info *info)
1204
415k
{
1205
415k
  static cpu_desc_list *cd_list = 0;
1206
415k
  cpu_desc_list *cl = 0;
1207
415k
  static CGEN_CPU_DESC cd = 0;
1208
415k
  static CGEN_BITSET *prev_isa;
1209
415k
  static int prev_mach;
1210
415k
  static int prev_endian;
1211
415k
  static int prev_insn_endian;
1212
415k
  int length;
1213
415k
  CGEN_BITSET *isa;
1214
415k
  int mach;
1215
415k
  int endian = (info->endian == BFD_ENDIAN_BIG
1216
415k
    ? CGEN_ENDIAN_BIG
1217
415k
    : CGEN_ENDIAN_LITTLE);
1218
415k
  int insn_endian = (info->endian_code == BFD_ENDIAN_BIG
1219
415k
                     ? CGEN_ENDIAN_BIG
1220
415k
                     : CGEN_ENDIAN_LITTLE);
1221
415k
  enum bfd_architecture arch;
1222
1223
  /* ??? gdb will set mach but leave the architecture as "unknown" */
1224
415k
#ifndef CGEN_BFD_ARCH
1225
415k
#define CGEN_BFD_ARCH bfd_arch_m32c
1226
415k
#endif
1227
415k
  arch = info->arch;
1228
415k
  if (arch == bfd_arch_unknown)
1229
0
    arch = CGEN_BFD_ARCH;
1230
1231
  /* There's no standard way to compute the machine or isa number
1232
     so we leave it to the target.  */
1233
#ifdef CGEN_COMPUTE_MACH
1234
  mach = CGEN_COMPUTE_MACH (info);
1235
#else
1236
415k
  mach = info->mach;
1237
415k
#endif
1238
1239
#ifdef CGEN_COMPUTE_ISA
1240
  {
1241
    static CGEN_BITSET *permanent_isa;
1242
1243
    if (!permanent_isa)
1244
      permanent_isa = cgen_bitset_create (MAX_ISAS);
1245
    isa = permanent_isa;
1246
    cgen_bitset_clear (isa);
1247
    cgen_bitset_add (isa, CGEN_COMPUTE_ISA (info));
1248
  }
1249
#else
1250
415k
  isa = info->private_data;
1251
415k
#endif
1252
1253
  /* If we've switched cpu's, try to find a handle we've used before */
1254
415k
  if (cd
1255
415k
      && (cgen_bitset_compare (isa, prev_isa) != 0
1256
414k
    || mach != prev_mach
1257
119k
    || endian != prev_endian))
1258
296k
    {
1259
296k
      cd = 0;
1260
799k
      for (cl = cd_list; cl; cl = cl->next)
1261
799k
  {
1262
799k
    if (cgen_bitset_compare (cl->isa, isa) == 0 &&
1263
503k
        cl->mach == mach &&
1264
296k
        cl->endian == endian)
1265
296k
      {
1266
296k
        cd = cl->cd;
1267
296k
        prev_isa = cd->isas;
1268
296k
        break;
1269
296k
      }
1270
799k
  }
1271
296k
    }
1272
1273
  /* If we haven't initialized yet, initialize the opcode table.  */
1274
415k
  if (! cd)
1275
4
    {
1276
4
      const bfd_arch_info_type *arch_type = bfd_lookup_arch (arch, mach);
1277
4
      const char *mach_name;
1278
1279
4
      if (!arch_type)
1280
0
  abort ();
1281
4
      mach_name = arch_type->printable_name;
1282
1283
4
      prev_isa = cgen_bitset_copy (isa);
1284
4
      prev_mach = mach;
1285
4
      prev_endian = endian;
1286
4
      prev_insn_endian = insn_endian;
1287
4
      cd = m32c_cgen_cpu_open (CGEN_CPU_OPEN_ISAS, prev_isa,
1288
4
         CGEN_CPU_OPEN_BFDMACH, mach_name,
1289
4
         CGEN_CPU_OPEN_ENDIAN, prev_endian,
1290
4
                                 CGEN_CPU_OPEN_INSN_ENDIAN, prev_insn_endian,
1291
4
         CGEN_CPU_OPEN_END);
1292
4
      if (!cd)
1293
0
  abort ();
1294
1295
      /* Save this away for future reference.  */
1296
4
      cl = xmalloc (sizeof (struct cpu_desc_list));
1297
4
      cl->cd = cd;
1298
4
      cl->isa = prev_isa;
1299
4
      cl->mach = mach;
1300
4
      cl->endian = endian;
1301
4
      cl->next = cd_list;
1302
4
      cd_list = cl;
1303
1304
4
      m32c_cgen_init_dis (cd);
1305
4
    }
1306
1307
  /* We try to have as much common code as possible.
1308
     But at this point some targets need to take over.  */
1309
  /* ??? Some targets may need a hook elsewhere.  Try to avoid this,
1310
     but if not possible try to move this hook elsewhere rather than
1311
     have two hooks.  */
1312
415k
  length = CGEN_PRINT_INSN (cd, pc, info);
1313
415k
  if (length > 0)
1314
387k
    return length;
1315
27.9k
  if (length < 0)
1316
18
    return -1;
1317
1318
27.8k
  (*info->fprintf_func) (info->stream, UNKNOWN_INSN_MSG);
1319
27.8k
  return cd->default_insn_bitsize / 8;
1320
27.9k
}