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