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