Update year range in copyright notice of binutils files
[external/binutils.git] / opcodes / mep-ibld.c
1 /* DO NOT EDIT!  -*- buffer-read-only: t -*- vi:set ro:  */
2 /* Instruction building/extraction support for mep. -*- C -*-
3
4    THIS FILE IS MACHINE GENERATED WITH CGEN: Cpu tools GENerator.
5    - the resultant file is machine generated, cgen-ibld.in isn't
6
7    Copyright (C) 1996-2018 Free Software Foundation, Inc.
8
9    This file is part of libopcodes.
10
11    This library is free software; you can redistribute it and/or modify
12    it under the terms of the GNU General Public License as published by
13    the Free Software Foundation; either version 3, or (at your option)
14    any later version.
15
16    It is distributed in the hope that it will be useful, but WITHOUT
17    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
18    or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
19    License for more details.
20
21    You should have received a copy of the GNU General Public License
22    along with this program; if not, write to the Free Software Foundation, Inc.,
23    51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.  */
24
25 /* ??? Eventually more and more of this stuff can go to cpu-independent files.
26    Keep that in mind.  */
27
28 #include "sysdep.h"
29 #include <stdio.h>
30 #include "ansidecl.h"
31 #include "dis-asm.h"
32 #include "bfd.h"
33 #include "symcat.h"
34 #include "mep-desc.h"
35 #include "mep-opc.h"
36 #include "cgen/basic-modes.h"
37 #include "opintl.h"
38 #include "safe-ctype.h"
39
40 #undef  min
41 #define min(a,b) ((a) < (b) ? (a) : (b))
42 #undef  max
43 #define max(a,b) ((a) > (b) ? (a) : (b))
44
45 /* Used by the ifield rtx function.  */
46 #define FLD(f) (fields->f)
47
48 static const char * insert_normal
49   (CGEN_CPU_DESC, long, unsigned int, unsigned int, unsigned int,
50    unsigned int, unsigned int, unsigned int, CGEN_INSN_BYTES_PTR);
51 static const char * insert_insn_normal
52   (CGEN_CPU_DESC, const CGEN_INSN *,
53    CGEN_FIELDS *, CGEN_INSN_BYTES_PTR, bfd_vma);
54 static int extract_normal
55   (CGEN_CPU_DESC, CGEN_EXTRACT_INFO *, CGEN_INSN_INT,
56    unsigned int, unsigned int, unsigned int, unsigned int,
57    unsigned int, unsigned int, bfd_vma, long *);
58 static int extract_insn_normal
59   (CGEN_CPU_DESC, const CGEN_INSN *, CGEN_EXTRACT_INFO *,
60    CGEN_INSN_INT, CGEN_FIELDS *, bfd_vma);
61 #if CGEN_INT_INSN_P
62 static void put_insn_int_value
63   (CGEN_CPU_DESC, CGEN_INSN_BYTES_PTR, int, int, CGEN_INSN_INT);
64 #endif
65 #if ! CGEN_INT_INSN_P
66 static CGEN_INLINE void insert_1
67   (CGEN_CPU_DESC, unsigned long, int, int, int, unsigned char *);
68 static CGEN_INLINE int fill_cache
69   (CGEN_CPU_DESC, CGEN_EXTRACT_INFO *,  int, int, bfd_vma);
70 static CGEN_INLINE long extract_1
71   (CGEN_CPU_DESC, CGEN_EXTRACT_INFO *, int, int, int, unsigned char *, bfd_vma);
72 #endif
73 \f
74 /* Operand insertion.  */
75
76 #if ! CGEN_INT_INSN_P
77
78 /* Subroutine of insert_normal.  */
79
80 static CGEN_INLINE void
81 insert_1 (CGEN_CPU_DESC cd,
82           unsigned long value,
83           int start,
84           int length,
85           int word_length,
86           unsigned char *bufp)
87 {
88   unsigned long x,mask;
89   int shift;
90
91   x = cgen_get_insn_value (cd, bufp, word_length);
92
93   /* Written this way to avoid undefined behaviour.  */
94   mask = (((1L << (length - 1)) - 1) << 1) | 1;
95   if (CGEN_INSN_LSB0_P)
96     shift = (start + 1) - length;
97   else
98     shift = (word_length - (start + length));
99   x = (x & ~(mask << shift)) | ((value & mask) << shift);
100
101   cgen_put_insn_value (cd, bufp, word_length, (bfd_vma) x);
102 }
103
104 #endif /* ! CGEN_INT_INSN_P */
105
106 /* Default insertion routine.
107
108    ATTRS is a mask of the boolean attributes.
109    WORD_OFFSET is the offset in bits from the start of the insn of the value.
110    WORD_LENGTH is the length of the word in bits in which the value resides.
111    START is the starting bit number in the word, architecture origin.
112    LENGTH is the length of VALUE in bits.
113    TOTAL_LENGTH is the total length of the insn in bits.
114
115    The result is an error message or NULL if success.  */
116
117 /* ??? This duplicates functionality with bfd's howto table and
118    bfd_install_relocation.  */
119 /* ??? This doesn't handle bfd_vma's.  Create another function when
120    necessary.  */
121
122 static const char *
123 insert_normal (CGEN_CPU_DESC cd,
124                long value,
125                unsigned int attrs,
126                unsigned int word_offset,
127                unsigned int start,
128                unsigned int length,
129                unsigned int word_length,
130                unsigned int total_length,
131                CGEN_INSN_BYTES_PTR buffer)
132 {
133   static char errbuf[100];
134   /* Written this way to avoid undefined behaviour.  */
135   unsigned long mask = (((1L << (length - 1)) - 1) << 1) | 1;
136
137   /* If LENGTH is zero, this operand doesn't contribute to the value.  */
138   if (length == 0)
139     return NULL;
140
141   if (word_length > 8 * sizeof (CGEN_INSN_INT))
142     abort ();
143
144   /* For architectures with insns smaller than the base-insn-bitsize,
145      word_length may be too big.  */
146   if (cd->min_insn_bitsize < cd->base_insn_bitsize)
147     {
148       if (word_offset == 0
149           && word_length > total_length)
150         word_length = total_length;
151     }
152
153   /* Ensure VALUE will fit.  */
154   if (CGEN_BOOL_ATTR (attrs, CGEN_IFLD_SIGN_OPT))
155     {
156       long minval = - (1L << (length - 1));
157       unsigned long maxval = mask;
158
159       if ((value > 0 && (unsigned long) value > maxval)
160           || value < minval)
161         {
162           /* xgettext:c-format */
163           sprintf (errbuf,
164                    _("operand out of range (%ld not between %ld and %lu)"),
165                    value, minval, maxval);
166           return errbuf;
167         }
168     }
169   else if (! CGEN_BOOL_ATTR (attrs, CGEN_IFLD_SIGNED))
170     {
171       unsigned long maxval = mask;
172       unsigned long val = (unsigned long) value;
173
174       /* For hosts with a word size > 32 check to see if value has been sign
175          extended beyond 32 bits.  If so then ignore these higher sign bits
176          as the user is attempting to store a 32-bit signed value into an
177          unsigned 32-bit field which is allowed.  */
178       if (sizeof (unsigned long) > 4 && ((value >> 32) == -1))
179         val &= 0xFFFFFFFF;
180
181       if (val > maxval)
182         {
183           /* xgettext:c-format */
184           sprintf (errbuf,
185                    _("operand out of range (0x%lx not between 0 and 0x%lx)"),
186                    val, maxval);
187           return errbuf;
188         }
189     }
190   else
191     {
192       if (! cgen_signed_overflow_ok_p (cd))
193         {
194           long minval = - (1L << (length - 1));
195           long maxval =   (1L << (length - 1)) - 1;
196
197           if (value < minval || value > maxval)
198             {
199               sprintf
200                 /* xgettext:c-format */
201                 (errbuf, _("operand out of range (%ld not between %ld and %ld)"),
202                  value, minval, maxval);
203               return errbuf;
204             }
205         }
206     }
207
208 #if CGEN_INT_INSN_P
209
210   {
211     int shift_within_word, shift_to_word, shift;
212
213     /* How to shift the value to BIT0 of the word.  */
214     shift_to_word = total_length - (word_offset + word_length);
215
216     /* How to shift the value to the field within the word.  */
217     if (CGEN_INSN_LSB0_P)
218       shift_within_word = start + 1 - length;
219     else
220       shift_within_word = word_length - start - length;
221
222     /* The total SHIFT, then mask in the value.  */
223     shift = shift_to_word + shift_within_word;
224     *buffer = (*buffer & ~(mask << shift)) | ((value & mask) << shift);
225   }
226
227 #else /* ! CGEN_INT_INSN_P */
228
229   {
230     unsigned char *bufp = (unsigned char *) buffer + word_offset / 8;
231
232     insert_1 (cd, value, start, length, word_length, bufp);
233   }
234
235 #endif /* ! CGEN_INT_INSN_P */
236
237   return NULL;
238 }
239
240 /* Default insn builder (insert handler).
241    The instruction is recorded in CGEN_INT_INSN_P byte order (meaning
242    that if CGEN_INSN_BYTES_PTR is an int * and thus, the value is
243    recorded in host byte order, otherwise BUFFER is an array of bytes
244    and the value is recorded in target byte order).
245    The result is an error message or NULL if success.  */
246
247 static const char *
248 insert_insn_normal (CGEN_CPU_DESC cd,
249                     const CGEN_INSN * insn,
250                     CGEN_FIELDS * fields,
251                     CGEN_INSN_BYTES_PTR buffer,
252                     bfd_vma pc)
253 {
254   const CGEN_SYNTAX *syntax = CGEN_INSN_SYNTAX (insn);
255   unsigned long value;
256   const CGEN_SYNTAX_CHAR_TYPE * syn;
257
258   CGEN_INIT_INSERT (cd);
259   value = CGEN_INSN_BASE_VALUE (insn);
260
261   /* If we're recording insns as numbers (rather than a string of bytes),
262      target byte order handling is deferred until later.  */
263
264 #if CGEN_INT_INSN_P
265
266   put_insn_int_value (cd, buffer, cd->base_insn_bitsize,
267                       CGEN_FIELDS_BITSIZE (fields), value);
268
269 #else
270
271   cgen_put_insn_value (cd, buffer, min ((unsigned) cd->base_insn_bitsize,
272                                         (unsigned) CGEN_FIELDS_BITSIZE (fields)),
273                        value);
274
275 #endif /* ! CGEN_INT_INSN_P */
276
277   /* ??? It would be better to scan the format's fields.
278      Still need to be able to insert a value based on the operand though;
279      e.g. storing a branch displacement that got resolved later.
280      Needs more thought first.  */
281
282   for (syn = CGEN_SYNTAX_STRING (syntax); * syn; ++ syn)
283     {
284       const char *errmsg;
285
286       if (CGEN_SYNTAX_CHAR_P (* syn))
287         continue;
288
289       errmsg = (* cd->insert_operand) (cd, CGEN_SYNTAX_FIELD (*syn),
290                                        fields, buffer, pc);
291       if (errmsg)
292         return errmsg;
293     }
294
295   return NULL;
296 }
297
298 #if CGEN_INT_INSN_P
299 /* Cover function to store an insn value into an integral insn.  Must go here
300    because it needs <prefix>-desc.h for CGEN_INT_INSN_P.  */
301
302 static void
303 put_insn_int_value (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED,
304                     CGEN_INSN_BYTES_PTR buf,
305                     int length,
306                     int insn_length,
307                     CGEN_INSN_INT value)
308 {
309   /* For architectures with insns smaller than the base-insn-bitsize,
310      length may be too big.  */
311   if (length > insn_length)
312     *buf = value;
313   else
314     {
315       int shift = insn_length - length;
316       /* Written this way to avoid undefined behaviour.  */
317       CGEN_INSN_INT mask = (((1L << (length - 1)) - 1) << 1) | 1;
318
319       *buf = (*buf & ~(mask << shift)) | ((value & mask) << shift);
320     }
321 }
322 #endif
323 \f
324 /* Operand extraction.  */
325
326 #if ! CGEN_INT_INSN_P
327
328 /* Subroutine of extract_normal.
329    Ensure sufficient bytes are cached in EX_INFO.
330    OFFSET is the offset in bytes from the start of the insn of the value.
331    BYTES is the length of the needed value.
332    Returns 1 for success, 0 for failure.  */
333
334 static CGEN_INLINE int
335 fill_cache (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED,
336             CGEN_EXTRACT_INFO *ex_info,
337             int offset,
338             int bytes,
339             bfd_vma pc)
340 {
341   /* It's doubtful that the middle part has already been fetched so
342      we don't optimize that case.  kiss.  */
343   unsigned int mask;
344   disassemble_info *info = (disassemble_info *) ex_info->dis_info;
345
346   /* First do a quick check.  */
347   mask = (1 << bytes) - 1;
348   if (((ex_info->valid >> offset) & mask) == mask)
349     return 1;
350
351   /* Search for the first byte we need to read.  */
352   for (mask = 1 << offset; bytes > 0; --bytes, ++offset, mask <<= 1)
353     if (! (mask & ex_info->valid))
354       break;
355
356   if (bytes)
357     {
358       int status;
359
360       pc += offset;
361       status = (*info->read_memory_func)
362         (pc, ex_info->insn_bytes + offset, bytes, info);
363
364       if (status != 0)
365         {
366           (*info->memory_error_func) (status, pc, info);
367           return 0;
368         }
369
370       ex_info->valid |= ((1 << bytes) - 1) << offset;
371     }
372
373   return 1;
374 }
375
376 /* Subroutine of extract_normal.  */
377
378 static CGEN_INLINE long
379 extract_1 (CGEN_CPU_DESC cd,
380            CGEN_EXTRACT_INFO *ex_info ATTRIBUTE_UNUSED,
381            int start,
382            int length,
383            int word_length,
384            unsigned char *bufp,
385            bfd_vma pc ATTRIBUTE_UNUSED)
386 {
387   unsigned long x;
388   int shift;
389
390   x = cgen_get_insn_value (cd, bufp, word_length);
391
392   if (CGEN_INSN_LSB0_P)
393     shift = (start + 1) - length;
394   else
395     shift = (word_length - (start + length));
396   return x >> shift;
397 }
398
399 #endif /* ! CGEN_INT_INSN_P */
400
401 /* Default extraction routine.
402
403    INSN_VALUE is the first base_insn_bitsize bits of the insn in host order,
404    or sometimes less for cases like the m32r where the base insn size is 32
405    but some insns are 16 bits.
406    ATTRS is a mask of the boolean attributes.  We only need `SIGNED',
407    but for generality we take a bitmask of all of them.
408    WORD_OFFSET is the offset in bits from the start of the insn of the value.
409    WORD_LENGTH is the length of the word in bits in which the value resides.
410    START is the starting bit number in the word, architecture origin.
411    LENGTH is the length of VALUE in bits.
412    TOTAL_LENGTH is the total length of the insn in bits.
413
414    Returns 1 for success, 0 for failure.  */
415
416 /* ??? The return code isn't properly used.  wip.  */
417
418 /* ??? This doesn't handle bfd_vma's.  Create another function when
419    necessary.  */
420
421 static int
422 extract_normal (CGEN_CPU_DESC cd,
423 #if ! CGEN_INT_INSN_P
424                 CGEN_EXTRACT_INFO *ex_info,
425 #else
426                 CGEN_EXTRACT_INFO *ex_info ATTRIBUTE_UNUSED,
427 #endif
428                 CGEN_INSN_INT insn_value,
429                 unsigned int attrs,
430                 unsigned int word_offset,
431                 unsigned int start,
432                 unsigned int length,
433                 unsigned int word_length,
434                 unsigned int total_length,
435 #if ! CGEN_INT_INSN_P
436                 bfd_vma pc,
437 #else
438                 bfd_vma pc ATTRIBUTE_UNUSED,
439 #endif
440                 long *valuep)
441 {
442   long value, mask;
443
444   /* If LENGTH is zero, this operand doesn't contribute to the value
445      so give it a standard value of zero.  */
446   if (length == 0)
447     {
448       *valuep = 0;
449       return 1;
450     }
451
452   if (word_length > 8 * sizeof (CGEN_INSN_INT))
453     abort ();
454
455   /* For architectures with insns smaller than the insn-base-bitsize,
456      word_length may be too big.  */
457   if (cd->min_insn_bitsize < cd->base_insn_bitsize)
458     {
459       if (word_offset + word_length > total_length)
460         word_length = total_length - word_offset;
461     }
462
463   /* Does the value reside in INSN_VALUE, and at the right alignment?  */
464
465   if (CGEN_INT_INSN_P || (word_offset == 0 && word_length == total_length))
466     {
467       if (CGEN_INSN_LSB0_P)
468         value = insn_value >> ((word_offset + start + 1) - length);
469       else
470         value = insn_value >> (total_length - ( word_offset + start + length));
471     }
472
473 #if ! CGEN_INT_INSN_P
474
475   else
476     {
477       unsigned char *bufp = ex_info->insn_bytes + word_offset / 8;
478
479       if (word_length > 8 * sizeof (CGEN_INSN_INT))
480         abort ();
481
482       if (fill_cache (cd, ex_info, word_offset / 8, word_length / 8, pc) == 0)
483         return 0;
484
485       value = extract_1 (cd, ex_info, start, length, word_length, bufp, pc);
486     }
487
488 #endif /* ! CGEN_INT_INSN_P */
489
490   /* Written this way to avoid undefined behaviour.  */
491   mask = (((1L << (length - 1)) - 1) << 1) | 1;
492
493   value &= mask;
494   /* sign extend? */
495   if (CGEN_BOOL_ATTR (attrs, CGEN_IFLD_SIGNED)
496       && (value & (1L << (length - 1))))
497     value |= ~mask;
498
499   *valuep = value;
500
501   return 1;
502 }
503
504 /* Default insn extractor.
505
506    INSN_VALUE is the first base_insn_bitsize bits, translated to host order.
507    The extracted fields are stored in FIELDS.
508    EX_INFO is used to handle reading variable length insns.
509    Return the length of the insn in bits, or 0 if no match,
510    or -1 if an error occurs fetching data (memory_error_func will have
511    been called).  */
512
513 static int
514 extract_insn_normal (CGEN_CPU_DESC cd,
515                      const CGEN_INSN *insn,
516                      CGEN_EXTRACT_INFO *ex_info,
517                      CGEN_INSN_INT insn_value,
518                      CGEN_FIELDS *fields,
519                      bfd_vma pc)
520 {
521   const CGEN_SYNTAX *syntax = CGEN_INSN_SYNTAX (insn);
522   const CGEN_SYNTAX_CHAR_TYPE *syn;
523
524   CGEN_FIELDS_BITSIZE (fields) = CGEN_INSN_BITSIZE (insn);
525
526   CGEN_INIT_EXTRACT (cd);
527
528   for (syn = CGEN_SYNTAX_STRING (syntax); *syn; ++syn)
529     {
530       int length;
531
532       if (CGEN_SYNTAX_CHAR_P (*syn))
533         continue;
534
535       length = (* cd->extract_operand) (cd, CGEN_SYNTAX_FIELD (*syn),
536                                         ex_info, insn_value, fields, pc);
537       if (length <= 0)
538         return length;
539     }
540
541   /* We recognized and successfully extracted this insn.  */
542   return CGEN_INSN_BITSIZE (insn);
543 }
544 \f
545 /* Machine generated code added here.  */
546
547 const char * mep_cgen_insert_operand
548   (CGEN_CPU_DESC, int, CGEN_FIELDS *, CGEN_INSN_BYTES_PTR, bfd_vma);
549
550 /* Main entry point for operand insertion.
551
552    This function is basically just a big switch statement.  Earlier versions
553    used tables to look up the function to use, but
554    - if the table contains both assembler and disassembler functions then
555      the disassembler contains much of the assembler and vice-versa,
556    - there's a lot of inlining possibilities as things grow,
557    - using a switch statement avoids the function call overhead.
558
559    This function could be moved into `parse_insn_normal', but keeping it
560    separate makes clear the interface between `parse_insn_normal' and each of
561    the handlers.  It's also needed by GAS to insert operands that couldn't be
562    resolved during parsing.  */
563
564 const char *
565 mep_cgen_insert_operand (CGEN_CPU_DESC cd,
566                              int opindex,
567                              CGEN_FIELDS * fields,
568                              CGEN_INSN_BYTES_PTR buffer,
569                              bfd_vma pc ATTRIBUTE_UNUSED)
570 {
571   const char * errmsg = NULL;
572   unsigned int total_length = CGEN_FIELDS_BITSIZE (fields);
573
574   switch (opindex)
575     {
576     case MEP_OPERAND_ADDR24A4 :
577       {
578 {
579   FLD (f_24u8a4n_hi) = ((UINT) (FLD (f_24u8a4n)) >> (8));
580   FLD (f_24u8a4n_lo) = ((UINT) (((FLD (f_24u8a4n)) & (252))) >> (2));
581 }
582         errmsg = insert_normal (cd, fields->f_24u8a4n_hi, 0, 0, 16, 16, 32, total_length, buffer);
583         if (errmsg)
584           break;
585         errmsg = insert_normal (cd, fields->f_24u8a4n_lo, 0, 0, 8, 6, 32, total_length, buffer);
586         if (errmsg)
587           break;
588       }
589       break;
590     case MEP_OPERAND_C5RMUIMM20 :
591       {
592 {
593   FLD (f_c5_rm) = ((UINT) (FLD (f_c5_rmuimm20)) >> (16));
594   FLD (f_c5_16u16) = ((FLD (f_c5_rmuimm20)) & (65535));
595 }
596         errmsg = insert_normal (cd, fields->f_c5_rm, 0, 0, 8, 4, 32, total_length, buffer);
597         if (errmsg)
598           break;
599         errmsg = insert_normal (cd, fields->f_c5_16u16, 0, 0, 16, 16, 32, total_length, buffer);
600         if (errmsg)
601           break;
602       }
603       break;
604     case MEP_OPERAND_C5RNMUIMM24 :
605       {
606 {
607   FLD (f_c5_rnm) = ((UINT) (FLD (f_c5_rnmuimm24)) >> (16));
608   FLD (f_c5_16u16) = ((FLD (f_c5_rnmuimm24)) & (65535));
609 }
610         errmsg = insert_normal (cd, fields->f_c5_rnm, 0, 0, 4, 8, 32, total_length, buffer);
611         if (errmsg)
612           break;
613         errmsg = insert_normal (cd, fields->f_c5_16u16, 0, 0, 16, 16, 32, total_length, buffer);
614         if (errmsg)
615           break;
616       }
617       break;
618     case MEP_OPERAND_CALLNUM :
619       {
620 {
621   FLD (f_5) = ((((UINT) (FLD (f_callnum)) >> (3))) & (1));
622   FLD (f_6) = ((((UINT) (FLD (f_callnum)) >> (2))) & (1));
623   FLD (f_7) = ((((UINT) (FLD (f_callnum)) >> (1))) & (1));
624   FLD (f_11) = ((FLD (f_callnum)) & (1));
625 }
626         errmsg = insert_normal (cd, fields->f_5, 0, 0, 5, 1, 32, total_length, buffer);
627         if (errmsg)
628           break;
629         errmsg = insert_normal (cd, fields->f_6, 0, 0, 6, 1, 32, total_length, buffer);
630         if (errmsg)
631           break;
632         errmsg = insert_normal (cd, fields->f_7, 0, 0, 7, 1, 32, total_length, buffer);
633         if (errmsg)
634           break;
635         errmsg = insert_normal (cd, fields->f_11, 0, 0, 11, 1, 32, total_length, buffer);
636         if (errmsg)
637           break;
638       }
639       break;
640     case MEP_OPERAND_CCCC :
641       errmsg = insert_normal (cd, fields->f_rm, 0, 0, 8, 4, 32, total_length, buffer);
642       break;
643     case MEP_OPERAND_CCRN :
644       {
645 {
646   FLD (f_ccrn_hi) = ((((UINT) (FLD (f_ccrn)) >> (4))) & (3));
647   FLD (f_ccrn_lo) = ((FLD (f_ccrn)) & (15));
648 }
649         errmsg = insert_normal (cd, fields->f_ccrn_hi, 0, 0, 28, 2, 32, total_length, buffer);
650         if (errmsg)
651           break;
652         errmsg = insert_normal (cd, fields->f_ccrn_lo, 0, 0, 4, 4, 32, total_length, buffer);
653         if (errmsg)
654           break;
655       }
656       break;
657     case MEP_OPERAND_CDISP10 :
658       {
659         long value = fields->f_cdisp10;
660         value = (((((((((value) & (128))) ? (((value) ^ (768))) : (value)) & (512))) ? ((((((value) & (128))) ? (((value) ^ (768))) : (value)) - (1024))) : ((((value) & (128))) ? (((value) ^ (768))) : (value))) & (512))) ? (((((((((((value) & (128))) ? (((value) ^ (768))) : (value)) & (512))) ? ((((((value) & (128))) ? (((value) ^ (768))) : (value)) - (1024))) : ((((value) & (128))) ? (((value) ^ (768))) : (value))) & (1023))) - (1024))) : (((((((((value) & (128))) ? (((value) ^ (768))) : (value)) & (512))) ? ((((((value) & (128))) ? (((value) ^ (768))) : (value)) - (1024))) : ((((value) & (128))) ? (((value) ^ (768))) : (value))) & (1023)));
661         errmsg = insert_normal (cd, value, 0|(1<<CGEN_IFLD_SIGNED), 0, 22, 10, 32, total_length, buffer);
662       }
663       break;
664     case MEP_OPERAND_CDISP10A2 :
665       {
666         long value = fields->f_cdisp10;
667         value = (((((((((value) & (128))) ? (((value) ^ (768))) : (value)) & (512))) ? ((((((value) & (128))) ? (((value) ^ (768))) : (value)) - (1024))) : ((((value) & (128))) ? (((value) ^ (768))) : (value))) & (512))) ? (((((((((((value) & (128))) ? (((value) ^ (768))) : (value)) & (512))) ? ((((((value) & (128))) ? (((value) ^ (768))) : (value)) - (1024))) : ((((value) & (128))) ? (((value) ^ (768))) : (value))) & (1023))) - (1024))) : (((((((((value) & (128))) ? (((value) ^ (768))) : (value)) & (512))) ? ((((((value) & (128))) ? (((value) ^ (768))) : (value)) - (1024))) : ((((value) & (128))) ? (((value) ^ (768))) : (value))) & (1023)));
668         errmsg = insert_normal (cd, value, 0|(1<<CGEN_IFLD_SIGNED), 0, 22, 10, 32, total_length, buffer);
669       }
670       break;
671     case MEP_OPERAND_CDISP10A4 :
672       {
673         long value = fields->f_cdisp10;
674         value = (((((((((value) & (128))) ? (((value) ^ (768))) : (value)) & (512))) ? ((((((value) & (128))) ? (((value) ^ (768))) : (value)) - (1024))) : ((((value) & (128))) ? (((value) ^ (768))) : (value))) & (512))) ? (((((((((((value) & (128))) ? (((value) ^ (768))) : (value)) & (512))) ? ((((((value) & (128))) ? (((value) ^ (768))) : (value)) - (1024))) : ((((value) & (128))) ? (((value) ^ (768))) : (value))) & (1023))) - (1024))) : (((((((((value) & (128))) ? (((value) ^ (768))) : (value)) & (512))) ? ((((((value) & (128))) ? (((value) ^ (768))) : (value)) - (1024))) : ((((value) & (128))) ? (((value) ^ (768))) : (value))) & (1023)));
675         errmsg = insert_normal (cd, value, 0|(1<<CGEN_IFLD_SIGNED), 0, 22, 10, 32, total_length, buffer);
676       }
677       break;
678     case MEP_OPERAND_CDISP10A8 :
679       {
680         long value = fields->f_cdisp10;
681         value = (((((((((value) & (128))) ? (((value) ^ (768))) : (value)) & (512))) ? ((((((value) & (128))) ? (((value) ^ (768))) : (value)) - (1024))) : ((((value) & (128))) ? (((value) ^ (768))) : (value))) & (512))) ? (((((((((((value) & (128))) ? (((value) ^ (768))) : (value)) & (512))) ? ((((((value) & (128))) ? (((value) ^ (768))) : (value)) - (1024))) : ((((value) & (128))) ? (((value) ^ (768))) : (value))) & (1023))) - (1024))) : (((((((((value) & (128))) ? (((value) ^ (768))) : (value)) & (512))) ? ((((((value) & (128))) ? (((value) ^ (768))) : (value)) - (1024))) : ((((value) & (128))) ? (((value) ^ (768))) : (value))) & (1023)));
682         errmsg = insert_normal (cd, value, 0|(1<<CGEN_IFLD_SIGNED), 0, 22, 10, 32, total_length, buffer);
683       }
684       break;
685     case MEP_OPERAND_CDISP12 :
686       errmsg = insert_normal (cd, fields->f_12s20, 0|(1<<CGEN_IFLD_SIGNED), 0, 20, 12, 32, total_length, buffer);
687       break;
688     case MEP_OPERAND_CIMM4 :
689       errmsg = insert_normal (cd, fields->f_rn, 0, 0, 4, 4, 32, total_length, buffer);
690       break;
691     case MEP_OPERAND_CIMM5 :
692       errmsg = insert_normal (cd, fields->f_5u24, 0, 0, 24, 5, 32, total_length, buffer);
693       break;
694     case MEP_OPERAND_CODE16 :
695       errmsg = insert_normal (cd, fields->f_16u16, 0, 0, 16, 16, 32, total_length, buffer);
696       break;
697     case MEP_OPERAND_CODE24 :
698       {
699 {
700   FLD (f_24u4n_hi) = ((UINT) (FLD (f_24u4n)) >> (16));
701   FLD (f_24u4n_lo) = ((FLD (f_24u4n)) & (65535));
702 }
703         errmsg = insert_normal (cd, fields->f_24u4n_hi, 0, 0, 4, 8, 32, total_length, buffer);
704         if (errmsg)
705           break;
706         errmsg = insert_normal (cd, fields->f_24u4n_lo, 0, 0, 16, 16, 32, total_length, buffer);
707         if (errmsg)
708           break;
709       }
710       break;
711     case MEP_OPERAND_CP_FLAG :
712       break;
713     case MEP_OPERAND_CRN :
714       errmsg = insert_normal (cd, fields->f_crn, 0, 0, 4, 4, 32, total_length, buffer);
715       break;
716     case MEP_OPERAND_CRN64 :
717       errmsg = insert_normal (cd, fields->f_crn, 0, 0, 4, 4, 32, total_length, buffer);
718       break;
719     case MEP_OPERAND_CRNX :
720       {
721 {
722   FLD (f_crnx_lo) = ((FLD (f_crnx)) & (15));
723   FLD (f_crnx_hi) = ((UINT) (FLD (f_crnx)) >> (4));
724 }
725         errmsg = insert_normal (cd, fields->f_crnx_hi, 0, 0, 28, 1, 32, total_length, buffer);
726         if (errmsg)
727           break;
728         errmsg = insert_normal (cd, fields->f_crnx_lo, 0, 0, 4, 4, 32, total_length, buffer);
729         if (errmsg)
730           break;
731       }
732       break;
733     case MEP_OPERAND_CRNX64 :
734       {
735 {
736   FLD (f_crnx_lo) = ((FLD (f_crnx)) & (15));
737   FLD (f_crnx_hi) = ((UINT) (FLD (f_crnx)) >> (4));
738 }
739         errmsg = insert_normal (cd, fields->f_crnx_hi, 0, 0, 28, 1, 32, total_length, buffer);
740         if (errmsg)
741           break;
742         errmsg = insert_normal (cd, fields->f_crnx_lo, 0, 0, 4, 4, 32, total_length, buffer);
743         if (errmsg)
744           break;
745       }
746       break;
747     case MEP_OPERAND_CROC :
748       errmsg = insert_normal (cd, fields->f_ivc2_5u7, 0, 0, 7, 5, 32, total_length, buffer);
749       break;
750     case MEP_OPERAND_CROP :
751       errmsg = insert_normal (cd, fields->f_ivc2_5u23, 0, 0, 23, 5, 32, total_length, buffer);
752       break;
753     case MEP_OPERAND_CRPC :
754       errmsg = insert_normal (cd, fields->f_ivc2_5u26, 0, 0, 26, 5, 32, total_length, buffer);
755       break;
756     case MEP_OPERAND_CRPP :
757       errmsg = insert_normal (cd, fields->f_ivc2_5u18, 0, 0, 18, 5, 32, total_length, buffer);
758       break;
759     case MEP_OPERAND_CRQC :
760       errmsg = insert_normal (cd, fields->f_ivc2_5u21, 0, 0, 21, 5, 32, total_length, buffer);
761       break;
762     case MEP_OPERAND_CRQP :
763       errmsg = insert_normal (cd, fields->f_ivc2_5u13, 0, 0, 13, 5, 32, total_length, buffer);
764       break;
765     case MEP_OPERAND_CSRN :
766       {
767 {
768   FLD (f_csrn_lo) = ((FLD (f_csrn)) & (15));
769   FLD (f_csrn_hi) = ((UINT) (FLD (f_csrn)) >> (4));
770 }
771         errmsg = insert_normal (cd, fields->f_csrn_hi, 0, 0, 15, 1, 32, total_length, buffer);
772         if (errmsg)
773           break;
774         errmsg = insert_normal (cd, fields->f_csrn_lo, 0, 0, 8, 4, 32, total_length, buffer);
775         if (errmsg)
776           break;
777       }
778       break;
779     case MEP_OPERAND_CSRN_IDX :
780       {
781 {
782   FLD (f_csrn_lo) = ((FLD (f_csrn)) & (15));
783   FLD (f_csrn_hi) = ((UINT) (FLD (f_csrn)) >> (4));
784 }
785         errmsg = insert_normal (cd, fields->f_csrn_hi, 0, 0, 15, 1, 32, total_length, buffer);
786         if (errmsg)
787           break;
788         errmsg = insert_normal (cd, fields->f_csrn_lo, 0, 0, 8, 4, 32, total_length, buffer);
789         if (errmsg)
790           break;
791       }
792       break;
793     case MEP_OPERAND_DBG :
794       break;
795     case MEP_OPERAND_DEPC :
796       break;
797     case MEP_OPERAND_EPC :
798       break;
799     case MEP_OPERAND_EXC :
800       break;
801     case MEP_OPERAND_HI :
802       break;
803     case MEP_OPERAND_IMM16P0 :
804       {
805 {
806   FLD (f_ivc2_8u0) = ((((UINT) (FLD (f_ivc2_imm16p0)) >> (8))) & (255));
807   FLD (f_ivc2_8u20) = ((FLD (f_ivc2_imm16p0)) & (255));
808 }
809         errmsg = insert_normal (cd, fields->f_ivc2_8u0, 0, 0, 0, 8, 32, total_length, buffer);
810         if (errmsg)
811           break;
812         errmsg = insert_normal (cd, fields->f_ivc2_8u20, 0, 0, 20, 8, 32, total_length, buffer);
813         if (errmsg)
814           break;
815       }
816       break;
817     case MEP_OPERAND_IMM3P12 :
818       errmsg = insert_normal (cd, fields->f_ivc2_3u12, 0, 0, 12, 3, 32, total_length, buffer);
819       break;
820     case MEP_OPERAND_IMM3P25 :
821       errmsg = insert_normal (cd, fields->f_ivc2_3u25, 0, 0, 25, 3, 32, total_length, buffer);
822       break;
823     case MEP_OPERAND_IMM3P4 :
824       errmsg = insert_normal (cd, fields->f_ivc2_3u4, 0, 0, 4, 3, 32, total_length, buffer);
825       break;
826     case MEP_OPERAND_IMM3P5 :
827       errmsg = insert_normal (cd, fields->f_ivc2_3u5, 0, 0, 5, 3, 32, total_length, buffer);
828       break;
829     case MEP_OPERAND_IMM3P9 :
830       errmsg = insert_normal (cd, fields->f_ivc2_3u9, 0, 0, 9, 3, 32, total_length, buffer);
831       break;
832     case MEP_OPERAND_IMM4P10 :
833       errmsg = insert_normal (cd, fields->f_ivc2_4u10, 0, 0, 10, 4, 32, total_length, buffer);
834       break;
835     case MEP_OPERAND_IMM4P4 :
836       errmsg = insert_normal (cd, fields->f_ivc2_4u4, 0, 0, 4, 4, 32, total_length, buffer);
837       break;
838     case MEP_OPERAND_IMM4P8 :
839       errmsg = insert_normal (cd, fields->f_ivc2_4u8, 0, 0, 8, 4, 32, total_length, buffer);
840       break;
841     case MEP_OPERAND_IMM5P23 :
842       errmsg = insert_normal (cd, fields->f_ivc2_5u23, 0, 0, 23, 5, 32, total_length, buffer);
843       break;
844     case MEP_OPERAND_IMM5P3 :
845       errmsg = insert_normal (cd, fields->f_ivc2_5u3, 0, 0, 3, 5, 32, total_length, buffer);
846       break;
847     case MEP_OPERAND_IMM5P7 :
848       errmsg = insert_normal (cd, fields->f_ivc2_5u7, 0, 0, 7, 5, 32, total_length, buffer);
849       break;
850     case MEP_OPERAND_IMM5P8 :
851       errmsg = insert_normal (cd, fields->f_ivc2_5u8, 0, 0, 8, 5, 32, total_length, buffer);
852       break;
853     case MEP_OPERAND_IMM6P2 :
854       errmsg = insert_normal (cd, fields->f_ivc2_6u2, 0, 0, 2, 6, 32, total_length, buffer);
855       break;
856     case MEP_OPERAND_IMM6P6 :
857       errmsg = insert_normal (cd, fields->f_ivc2_6u6, 0, 0, 6, 6, 32, total_length, buffer);
858       break;
859     case MEP_OPERAND_IMM8P0 :
860       errmsg = insert_normal (cd, fields->f_ivc2_8u0, 0, 0, 0, 8, 32, total_length, buffer);
861       break;
862     case MEP_OPERAND_IMM8P20 :
863       errmsg = insert_normal (cd, fields->f_ivc2_8u20, 0, 0, 20, 8, 32, total_length, buffer);
864       break;
865     case MEP_OPERAND_IMM8P4 :
866       errmsg = insert_normal (cd, fields->f_ivc2_8u4, 0, 0, 4, 8, 32, total_length, buffer);
867       break;
868     case MEP_OPERAND_IVC_X_0_2 :
869       errmsg = insert_normal (cd, fields->f_ivc2_2u0, 0, 0, 0, 2, 32, total_length, buffer);
870       break;
871     case MEP_OPERAND_IVC_X_0_3 :
872       errmsg = insert_normal (cd, fields->f_ivc2_3u0, 0, 0, 0, 3, 32, total_length, buffer);
873       break;
874     case MEP_OPERAND_IVC_X_0_4 :
875       errmsg = insert_normal (cd, fields->f_ivc2_4u0, 0, 0, 0, 4, 32, total_length, buffer);
876       break;
877     case MEP_OPERAND_IVC_X_0_5 :
878       errmsg = insert_normal (cd, fields->f_ivc2_5u0, 0, 0, 0, 5, 32, total_length, buffer);
879       break;
880     case MEP_OPERAND_IVC_X_6_1 :
881       errmsg = insert_normal (cd, fields->f_ivc2_1u6, 0, 0, 6, 1, 32, total_length, buffer);
882       break;
883     case MEP_OPERAND_IVC_X_6_2 :
884       errmsg = insert_normal (cd, fields->f_ivc2_2u6, 0, 0, 6, 2, 32, total_length, buffer);
885       break;
886     case MEP_OPERAND_IVC_X_6_3 :
887       errmsg = insert_normal (cd, fields->f_ivc2_3u6, 0, 0, 6, 3, 32, total_length, buffer);
888       break;
889     case MEP_OPERAND_IVC2_ACC0_0 :
890       break;
891     case MEP_OPERAND_IVC2_ACC0_1 :
892       break;
893     case MEP_OPERAND_IVC2_ACC0_2 :
894       break;
895     case MEP_OPERAND_IVC2_ACC0_3 :
896       break;
897     case MEP_OPERAND_IVC2_ACC0_4 :
898       break;
899     case MEP_OPERAND_IVC2_ACC0_5 :
900       break;
901     case MEP_OPERAND_IVC2_ACC0_6 :
902       break;
903     case MEP_OPERAND_IVC2_ACC0_7 :
904       break;
905     case MEP_OPERAND_IVC2_ACC1_0 :
906       break;
907     case MEP_OPERAND_IVC2_ACC1_1 :
908       break;
909     case MEP_OPERAND_IVC2_ACC1_2 :
910       break;
911     case MEP_OPERAND_IVC2_ACC1_3 :
912       break;
913     case MEP_OPERAND_IVC2_ACC1_4 :
914       break;
915     case MEP_OPERAND_IVC2_ACC1_5 :
916       break;
917     case MEP_OPERAND_IVC2_ACC1_6 :
918       break;
919     case MEP_OPERAND_IVC2_ACC1_7 :
920       break;
921     case MEP_OPERAND_IVC2_CC :
922       break;
923     case MEP_OPERAND_IVC2_COFA0 :
924       break;
925     case MEP_OPERAND_IVC2_COFA1 :
926       break;
927     case MEP_OPERAND_IVC2_COFR0 :
928       break;
929     case MEP_OPERAND_IVC2_COFR1 :
930       break;
931     case MEP_OPERAND_IVC2_CSAR0 :
932       break;
933     case MEP_OPERAND_IVC2_CSAR1 :
934       break;
935     case MEP_OPERAND_IVC2C3CCRN :
936       {
937 {
938   FLD (f_ivc2_ccrn_c3hi) = ((((UINT) (FLD (f_ivc2_ccrn_c3)) >> (4))) & (3));
939   FLD (f_ivc2_ccrn_c3lo) = ((FLD (f_ivc2_ccrn_c3)) & (15));
940 }
941         errmsg = insert_normal (cd, fields->f_ivc2_ccrn_c3hi, 0, 0, 28, 2, 32, total_length, buffer);
942         if (errmsg)
943           break;
944         errmsg = insert_normal (cd, fields->f_ivc2_ccrn_c3lo, 0, 0, 4, 4, 32, total_length, buffer);
945         if (errmsg)
946           break;
947       }
948       break;
949     case MEP_OPERAND_IVC2CCRN :
950       {
951 {
952   FLD (f_ivc2_ccrn_h2) = ((((UINT) (FLD (f_ivc2_ccrn)) >> (4))) & (3));
953   FLD (f_ivc2_ccrn_lo) = ((FLD (f_ivc2_ccrn)) & (15));
954 }
955         errmsg = insert_normal (cd, fields->f_ivc2_ccrn_h2, 0, 0, 20, 2, 32, total_length, buffer);
956         if (errmsg)
957           break;
958         errmsg = insert_normal (cd, fields->f_ivc2_ccrn_lo, 0, 0, 0, 4, 32, total_length, buffer);
959         if (errmsg)
960           break;
961       }
962       break;
963     case MEP_OPERAND_IVC2CRN :
964       {
965 {
966   FLD (f_ivc2_ccrn_h1) = ((((UINT) (FLD (f_ivc2_crnx)) >> (4))) & (1));
967   FLD (f_ivc2_ccrn_lo) = ((FLD (f_ivc2_crnx)) & (15));
968 }
969         errmsg = insert_normal (cd, fields->f_ivc2_ccrn_h1, 0, 0, 20, 1, 32, total_length, buffer);
970         if (errmsg)
971           break;
972         errmsg = insert_normal (cd, fields->f_ivc2_ccrn_lo, 0, 0, 0, 4, 32, total_length, buffer);
973         if (errmsg)
974           break;
975       }
976       break;
977     case MEP_OPERAND_IVC2RM :
978       errmsg = insert_normal (cd, fields->f_ivc2_crm, 0, 0, 4, 4, 32, total_length, buffer);
979       break;
980     case MEP_OPERAND_LO :
981       break;
982     case MEP_OPERAND_LP :
983       break;
984     case MEP_OPERAND_MB0 :
985       break;
986     case MEP_OPERAND_MB1 :
987       break;
988     case MEP_OPERAND_ME0 :
989       break;
990     case MEP_OPERAND_ME1 :
991       break;
992     case MEP_OPERAND_NPC :
993       break;
994     case MEP_OPERAND_OPT :
995       break;
996     case MEP_OPERAND_PCABS24A2 :
997       {
998 {
999   FLD (f_24u5a2n_lo) = ((UINT) (((FLD (f_24u5a2n)) & (255))) >> (1));
1000   FLD (f_24u5a2n_hi) = ((UINT) (FLD (f_24u5a2n)) >> (8));
1001 }
1002         errmsg = insert_normal (cd, fields->f_24u5a2n_hi, 0, 0, 16, 16, 32, total_length, buffer);
1003         if (errmsg)
1004           break;
1005         errmsg = insert_normal (cd, fields->f_24u5a2n_lo, 0, 0, 5, 7, 32, total_length, buffer);
1006         if (errmsg)
1007           break;
1008       }
1009       break;
1010     case MEP_OPERAND_PCREL12A2 :
1011       {
1012         long value = fields->f_12s4a2;
1013         value = ((SI) (((value) - (pc))) >> (1));
1014         errmsg = insert_normal (cd, value, 0|(1<<CGEN_IFLD_SIGNED)|(1<<CGEN_IFLD_PCREL_ADDR), 0, 4, 11, 32, total_length, buffer);
1015       }
1016       break;
1017     case MEP_OPERAND_PCREL17A2 :
1018       {
1019         long value = fields->f_17s16a2;
1020         value = ((SI) (((value) - (pc))) >> (1));
1021         errmsg = insert_normal (cd, value, 0|(1<<CGEN_IFLD_SIGNED)|(1<<CGEN_IFLD_PCREL_ADDR), 0, 16, 16, 32, total_length, buffer);
1022       }
1023       break;
1024     case MEP_OPERAND_PCREL24A2 :
1025       {
1026 {
1027   FLD (f_24s5a2n) = ((FLD (f_24s5a2n)) - (pc));
1028   FLD (f_24s5a2n_lo) = ((UINT) (((FLD (f_24s5a2n)) & (254))) >> (1));
1029   FLD (f_24s5a2n_hi) = ((INT) (FLD (f_24s5a2n)) >> (8));
1030 }
1031         errmsg = insert_normal (cd, fields->f_24s5a2n_hi, 0|(1<<CGEN_IFLD_SIGNED)|(1<<CGEN_IFLD_PCREL_ADDR), 0, 16, 16, 32, total_length, buffer);
1032         if (errmsg)
1033           break;
1034         errmsg = insert_normal (cd, fields->f_24s5a2n_lo, 0|(1<<CGEN_IFLD_PCREL_ADDR), 0, 5, 7, 32, total_length, buffer);
1035         if (errmsg)
1036           break;
1037       }
1038       break;
1039     case MEP_OPERAND_PCREL8A2 :
1040       {
1041         long value = fields->f_8s8a2;
1042         value = ((SI) (((value) - (pc))) >> (1));
1043         errmsg = insert_normal (cd, value, 0|(1<<CGEN_IFLD_SIGNED)|(1<<CGEN_IFLD_PCREL_ADDR), 0, 8, 7, 32, total_length, buffer);
1044       }
1045       break;
1046     case MEP_OPERAND_PSW :
1047       break;
1048     case MEP_OPERAND_R0 :
1049       break;
1050     case MEP_OPERAND_R1 :
1051       break;
1052     case MEP_OPERAND_RL :
1053       errmsg = insert_normal (cd, fields->f_rl, 0, 0, 12, 4, 32, total_length, buffer);
1054       break;
1055     case MEP_OPERAND_RL5 :
1056       errmsg = insert_normal (cd, fields->f_rl5, 0, 0, 20, 4, 32, total_length, buffer);
1057       break;
1058     case MEP_OPERAND_RM :
1059       errmsg = insert_normal (cd, fields->f_rm, 0, 0, 8, 4, 32, total_length, buffer);
1060       break;
1061     case MEP_OPERAND_RMA :
1062       errmsg = insert_normal (cd, fields->f_rm, 0, 0, 8, 4, 32, total_length, buffer);
1063       break;
1064     case MEP_OPERAND_RN :
1065       errmsg = insert_normal (cd, fields->f_rn, 0, 0, 4, 4, 32, total_length, buffer);
1066       break;
1067     case MEP_OPERAND_RN3 :
1068       errmsg = insert_normal (cd, fields->f_rn3, 0, 0, 5, 3, 32, total_length, buffer);
1069       break;
1070     case MEP_OPERAND_RN3C :
1071       errmsg = insert_normal (cd, fields->f_rn3, 0, 0, 5, 3, 32, total_length, buffer);
1072       break;
1073     case MEP_OPERAND_RN3L :
1074       errmsg = insert_normal (cd, fields->f_rn3, 0, 0, 5, 3, 32, total_length, buffer);
1075       break;
1076     case MEP_OPERAND_RN3S :
1077       errmsg = insert_normal (cd, fields->f_rn3, 0, 0, 5, 3, 32, total_length, buffer);
1078       break;
1079     case MEP_OPERAND_RN3UC :
1080       errmsg = insert_normal (cd, fields->f_rn3, 0, 0, 5, 3, 32, total_length, buffer);
1081       break;
1082     case MEP_OPERAND_RN3UL :
1083       errmsg = insert_normal (cd, fields->f_rn3, 0, 0, 5, 3, 32, total_length, buffer);
1084       break;
1085     case MEP_OPERAND_RN3US :
1086       errmsg = insert_normal (cd, fields->f_rn3, 0, 0, 5, 3, 32, total_length, buffer);
1087       break;
1088     case MEP_OPERAND_RNC :
1089       errmsg = insert_normal (cd, fields->f_rn, 0, 0, 4, 4, 32, total_length, buffer);
1090       break;
1091     case MEP_OPERAND_RNL :
1092       errmsg = insert_normal (cd, fields->f_rn, 0, 0, 4, 4, 32, total_length, buffer);
1093       break;
1094     case MEP_OPERAND_RNS :
1095       errmsg = insert_normal (cd, fields->f_rn, 0, 0, 4, 4, 32, total_length, buffer);
1096       break;
1097     case MEP_OPERAND_RNUC :
1098       errmsg = insert_normal (cd, fields->f_rn, 0, 0, 4, 4, 32, total_length, buffer);
1099       break;
1100     case MEP_OPERAND_RNUL :
1101       errmsg = insert_normal (cd, fields->f_rn, 0, 0, 4, 4, 32, total_length, buffer);
1102       break;
1103     case MEP_OPERAND_RNUS :
1104       errmsg = insert_normal (cd, fields->f_rn, 0, 0, 4, 4, 32, total_length, buffer);
1105       break;
1106     case MEP_OPERAND_SAR :
1107       break;
1108     case MEP_OPERAND_SDISP16 :
1109       errmsg = insert_normal (cd, fields->f_16s16, 0|(1<<CGEN_IFLD_SIGNED), 0, 16, 16, 32, total_length, buffer);
1110       break;
1111     case MEP_OPERAND_SIMM16 :
1112       errmsg = insert_normal (cd, fields->f_16s16, 0|(1<<CGEN_IFLD_SIGNED), 0, 16, 16, 32, total_length, buffer);
1113       break;
1114     case MEP_OPERAND_SIMM16P0 :
1115       {
1116 {
1117   FLD (f_ivc2_8u0) = ((((UINT) (FLD (f_ivc2_simm16p0)) >> (8))) & (255));
1118   FLD (f_ivc2_8u20) = ((FLD (f_ivc2_simm16p0)) & (255));
1119 }
1120         errmsg = insert_normal (cd, fields->f_ivc2_8u0, 0, 0, 0, 8, 32, total_length, buffer);
1121         if (errmsg)
1122           break;
1123         errmsg = insert_normal (cd, fields->f_ivc2_8u20, 0, 0, 20, 8, 32, total_length, buffer);
1124         if (errmsg)
1125           break;
1126       }
1127       break;
1128     case MEP_OPERAND_SIMM6 :
1129       errmsg = insert_normal (cd, fields->f_6s8, 0|(1<<CGEN_IFLD_SIGNED), 0, 8, 6, 32, total_length, buffer);
1130       break;
1131     case MEP_OPERAND_SIMM8 :
1132       errmsg = insert_normal (cd, fields->f_8s8, 0|(1<<CGEN_IFLD_SIGNED), 0, 8, 8, 32, total_length, buffer);
1133       break;
1134     case MEP_OPERAND_SIMM8P0 :
1135       errmsg = insert_normal (cd, fields->f_ivc2_8s0, 0|(1<<CGEN_IFLD_SIGNED), 0, 0, 8, 32, total_length, buffer);
1136       break;
1137     case MEP_OPERAND_SIMM8P20 :
1138       errmsg = insert_normal (cd, fields->f_ivc2_8s20, 0|(1<<CGEN_IFLD_SIGNED), 0, 20, 8, 32, total_length, buffer);
1139       break;
1140     case MEP_OPERAND_SIMM8P4 :
1141       errmsg = insert_normal (cd, fields->f_ivc2_8s4, 0|(1<<CGEN_IFLD_SIGNED), 0, 4, 8, 32, total_length, buffer);
1142       break;
1143     case MEP_OPERAND_SP :
1144       break;
1145     case MEP_OPERAND_SPR :
1146       break;
1147     case MEP_OPERAND_TP :
1148       break;
1149     case MEP_OPERAND_TPR :
1150       break;
1151     case MEP_OPERAND_UDISP2 :
1152       errmsg = insert_normal (cd, fields->f_2u6, 0, 0, 6, 2, 32, total_length, buffer);
1153       break;
1154     case MEP_OPERAND_UDISP7 :
1155       errmsg = insert_normal (cd, fields->f_7u9, 0, 0, 9, 7, 32, total_length, buffer);
1156       break;
1157     case MEP_OPERAND_UDISP7A2 :
1158       {
1159         long value = fields->f_7u9a2;
1160         value = ((USI) (value) >> (1));
1161         errmsg = insert_normal (cd, value, 0, 0, 9, 6, 32, total_length, buffer);
1162       }
1163       break;
1164     case MEP_OPERAND_UDISP7A4 :
1165       {
1166         long value = fields->f_7u9a4;
1167         value = ((USI) (value) >> (2));
1168         errmsg = insert_normal (cd, value, 0, 0, 9, 5, 32, total_length, buffer);
1169       }
1170       break;
1171     case MEP_OPERAND_UIMM16 :
1172       errmsg = insert_normal (cd, fields->f_16u16, 0, 0, 16, 16, 32, total_length, buffer);
1173       break;
1174     case MEP_OPERAND_UIMM2 :
1175       errmsg = insert_normal (cd, fields->f_2u10, 0, 0, 10, 2, 32, total_length, buffer);
1176       break;
1177     case MEP_OPERAND_UIMM24 :
1178       {
1179 {
1180   FLD (f_24u8n_hi) = ((UINT) (FLD (f_24u8n)) >> (8));
1181   FLD (f_24u8n_lo) = ((FLD (f_24u8n)) & (255));
1182 }
1183         errmsg = insert_normal (cd, fields->f_24u8n_hi, 0, 0, 16, 16, 32, total_length, buffer);
1184         if (errmsg)
1185           break;
1186         errmsg = insert_normal (cd, fields->f_24u8n_lo, 0, 0, 8, 8, 32, total_length, buffer);
1187         if (errmsg)
1188           break;
1189       }
1190       break;
1191     case MEP_OPERAND_UIMM3 :
1192       errmsg = insert_normal (cd, fields->f_3u5, 0, 0, 5, 3, 32, total_length, buffer);
1193       break;
1194     case MEP_OPERAND_UIMM4 :
1195       errmsg = insert_normal (cd, fields->f_4u8, 0, 0, 8, 4, 32, total_length, buffer);
1196       break;
1197     case MEP_OPERAND_UIMM5 :
1198       errmsg = insert_normal (cd, fields->f_5u8, 0, 0, 8, 5, 32, total_length, buffer);
1199       break;
1200     case MEP_OPERAND_UIMM7A4 :
1201       {
1202         long value = fields->f_7u9a4;
1203         value = ((USI) (value) >> (2));
1204         errmsg = insert_normal (cd, value, 0, 0, 9, 5, 32, total_length, buffer);
1205       }
1206       break;
1207     case MEP_OPERAND_ZERO :
1208       break;
1209
1210     default :
1211       /* xgettext:c-format */
1212       fprintf (stderr, _("Unrecognized field %d while building insn.\n"),
1213                opindex);
1214       abort ();
1215   }
1216
1217   return errmsg;
1218 }
1219
1220 int mep_cgen_extract_operand
1221   (CGEN_CPU_DESC, int, CGEN_EXTRACT_INFO *, CGEN_INSN_INT, CGEN_FIELDS *, bfd_vma);
1222
1223 /* Main entry point for operand extraction.
1224    The result is <= 0 for error, >0 for success.
1225    ??? Actual values aren't well defined right now.
1226
1227    This function is basically just a big switch statement.  Earlier versions
1228    used tables to look up the function to use, but
1229    - if the table contains both assembler and disassembler functions then
1230      the disassembler contains much of the assembler and vice-versa,
1231    - there's a lot of inlining possibilities as things grow,
1232    - using a switch statement avoids the function call overhead.
1233
1234    This function could be moved into `print_insn_normal', but keeping it
1235    separate makes clear the interface between `print_insn_normal' and each of
1236    the handlers.  */
1237
1238 int
1239 mep_cgen_extract_operand (CGEN_CPU_DESC cd,
1240                              int opindex,
1241                              CGEN_EXTRACT_INFO *ex_info,
1242                              CGEN_INSN_INT insn_value,
1243                              CGEN_FIELDS * fields,
1244                              bfd_vma pc)
1245 {
1246   /* Assume success (for those operands that are nops).  */
1247   int length = 1;
1248   unsigned int total_length = CGEN_FIELDS_BITSIZE (fields);
1249
1250   switch (opindex)
1251     {
1252     case MEP_OPERAND_ADDR24A4 :
1253       {
1254         length = extract_normal (cd, ex_info, insn_value, 0, 0, 16, 16, 32, total_length, pc, & fields->f_24u8a4n_hi);
1255         if (length <= 0) break;
1256         length = extract_normal (cd, ex_info, insn_value, 0, 0, 8, 6, 32, total_length, pc, & fields->f_24u8a4n_lo);
1257         if (length <= 0) break;
1258   FLD (f_24u8a4n) = ((((FLD (f_24u8a4n_hi)) << (8))) | (((FLD (f_24u8a4n_lo)) << (2))));
1259       }
1260       break;
1261     case MEP_OPERAND_C5RMUIMM20 :
1262       {
1263         length = extract_normal (cd, ex_info, insn_value, 0, 0, 8, 4, 32, total_length, pc, & fields->f_c5_rm);
1264         if (length <= 0) break;
1265         length = extract_normal (cd, ex_info, insn_value, 0, 0, 16, 16, 32, total_length, pc, & fields->f_c5_16u16);
1266         if (length <= 0) break;
1267 {
1268   FLD (f_c5_rmuimm20) = ((FLD (f_c5_16u16)) | (((FLD (f_c5_rm)) << (16))));
1269 }
1270       }
1271       break;
1272     case MEP_OPERAND_C5RNMUIMM24 :
1273       {
1274         length = extract_normal (cd, ex_info, insn_value, 0, 0, 4, 8, 32, total_length, pc, & fields->f_c5_rnm);
1275         if (length <= 0) break;
1276         length = extract_normal (cd, ex_info, insn_value, 0, 0, 16, 16, 32, total_length, pc, & fields->f_c5_16u16);
1277         if (length <= 0) break;
1278 {
1279   FLD (f_c5_rnmuimm24) = ((FLD (f_c5_16u16)) | (((FLD (f_c5_rnm)) << (16))));
1280 }
1281       }
1282       break;
1283     case MEP_OPERAND_CALLNUM :
1284       {
1285         length = extract_normal (cd, ex_info, insn_value, 0, 0, 5, 1, 32, total_length, pc, & fields->f_5);
1286         if (length <= 0) break;
1287         length = extract_normal (cd, ex_info, insn_value, 0, 0, 6, 1, 32, total_length, pc, & fields->f_6);
1288         if (length <= 0) break;
1289         length = extract_normal (cd, ex_info, insn_value, 0, 0, 7, 1, 32, total_length, pc, & fields->f_7);
1290         if (length <= 0) break;
1291         length = extract_normal (cd, ex_info, insn_value, 0, 0, 11, 1, 32, total_length, pc, & fields->f_11);
1292         if (length <= 0) break;
1293   FLD (f_callnum) = ((((FLD (f_5)) << (3))) | (((((FLD (f_6)) << (2))) | (((((FLD (f_7)) << (1))) | (FLD (f_11)))))));
1294       }
1295       break;
1296     case MEP_OPERAND_CCCC :
1297       length = extract_normal (cd, ex_info, insn_value, 0, 0, 8, 4, 32, total_length, pc, & fields->f_rm);
1298       break;
1299     case MEP_OPERAND_CCRN :
1300       {
1301         length = extract_normal (cd, ex_info, insn_value, 0, 0, 28, 2, 32, total_length, pc, & fields->f_ccrn_hi);
1302         if (length <= 0) break;
1303         length = extract_normal (cd, ex_info, insn_value, 0, 0, 4, 4, 32, total_length, pc, & fields->f_ccrn_lo);
1304         if (length <= 0) break;
1305   FLD (f_ccrn) = ((((FLD (f_ccrn_hi)) << (4))) | (FLD (f_ccrn_lo)));
1306       }
1307       break;
1308     case MEP_OPERAND_CDISP10 :
1309       {
1310         long value;
1311         length = extract_normal (cd, ex_info, insn_value, 0|(1<<CGEN_IFLD_SIGNED), 0, 22, 10, 32, total_length, pc, & value);
1312         value = (((((((((value) & (128))) ? (((value) ^ (768))) : (value)) & (512))) ? ((((((value) & (128))) ? (((value) ^ (768))) : (value)) - (1024))) : ((((value) & (128))) ? (((value) ^ (768))) : (value))) & (512))) ? (((((((((((value) & (128))) ? (((value) ^ (768))) : (value)) & (512))) ? ((((((value) & (128))) ? (((value) ^ (768))) : (value)) - (1024))) : ((((value) & (128))) ? (((value) ^ (768))) : (value))) & (1023))) - (1024))) : (((((((((value) & (128))) ? (((value) ^ (768))) : (value)) & (512))) ? ((((((value) & (128))) ? (((value) ^ (768))) : (value)) - (1024))) : ((((value) & (128))) ? (((value) ^ (768))) : (value))) & (1023)));
1313         fields->f_cdisp10 = value;
1314       }
1315       break;
1316     case MEP_OPERAND_CDISP10A2 :
1317       {
1318         long value;
1319         length = extract_normal (cd, ex_info, insn_value, 0|(1<<CGEN_IFLD_SIGNED), 0, 22, 10, 32, total_length, pc, & value);
1320         value = (((((((((value) & (128))) ? (((value) ^ (768))) : (value)) & (512))) ? ((((((value) & (128))) ? (((value) ^ (768))) : (value)) - (1024))) : ((((value) & (128))) ? (((value) ^ (768))) : (value))) & (512))) ? (((((((((((value) & (128))) ? (((value) ^ (768))) : (value)) & (512))) ? ((((((value) & (128))) ? (((value) ^ (768))) : (value)) - (1024))) : ((((value) & (128))) ? (((value) ^ (768))) : (value))) & (1023))) - (1024))) : (((((((((value) & (128))) ? (((value) ^ (768))) : (value)) & (512))) ? ((((((value) & (128))) ? (((value) ^ (768))) : (value)) - (1024))) : ((((value) & (128))) ? (((value) ^ (768))) : (value))) & (1023)));
1321         fields->f_cdisp10 = value;
1322       }
1323       break;
1324     case MEP_OPERAND_CDISP10A4 :
1325       {
1326         long value;
1327         length = extract_normal (cd, ex_info, insn_value, 0|(1<<CGEN_IFLD_SIGNED), 0, 22, 10, 32, total_length, pc, & value);
1328         value = (((((((((value) & (128))) ? (((value) ^ (768))) : (value)) & (512))) ? ((((((value) & (128))) ? (((value) ^ (768))) : (value)) - (1024))) : ((((value) & (128))) ? (((value) ^ (768))) : (value))) & (512))) ? (((((((((((value) & (128))) ? (((value) ^ (768))) : (value)) & (512))) ? ((((((value) & (128))) ? (((value) ^ (768))) : (value)) - (1024))) : ((((value) & (128))) ? (((value) ^ (768))) : (value))) & (1023))) - (1024))) : (((((((((value) & (128))) ? (((value) ^ (768))) : (value)) & (512))) ? ((((((value) & (128))) ? (((value) ^ (768))) : (value)) - (1024))) : ((((value) & (128))) ? (((value) ^ (768))) : (value))) & (1023)));
1329         fields->f_cdisp10 = value;
1330       }
1331       break;
1332     case MEP_OPERAND_CDISP10A8 :
1333       {
1334         long value;
1335         length = extract_normal (cd, ex_info, insn_value, 0|(1<<CGEN_IFLD_SIGNED), 0, 22, 10, 32, total_length, pc, & value);
1336         value = (((((((((value) & (128))) ? (((value) ^ (768))) : (value)) & (512))) ? ((((((value) & (128))) ? (((value) ^ (768))) : (value)) - (1024))) : ((((value) & (128))) ? (((value) ^ (768))) : (value))) & (512))) ? (((((((((((value) & (128))) ? (((value) ^ (768))) : (value)) & (512))) ? ((((((value) & (128))) ? (((value) ^ (768))) : (value)) - (1024))) : ((((value) & (128))) ? (((value) ^ (768))) : (value))) & (1023))) - (1024))) : (((((((((value) & (128))) ? (((value) ^ (768))) : (value)) & (512))) ? ((((((value) & (128))) ? (((value) ^ (768))) : (value)) - (1024))) : ((((value) & (128))) ? (((value) ^ (768))) : (value))) & (1023)));
1337         fields->f_cdisp10 = value;
1338       }
1339       break;
1340     case MEP_OPERAND_CDISP12 :
1341       length = extract_normal (cd, ex_info, insn_value, 0|(1<<CGEN_IFLD_SIGNED), 0, 20, 12, 32, total_length, pc, & fields->f_12s20);
1342       break;
1343     case MEP_OPERAND_CIMM4 :
1344       length = extract_normal (cd, ex_info, insn_value, 0, 0, 4, 4, 32, total_length, pc, & fields->f_rn);
1345       break;
1346     case MEP_OPERAND_CIMM5 :
1347       length = extract_normal (cd, ex_info, insn_value, 0, 0, 24, 5, 32, total_length, pc, & fields->f_5u24);
1348       break;
1349     case MEP_OPERAND_CODE16 :
1350       length = extract_normal (cd, ex_info, insn_value, 0, 0, 16, 16, 32, total_length, pc, & fields->f_16u16);
1351       break;
1352     case MEP_OPERAND_CODE24 :
1353       {
1354         length = extract_normal (cd, ex_info, insn_value, 0, 0, 4, 8, 32, total_length, pc, & fields->f_24u4n_hi);
1355         if (length <= 0) break;
1356         length = extract_normal (cd, ex_info, insn_value, 0, 0, 16, 16, 32, total_length, pc, & fields->f_24u4n_lo);
1357         if (length <= 0) break;
1358   FLD (f_24u4n) = ((((FLD (f_24u4n_hi)) << (16))) | (FLD (f_24u4n_lo)));
1359       }
1360       break;
1361     case MEP_OPERAND_CP_FLAG :
1362       break;
1363     case MEP_OPERAND_CRN :
1364       length = extract_normal (cd, ex_info, insn_value, 0, 0, 4, 4, 32, total_length, pc, & fields->f_crn);
1365       break;
1366     case MEP_OPERAND_CRN64 :
1367       length = extract_normal (cd, ex_info, insn_value, 0, 0, 4, 4, 32, total_length, pc, & fields->f_crn);
1368       break;
1369     case MEP_OPERAND_CRNX :
1370       {
1371         length = extract_normal (cd, ex_info, insn_value, 0, 0, 28, 1, 32, total_length, pc, & fields->f_crnx_hi);
1372         if (length <= 0) break;
1373         length = extract_normal (cd, ex_info, insn_value, 0, 0, 4, 4, 32, total_length, pc, & fields->f_crnx_lo);
1374         if (length <= 0) break;
1375   FLD (f_crnx) = ((((FLD (f_crnx_hi)) << (4))) | (FLD (f_crnx_lo)));
1376       }
1377       break;
1378     case MEP_OPERAND_CRNX64 :
1379       {
1380         length = extract_normal (cd, ex_info, insn_value, 0, 0, 28, 1, 32, total_length, pc, & fields->f_crnx_hi);
1381         if (length <= 0) break;
1382         length = extract_normal (cd, ex_info, insn_value, 0, 0, 4, 4, 32, total_length, pc, & fields->f_crnx_lo);
1383         if (length <= 0) break;
1384   FLD (f_crnx) = ((((FLD (f_crnx_hi)) << (4))) | (FLD (f_crnx_lo)));
1385       }
1386       break;
1387     case MEP_OPERAND_CROC :
1388       length = extract_normal (cd, ex_info, insn_value, 0, 0, 7, 5, 32, total_length, pc, & fields->f_ivc2_5u7);
1389       break;
1390     case MEP_OPERAND_CROP :
1391       length = extract_normal (cd, ex_info, insn_value, 0, 0, 23, 5, 32, total_length, pc, & fields->f_ivc2_5u23);
1392       break;
1393     case MEP_OPERAND_CRPC :
1394       length = extract_normal (cd, ex_info, insn_value, 0, 0, 26, 5, 32, total_length, pc, & fields->f_ivc2_5u26);
1395       break;
1396     case MEP_OPERAND_CRPP :
1397       length = extract_normal (cd, ex_info, insn_value, 0, 0, 18, 5, 32, total_length, pc, & fields->f_ivc2_5u18);
1398       break;
1399     case MEP_OPERAND_CRQC :
1400       length = extract_normal (cd, ex_info, insn_value, 0, 0, 21, 5, 32, total_length, pc, & fields->f_ivc2_5u21);
1401       break;
1402     case MEP_OPERAND_CRQP :
1403       length = extract_normal (cd, ex_info, insn_value, 0, 0, 13, 5, 32, total_length, pc, & fields->f_ivc2_5u13);
1404       break;
1405     case MEP_OPERAND_CSRN :
1406       {
1407         length = extract_normal (cd, ex_info, insn_value, 0, 0, 15, 1, 32, total_length, pc, & fields->f_csrn_hi);
1408         if (length <= 0) break;
1409         length = extract_normal (cd, ex_info, insn_value, 0, 0, 8, 4, 32, total_length, pc, & fields->f_csrn_lo);
1410         if (length <= 0) break;
1411   FLD (f_csrn) = ((((FLD (f_csrn_hi)) << (4))) | (FLD (f_csrn_lo)));
1412       }
1413       break;
1414     case MEP_OPERAND_CSRN_IDX :
1415       {
1416         length = extract_normal (cd, ex_info, insn_value, 0, 0, 15, 1, 32, total_length, pc, & fields->f_csrn_hi);
1417         if (length <= 0) break;
1418         length = extract_normal (cd, ex_info, insn_value, 0, 0, 8, 4, 32, total_length, pc, & fields->f_csrn_lo);
1419         if (length <= 0) break;
1420   FLD (f_csrn) = ((((FLD (f_csrn_hi)) << (4))) | (FLD (f_csrn_lo)));
1421       }
1422       break;
1423     case MEP_OPERAND_DBG :
1424       break;
1425     case MEP_OPERAND_DEPC :
1426       break;
1427     case MEP_OPERAND_EPC :
1428       break;
1429     case MEP_OPERAND_EXC :
1430       break;
1431     case MEP_OPERAND_HI :
1432       break;
1433     case MEP_OPERAND_IMM16P0 :
1434       {
1435         length = extract_normal (cd, ex_info, insn_value, 0, 0, 0, 8, 32, total_length, pc, & fields->f_ivc2_8u0);
1436         if (length <= 0) break;
1437         length = extract_normal (cd, ex_info, insn_value, 0, 0, 20, 8, 32, total_length, pc, & fields->f_ivc2_8u20);
1438         if (length <= 0) break;
1439 {
1440   FLD (f_ivc2_imm16p0) = ((FLD (f_ivc2_8u20)) | (((FLD (f_ivc2_8u0)) << (8))));
1441 }
1442       }
1443       break;
1444     case MEP_OPERAND_IMM3P12 :
1445       length = extract_normal (cd, ex_info, insn_value, 0, 0, 12, 3, 32, total_length, pc, & fields->f_ivc2_3u12);
1446       break;
1447     case MEP_OPERAND_IMM3P25 :
1448       length = extract_normal (cd, ex_info, insn_value, 0, 0, 25, 3, 32, total_length, pc, & fields->f_ivc2_3u25);
1449       break;
1450     case MEP_OPERAND_IMM3P4 :
1451       length = extract_normal (cd, ex_info, insn_value, 0, 0, 4, 3, 32, total_length, pc, & fields->f_ivc2_3u4);
1452       break;
1453     case MEP_OPERAND_IMM3P5 :
1454       length = extract_normal (cd, ex_info, insn_value, 0, 0, 5, 3, 32, total_length, pc, & fields->f_ivc2_3u5);
1455       break;
1456     case MEP_OPERAND_IMM3P9 :
1457       length = extract_normal (cd, ex_info, insn_value, 0, 0, 9, 3, 32, total_length, pc, & fields->f_ivc2_3u9);
1458       break;
1459     case MEP_OPERAND_IMM4P10 :
1460       length = extract_normal (cd, ex_info, insn_value, 0, 0, 10, 4, 32, total_length, pc, & fields->f_ivc2_4u10);
1461       break;
1462     case MEP_OPERAND_IMM4P4 :
1463       length = extract_normal (cd, ex_info, insn_value, 0, 0, 4, 4, 32, total_length, pc, & fields->f_ivc2_4u4);
1464       break;
1465     case MEP_OPERAND_IMM4P8 :
1466       length = extract_normal (cd, ex_info, insn_value, 0, 0, 8, 4, 32, total_length, pc, & fields->f_ivc2_4u8);
1467       break;
1468     case MEP_OPERAND_IMM5P23 :
1469       length = extract_normal (cd, ex_info, insn_value, 0, 0, 23, 5, 32, total_length, pc, & fields->f_ivc2_5u23);
1470       break;
1471     case MEP_OPERAND_IMM5P3 :
1472       length = extract_normal (cd, ex_info, insn_value, 0, 0, 3, 5, 32, total_length, pc, & fields->f_ivc2_5u3);
1473       break;
1474     case MEP_OPERAND_IMM5P7 :
1475       length = extract_normal (cd, ex_info, insn_value, 0, 0, 7, 5, 32, total_length, pc, & fields->f_ivc2_5u7);
1476       break;
1477     case MEP_OPERAND_IMM5P8 :
1478       length = extract_normal (cd, ex_info, insn_value, 0, 0, 8, 5, 32, total_length, pc, & fields->f_ivc2_5u8);
1479       break;
1480     case MEP_OPERAND_IMM6P2 :
1481       length = extract_normal (cd, ex_info, insn_value, 0, 0, 2, 6, 32, total_length, pc, & fields->f_ivc2_6u2);
1482       break;
1483     case MEP_OPERAND_IMM6P6 :
1484       length = extract_normal (cd, ex_info, insn_value, 0, 0, 6, 6, 32, total_length, pc, & fields->f_ivc2_6u6);
1485       break;
1486     case MEP_OPERAND_IMM8P0 :
1487       length = extract_normal (cd, ex_info, insn_value, 0, 0, 0, 8, 32, total_length, pc, & fields->f_ivc2_8u0);
1488       break;
1489     case MEP_OPERAND_IMM8P20 :
1490       length = extract_normal (cd, ex_info, insn_value, 0, 0, 20, 8, 32, total_length, pc, & fields->f_ivc2_8u20);
1491       break;
1492     case MEP_OPERAND_IMM8P4 :
1493       length = extract_normal (cd, ex_info, insn_value, 0, 0, 4, 8, 32, total_length, pc, & fields->f_ivc2_8u4);
1494       break;
1495     case MEP_OPERAND_IVC_X_0_2 :
1496       length = extract_normal (cd, ex_info, insn_value, 0, 0, 0, 2, 32, total_length, pc, & fields->f_ivc2_2u0);
1497       break;
1498     case MEP_OPERAND_IVC_X_0_3 :
1499       length = extract_normal (cd, ex_info, insn_value, 0, 0, 0, 3, 32, total_length, pc, & fields->f_ivc2_3u0);
1500       break;
1501     case MEP_OPERAND_IVC_X_0_4 :
1502       length = extract_normal (cd, ex_info, insn_value, 0, 0, 0, 4, 32, total_length, pc, & fields->f_ivc2_4u0);
1503       break;
1504     case MEP_OPERAND_IVC_X_0_5 :
1505       length = extract_normal (cd, ex_info, insn_value, 0, 0, 0, 5, 32, total_length, pc, & fields->f_ivc2_5u0);
1506       break;
1507     case MEP_OPERAND_IVC_X_6_1 :
1508       length = extract_normal (cd, ex_info, insn_value, 0, 0, 6, 1, 32, total_length, pc, & fields->f_ivc2_1u6);
1509       break;
1510     case MEP_OPERAND_IVC_X_6_2 :
1511       length = extract_normal (cd, ex_info, insn_value, 0, 0, 6, 2, 32, total_length, pc, & fields->f_ivc2_2u6);
1512       break;
1513     case MEP_OPERAND_IVC_X_6_3 :
1514       length = extract_normal (cd, ex_info, insn_value, 0, 0, 6, 3, 32, total_length, pc, & fields->f_ivc2_3u6);
1515       break;
1516     case MEP_OPERAND_IVC2_ACC0_0 :
1517       break;
1518     case MEP_OPERAND_IVC2_ACC0_1 :
1519       break;
1520     case MEP_OPERAND_IVC2_ACC0_2 :
1521       break;
1522     case MEP_OPERAND_IVC2_ACC0_3 :
1523       break;
1524     case MEP_OPERAND_IVC2_ACC0_4 :
1525       break;
1526     case MEP_OPERAND_IVC2_ACC0_5 :
1527       break;
1528     case MEP_OPERAND_IVC2_ACC0_6 :
1529       break;
1530     case MEP_OPERAND_IVC2_ACC0_7 :
1531       break;
1532     case MEP_OPERAND_IVC2_ACC1_0 :
1533       break;
1534     case MEP_OPERAND_IVC2_ACC1_1 :
1535       break;
1536     case MEP_OPERAND_IVC2_ACC1_2 :
1537       break;
1538     case MEP_OPERAND_IVC2_ACC1_3 :
1539       break;
1540     case MEP_OPERAND_IVC2_ACC1_4 :
1541       break;
1542     case MEP_OPERAND_IVC2_ACC1_5 :
1543       break;
1544     case MEP_OPERAND_IVC2_ACC1_6 :
1545       break;
1546     case MEP_OPERAND_IVC2_ACC1_7 :
1547       break;
1548     case MEP_OPERAND_IVC2_CC :
1549       break;
1550     case MEP_OPERAND_IVC2_COFA0 :
1551       break;
1552     case MEP_OPERAND_IVC2_COFA1 :
1553       break;
1554     case MEP_OPERAND_IVC2_COFR0 :
1555       break;
1556     case MEP_OPERAND_IVC2_COFR1 :
1557       break;
1558     case MEP_OPERAND_IVC2_CSAR0 :
1559       break;
1560     case MEP_OPERAND_IVC2_CSAR1 :
1561       break;
1562     case MEP_OPERAND_IVC2C3CCRN :
1563       {
1564         length = extract_normal (cd, ex_info, insn_value, 0, 0, 28, 2, 32, total_length, pc, & fields->f_ivc2_ccrn_c3hi);
1565         if (length <= 0) break;
1566         length = extract_normal (cd, ex_info, insn_value, 0, 0, 4, 4, 32, total_length, pc, & fields->f_ivc2_ccrn_c3lo);
1567         if (length <= 0) break;
1568   FLD (f_ivc2_ccrn_c3) = ((((FLD (f_ivc2_ccrn_c3hi)) << (4))) | (FLD (f_ivc2_ccrn_c3lo)));
1569       }
1570       break;
1571     case MEP_OPERAND_IVC2CCRN :
1572       {
1573         length = extract_normal (cd, ex_info, insn_value, 0, 0, 20, 2, 32, total_length, pc, & fields->f_ivc2_ccrn_h2);
1574         if (length <= 0) break;
1575         length = extract_normal (cd, ex_info, insn_value, 0, 0, 0, 4, 32, total_length, pc, & fields->f_ivc2_ccrn_lo);
1576         if (length <= 0) break;
1577   FLD (f_ivc2_ccrn) = ((((FLD (f_ivc2_ccrn_h2)) << (4))) | (FLD (f_ivc2_ccrn_lo)));
1578       }
1579       break;
1580     case MEP_OPERAND_IVC2CRN :
1581       {
1582         length = extract_normal (cd, ex_info, insn_value, 0, 0, 20, 1, 32, total_length, pc, & fields->f_ivc2_ccrn_h1);
1583         if (length <= 0) break;
1584         length = extract_normal (cd, ex_info, insn_value, 0, 0, 0, 4, 32, total_length, pc, & fields->f_ivc2_ccrn_lo);
1585         if (length <= 0) break;
1586   FLD (f_ivc2_crnx) = ((((FLD (f_ivc2_ccrn_h1)) << (4))) | (FLD (f_ivc2_ccrn_lo)));
1587       }
1588       break;
1589     case MEP_OPERAND_IVC2RM :
1590       length = extract_normal (cd, ex_info, insn_value, 0, 0, 4, 4, 32, total_length, pc, & fields->f_ivc2_crm);
1591       break;
1592     case MEP_OPERAND_LO :
1593       break;
1594     case MEP_OPERAND_LP :
1595       break;
1596     case MEP_OPERAND_MB0 :
1597       break;
1598     case MEP_OPERAND_MB1 :
1599       break;
1600     case MEP_OPERAND_ME0 :
1601       break;
1602     case MEP_OPERAND_ME1 :
1603       break;
1604     case MEP_OPERAND_NPC :
1605       break;
1606     case MEP_OPERAND_OPT :
1607       break;
1608     case MEP_OPERAND_PCABS24A2 :
1609       {
1610         length = extract_normal (cd, ex_info, insn_value, 0, 0, 16, 16, 32, total_length, pc, & fields->f_24u5a2n_hi);
1611         if (length <= 0) break;
1612         length = extract_normal (cd, ex_info, insn_value, 0, 0, 5, 7, 32, total_length, pc, & fields->f_24u5a2n_lo);
1613         if (length <= 0) break;
1614   FLD (f_24u5a2n) = ((((FLD (f_24u5a2n_hi)) << (8))) | (((FLD (f_24u5a2n_lo)) << (1))));
1615       }
1616       break;
1617     case MEP_OPERAND_PCREL12A2 :
1618       {
1619         long value;
1620         length = extract_normal (cd, ex_info, insn_value, 0|(1<<CGEN_IFLD_SIGNED)|(1<<CGEN_IFLD_PCREL_ADDR), 0, 4, 11, 32, total_length, pc, & value);
1621         value = ((((value) << (1))) + (pc));
1622         fields->f_12s4a2 = value;
1623       }
1624       break;
1625     case MEP_OPERAND_PCREL17A2 :
1626       {
1627         long value;
1628         length = extract_normal (cd, ex_info, insn_value, 0|(1<<CGEN_IFLD_SIGNED)|(1<<CGEN_IFLD_PCREL_ADDR), 0, 16, 16, 32, total_length, pc, & value);
1629         value = ((((value) << (1))) + (pc));
1630         fields->f_17s16a2 = value;
1631       }
1632       break;
1633     case MEP_OPERAND_PCREL24A2 :
1634       {
1635         length = extract_normal (cd, ex_info, insn_value, 0|(1<<CGEN_IFLD_SIGNED)|(1<<CGEN_IFLD_PCREL_ADDR), 0, 16, 16, 32, total_length, pc, & fields->f_24s5a2n_hi);
1636         if (length <= 0) break;
1637         length = extract_normal (cd, ex_info, insn_value, 0|(1<<CGEN_IFLD_PCREL_ADDR), 0, 5, 7, 32, total_length, pc, & fields->f_24s5a2n_lo);
1638         if (length <= 0) break;
1639   FLD (f_24s5a2n) = ((((((FLD (f_24s5a2n_hi)) << (8))) | (((FLD (f_24s5a2n_lo)) << (1))))) + (pc));
1640       }
1641       break;
1642     case MEP_OPERAND_PCREL8A2 :
1643       {
1644         long value;
1645         length = extract_normal (cd, ex_info, insn_value, 0|(1<<CGEN_IFLD_SIGNED)|(1<<CGEN_IFLD_PCREL_ADDR), 0, 8, 7, 32, total_length, pc, & value);
1646         value = ((((value) << (1))) + (pc));
1647         fields->f_8s8a2 = value;
1648       }
1649       break;
1650     case MEP_OPERAND_PSW :
1651       break;
1652     case MEP_OPERAND_R0 :
1653       break;
1654     case MEP_OPERAND_R1 :
1655       break;
1656     case MEP_OPERAND_RL :
1657       length = extract_normal (cd, ex_info, insn_value, 0, 0, 12, 4, 32, total_length, pc, & fields->f_rl);
1658       break;
1659     case MEP_OPERAND_RL5 :
1660       length = extract_normal (cd, ex_info, insn_value, 0, 0, 20, 4, 32, total_length, pc, & fields->f_rl5);
1661       break;
1662     case MEP_OPERAND_RM :
1663       length = extract_normal (cd, ex_info, insn_value, 0, 0, 8, 4, 32, total_length, pc, & fields->f_rm);
1664       break;
1665     case MEP_OPERAND_RMA :
1666       length = extract_normal (cd, ex_info, insn_value, 0, 0, 8, 4, 32, total_length, pc, & fields->f_rm);
1667       break;
1668     case MEP_OPERAND_RN :
1669       length = extract_normal (cd, ex_info, insn_value, 0, 0, 4, 4, 32, total_length, pc, & fields->f_rn);
1670       break;
1671     case MEP_OPERAND_RN3 :
1672       length = extract_normal (cd, ex_info, insn_value, 0, 0, 5, 3, 32, total_length, pc, & fields->f_rn3);
1673       break;
1674     case MEP_OPERAND_RN3C :
1675       length = extract_normal (cd, ex_info, insn_value, 0, 0, 5, 3, 32, total_length, pc, & fields->f_rn3);
1676       break;
1677     case MEP_OPERAND_RN3L :
1678       length = extract_normal (cd, ex_info, insn_value, 0, 0, 5, 3, 32, total_length, pc, & fields->f_rn3);
1679       break;
1680     case MEP_OPERAND_RN3S :
1681       length = extract_normal (cd, ex_info, insn_value, 0, 0, 5, 3, 32, total_length, pc, & fields->f_rn3);
1682       break;
1683     case MEP_OPERAND_RN3UC :
1684       length = extract_normal (cd, ex_info, insn_value, 0, 0, 5, 3, 32, total_length, pc, & fields->f_rn3);
1685       break;
1686     case MEP_OPERAND_RN3UL :
1687       length = extract_normal (cd, ex_info, insn_value, 0, 0, 5, 3, 32, total_length, pc, & fields->f_rn3);
1688       break;
1689     case MEP_OPERAND_RN3US :
1690       length = extract_normal (cd, ex_info, insn_value, 0, 0, 5, 3, 32, total_length, pc, & fields->f_rn3);
1691       break;
1692     case MEP_OPERAND_RNC :
1693       length = extract_normal (cd, ex_info, insn_value, 0, 0, 4, 4, 32, total_length, pc, & fields->f_rn);
1694       break;
1695     case MEP_OPERAND_RNL :
1696       length = extract_normal (cd, ex_info, insn_value, 0, 0, 4, 4, 32, total_length, pc, & fields->f_rn);
1697       break;
1698     case MEP_OPERAND_RNS :
1699       length = extract_normal (cd, ex_info, insn_value, 0, 0, 4, 4, 32, total_length, pc, & fields->f_rn);
1700       break;
1701     case MEP_OPERAND_RNUC :
1702       length = extract_normal (cd, ex_info, insn_value, 0, 0, 4, 4, 32, total_length, pc, & fields->f_rn);
1703       break;
1704     case MEP_OPERAND_RNUL :
1705       length = extract_normal (cd, ex_info, insn_value, 0, 0, 4, 4, 32, total_length, pc, & fields->f_rn);
1706       break;
1707     case MEP_OPERAND_RNUS :
1708       length = extract_normal (cd, ex_info, insn_value, 0, 0, 4, 4, 32, total_length, pc, & fields->f_rn);
1709       break;
1710     case MEP_OPERAND_SAR :
1711       break;
1712     case MEP_OPERAND_SDISP16 :
1713       length = extract_normal (cd, ex_info, insn_value, 0|(1<<CGEN_IFLD_SIGNED), 0, 16, 16, 32, total_length, pc, & fields->f_16s16);
1714       break;
1715     case MEP_OPERAND_SIMM16 :
1716       length = extract_normal (cd, ex_info, insn_value, 0|(1<<CGEN_IFLD_SIGNED), 0, 16, 16, 32, total_length, pc, & fields->f_16s16);
1717       break;
1718     case MEP_OPERAND_SIMM16P0 :
1719       {
1720         length = extract_normal (cd, ex_info, insn_value, 0, 0, 0, 8, 32, total_length, pc, & fields->f_ivc2_8u0);
1721         if (length <= 0) break;
1722         length = extract_normal (cd, ex_info, insn_value, 0, 0, 20, 8, 32, total_length, pc, & fields->f_ivc2_8u20);
1723         if (length <= 0) break;
1724 {
1725   FLD (f_ivc2_simm16p0) = ((FLD (f_ivc2_8u20)) | (((FLD (f_ivc2_8u0)) << (8))));
1726 }
1727       }
1728       break;
1729     case MEP_OPERAND_SIMM6 :
1730       length = extract_normal (cd, ex_info, insn_value, 0|(1<<CGEN_IFLD_SIGNED), 0, 8, 6, 32, total_length, pc, & fields->f_6s8);
1731       break;
1732     case MEP_OPERAND_SIMM8 :
1733       length = extract_normal (cd, ex_info, insn_value, 0|(1<<CGEN_IFLD_SIGNED), 0, 8, 8, 32, total_length, pc, & fields->f_8s8);
1734       break;
1735     case MEP_OPERAND_SIMM8P0 :
1736       length = extract_normal (cd, ex_info, insn_value, 0|(1<<CGEN_IFLD_SIGNED), 0, 0, 8, 32, total_length, pc, & fields->f_ivc2_8s0);
1737       break;
1738     case MEP_OPERAND_SIMM8P20 :
1739       length = extract_normal (cd, ex_info, insn_value, 0|(1<<CGEN_IFLD_SIGNED), 0, 20, 8, 32, total_length, pc, & fields->f_ivc2_8s20);
1740       break;
1741     case MEP_OPERAND_SIMM8P4 :
1742       length = extract_normal (cd, ex_info, insn_value, 0|(1<<CGEN_IFLD_SIGNED), 0, 4, 8, 32, total_length, pc, & fields->f_ivc2_8s4);
1743       break;
1744     case MEP_OPERAND_SP :
1745       break;
1746     case MEP_OPERAND_SPR :
1747       break;
1748     case MEP_OPERAND_TP :
1749       break;
1750     case MEP_OPERAND_TPR :
1751       break;
1752     case MEP_OPERAND_UDISP2 :
1753       length = extract_normal (cd, ex_info, insn_value, 0, 0, 6, 2, 32, total_length, pc, & fields->f_2u6);
1754       break;
1755     case MEP_OPERAND_UDISP7 :
1756       length = extract_normal (cd, ex_info, insn_value, 0, 0, 9, 7, 32, total_length, pc, & fields->f_7u9);
1757       break;
1758     case MEP_OPERAND_UDISP7A2 :
1759       {
1760         long value;
1761         length = extract_normal (cd, ex_info, insn_value, 0, 0, 9, 6, 32, total_length, pc, & value);
1762         value = ((value) << (1));
1763         fields->f_7u9a2 = value;
1764       }
1765       break;
1766     case MEP_OPERAND_UDISP7A4 :
1767       {
1768         long value;
1769         length = extract_normal (cd, ex_info, insn_value, 0, 0, 9, 5, 32, total_length, pc, & value);
1770         value = ((value) << (2));
1771         fields->f_7u9a4 = value;
1772       }
1773       break;
1774     case MEP_OPERAND_UIMM16 :
1775       length = extract_normal (cd, ex_info, insn_value, 0, 0, 16, 16, 32, total_length, pc, & fields->f_16u16);
1776       break;
1777     case MEP_OPERAND_UIMM2 :
1778       length = extract_normal (cd, ex_info, insn_value, 0, 0, 10, 2, 32, total_length, pc, & fields->f_2u10);
1779       break;
1780     case MEP_OPERAND_UIMM24 :
1781       {
1782         length = extract_normal (cd, ex_info, insn_value, 0, 0, 16, 16, 32, total_length, pc, & fields->f_24u8n_hi);
1783         if (length <= 0) break;
1784         length = extract_normal (cd, ex_info, insn_value, 0, 0, 8, 8, 32, total_length, pc, & fields->f_24u8n_lo);
1785         if (length <= 0) break;
1786   FLD (f_24u8n) = ((((FLD (f_24u8n_hi)) << (8))) | (FLD (f_24u8n_lo)));
1787       }
1788       break;
1789     case MEP_OPERAND_UIMM3 :
1790       length = extract_normal (cd, ex_info, insn_value, 0, 0, 5, 3, 32, total_length, pc, & fields->f_3u5);
1791       break;
1792     case MEP_OPERAND_UIMM4 :
1793       length = extract_normal (cd, ex_info, insn_value, 0, 0, 8, 4, 32, total_length, pc, & fields->f_4u8);
1794       break;
1795     case MEP_OPERAND_UIMM5 :
1796       length = extract_normal (cd, ex_info, insn_value, 0, 0, 8, 5, 32, total_length, pc, & fields->f_5u8);
1797       break;
1798     case MEP_OPERAND_UIMM7A4 :
1799       {
1800         long value;
1801         length = extract_normal (cd, ex_info, insn_value, 0, 0, 9, 5, 32, total_length, pc, & value);
1802         value = ((value) << (2));
1803         fields->f_7u9a4 = value;
1804       }
1805       break;
1806     case MEP_OPERAND_ZERO :
1807       break;
1808
1809     default :
1810       /* xgettext:c-format */
1811       fprintf (stderr, _("Unrecognized field %d while decoding insn.\n"),
1812                opindex);
1813       abort ();
1814     }
1815
1816   return length;
1817 }
1818
1819 cgen_insert_fn * const mep_cgen_insert_handlers[] =
1820 {
1821   insert_insn_normal,
1822 };
1823
1824 cgen_extract_fn * const mep_cgen_extract_handlers[] =
1825 {
1826   extract_insn_normal,
1827 };
1828
1829 int mep_cgen_get_int_operand     (CGEN_CPU_DESC, int, const CGEN_FIELDS *);
1830 bfd_vma mep_cgen_get_vma_operand (CGEN_CPU_DESC, int, const CGEN_FIELDS *);
1831
1832 /* Getting values from cgen_fields is handled by a collection of functions.
1833    They are distinguished by the type of the VALUE argument they return.
1834    TODO: floating point, inlining support, remove cases where result type
1835    not appropriate.  */
1836
1837 int
1838 mep_cgen_get_int_operand (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED,
1839                              int opindex,
1840                              const CGEN_FIELDS * fields)
1841 {
1842   int value;
1843
1844   switch (opindex)
1845     {
1846     case MEP_OPERAND_ADDR24A4 :
1847       value = fields->f_24u8a4n;
1848       break;
1849     case MEP_OPERAND_C5RMUIMM20 :
1850       value = fields->f_c5_rmuimm20;
1851       break;
1852     case MEP_OPERAND_C5RNMUIMM24 :
1853       value = fields->f_c5_rnmuimm24;
1854       break;
1855     case MEP_OPERAND_CALLNUM :
1856       value = fields->f_callnum;
1857       break;
1858     case MEP_OPERAND_CCCC :
1859       value = fields->f_rm;
1860       break;
1861     case MEP_OPERAND_CCRN :
1862       value = fields->f_ccrn;
1863       break;
1864     case MEP_OPERAND_CDISP10 :
1865       value = fields->f_cdisp10;
1866       break;
1867     case MEP_OPERAND_CDISP10A2 :
1868       value = fields->f_cdisp10;
1869       break;
1870     case MEP_OPERAND_CDISP10A4 :
1871       value = fields->f_cdisp10;
1872       break;
1873     case MEP_OPERAND_CDISP10A8 :
1874       value = fields->f_cdisp10;
1875       break;
1876     case MEP_OPERAND_CDISP12 :
1877       value = fields->f_12s20;
1878       break;
1879     case MEP_OPERAND_CIMM4 :
1880       value = fields->f_rn;
1881       break;
1882     case MEP_OPERAND_CIMM5 :
1883       value = fields->f_5u24;
1884       break;
1885     case MEP_OPERAND_CODE16 :
1886       value = fields->f_16u16;
1887       break;
1888     case MEP_OPERAND_CODE24 :
1889       value = fields->f_24u4n;
1890       break;
1891     case MEP_OPERAND_CP_FLAG :
1892       value = 0;
1893       break;
1894     case MEP_OPERAND_CRN :
1895       value = fields->f_crn;
1896       break;
1897     case MEP_OPERAND_CRN64 :
1898       value = fields->f_crn;
1899       break;
1900     case MEP_OPERAND_CRNX :
1901       value = fields->f_crnx;
1902       break;
1903     case MEP_OPERAND_CRNX64 :
1904       value = fields->f_crnx;
1905       break;
1906     case MEP_OPERAND_CROC :
1907       value = fields->f_ivc2_5u7;
1908       break;
1909     case MEP_OPERAND_CROP :
1910       value = fields->f_ivc2_5u23;
1911       break;
1912     case MEP_OPERAND_CRPC :
1913       value = fields->f_ivc2_5u26;
1914       break;
1915     case MEP_OPERAND_CRPP :
1916       value = fields->f_ivc2_5u18;
1917       break;
1918     case MEP_OPERAND_CRQC :
1919       value = fields->f_ivc2_5u21;
1920       break;
1921     case MEP_OPERAND_CRQP :
1922       value = fields->f_ivc2_5u13;
1923       break;
1924     case MEP_OPERAND_CSRN :
1925       value = fields->f_csrn;
1926       break;
1927     case MEP_OPERAND_CSRN_IDX :
1928       value = fields->f_csrn;
1929       break;
1930     case MEP_OPERAND_DBG :
1931       value = 0;
1932       break;
1933     case MEP_OPERAND_DEPC :
1934       value = 0;
1935       break;
1936     case MEP_OPERAND_EPC :
1937       value = 0;
1938       break;
1939     case MEP_OPERAND_EXC :
1940       value = 0;
1941       break;
1942     case MEP_OPERAND_HI :
1943       value = 0;
1944       break;
1945     case MEP_OPERAND_IMM16P0 :
1946       value = fields->f_ivc2_imm16p0;
1947       break;
1948     case MEP_OPERAND_IMM3P12 :
1949       value = fields->f_ivc2_3u12;
1950       break;
1951     case MEP_OPERAND_IMM3P25 :
1952       value = fields->f_ivc2_3u25;
1953       break;
1954     case MEP_OPERAND_IMM3P4 :
1955       value = fields->f_ivc2_3u4;
1956       break;
1957     case MEP_OPERAND_IMM3P5 :
1958       value = fields->f_ivc2_3u5;
1959       break;
1960     case MEP_OPERAND_IMM3P9 :
1961       value = fields->f_ivc2_3u9;
1962       break;
1963     case MEP_OPERAND_IMM4P10 :
1964       value = fields->f_ivc2_4u10;
1965       break;
1966     case MEP_OPERAND_IMM4P4 :
1967       value = fields->f_ivc2_4u4;
1968       break;
1969     case MEP_OPERAND_IMM4P8 :
1970       value = fields->f_ivc2_4u8;
1971       break;
1972     case MEP_OPERAND_IMM5P23 :
1973       value = fields->f_ivc2_5u23;
1974       break;
1975     case MEP_OPERAND_IMM5P3 :
1976       value = fields->f_ivc2_5u3;
1977       break;
1978     case MEP_OPERAND_IMM5P7 :
1979       value = fields->f_ivc2_5u7;
1980       break;
1981     case MEP_OPERAND_IMM5P8 :
1982       value = fields->f_ivc2_5u8;
1983       break;
1984     case MEP_OPERAND_IMM6P2 :
1985       value = fields->f_ivc2_6u2;
1986       break;
1987     case MEP_OPERAND_IMM6P6 :
1988       value = fields->f_ivc2_6u6;
1989       break;
1990     case MEP_OPERAND_IMM8P0 :
1991       value = fields->f_ivc2_8u0;
1992       break;
1993     case MEP_OPERAND_IMM8P20 :
1994       value = fields->f_ivc2_8u20;
1995       break;
1996     case MEP_OPERAND_IMM8P4 :
1997       value = fields->f_ivc2_8u4;
1998       break;
1999     case MEP_OPERAND_IVC_X_0_2 :
2000       value = fields->f_ivc2_2u0;
2001       break;
2002     case MEP_OPERAND_IVC_X_0_3 :
2003       value = fields->f_ivc2_3u0;
2004       break;
2005     case MEP_OPERAND_IVC_X_0_4 :
2006       value = fields->f_ivc2_4u0;
2007       break;
2008     case MEP_OPERAND_IVC_X_0_5 :
2009       value = fields->f_ivc2_5u0;
2010       break;
2011     case MEP_OPERAND_IVC_X_6_1 :
2012       value = fields->f_ivc2_1u6;
2013       break;
2014     case MEP_OPERAND_IVC_X_6_2 :
2015       value = fields->f_ivc2_2u6;
2016       break;
2017     case MEP_OPERAND_IVC_X_6_3 :
2018       value = fields->f_ivc2_3u6;
2019       break;
2020     case MEP_OPERAND_IVC2_ACC0_0 :
2021       value = 0;
2022       break;
2023     case MEP_OPERAND_IVC2_ACC0_1 :
2024       value = 0;
2025       break;
2026     case MEP_OPERAND_IVC2_ACC0_2 :
2027       value = 0;
2028       break;
2029     case MEP_OPERAND_IVC2_ACC0_3 :
2030       value = 0;
2031       break;
2032     case MEP_OPERAND_IVC2_ACC0_4 :
2033       value = 0;
2034       break;
2035     case MEP_OPERAND_IVC2_ACC0_5 :
2036       value = 0;
2037       break;
2038     case MEP_OPERAND_IVC2_ACC0_6 :
2039       value = 0;
2040       break;
2041     case MEP_OPERAND_IVC2_ACC0_7 :
2042       value = 0;
2043       break;
2044     case MEP_OPERAND_IVC2_ACC1_0 :
2045       value = 0;
2046       break;
2047     case MEP_OPERAND_IVC2_ACC1_1 :
2048       value = 0;
2049       break;
2050     case MEP_OPERAND_IVC2_ACC1_2 :
2051       value = 0;
2052       break;
2053     case MEP_OPERAND_IVC2_ACC1_3 :
2054       value = 0;
2055       break;
2056     case MEP_OPERAND_IVC2_ACC1_4 :
2057       value = 0;
2058       break;
2059     case MEP_OPERAND_IVC2_ACC1_5 :
2060       value = 0;
2061       break;
2062     case MEP_OPERAND_IVC2_ACC1_6 :
2063       value = 0;
2064       break;
2065     case MEP_OPERAND_IVC2_ACC1_7 :
2066       value = 0;
2067       break;
2068     case MEP_OPERAND_IVC2_CC :
2069       value = 0;
2070       break;
2071     case MEP_OPERAND_IVC2_COFA0 :
2072       value = 0;
2073       break;
2074     case MEP_OPERAND_IVC2_COFA1 :
2075       value = 0;
2076       break;
2077     case MEP_OPERAND_IVC2_COFR0 :
2078       value = 0;
2079       break;
2080     case MEP_OPERAND_IVC2_COFR1 :
2081       value = 0;
2082       break;
2083     case MEP_OPERAND_IVC2_CSAR0 :
2084       value = 0;
2085       break;
2086     case MEP_OPERAND_IVC2_CSAR1 :
2087       value = 0;
2088       break;
2089     case MEP_OPERAND_IVC2C3CCRN :
2090       value = fields->f_ivc2_ccrn_c3;
2091       break;
2092     case MEP_OPERAND_IVC2CCRN :
2093       value = fields->f_ivc2_ccrn;
2094       break;
2095     case MEP_OPERAND_IVC2CRN :
2096       value = fields->f_ivc2_crnx;
2097       break;
2098     case MEP_OPERAND_IVC2RM :
2099       value = fields->f_ivc2_crm;
2100       break;
2101     case MEP_OPERAND_LO :
2102       value = 0;
2103       break;
2104     case MEP_OPERAND_LP :
2105       value = 0;
2106       break;
2107     case MEP_OPERAND_MB0 :
2108       value = 0;
2109       break;
2110     case MEP_OPERAND_MB1 :
2111       value = 0;
2112       break;
2113     case MEP_OPERAND_ME0 :
2114       value = 0;
2115       break;
2116     case MEP_OPERAND_ME1 :
2117       value = 0;
2118       break;
2119     case MEP_OPERAND_NPC :
2120       value = 0;
2121       break;
2122     case MEP_OPERAND_OPT :
2123       value = 0;
2124       break;
2125     case MEP_OPERAND_PCABS24A2 :
2126       value = fields->f_24u5a2n;
2127       break;
2128     case MEP_OPERAND_PCREL12A2 :
2129       value = fields->f_12s4a2;
2130       break;
2131     case MEP_OPERAND_PCREL17A2 :
2132       value = fields->f_17s16a2;
2133       break;
2134     case MEP_OPERAND_PCREL24A2 :
2135       value = fields->f_24s5a2n;
2136       break;
2137     case MEP_OPERAND_PCREL8A2 :
2138       value = fields->f_8s8a2;
2139       break;
2140     case MEP_OPERAND_PSW :
2141       value = 0;
2142       break;
2143     case MEP_OPERAND_R0 :
2144       value = 0;
2145       break;
2146     case MEP_OPERAND_R1 :
2147       value = 0;
2148       break;
2149     case MEP_OPERAND_RL :
2150       value = fields->f_rl;
2151       break;
2152     case MEP_OPERAND_RL5 :
2153       value = fields->f_rl5;
2154       break;
2155     case MEP_OPERAND_RM :
2156       value = fields->f_rm;
2157       break;
2158     case MEP_OPERAND_RMA :
2159       value = fields->f_rm;
2160       break;
2161     case MEP_OPERAND_RN :
2162       value = fields->f_rn;
2163       break;
2164     case MEP_OPERAND_RN3 :
2165       value = fields->f_rn3;
2166       break;
2167     case MEP_OPERAND_RN3C :
2168       value = fields->f_rn3;
2169       break;
2170     case MEP_OPERAND_RN3L :
2171       value = fields->f_rn3;
2172       break;
2173     case MEP_OPERAND_RN3S :
2174       value = fields->f_rn3;
2175       break;
2176     case MEP_OPERAND_RN3UC :
2177       value = fields->f_rn3;
2178       break;
2179     case MEP_OPERAND_RN3UL :
2180       value = fields->f_rn3;
2181       break;
2182     case MEP_OPERAND_RN3US :
2183       value = fields->f_rn3;
2184       break;
2185     case MEP_OPERAND_RNC :
2186       value = fields->f_rn;
2187       break;
2188     case MEP_OPERAND_RNL :
2189       value = fields->f_rn;
2190       break;
2191     case MEP_OPERAND_RNS :
2192       value = fields->f_rn;
2193       break;
2194     case MEP_OPERAND_RNUC :
2195       value = fields->f_rn;
2196       break;
2197     case MEP_OPERAND_RNUL :
2198       value = fields->f_rn;
2199       break;
2200     case MEP_OPERAND_RNUS :
2201       value = fields->f_rn;
2202       break;
2203     case MEP_OPERAND_SAR :
2204       value = 0;
2205       break;
2206     case MEP_OPERAND_SDISP16 :
2207       value = fields->f_16s16;
2208       break;
2209     case MEP_OPERAND_SIMM16 :
2210       value = fields->f_16s16;
2211       break;
2212     case MEP_OPERAND_SIMM16P0 :
2213       value = fields->f_ivc2_simm16p0;
2214       break;
2215     case MEP_OPERAND_SIMM6 :
2216       value = fields->f_6s8;
2217       break;
2218     case MEP_OPERAND_SIMM8 :
2219       value = fields->f_8s8;
2220       break;
2221     case MEP_OPERAND_SIMM8P0 :
2222       value = fields->f_ivc2_8s0;
2223       break;
2224     case MEP_OPERAND_SIMM8P20 :
2225       value = fields->f_ivc2_8s20;
2226       break;
2227     case MEP_OPERAND_SIMM8P4 :
2228       value = fields->f_ivc2_8s4;
2229       break;
2230     case MEP_OPERAND_SP :
2231       value = 0;
2232       break;
2233     case MEP_OPERAND_SPR :
2234       value = 0;
2235       break;
2236     case MEP_OPERAND_TP :
2237       value = 0;
2238       break;
2239     case MEP_OPERAND_TPR :
2240       value = 0;
2241       break;
2242     case MEP_OPERAND_UDISP2 :
2243       value = fields->f_2u6;
2244       break;
2245     case MEP_OPERAND_UDISP7 :
2246       value = fields->f_7u9;
2247       break;
2248     case MEP_OPERAND_UDISP7A2 :
2249       value = fields->f_7u9a2;
2250       break;
2251     case MEP_OPERAND_UDISP7A4 :
2252       value = fields->f_7u9a4;
2253       break;
2254     case MEP_OPERAND_UIMM16 :
2255       value = fields->f_16u16;
2256       break;
2257     case MEP_OPERAND_UIMM2 :
2258       value = fields->f_2u10;
2259       break;
2260     case MEP_OPERAND_UIMM24 :
2261       value = fields->f_24u8n;
2262       break;
2263     case MEP_OPERAND_UIMM3 :
2264       value = fields->f_3u5;
2265       break;
2266     case MEP_OPERAND_UIMM4 :
2267       value = fields->f_4u8;
2268       break;
2269     case MEP_OPERAND_UIMM5 :
2270       value = fields->f_5u8;
2271       break;
2272     case MEP_OPERAND_UIMM7A4 :
2273       value = fields->f_7u9a4;
2274       break;
2275     case MEP_OPERAND_ZERO :
2276       value = 0;
2277       break;
2278
2279     default :
2280       /* xgettext:c-format */
2281       fprintf (stderr, _("Unrecognized field %d while getting int operand.\n"),
2282                        opindex);
2283       abort ();
2284   }
2285
2286   return value;
2287 }
2288
2289 bfd_vma
2290 mep_cgen_get_vma_operand (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED,
2291                              int opindex,
2292                              const CGEN_FIELDS * fields)
2293 {
2294   bfd_vma value;
2295
2296   switch (opindex)
2297     {
2298     case MEP_OPERAND_ADDR24A4 :
2299       value = fields->f_24u8a4n;
2300       break;
2301     case MEP_OPERAND_C5RMUIMM20 :
2302       value = fields->f_c5_rmuimm20;
2303       break;
2304     case MEP_OPERAND_C5RNMUIMM24 :
2305       value = fields->f_c5_rnmuimm24;
2306       break;
2307     case MEP_OPERAND_CALLNUM :
2308       value = fields->f_callnum;
2309       break;
2310     case MEP_OPERAND_CCCC :
2311       value = fields->f_rm;
2312       break;
2313     case MEP_OPERAND_CCRN :
2314       value = fields->f_ccrn;
2315       break;
2316     case MEP_OPERAND_CDISP10 :
2317       value = fields->f_cdisp10;
2318       break;
2319     case MEP_OPERAND_CDISP10A2 :
2320       value = fields->f_cdisp10;
2321       break;
2322     case MEP_OPERAND_CDISP10A4 :
2323       value = fields->f_cdisp10;
2324       break;
2325     case MEP_OPERAND_CDISP10A8 :
2326       value = fields->f_cdisp10;
2327       break;
2328     case MEP_OPERAND_CDISP12 :
2329       value = fields->f_12s20;
2330       break;
2331     case MEP_OPERAND_CIMM4 :
2332       value = fields->f_rn;
2333       break;
2334     case MEP_OPERAND_CIMM5 :
2335       value = fields->f_5u24;
2336       break;
2337     case MEP_OPERAND_CODE16 :
2338       value = fields->f_16u16;
2339       break;
2340     case MEP_OPERAND_CODE24 :
2341       value = fields->f_24u4n;
2342       break;
2343     case MEP_OPERAND_CP_FLAG :
2344       value = 0;
2345       break;
2346     case MEP_OPERAND_CRN :
2347       value = fields->f_crn;
2348       break;
2349     case MEP_OPERAND_CRN64 :
2350       value = fields->f_crn;
2351       break;
2352     case MEP_OPERAND_CRNX :
2353       value = fields->f_crnx;
2354       break;
2355     case MEP_OPERAND_CRNX64 :
2356       value = fields->f_crnx;
2357       break;
2358     case MEP_OPERAND_CROC :
2359       value = fields->f_ivc2_5u7;
2360       break;
2361     case MEP_OPERAND_CROP :
2362       value = fields->f_ivc2_5u23;
2363       break;
2364     case MEP_OPERAND_CRPC :
2365       value = fields->f_ivc2_5u26;
2366       break;
2367     case MEP_OPERAND_CRPP :
2368       value = fields->f_ivc2_5u18;
2369       break;
2370     case MEP_OPERAND_CRQC :
2371       value = fields->f_ivc2_5u21;
2372       break;
2373     case MEP_OPERAND_CRQP :
2374       value = fields->f_ivc2_5u13;
2375       break;
2376     case MEP_OPERAND_CSRN :
2377       value = fields->f_csrn;
2378       break;
2379     case MEP_OPERAND_CSRN_IDX :
2380       value = fields->f_csrn;
2381       break;
2382     case MEP_OPERAND_DBG :
2383       value = 0;
2384       break;
2385     case MEP_OPERAND_DEPC :
2386       value = 0;
2387       break;
2388     case MEP_OPERAND_EPC :
2389       value = 0;
2390       break;
2391     case MEP_OPERAND_EXC :
2392       value = 0;
2393       break;
2394     case MEP_OPERAND_HI :
2395       value = 0;
2396       break;
2397     case MEP_OPERAND_IMM16P0 :
2398       value = fields->f_ivc2_imm16p0;
2399       break;
2400     case MEP_OPERAND_IMM3P12 :
2401       value = fields->f_ivc2_3u12;
2402       break;
2403     case MEP_OPERAND_IMM3P25 :
2404       value = fields->f_ivc2_3u25;
2405       break;
2406     case MEP_OPERAND_IMM3P4 :
2407       value = fields->f_ivc2_3u4;
2408       break;
2409     case MEP_OPERAND_IMM3P5 :
2410       value = fields->f_ivc2_3u5;
2411       break;
2412     case MEP_OPERAND_IMM3P9 :
2413       value = fields->f_ivc2_3u9;
2414       break;
2415     case MEP_OPERAND_IMM4P10 :
2416       value = fields->f_ivc2_4u10;
2417       break;
2418     case MEP_OPERAND_IMM4P4 :
2419       value = fields->f_ivc2_4u4;
2420       break;
2421     case MEP_OPERAND_IMM4P8 :
2422       value = fields->f_ivc2_4u8;
2423       break;
2424     case MEP_OPERAND_IMM5P23 :
2425       value = fields->f_ivc2_5u23;
2426       break;
2427     case MEP_OPERAND_IMM5P3 :
2428       value = fields->f_ivc2_5u3;
2429       break;
2430     case MEP_OPERAND_IMM5P7 :
2431       value = fields->f_ivc2_5u7;
2432       break;
2433     case MEP_OPERAND_IMM5P8 :
2434       value = fields->f_ivc2_5u8;
2435       break;
2436     case MEP_OPERAND_IMM6P2 :
2437       value = fields->f_ivc2_6u2;
2438       break;
2439     case MEP_OPERAND_IMM6P6 :
2440       value = fields->f_ivc2_6u6;
2441       break;
2442     case MEP_OPERAND_IMM8P0 :
2443       value = fields->f_ivc2_8u0;
2444       break;
2445     case MEP_OPERAND_IMM8P20 :
2446       value = fields->f_ivc2_8u20;
2447       break;
2448     case MEP_OPERAND_IMM8P4 :
2449       value = fields->f_ivc2_8u4;
2450       break;
2451     case MEP_OPERAND_IVC_X_0_2 :
2452       value = fields->f_ivc2_2u0;
2453       break;
2454     case MEP_OPERAND_IVC_X_0_3 :
2455       value = fields->f_ivc2_3u0;
2456       break;
2457     case MEP_OPERAND_IVC_X_0_4 :
2458       value = fields->f_ivc2_4u0;
2459       break;
2460     case MEP_OPERAND_IVC_X_0_5 :
2461       value = fields->f_ivc2_5u0;
2462       break;
2463     case MEP_OPERAND_IVC_X_6_1 :
2464       value = fields->f_ivc2_1u6;
2465       break;
2466     case MEP_OPERAND_IVC_X_6_2 :
2467       value = fields->f_ivc2_2u6;
2468       break;
2469     case MEP_OPERAND_IVC_X_6_3 :
2470       value = fields->f_ivc2_3u6;
2471       break;
2472     case MEP_OPERAND_IVC2_ACC0_0 :
2473       value = 0;
2474       break;
2475     case MEP_OPERAND_IVC2_ACC0_1 :
2476       value = 0;
2477       break;
2478     case MEP_OPERAND_IVC2_ACC0_2 :
2479       value = 0;
2480       break;
2481     case MEP_OPERAND_IVC2_ACC0_3 :
2482       value = 0;
2483       break;
2484     case MEP_OPERAND_IVC2_ACC0_4 :
2485       value = 0;
2486       break;
2487     case MEP_OPERAND_IVC2_ACC0_5 :
2488       value = 0;
2489       break;
2490     case MEP_OPERAND_IVC2_ACC0_6 :
2491       value = 0;
2492       break;
2493     case MEP_OPERAND_IVC2_ACC0_7 :
2494       value = 0;
2495       break;
2496     case MEP_OPERAND_IVC2_ACC1_0 :
2497       value = 0;
2498       break;
2499     case MEP_OPERAND_IVC2_ACC1_1 :
2500       value = 0;
2501       break;
2502     case MEP_OPERAND_IVC2_ACC1_2 :
2503       value = 0;
2504       break;
2505     case MEP_OPERAND_IVC2_ACC1_3 :
2506       value = 0;
2507       break;
2508     case MEP_OPERAND_IVC2_ACC1_4 :
2509       value = 0;
2510       break;
2511     case MEP_OPERAND_IVC2_ACC1_5 :
2512       value = 0;
2513       break;
2514     case MEP_OPERAND_IVC2_ACC1_6 :
2515       value = 0;
2516       break;
2517     case MEP_OPERAND_IVC2_ACC1_7 :
2518       value = 0;
2519       break;
2520     case MEP_OPERAND_IVC2_CC :
2521       value = 0;
2522       break;
2523     case MEP_OPERAND_IVC2_COFA0 :
2524       value = 0;
2525       break;
2526     case MEP_OPERAND_IVC2_COFA1 :
2527       value = 0;
2528       break;
2529     case MEP_OPERAND_IVC2_COFR0 :
2530       value = 0;
2531       break;
2532     case MEP_OPERAND_IVC2_COFR1 :
2533       value = 0;
2534       break;
2535     case MEP_OPERAND_IVC2_CSAR0 :
2536       value = 0;
2537       break;
2538     case MEP_OPERAND_IVC2_CSAR1 :
2539       value = 0;
2540       break;
2541     case MEP_OPERAND_IVC2C3CCRN :
2542       value = fields->f_ivc2_ccrn_c3;
2543       break;
2544     case MEP_OPERAND_IVC2CCRN :
2545       value = fields->f_ivc2_ccrn;
2546       break;
2547     case MEP_OPERAND_IVC2CRN :
2548       value = fields->f_ivc2_crnx;
2549       break;
2550     case MEP_OPERAND_IVC2RM :
2551       value = fields->f_ivc2_crm;
2552       break;
2553     case MEP_OPERAND_LO :
2554       value = 0;
2555       break;
2556     case MEP_OPERAND_LP :
2557       value = 0;
2558       break;
2559     case MEP_OPERAND_MB0 :
2560       value = 0;
2561       break;
2562     case MEP_OPERAND_MB1 :
2563       value = 0;
2564       break;
2565     case MEP_OPERAND_ME0 :
2566       value = 0;
2567       break;
2568     case MEP_OPERAND_ME1 :
2569       value = 0;
2570       break;
2571     case MEP_OPERAND_NPC :
2572       value = 0;
2573       break;
2574     case MEP_OPERAND_OPT :
2575       value = 0;
2576       break;
2577     case MEP_OPERAND_PCABS24A2 :
2578       value = fields->f_24u5a2n;
2579       break;
2580     case MEP_OPERAND_PCREL12A2 :
2581       value = fields->f_12s4a2;
2582       break;
2583     case MEP_OPERAND_PCREL17A2 :
2584       value = fields->f_17s16a2;
2585       break;
2586     case MEP_OPERAND_PCREL24A2 :
2587       value = fields->f_24s5a2n;
2588       break;
2589     case MEP_OPERAND_PCREL8A2 :
2590       value = fields->f_8s8a2;
2591       break;
2592     case MEP_OPERAND_PSW :
2593       value = 0;
2594       break;
2595     case MEP_OPERAND_R0 :
2596       value = 0;
2597       break;
2598     case MEP_OPERAND_R1 :
2599       value = 0;
2600       break;
2601     case MEP_OPERAND_RL :
2602       value = fields->f_rl;
2603       break;
2604     case MEP_OPERAND_RL5 :
2605       value = fields->f_rl5;
2606       break;
2607     case MEP_OPERAND_RM :
2608       value = fields->f_rm;
2609       break;
2610     case MEP_OPERAND_RMA :
2611       value = fields->f_rm;
2612       break;
2613     case MEP_OPERAND_RN :
2614       value = fields->f_rn;
2615       break;
2616     case MEP_OPERAND_RN3 :
2617       value = fields->f_rn3;
2618       break;
2619     case MEP_OPERAND_RN3C :
2620       value = fields->f_rn3;
2621       break;
2622     case MEP_OPERAND_RN3L :
2623       value = fields->f_rn3;
2624       break;
2625     case MEP_OPERAND_RN3S :
2626       value = fields->f_rn3;
2627       break;
2628     case MEP_OPERAND_RN3UC :
2629       value = fields->f_rn3;
2630       break;
2631     case MEP_OPERAND_RN3UL :
2632       value = fields->f_rn3;
2633       break;
2634     case MEP_OPERAND_RN3US :
2635       value = fields->f_rn3;
2636       break;
2637     case MEP_OPERAND_RNC :
2638       value = fields->f_rn;
2639       break;
2640     case MEP_OPERAND_RNL :
2641       value = fields->f_rn;
2642       break;
2643     case MEP_OPERAND_RNS :
2644       value = fields->f_rn;
2645       break;
2646     case MEP_OPERAND_RNUC :
2647       value = fields->f_rn;
2648       break;
2649     case MEP_OPERAND_RNUL :
2650       value = fields->f_rn;
2651       break;
2652     case MEP_OPERAND_RNUS :
2653       value = fields->f_rn;
2654       break;
2655     case MEP_OPERAND_SAR :
2656       value = 0;
2657       break;
2658     case MEP_OPERAND_SDISP16 :
2659       value = fields->f_16s16;
2660       break;
2661     case MEP_OPERAND_SIMM16 :
2662       value = fields->f_16s16;
2663       break;
2664     case MEP_OPERAND_SIMM16P0 :
2665       value = fields->f_ivc2_simm16p0;
2666       break;
2667     case MEP_OPERAND_SIMM6 :
2668       value = fields->f_6s8;
2669       break;
2670     case MEP_OPERAND_SIMM8 :
2671       value = fields->f_8s8;
2672       break;
2673     case MEP_OPERAND_SIMM8P0 :
2674       value = fields->f_ivc2_8s0;
2675       break;
2676     case MEP_OPERAND_SIMM8P20 :
2677       value = fields->f_ivc2_8s20;
2678       break;
2679     case MEP_OPERAND_SIMM8P4 :
2680       value = fields->f_ivc2_8s4;
2681       break;
2682     case MEP_OPERAND_SP :
2683       value = 0;
2684       break;
2685     case MEP_OPERAND_SPR :
2686       value = 0;
2687       break;
2688     case MEP_OPERAND_TP :
2689       value = 0;
2690       break;
2691     case MEP_OPERAND_TPR :
2692       value = 0;
2693       break;
2694     case MEP_OPERAND_UDISP2 :
2695       value = fields->f_2u6;
2696       break;
2697     case MEP_OPERAND_UDISP7 :
2698       value = fields->f_7u9;
2699       break;
2700     case MEP_OPERAND_UDISP7A2 :
2701       value = fields->f_7u9a2;
2702       break;
2703     case MEP_OPERAND_UDISP7A4 :
2704       value = fields->f_7u9a4;
2705       break;
2706     case MEP_OPERAND_UIMM16 :
2707       value = fields->f_16u16;
2708       break;
2709     case MEP_OPERAND_UIMM2 :
2710       value = fields->f_2u10;
2711       break;
2712     case MEP_OPERAND_UIMM24 :
2713       value = fields->f_24u8n;
2714       break;
2715     case MEP_OPERAND_UIMM3 :
2716       value = fields->f_3u5;
2717       break;
2718     case MEP_OPERAND_UIMM4 :
2719       value = fields->f_4u8;
2720       break;
2721     case MEP_OPERAND_UIMM5 :
2722       value = fields->f_5u8;
2723       break;
2724     case MEP_OPERAND_UIMM7A4 :
2725       value = fields->f_7u9a4;
2726       break;
2727     case MEP_OPERAND_ZERO :
2728       value = 0;
2729       break;
2730
2731     default :
2732       /* xgettext:c-format */
2733       fprintf (stderr, _("Unrecognized field %d while getting vma operand.\n"),
2734                        opindex);
2735       abort ();
2736   }
2737
2738   return value;
2739 }
2740
2741 void mep_cgen_set_int_operand  (CGEN_CPU_DESC, int, CGEN_FIELDS *, int);
2742 void mep_cgen_set_vma_operand  (CGEN_CPU_DESC, int, CGEN_FIELDS *, bfd_vma);
2743
2744 /* Stuffing values in cgen_fields is handled by a collection of functions.
2745    They are distinguished by the type of the VALUE argument they accept.
2746    TODO: floating point, inlining support, remove cases where argument type
2747    not appropriate.  */
2748
2749 void
2750 mep_cgen_set_int_operand (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED,
2751                              int opindex,
2752                              CGEN_FIELDS * fields,
2753                              int value)
2754 {
2755   switch (opindex)
2756     {
2757     case MEP_OPERAND_ADDR24A4 :
2758       fields->f_24u8a4n = value;
2759       break;
2760     case MEP_OPERAND_C5RMUIMM20 :
2761       fields->f_c5_rmuimm20 = value;
2762       break;
2763     case MEP_OPERAND_C5RNMUIMM24 :
2764       fields->f_c5_rnmuimm24 = value;
2765       break;
2766     case MEP_OPERAND_CALLNUM :
2767       fields->f_callnum = value;
2768       break;
2769     case MEP_OPERAND_CCCC :
2770       fields->f_rm = value;
2771       break;
2772     case MEP_OPERAND_CCRN :
2773       fields->f_ccrn = value;
2774       break;
2775     case MEP_OPERAND_CDISP10 :
2776       fields->f_cdisp10 = value;
2777       break;
2778     case MEP_OPERAND_CDISP10A2 :
2779       fields->f_cdisp10 = value;
2780       break;
2781     case MEP_OPERAND_CDISP10A4 :
2782       fields->f_cdisp10 = value;
2783       break;
2784     case MEP_OPERAND_CDISP10A8 :
2785       fields->f_cdisp10 = value;
2786       break;
2787     case MEP_OPERAND_CDISP12 :
2788       fields->f_12s20 = value;
2789       break;
2790     case MEP_OPERAND_CIMM4 :
2791       fields->f_rn = value;
2792       break;
2793     case MEP_OPERAND_CIMM5 :
2794       fields->f_5u24 = value;
2795       break;
2796     case MEP_OPERAND_CODE16 :
2797       fields->f_16u16 = value;
2798       break;
2799     case MEP_OPERAND_CODE24 :
2800       fields->f_24u4n = value;
2801       break;
2802     case MEP_OPERAND_CP_FLAG :
2803       break;
2804     case MEP_OPERAND_CRN :
2805       fields->f_crn = value;
2806       break;
2807     case MEP_OPERAND_CRN64 :
2808       fields->f_crn = value;
2809       break;
2810     case MEP_OPERAND_CRNX :
2811       fields->f_crnx = value;
2812       break;
2813     case MEP_OPERAND_CRNX64 :
2814       fields->f_crnx = value;
2815       break;
2816     case MEP_OPERAND_CROC :
2817       fields->f_ivc2_5u7 = value;
2818       break;
2819     case MEP_OPERAND_CROP :
2820       fields->f_ivc2_5u23 = value;
2821       break;
2822     case MEP_OPERAND_CRPC :
2823       fields->f_ivc2_5u26 = value;
2824       break;
2825     case MEP_OPERAND_CRPP :
2826       fields->f_ivc2_5u18 = value;
2827       break;
2828     case MEP_OPERAND_CRQC :
2829       fields->f_ivc2_5u21 = value;
2830       break;
2831     case MEP_OPERAND_CRQP :
2832       fields->f_ivc2_5u13 = value;
2833       break;
2834     case MEP_OPERAND_CSRN :
2835       fields->f_csrn = value;
2836       break;
2837     case MEP_OPERAND_CSRN_IDX :
2838       fields->f_csrn = value;
2839       break;
2840     case MEP_OPERAND_DBG :
2841       break;
2842     case MEP_OPERAND_DEPC :
2843       break;
2844     case MEP_OPERAND_EPC :
2845       break;
2846     case MEP_OPERAND_EXC :
2847       break;
2848     case MEP_OPERAND_HI :
2849       break;
2850     case MEP_OPERAND_IMM16P0 :
2851       fields->f_ivc2_imm16p0 = value;
2852       break;
2853     case MEP_OPERAND_IMM3P12 :
2854       fields->f_ivc2_3u12 = value;
2855       break;
2856     case MEP_OPERAND_IMM3P25 :
2857       fields->f_ivc2_3u25 = value;
2858       break;
2859     case MEP_OPERAND_IMM3P4 :
2860       fields->f_ivc2_3u4 = value;
2861       break;
2862     case MEP_OPERAND_IMM3P5 :
2863       fields->f_ivc2_3u5 = value;
2864       break;
2865     case MEP_OPERAND_IMM3P9 :
2866       fields->f_ivc2_3u9 = value;
2867       break;
2868     case MEP_OPERAND_IMM4P10 :
2869       fields->f_ivc2_4u10 = value;
2870       break;
2871     case MEP_OPERAND_IMM4P4 :
2872       fields->f_ivc2_4u4 = value;
2873       break;
2874     case MEP_OPERAND_IMM4P8 :
2875       fields->f_ivc2_4u8 = value;
2876       break;
2877     case MEP_OPERAND_IMM5P23 :
2878       fields->f_ivc2_5u23 = value;
2879       break;
2880     case MEP_OPERAND_IMM5P3 :
2881       fields->f_ivc2_5u3 = value;
2882       break;
2883     case MEP_OPERAND_IMM5P7 :
2884       fields->f_ivc2_5u7 = value;
2885       break;
2886     case MEP_OPERAND_IMM5P8 :
2887       fields->f_ivc2_5u8 = value;
2888       break;
2889     case MEP_OPERAND_IMM6P2 :
2890       fields->f_ivc2_6u2 = value;
2891       break;
2892     case MEP_OPERAND_IMM6P6 :
2893       fields->f_ivc2_6u6 = value;
2894       break;
2895     case MEP_OPERAND_IMM8P0 :
2896       fields->f_ivc2_8u0 = value;
2897       break;
2898     case MEP_OPERAND_IMM8P20 :
2899       fields->f_ivc2_8u20 = value;
2900       break;
2901     case MEP_OPERAND_IMM8P4 :
2902       fields->f_ivc2_8u4 = value;
2903       break;
2904     case MEP_OPERAND_IVC_X_0_2 :
2905       fields->f_ivc2_2u0 = value;
2906       break;
2907     case MEP_OPERAND_IVC_X_0_3 :
2908       fields->f_ivc2_3u0 = value;
2909       break;
2910     case MEP_OPERAND_IVC_X_0_4 :
2911       fields->f_ivc2_4u0 = value;
2912       break;
2913     case MEP_OPERAND_IVC_X_0_5 :
2914       fields->f_ivc2_5u0 = value;
2915       break;
2916     case MEP_OPERAND_IVC_X_6_1 :
2917       fields->f_ivc2_1u6 = value;
2918       break;
2919     case MEP_OPERAND_IVC_X_6_2 :
2920       fields->f_ivc2_2u6 = value;
2921       break;
2922     case MEP_OPERAND_IVC_X_6_3 :
2923       fields->f_ivc2_3u6 = value;
2924       break;
2925     case MEP_OPERAND_IVC2_ACC0_0 :
2926       break;
2927     case MEP_OPERAND_IVC2_ACC0_1 :
2928       break;
2929     case MEP_OPERAND_IVC2_ACC0_2 :
2930       break;
2931     case MEP_OPERAND_IVC2_ACC0_3 :
2932       break;
2933     case MEP_OPERAND_IVC2_ACC0_4 :
2934       break;
2935     case MEP_OPERAND_IVC2_ACC0_5 :
2936       break;
2937     case MEP_OPERAND_IVC2_ACC0_6 :
2938       break;
2939     case MEP_OPERAND_IVC2_ACC0_7 :
2940       break;
2941     case MEP_OPERAND_IVC2_ACC1_0 :
2942       break;
2943     case MEP_OPERAND_IVC2_ACC1_1 :
2944       break;
2945     case MEP_OPERAND_IVC2_ACC1_2 :
2946       break;
2947     case MEP_OPERAND_IVC2_ACC1_3 :
2948       break;
2949     case MEP_OPERAND_IVC2_ACC1_4 :
2950       break;
2951     case MEP_OPERAND_IVC2_ACC1_5 :
2952       break;
2953     case MEP_OPERAND_IVC2_ACC1_6 :
2954       break;
2955     case MEP_OPERAND_IVC2_ACC1_7 :
2956       break;
2957     case MEP_OPERAND_IVC2_CC :
2958       break;
2959     case MEP_OPERAND_IVC2_COFA0 :
2960       break;
2961     case MEP_OPERAND_IVC2_COFA1 :
2962       break;
2963     case MEP_OPERAND_IVC2_COFR0 :
2964       break;
2965     case MEP_OPERAND_IVC2_COFR1 :
2966       break;
2967     case MEP_OPERAND_IVC2_CSAR0 :
2968       break;
2969     case MEP_OPERAND_IVC2_CSAR1 :
2970       break;
2971     case MEP_OPERAND_IVC2C3CCRN :
2972       fields->f_ivc2_ccrn_c3 = value;
2973       break;
2974     case MEP_OPERAND_IVC2CCRN :
2975       fields->f_ivc2_ccrn = value;
2976       break;
2977     case MEP_OPERAND_IVC2CRN :
2978       fields->f_ivc2_crnx = value;
2979       break;
2980     case MEP_OPERAND_IVC2RM :
2981       fields->f_ivc2_crm = value;
2982       break;
2983     case MEP_OPERAND_LO :
2984       break;
2985     case MEP_OPERAND_LP :
2986       break;
2987     case MEP_OPERAND_MB0 :
2988       break;
2989     case MEP_OPERAND_MB1 :
2990       break;
2991     case MEP_OPERAND_ME0 :
2992       break;
2993     case MEP_OPERAND_ME1 :
2994       break;
2995     case MEP_OPERAND_NPC :
2996       break;
2997     case MEP_OPERAND_OPT :
2998       break;
2999     case MEP_OPERAND_PCABS24A2 :
3000       fields->f_24u5a2n = value;
3001       break;
3002     case MEP_OPERAND_PCREL12A2 :
3003       fields->f_12s4a2 = value;
3004       break;
3005     case MEP_OPERAND_PCREL17A2 :
3006       fields->f_17s16a2 = value;
3007       break;
3008     case MEP_OPERAND_PCREL24A2 :
3009       fields->f_24s5a2n = value;
3010       break;
3011     case MEP_OPERAND_PCREL8A2 :
3012       fields->f_8s8a2 = value;
3013       break;
3014     case MEP_OPERAND_PSW :
3015       break;
3016     case MEP_OPERAND_R0 :
3017       break;
3018     case MEP_OPERAND_R1 :
3019       break;
3020     case MEP_OPERAND_RL :
3021       fields->f_rl = value;
3022       break;
3023     case MEP_OPERAND_RL5 :
3024       fields->f_rl5 = value;
3025       break;
3026     case MEP_OPERAND_RM :
3027       fields->f_rm = value;
3028       break;
3029     case MEP_OPERAND_RMA :
3030       fields->f_rm = value;
3031       break;
3032     case MEP_OPERAND_RN :
3033       fields->f_rn = value;
3034       break;
3035     case MEP_OPERAND_RN3 :
3036       fields->f_rn3 = value;
3037       break;
3038     case MEP_OPERAND_RN3C :
3039       fields->f_rn3 = value;
3040       break;
3041     case MEP_OPERAND_RN3L :
3042       fields->f_rn3 = value;
3043       break;
3044     case MEP_OPERAND_RN3S :
3045       fields->f_rn3 = value;
3046       break;
3047     case MEP_OPERAND_RN3UC :
3048       fields->f_rn3 = value;
3049       break;
3050     case MEP_OPERAND_RN3UL :
3051       fields->f_rn3 = value;
3052       break;
3053     case MEP_OPERAND_RN3US :
3054       fields->f_rn3 = value;
3055       break;
3056     case MEP_OPERAND_RNC :
3057       fields->f_rn = value;
3058       break;
3059     case MEP_OPERAND_RNL :
3060       fields->f_rn = value;
3061       break;
3062     case MEP_OPERAND_RNS :
3063       fields->f_rn = value;
3064       break;
3065     case MEP_OPERAND_RNUC :
3066       fields->f_rn = value;
3067       break;
3068     case MEP_OPERAND_RNUL :
3069       fields->f_rn = value;
3070       break;
3071     case MEP_OPERAND_RNUS :
3072       fields->f_rn = value;
3073       break;
3074     case MEP_OPERAND_SAR :
3075       break;
3076     case MEP_OPERAND_SDISP16 :
3077       fields->f_16s16 = value;
3078       break;
3079     case MEP_OPERAND_SIMM16 :
3080       fields->f_16s16 = value;
3081       break;
3082     case MEP_OPERAND_SIMM16P0 :
3083       fields->f_ivc2_simm16p0 = value;
3084       break;
3085     case MEP_OPERAND_SIMM6 :
3086       fields->f_6s8 = value;
3087       break;
3088     case MEP_OPERAND_SIMM8 :
3089       fields->f_8s8 = value;
3090       break;
3091     case MEP_OPERAND_SIMM8P0 :
3092       fields->f_ivc2_8s0 = value;
3093       break;
3094     case MEP_OPERAND_SIMM8P20 :
3095       fields->f_ivc2_8s20 = value;
3096       break;
3097     case MEP_OPERAND_SIMM8P4 :
3098       fields->f_ivc2_8s4 = value;
3099       break;
3100     case MEP_OPERAND_SP :
3101       break;
3102     case MEP_OPERAND_SPR :
3103       break;
3104     case MEP_OPERAND_TP :
3105       break;
3106     case MEP_OPERAND_TPR :
3107       break;
3108     case MEP_OPERAND_UDISP2 :
3109       fields->f_2u6 = value;
3110       break;
3111     case MEP_OPERAND_UDISP7 :
3112       fields->f_7u9 = value;
3113       break;
3114     case MEP_OPERAND_UDISP7A2 :
3115       fields->f_7u9a2 = value;
3116       break;
3117     case MEP_OPERAND_UDISP7A4 :
3118       fields->f_7u9a4 = value;
3119       break;
3120     case MEP_OPERAND_UIMM16 :
3121       fields->f_16u16 = value;
3122       break;
3123     case MEP_OPERAND_UIMM2 :
3124       fields->f_2u10 = value;
3125       break;
3126     case MEP_OPERAND_UIMM24 :
3127       fields->f_24u8n = value;
3128       break;
3129     case MEP_OPERAND_UIMM3 :
3130       fields->f_3u5 = value;
3131       break;
3132     case MEP_OPERAND_UIMM4 :
3133       fields->f_4u8 = value;
3134       break;
3135     case MEP_OPERAND_UIMM5 :
3136       fields->f_5u8 = value;
3137       break;
3138     case MEP_OPERAND_UIMM7A4 :
3139       fields->f_7u9a4 = value;
3140       break;
3141     case MEP_OPERAND_ZERO :
3142       break;
3143
3144     default :
3145       /* xgettext:c-format */
3146       fprintf (stderr, _("Unrecognized field %d while setting int operand.\n"),
3147                        opindex);
3148       abort ();
3149   }
3150 }
3151
3152 void
3153 mep_cgen_set_vma_operand (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED,
3154                              int opindex,
3155                              CGEN_FIELDS * fields,
3156                              bfd_vma value)
3157 {
3158   switch (opindex)
3159     {
3160     case MEP_OPERAND_ADDR24A4 :
3161       fields->f_24u8a4n = value;
3162       break;
3163     case MEP_OPERAND_C5RMUIMM20 :
3164       fields->f_c5_rmuimm20 = value;
3165       break;
3166     case MEP_OPERAND_C5RNMUIMM24 :
3167       fields->f_c5_rnmuimm24 = value;
3168       break;
3169     case MEP_OPERAND_CALLNUM :
3170       fields->f_callnum = value;
3171       break;
3172     case MEP_OPERAND_CCCC :
3173       fields->f_rm = value;
3174       break;
3175     case MEP_OPERAND_CCRN :
3176       fields->f_ccrn = value;
3177       break;
3178     case MEP_OPERAND_CDISP10 :
3179       fields->f_cdisp10 = value;
3180       break;
3181     case MEP_OPERAND_CDISP10A2 :
3182       fields->f_cdisp10 = value;
3183       break;
3184     case MEP_OPERAND_CDISP10A4 :
3185       fields->f_cdisp10 = value;
3186       break;
3187     case MEP_OPERAND_CDISP10A8 :
3188       fields->f_cdisp10 = value;
3189       break;
3190     case MEP_OPERAND_CDISP12 :
3191       fields->f_12s20 = value;
3192       break;
3193     case MEP_OPERAND_CIMM4 :
3194       fields->f_rn = value;
3195       break;
3196     case MEP_OPERAND_CIMM5 :
3197       fields->f_5u24 = value;
3198       break;
3199     case MEP_OPERAND_CODE16 :
3200       fields->f_16u16 = value;
3201       break;
3202     case MEP_OPERAND_CODE24 :
3203       fields->f_24u4n = value;
3204       break;
3205     case MEP_OPERAND_CP_FLAG :
3206       break;
3207     case MEP_OPERAND_CRN :
3208       fields->f_crn = value;
3209       break;
3210     case MEP_OPERAND_CRN64 :
3211       fields->f_crn = value;
3212       break;
3213     case MEP_OPERAND_CRNX :
3214       fields->f_crnx = value;
3215       break;
3216     case MEP_OPERAND_CRNX64 :
3217       fields->f_crnx = value;
3218       break;
3219     case MEP_OPERAND_CROC :
3220       fields->f_ivc2_5u7 = value;
3221       break;
3222     case MEP_OPERAND_CROP :
3223       fields->f_ivc2_5u23 = value;
3224       break;
3225     case MEP_OPERAND_CRPC :
3226       fields->f_ivc2_5u26 = value;
3227       break;
3228     case MEP_OPERAND_CRPP :
3229       fields->f_ivc2_5u18 = value;
3230       break;
3231     case MEP_OPERAND_CRQC :
3232       fields->f_ivc2_5u21 = value;
3233       break;
3234     case MEP_OPERAND_CRQP :
3235       fields->f_ivc2_5u13 = value;
3236       break;
3237     case MEP_OPERAND_CSRN :
3238       fields->f_csrn = value;
3239       break;
3240     case MEP_OPERAND_CSRN_IDX :
3241       fields->f_csrn = value;
3242       break;
3243     case MEP_OPERAND_DBG :
3244       break;
3245     case MEP_OPERAND_DEPC :
3246       break;
3247     case MEP_OPERAND_EPC :
3248       break;
3249     case MEP_OPERAND_EXC :
3250       break;
3251     case MEP_OPERAND_HI :
3252       break;
3253     case MEP_OPERAND_IMM16P0 :
3254       fields->f_ivc2_imm16p0 = value;
3255       break;
3256     case MEP_OPERAND_IMM3P12 :
3257       fields->f_ivc2_3u12 = value;
3258       break;
3259     case MEP_OPERAND_IMM3P25 :
3260       fields->f_ivc2_3u25 = value;
3261       break;
3262     case MEP_OPERAND_IMM3P4 :
3263       fields->f_ivc2_3u4 = value;
3264       break;
3265     case MEP_OPERAND_IMM3P5 :
3266       fields->f_ivc2_3u5 = value;
3267       break;
3268     case MEP_OPERAND_IMM3P9 :
3269       fields->f_ivc2_3u9 = value;
3270       break;
3271     case MEP_OPERAND_IMM4P10 :
3272       fields->f_ivc2_4u10 = value;
3273       break;
3274     case MEP_OPERAND_IMM4P4 :
3275       fields->f_ivc2_4u4 = value;
3276       break;
3277     case MEP_OPERAND_IMM4P8 :
3278       fields->f_ivc2_4u8 = value;
3279       break;
3280     case MEP_OPERAND_IMM5P23 :
3281       fields->f_ivc2_5u23 = value;
3282       break;
3283     case MEP_OPERAND_IMM5P3 :
3284       fields->f_ivc2_5u3 = value;
3285       break;
3286     case MEP_OPERAND_IMM5P7 :
3287       fields->f_ivc2_5u7 = value;
3288       break;
3289     case MEP_OPERAND_IMM5P8 :
3290       fields->f_ivc2_5u8 = value;
3291       break;
3292     case MEP_OPERAND_IMM6P2 :
3293       fields->f_ivc2_6u2 = value;
3294       break;
3295     case MEP_OPERAND_IMM6P6 :
3296       fields->f_ivc2_6u6 = value;
3297       break;
3298     case MEP_OPERAND_IMM8P0 :
3299       fields->f_ivc2_8u0 = value;
3300       break;
3301     case MEP_OPERAND_IMM8P20 :
3302       fields->f_ivc2_8u20 = value;
3303       break;
3304     case MEP_OPERAND_IMM8P4 :
3305       fields->f_ivc2_8u4 = value;
3306       break;
3307     case MEP_OPERAND_IVC_X_0_2 :
3308       fields->f_ivc2_2u0 = value;
3309       break;
3310     case MEP_OPERAND_IVC_X_0_3 :
3311       fields->f_ivc2_3u0 = value;
3312       break;
3313     case MEP_OPERAND_IVC_X_0_4 :
3314       fields->f_ivc2_4u0 = value;
3315       break;
3316     case MEP_OPERAND_IVC_X_0_5 :
3317       fields->f_ivc2_5u0 = value;
3318       break;
3319     case MEP_OPERAND_IVC_X_6_1 :
3320       fields->f_ivc2_1u6 = value;
3321       break;
3322     case MEP_OPERAND_IVC_X_6_2 :
3323       fields->f_ivc2_2u6 = value;
3324       break;
3325     case MEP_OPERAND_IVC_X_6_3 :
3326       fields->f_ivc2_3u6 = value;
3327       break;
3328     case MEP_OPERAND_IVC2_ACC0_0 :
3329       break;
3330     case MEP_OPERAND_IVC2_ACC0_1 :
3331       break;
3332     case MEP_OPERAND_IVC2_ACC0_2 :
3333       break;
3334     case MEP_OPERAND_IVC2_ACC0_3 :
3335       break;
3336     case MEP_OPERAND_IVC2_ACC0_4 :
3337       break;
3338     case MEP_OPERAND_IVC2_ACC0_5 :
3339       break;
3340     case MEP_OPERAND_IVC2_ACC0_6 :
3341       break;
3342     case MEP_OPERAND_IVC2_ACC0_7 :
3343       break;
3344     case MEP_OPERAND_IVC2_ACC1_0 :
3345       break;
3346     case MEP_OPERAND_IVC2_ACC1_1 :
3347       break;
3348     case MEP_OPERAND_IVC2_ACC1_2 :
3349       break;
3350     case MEP_OPERAND_IVC2_ACC1_3 :
3351       break;
3352     case MEP_OPERAND_IVC2_ACC1_4 :
3353       break;
3354     case MEP_OPERAND_IVC2_ACC1_5 :
3355       break;
3356     case MEP_OPERAND_IVC2_ACC1_6 :
3357       break;
3358     case MEP_OPERAND_IVC2_ACC1_7 :
3359       break;
3360     case MEP_OPERAND_IVC2_CC :
3361       break;
3362     case MEP_OPERAND_IVC2_COFA0 :
3363       break;
3364     case MEP_OPERAND_IVC2_COFA1 :
3365       break;
3366     case MEP_OPERAND_IVC2_COFR0 :
3367       break;
3368     case MEP_OPERAND_IVC2_COFR1 :
3369       break;
3370     case MEP_OPERAND_IVC2_CSAR0 :
3371       break;
3372     case MEP_OPERAND_IVC2_CSAR1 :
3373       break;
3374     case MEP_OPERAND_IVC2C3CCRN :
3375       fields->f_ivc2_ccrn_c3 = value;
3376       break;
3377     case MEP_OPERAND_IVC2CCRN :
3378       fields->f_ivc2_ccrn = value;
3379       break;
3380     case MEP_OPERAND_IVC2CRN :
3381       fields->f_ivc2_crnx = value;
3382       break;
3383     case MEP_OPERAND_IVC2RM :
3384       fields->f_ivc2_crm = value;
3385       break;
3386     case MEP_OPERAND_LO :
3387       break;
3388     case MEP_OPERAND_LP :
3389       break;
3390     case MEP_OPERAND_MB0 :
3391       break;
3392     case MEP_OPERAND_MB1 :
3393       break;
3394     case MEP_OPERAND_ME0 :
3395       break;
3396     case MEP_OPERAND_ME1 :
3397       break;
3398     case MEP_OPERAND_NPC :
3399       break;
3400     case MEP_OPERAND_OPT :
3401       break;
3402     case MEP_OPERAND_PCABS24A2 :
3403       fields->f_24u5a2n = value;
3404       break;
3405     case MEP_OPERAND_PCREL12A2 :
3406       fields->f_12s4a2 = value;
3407       break;
3408     case MEP_OPERAND_PCREL17A2 :
3409       fields->f_17s16a2 = value;
3410       break;
3411     case MEP_OPERAND_PCREL24A2 :
3412       fields->f_24s5a2n = value;
3413       break;
3414     case MEP_OPERAND_PCREL8A2 :
3415       fields->f_8s8a2 = value;
3416       break;
3417     case MEP_OPERAND_PSW :
3418       break;
3419     case MEP_OPERAND_R0 :
3420       break;
3421     case MEP_OPERAND_R1 :
3422       break;
3423     case MEP_OPERAND_RL :
3424       fields->f_rl = value;
3425       break;
3426     case MEP_OPERAND_RL5 :
3427       fields->f_rl5 = value;
3428       break;
3429     case MEP_OPERAND_RM :
3430       fields->f_rm = value;
3431       break;
3432     case MEP_OPERAND_RMA :
3433       fields->f_rm = value;
3434       break;
3435     case MEP_OPERAND_RN :
3436       fields->f_rn = value;
3437       break;
3438     case MEP_OPERAND_RN3 :
3439       fields->f_rn3 = value;
3440       break;
3441     case MEP_OPERAND_RN3C :
3442       fields->f_rn3 = value;
3443       break;
3444     case MEP_OPERAND_RN3L :
3445       fields->f_rn3 = value;
3446       break;
3447     case MEP_OPERAND_RN3S :
3448       fields->f_rn3 = value;
3449       break;
3450     case MEP_OPERAND_RN3UC :
3451       fields->f_rn3 = value;
3452       break;
3453     case MEP_OPERAND_RN3UL :
3454       fields->f_rn3 = value;
3455       break;
3456     case MEP_OPERAND_RN3US :
3457       fields->f_rn3 = value;
3458       break;
3459     case MEP_OPERAND_RNC :
3460       fields->f_rn = value;
3461       break;
3462     case MEP_OPERAND_RNL :
3463       fields->f_rn = value;
3464       break;
3465     case MEP_OPERAND_RNS :
3466       fields->f_rn = value;
3467       break;
3468     case MEP_OPERAND_RNUC :
3469       fields->f_rn = value;
3470       break;
3471     case MEP_OPERAND_RNUL :
3472       fields->f_rn = value;
3473       break;
3474     case MEP_OPERAND_RNUS :
3475       fields->f_rn = value;
3476       break;
3477     case MEP_OPERAND_SAR :
3478       break;
3479     case MEP_OPERAND_SDISP16 :
3480       fields->f_16s16 = value;
3481       break;
3482     case MEP_OPERAND_SIMM16 :
3483       fields->f_16s16 = value;
3484       break;
3485     case MEP_OPERAND_SIMM16P0 :
3486       fields->f_ivc2_simm16p0 = value;
3487       break;
3488     case MEP_OPERAND_SIMM6 :
3489       fields->f_6s8 = value;
3490       break;
3491     case MEP_OPERAND_SIMM8 :
3492       fields->f_8s8 = value;
3493       break;
3494     case MEP_OPERAND_SIMM8P0 :
3495       fields->f_ivc2_8s0 = value;
3496       break;
3497     case MEP_OPERAND_SIMM8P20 :
3498       fields->f_ivc2_8s20 = value;
3499       break;
3500     case MEP_OPERAND_SIMM8P4 :
3501       fields->f_ivc2_8s4 = value;
3502       break;
3503     case MEP_OPERAND_SP :
3504       break;
3505     case MEP_OPERAND_SPR :
3506       break;
3507     case MEP_OPERAND_TP :
3508       break;
3509     case MEP_OPERAND_TPR :
3510       break;
3511     case MEP_OPERAND_UDISP2 :
3512       fields->f_2u6 = value;
3513       break;
3514     case MEP_OPERAND_UDISP7 :
3515       fields->f_7u9 = value;
3516       break;
3517     case MEP_OPERAND_UDISP7A2 :
3518       fields->f_7u9a2 = value;
3519       break;
3520     case MEP_OPERAND_UDISP7A4 :
3521       fields->f_7u9a4 = value;
3522       break;
3523     case MEP_OPERAND_UIMM16 :
3524       fields->f_16u16 = value;
3525       break;
3526     case MEP_OPERAND_UIMM2 :
3527       fields->f_2u10 = value;
3528       break;
3529     case MEP_OPERAND_UIMM24 :
3530       fields->f_24u8n = value;
3531       break;
3532     case MEP_OPERAND_UIMM3 :
3533       fields->f_3u5 = value;
3534       break;
3535     case MEP_OPERAND_UIMM4 :
3536       fields->f_4u8 = value;
3537       break;
3538     case MEP_OPERAND_UIMM5 :
3539       fields->f_5u8 = value;
3540       break;
3541     case MEP_OPERAND_UIMM7A4 :
3542       fields->f_7u9a4 = value;
3543       break;
3544     case MEP_OPERAND_ZERO :
3545       break;
3546
3547     default :
3548       /* xgettext:c-format */
3549       fprintf (stderr, _("Unrecognized field %d while setting vma operand.\n"),
3550                        opindex);
3551       abort ();
3552   }
3553 }
3554
3555 /* Function to call before using the instruction builder tables.  */
3556
3557 void
3558 mep_cgen_init_ibld_table (CGEN_CPU_DESC cd)
3559 {
3560   cd->insert_handlers = & mep_cgen_insert_handlers[0];
3561   cd->extract_handlers = & mep_cgen_extract_handlers[0];
3562
3563   cd->insert_operand = mep_cgen_insert_operand;
3564   cd->extract_operand = mep_cgen_extract_operand;
3565
3566   cd->get_int_operand = mep_cgen_get_int_operand;
3567   cd->set_int_operand = mep_cgen_set_int_operand;
3568   cd->get_vma_operand = mep_cgen_get_vma_operand;
3569   cd->set_vma_operand = mep_cgen_set_vma_operand;
3570 }