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