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