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