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