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