1 /* DO NOT EDIT! -*- buffer-read-only: t -*- vi:set ro: */
2 /* Instruction building/extraction support for mep. -*- C -*-
4 THIS FILE IS MACHINE GENERATED WITH CGEN: Cpu tools GENerator.
5 - the resultant file is machine generated, cgen-ibld.in isn't
7 Copyright (C) 1996-2020 Free Software Foundation, Inc.
9 This file is part of libopcodes.
11 This library is free software; you can redistribute it and/or modify
12 it under the terms of the GNU General Public License as published by
13 the Free Software Foundation; either version 3, or (at your option)
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.
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. */
25 /* ??? Eventually more and more of this stuff can go to cpu-independent files.
36 #include "cgen/basic-modes.h"
38 #include "safe-ctype.h"
41 #define min(a,b) ((a) < (b) ? (a) : (b))
43 #define max(a,b) ((a) > (b) ? (a) : (b))
45 /* Used by the ifield rtx function. */
46 #define FLD(f) (fields->f)
48 static const char * insert_normal
49 (CGEN_CPU_DESC
, long, unsigned int, unsigned int, unsigned int,
50 unsigned int, unsigned int, unsigned int, CGEN_INSN_BYTES_PTR
);
51 static const char * insert_insn_normal
52 (CGEN_CPU_DESC
, const CGEN_INSN
*,
53 CGEN_FIELDS
*, CGEN_INSN_BYTES_PTR
, bfd_vma
);
54 static int extract_normal
55 (CGEN_CPU_DESC
, CGEN_EXTRACT_INFO
*, CGEN_INSN_INT
,
56 unsigned int, unsigned int, unsigned int, unsigned int,
57 unsigned int, unsigned int, bfd_vma
, long *);
58 static int extract_insn_normal
59 (CGEN_CPU_DESC
, const CGEN_INSN
*, CGEN_EXTRACT_INFO
*,
60 CGEN_INSN_INT
, CGEN_FIELDS
*, bfd_vma
);
62 static void put_insn_int_value
63 (CGEN_CPU_DESC
, CGEN_INSN_BYTES_PTR
, int, int, CGEN_INSN_INT
);
66 static CGEN_INLINE
void insert_1
67 (CGEN_CPU_DESC
, unsigned long, int, int, int, unsigned char *);
68 static CGEN_INLINE
int fill_cache
69 (CGEN_CPU_DESC
, CGEN_EXTRACT_INFO
*, int, int, bfd_vma
);
70 static CGEN_INLINE
long extract_1
71 (CGEN_CPU_DESC
, CGEN_EXTRACT_INFO
*, int, int, int, unsigned char *, bfd_vma
);
74 /* Operand insertion. */
78 /* Subroutine of insert_normal. */
80 static CGEN_INLINE
void
81 insert_1 (CGEN_CPU_DESC cd
,
91 x
= cgen_get_insn_value (cd
, bufp
, word_length
);
93 /* Written this way to avoid undefined behaviour. */
94 mask
= (((1L << (length
- 1)) - 1) << 1) | 1;
96 shift
= (start
+ 1) - length
;
98 shift
= (word_length
- (start
+ length
));
99 x
= (x
& ~(mask
<< shift
)) | ((value
& mask
) << shift
);
101 cgen_put_insn_value (cd
, bufp
, word_length
, (bfd_vma
) x
);
104 #endif /* ! CGEN_INT_INSN_P */
106 /* Default insertion routine.
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.
115 The result is an error message or NULL if success. */
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
123 insert_normal (CGEN_CPU_DESC cd
,
126 unsigned int word_offset
,
129 unsigned int word_length
,
130 unsigned int total_length
,
131 CGEN_INSN_BYTES_PTR buffer
)
133 static char errbuf
[100];
134 /* Written this way to avoid undefined behaviour. */
135 unsigned long mask
= (((1L << (length
- 1)) - 1) << 1) | 1;
137 /* If LENGTH is zero, this operand doesn't contribute to the value. */
141 if (word_length
> 8 * sizeof (CGEN_INSN_INT
))
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
)
149 && word_length
> total_length
)
150 word_length
= total_length
;
153 /* Ensure VALUE will fit. */
154 if (CGEN_BOOL_ATTR (attrs
, CGEN_IFLD_SIGN_OPT
))
156 long minval
= - (1L << (length
- 1));
157 unsigned long maxval
= mask
;
159 if ((value
> 0 && (unsigned long) value
> maxval
)
162 /* xgettext:c-format */
164 _("operand out of range (%ld not between %ld and %lu)"),
165 value
, minval
, maxval
);
169 else if (! CGEN_BOOL_ATTR (attrs
, CGEN_IFLD_SIGNED
))
171 unsigned long maxval
= mask
;
172 unsigned long val
= (unsigned long) value
;
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))
183 /* xgettext:c-format */
185 _("operand out of range (0x%lx not between 0 and 0x%lx)"),
192 if (! cgen_signed_overflow_ok_p (cd
))
194 long minval
= - (1L << (length
- 1));
195 long maxval
= (1L << (length
- 1)) - 1;
197 if (value
< minval
|| value
> maxval
)
200 /* xgettext:c-format */
201 (errbuf
, _("operand out of range (%ld not between %ld and %ld)"),
202 value
, minval
, maxval
);
211 int shift_within_word
, shift_to_word
, shift
;
213 /* How to shift the value to BIT0 of the word. */
214 shift_to_word
= total_length
- (word_offset
+ word_length
);
216 /* How to shift the value to the field within the word. */
217 if (CGEN_INSN_LSB0_P
)
218 shift_within_word
= start
+ 1 - length
;
220 shift_within_word
= word_length
- start
- length
;
222 /* The total SHIFT, then mask in the value. */
223 shift
= shift_to_word
+ shift_within_word
;
224 *buffer
= (*buffer
& ~(mask
<< shift
)) | ((value
& mask
) << shift
);
227 #else /* ! CGEN_INT_INSN_P */
230 unsigned char *bufp
= (unsigned char *) buffer
+ word_offset
/ 8;
232 insert_1 (cd
, value
, start
, length
, word_length
, bufp
);
235 #endif /* ! CGEN_INT_INSN_P */
240 /* Default insn builder (insert handler).
241 The instruction is recorded in CGEN_INT_INSN_P byte order (meaning
242 that if CGEN_INSN_BYTES_PTR is an int * and thus, the value is
243 recorded in host byte order, otherwise BUFFER is an array of bytes
244 and the value is recorded in target byte order).
245 The result is an error message or NULL if success. */
248 insert_insn_normal (CGEN_CPU_DESC cd
,
249 const CGEN_INSN
* insn
,
250 CGEN_FIELDS
* fields
,
251 CGEN_INSN_BYTES_PTR buffer
,
254 const CGEN_SYNTAX
*syntax
= CGEN_INSN_SYNTAX (insn
);
256 const CGEN_SYNTAX_CHAR_TYPE
* syn
;
258 CGEN_INIT_INSERT (cd
);
259 value
= CGEN_INSN_BASE_VALUE (insn
);
261 /* If we're recording insns as numbers (rather than a string of bytes),
262 target byte order handling is deferred until later. */
266 put_insn_int_value (cd
, buffer
, cd
->base_insn_bitsize
,
267 CGEN_FIELDS_BITSIZE (fields
), value
);
271 cgen_put_insn_value (cd
, buffer
, min ((unsigned) cd
->base_insn_bitsize
,
272 (unsigned) CGEN_FIELDS_BITSIZE (fields
)),
275 #endif /* ! CGEN_INT_INSN_P */
277 /* ??? It would be better to scan the format's fields.
278 Still need to be able to insert a value based on the operand though;
279 e.g. storing a branch displacement that got resolved later.
280 Needs more thought first. */
282 for (syn
= CGEN_SYNTAX_STRING (syntax
); * syn
; ++ syn
)
286 if (CGEN_SYNTAX_CHAR_P (* syn
))
289 errmsg
= (* cd
->insert_operand
) (cd
, CGEN_SYNTAX_FIELD (*syn
),
299 /* Cover function to store an insn value into an integral insn. Must go here
300 because it needs <prefix>-desc.h for CGEN_INT_INSN_P. */
303 put_insn_int_value (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED
,
304 CGEN_INSN_BYTES_PTR buf
,
309 /* For architectures with insns smaller than the base-insn-bitsize,
310 length may be too big. */
311 if (length
> insn_length
)
315 int shift
= insn_length
- length
;
316 /* Written this way to avoid undefined behaviour. */
317 CGEN_INSN_INT mask
= (((1L << (length
- 1)) - 1) << 1) | 1;
319 *buf
= (*buf
& ~(mask
<< shift
)) | ((value
& mask
) << shift
);
324 /* Operand extraction. */
326 #if ! CGEN_INT_INSN_P
328 /* Subroutine of extract_normal.
329 Ensure sufficient bytes are cached in EX_INFO.
330 OFFSET is the offset in bytes from the start of the insn of the value.
331 BYTES is the length of the needed value.
332 Returns 1 for success, 0 for failure. */
334 static CGEN_INLINE
int
335 fill_cache (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED
,
336 CGEN_EXTRACT_INFO
*ex_info
,
341 /* It's doubtful that the middle part has already been fetched so
342 we don't optimize that case. kiss. */
344 disassemble_info
*info
= (disassemble_info
*) ex_info
->dis_info
;
346 /* First do a quick check. */
347 mask
= (1 << bytes
) - 1;
348 if (((ex_info
->valid
>> offset
) & mask
) == mask
)
351 /* Search for the first byte we need to read. */
352 for (mask
= 1 << offset
; bytes
> 0; --bytes
, ++offset
, mask
<<= 1)
353 if (! (mask
& ex_info
->valid
))
361 status
= (*info
->read_memory_func
)
362 (pc
, ex_info
->insn_bytes
+ offset
, bytes
, info
);
366 (*info
->memory_error_func
) (status
, pc
, info
);
370 ex_info
->valid
|= ((1 << bytes
) - 1) << offset
;
376 /* Subroutine of extract_normal. */
378 static CGEN_INLINE
long
379 extract_1 (CGEN_CPU_DESC cd
,
380 CGEN_EXTRACT_INFO
*ex_info ATTRIBUTE_UNUSED
,
385 bfd_vma pc ATTRIBUTE_UNUSED
)
390 x
= cgen_get_insn_value (cd
, bufp
, word_length
);
392 if (CGEN_INSN_LSB0_P
)
393 shift
= (start
+ 1) - length
;
395 shift
= (word_length
- (start
+ length
));
399 #endif /* ! CGEN_INT_INSN_P */
401 /* Default extraction routine.
403 INSN_VALUE is the first base_insn_bitsize bits of the insn in host order,
404 or sometimes less for cases like the m32r where the base insn size is 32
405 but some insns are 16 bits.
406 ATTRS is a mask of the boolean attributes. We only need `SIGNED',
407 but for generality we take a bitmask of all of them.
408 WORD_OFFSET is the offset in bits from the start of the insn of the value.
409 WORD_LENGTH is the length of the word in bits in which the value resides.
410 START is the starting bit number in the word, architecture origin.
411 LENGTH is the length of VALUE in bits.
412 TOTAL_LENGTH is the total length of the insn in bits.
414 Returns 1 for success, 0 for failure. */
416 /* ??? The return code isn't properly used. wip. */
418 /* ??? This doesn't handle bfd_vma's. Create another function when
422 extract_normal (CGEN_CPU_DESC cd
,
423 #if ! CGEN_INT_INSN_P
424 CGEN_EXTRACT_INFO
*ex_info
,
426 CGEN_EXTRACT_INFO
*ex_info ATTRIBUTE_UNUSED
,
428 CGEN_INSN_INT insn_value
,
430 unsigned int word_offset
,
433 unsigned int word_length
,
434 unsigned int total_length
,
435 #if ! CGEN_INT_INSN_P
438 bfd_vma pc ATTRIBUTE_UNUSED
,
444 /* If LENGTH is zero, this operand doesn't contribute to the value
445 so give it a standard value of zero. */
452 if (word_length
> 8 * sizeof (CGEN_INSN_INT
))
455 /* For architectures with insns smaller than the insn-base-bitsize,
456 word_length may be too big. */
457 if (cd
->min_insn_bitsize
< cd
->base_insn_bitsize
)
459 if (word_offset
+ word_length
> total_length
)
460 word_length
= total_length
- word_offset
;
463 /* Does the value reside in INSN_VALUE, and at the right alignment? */
465 if (CGEN_INT_INSN_P
|| (word_offset
== 0 && word_length
== total_length
))
467 if (CGEN_INSN_LSB0_P
)
468 value
= insn_value
>> ((word_offset
+ start
+ 1) - length
);
470 value
= insn_value
>> (total_length
- ( word_offset
+ start
+ length
));
473 #if ! CGEN_INT_INSN_P
477 unsigned char *bufp
= ex_info
->insn_bytes
+ word_offset
/ 8;
479 if (word_length
> 8 * sizeof (CGEN_INSN_INT
))
482 if (fill_cache (cd
, ex_info
, word_offset
/ 8, word_length
/ 8, pc
) == 0)
488 value
= extract_1 (cd
, ex_info
, start
, length
, word_length
, bufp
, pc
);
491 #endif /* ! CGEN_INT_INSN_P */
493 /* Written this way to avoid undefined behaviour. */
494 mask
= (((1L << (length
- 1)) - 1) << 1) | 1;
498 if (CGEN_BOOL_ATTR (attrs
, CGEN_IFLD_SIGNED
)
499 && (value
& (1L << (length
- 1))))
507 /* Default insn extractor.
509 INSN_VALUE is the first base_insn_bitsize bits, translated to host order.
510 The extracted fields are stored in FIELDS.
511 EX_INFO is used to handle reading variable length insns.
512 Return the length of the insn in bits, or 0 if no match,
513 or -1 if an error occurs fetching data (memory_error_func will have
517 extract_insn_normal (CGEN_CPU_DESC cd
,
518 const CGEN_INSN
*insn
,
519 CGEN_EXTRACT_INFO
*ex_info
,
520 CGEN_INSN_INT insn_value
,
524 const CGEN_SYNTAX
*syntax
= CGEN_INSN_SYNTAX (insn
);
525 const CGEN_SYNTAX_CHAR_TYPE
*syn
;
527 CGEN_FIELDS_BITSIZE (fields
) = CGEN_INSN_BITSIZE (insn
);
529 CGEN_INIT_EXTRACT (cd
);
531 for (syn
= CGEN_SYNTAX_STRING (syntax
); *syn
; ++syn
)
535 if (CGEN_SYNTAX_CHAR_P (*syn
))
538 length
= (* cd
->extract_operand
) (cd
, CGEN_SYNTAX_FIELD (*syn
),
539 ex_info
, insn_value
, fields
, pc
);
544 /* We recognized and successfully extracted this insn. */
545 return CGEN_INSN_BITSIZE (insn
);
548 /* Machine generated code added here. */
550 const char * mep_cgen_insert_operand
551 (CGEN_CPU_DESC
, int, CGEN_FIELDS
*, CGEN_INSN_BYTES_PTR
, bfd_vma
);
553 /* Main entry point for operand insertion.
555 This function is basically just a big switch statement. Earlier versions
556 used tables to look up the function to use, but
557 - if the table contains both assembler and disassembler functions then
558 the disassembler contains much of the assembler and vice-versa,
559 - there's a lot of inlining possibilities as things grow,
560 - using a switch statement avoids the function call overhead.
562 This function could be moved into `parse_insn_normal', but keeping it
563 separate makes clear the interface between `parse_insn_normal' and each of
564 the handlers. It's also needed by GAS to insert operands that couldn't be
565 resolved during parsing. */
568 mep_cgen_insert_operand (CGEN_CPU_DESC cd
,
570 CGEN_FIELDS
* fields
,
571 CGEN_INSN_BYTES_PTR buffer
,
572 bfd_vma pc ATTRIBUTE_UNUSED
)
574 const char * errmsg
= NULL
;
575 unsigned int total_length
= CGEN_FIELDS_BITSIZE (fields
);
579 case MEP_OPERAND_ADDR24A4
:
582 FLD (f_24u8a4n_hi
) = ((UINT
) (FLD (f_24u8a4n
)) >> (8));
583 FLD (f_24u8a4n_lo
) = ((UINT
) (((FLD (f_24u8a4n
)) & (252))) >> (2));
585 errmsg
= insert_normal (cd
, fields
->f_24u8a4n_hi
, 0, 0, 16, 16, 32, total_length
, buffer
);
588 errmsg
= insert_normal (cd
, fields
->f_24u8a4n_lo
, 0, 0, 8, 6, 32, total_length
, buffer
);
593 case MEP_OPERAND_C5RMUIMM20
:
596 FLD (f_c5_rm
) = ((UINT
) (FLD (f_c5_rmuimm20
)) >> (16));
597 FLD (f_c5_16u16
) = ((FLD (f_c5_rmuimm20
)) & (65535));
599 errmsg
= insert_normal (cd
, fields
->f_c5_rm
, 0, 0, 8, 4, 32, total_length
, buffer
);
602 errmsg
= insert_normal (cd
, fields
->f_c5_16u16
, 0, 0, 16, 16, 32, total_length
, buffer
);
607 case MEP_OPERAND_C5RNMUIMM24
:
610 FLD (f_c5_rnm
) = ((UINT
) (FLD (f_c5_rnmuimm24
)) >> (16));
611 FLD (f_c5_16u16
) = ((FLD (f_c5_rnmuimm24
)) & (65535));
613 errmsg
= insert_normal (cd
, fields
->f_c5_rnm
, 0, 0, 4, 8, 32, total_length
, buffer
);
616 errmsg
= insert_normal (cd
, fields
->f_c5_16u16
, 0, 0, 16, 16, 32, total_length
, buffer
);
621 case MEP_OPERAND_CALLNUM
:
624 FLD (f_5
) = ((((UINT
) (FLD (f_callnum
)) >> (3))) & (1));
625 FLD (f_6
) = ((((UINT
) (FLD (f_callnum
)) >> (2))) & (1));
626 FLD (f_7
) = ((((UINT
) (FLD (f_callnum
)) >> (1))) & (1));
627 FLD (f_11
) = ((FLD (f_callnum
)) & (1));
629 errmsg
= insert_normal (cd
, fields
->f_5
, 0, 0, 5, 1, 32, total_length
, buffer
);
632 errmsg
= insert_normal (cd
, fields
->f_6
, 0, 0, 6, 1, 32, total_length
, buffer
);
635 errmsg
= insert_normal (cd
, fields
->f_7
, 0, 0, 7, 1, 32, total_length
, buffer
);
638 errmsg
= insert_normal (cd
, fields
->f_11
, 0, 0, 11, 1, 32, total_length
, buffer
);
643 case MEP_OPERAND_CCCC
:
644 errmsg
= insert_normal (cd
, fields
->f_rm
, 0, 0, 8, 4, 32, total_length
, buffer
);
646 case MEP_OPERAND_CCRN
:
649 FLD (f_ccrn_hi
) = ((((UINT
) (FLD (f_ccrn
)) >> (4))) & (3));
650 FLD (f_ccrn_lo
) = ((FLD (f_ccrn
)) & (15));
652 errmsg
= insert_normal (cd
, fields
->f_ccrn_hi
, 0, 0, 28, 2, 32, total_length
, buffer
);
655 errmsg
= insert_normal (cd
, fields
->f_ccrn_lo
, 0, 0, 4, 4, 32, total_length
, buffer
);
660 case MEP_OPERAND_CDISP10
:
662 long value
= fields
->f_cdisp10
;
663 value
= (((((((((value
) & (128))) ? (((value
) ^ (768))) : (value
)) & (512))) ? ((((((value
) & (128))) ? (((value
) ^ (768))) : (value
)) - (1024))) : ((((value
) & (128))) ? (((value
) ^ (768))) : (value
))) & (512))) ? (((((((((((value
) & (128))) ? (((value
) ^ (768))) : (value
)) & (512))) ? ((((((value
) & (128))) ? (((value
) ^ (768))) : (value
)) - (1024))) : ((((value
) & (128))) ? (((value
) ^ (768))) : (value
))) & (1023))) - (1024))) : (((((((((value
) & (128))) ? (((value
) ^ (768))) : (value
)) & (512))) ? ((((((value
) & (128))) ? (((value
) ^ (768))) : (value
)) - (1024))) : ((((value
) & (128))) ? (((value
) ^ (768))) : (value
))) & (1023)));
664 errmsg
= insert_normal (cd
, value
, 0|(1<<CGEN_IFLD_SIGNED
), 0, 22, 10, 32, total_length
, buffer
);
667 case MEP_OPERAND_CDISP10A2
:
669 long value
= fields
->f_cdisp10
;
670 value
= (((((((((value
) & (128))) ? (((value
) ^ (768))) : (value
)) & (512))) ? ((((((value
) & (128))) ? (((value
) ^ (768))) : (value
)) - (1024))) : ((((value
) & (128))) ? (((value
) ^ (768))) : (value
))) & (512))) ? (((((((((((value
) & (128))) ? (((value
) ^ (768))) : (value
)) & (512))) ? ((((((value
) & (128))) ? (((value
) ^ (768))) : (value
)) - (1024))) : ((((value
) & (128))) ? (((value
) ^ (768))) : (value
))) & (1023))) - (1024))) : (((((((((value
) & (128))) ? (((value
) ^ (768))) : (value
)) & (512))) ? ((((((value
) & (128))) ? (((value
) ^ (768))) : (value
)) - (1024))) : ((((value
) & (128))) ? (((value
) ^ (768))) : (value
))) & (1023)));
671 errmsg
= insert_normal (cd
, value
, 0|(1<<CGEN_IFLD_SIGNED
), 0, 22, 10, 32, total_length
, buffer
);
674 case MEP_OPERAND_CDISP10A4
:
676 long value
= fields
->f_cdisp10
;
677 value
= (((((((((value
) & (128))) ? (((value
) ^ (768))) : (value
)) & (512))) ? ((((((value
) & (128))) ? (((value
) ^ (768))) : (value
)) - (1024))) : ((((value
) & (128))) ? (((value
) ^ (768))) : (value
))) & (512))) ? (((((((((((value
) & (128))) ? (((value
) ^ (768))) : (value
)) & (512))) ? ((((((value
) & (128))) ? (((value
) ^ (768))) : (value
)) - (1024))) : ((((value
) & (128))) ? (((value
) ^ (768))) : (value
))) & (1023))) - (1024))) : (((((((((value
) & (128))) ? (((value
) ^ (768))) : (value
)) & (512))) ? ((((((value
) & (128))) ? (((value
) ^ (768))) : (value
)) - (1024))) : ((((value
) & (128))) ? (((value
) ^ (768))) : (value
))) & (1023)));
678 errmsg
= insert_normal (cd
, value
, 0|(1<<CGEN_IFLD_SIGNED
), 0, 22, 10, 32, total_length
, buffer
);
681 case MEP_OPERAND_CDISP10A8
:
683 long value
= fields
->f_cdisp10
;
684 value
= (((((((((value
) & (128))) ? (((value
) ^ (768))) : (value
)) & (512))) ? ((((((value
) & (128))) ? (((value
) ^ (768))) : (value
)) - (1024))) : ((((value
) & (128))) ? (((value
) ^ (768))) : (value
))) & (512))) ? (((((((((((value
) & (128))) ? (((value
) ^ (768))) : (value
)) & (512))) ? ((((((value
) & (128))) ? (((value
) ^ (768))) : (value
)) - (1024))) : ((((value
) & (128))) ? (((value
) ^ (768))) : (value
))) & (1023))) - (1024))) : (((((((((value
) & (128))) ? (((value
) ^ (768))) : (value
)) & (512))) ? ((((((value
) & (128))) ? (((value
) ^ (768))) : (value
)) - (1024))) : ((((value
) & (128))) ? (((value
) ^ (768))) : (value
))) & (1023)));
685 errmsg
= insert_normal (cd
, value
, 0|(1<<CGEN_IFLD_SIGNED
), 0, 22, 10, 32, total_length
, buffer
);
688 case MEP_OPERAND_CDISP12
:
689 errmsg
= insert_normal (cd
, fields
->f_12s20
, 0|(1<<CGEN_IFLD_SIGNED
), 0, 20, 12, 32, total_length
, buffer
);
691 case MEP_OPERAND_CIMM4
:
692 errmsg
= insert_normal (cd
, fields
->f_rn
, 0, 0, 4, 4, 32, total_length
, buffer
);
694 case MEP_OPERAND_CIMM5
:
695 errmsg
= insert_normal (cd
, fields
->f_5u24
, 0, 0, 24, 5, 32, total_length
, buffer
);
697 case MEP_OPERAND_CODE16
:
698 errmsg
= insert_normal (cd
, fields
->f_16u16
, 0, 0, 16, 16, 32, total_length
, buffer
);
700 case MEP_OPERAND_CODE24
:
703 FLD (f_24u4n_hi
) = ((UINT
) (FLD (f_24u4n
)) >> (16));
704 FLD (f_24u4n_lo
) = ((FLD (f_24u4n
)) & (65535));
706 errmsg
= insert_normal (cd
, fields
->f_24u4n_hi
, 0, 0, 4, 8, 32, total_length
, buffer
);
709 errmsg
= insert_normal (cd
, fields
->f_24u4n_lo
, 0, 0, 16, 16, 32, total_length
, buffer
);
714 case MEP_OPERAND_CP_FLAG
:
716 case MEP_OPERAND_CRN
:
717 errmsg
= insert_normal (cd
, fields
->f_crn
, 0, 0, 4, 4, 32, total_length
, buffer
);
719 case MEP_OPERAND_CRN64
:
720 errmsg
= insert_normal (cd
, fields
->f_crn
, 0, 0, 4, 4, 32, total_length
, buffer
);
722 case MEP_OPERAND_CRNX
:
725 FLD (f_crnx_lo
) = ((FLD (f_crnx
)) & (15));
726 FLD (f_crnx_hi
) = ((UINT
) (FLD (f_crnx
)) >> (4));
728 errmsg
= insert_normal (cd
, fields
->f_crnx_hi
, 0, 0, 28, 1, 32, total_length
, buffer
);
731 errmsg
= insert_normal (cd
, fields
->f_crnx_lo
, 0, 0, 4, 4, 32, total_length
, buffer
);
736 case MEP_OPERAND_CRNX64
:
739 FLD (f_crnx_lo
) = ((FLD (f_crnx
)) & (15));
740 FLD (f_crnx_hi
) = ((UINT
) (FLD (f_crnx
)) >> (4));
742 errmsg
= insert_normal (cd
, fields
->f_crnx_hi
, 0, 0, 28, 1, 32, total_length
, buffer
);
745 errmsg
= insert_normal (cd
, fields
->f_crnx_lo
, 0, 0, 4, 4, 32, total_length
, buffer
);
750 case MEP_OPERAND_CROC
:
751 errmsg
= insert_normal (cd
, fields
->f_ivc2_5u7
, 0, 0, 7, 5, 32, total_length
, buffer
);
753 case MEP_OPERAND_CROP
:
754 errmsg
= insert_normal (cd
, fields
->f_ivc2_5u23
, 0, 0, 23, 5, 32, total_length
, buffer
);
756 case MEP_OPERAND_CRPC
:
757 errmsg
= insert_normal (cd
, fields
->f_ivc2_5u26
, 0, 0, 26, 5, 32, total_length
, buffer
);
759 case MEP_OPERAND_CRPP
:
760 errmsg
= insert_normal (cd
, fields
->f_ivc2_5u18
, 0, 0, 18, 5, 32, total_length
, buffer
);
762 case MEP_OPERAND_CRQC
:
763 errmsg
= insert_normal (cd
, fields
->f_ivc2_5u21
, 0, 0, 21, 5, 32, total_length
, buffer
);
765 case MEP_OPERAND_CRQP
:
766 errmsg
= insert_normal (cd
, fields
->f_ivc2_5u13
, 0, 0, 13, 5, 32, total_length
, buffer
);
768 case MEP_OPERAND_CSRN
:
771 FLD (f_csrn_lo
) = ((FLD (f_csrn
)) & (15));
772 FLD (f_csrn_hi
) = ((UINT
) (FLD (f_csrn
)) >> (4));
774 errmsg
= insert_normal (cd
, fields
->f_csrn_hi
, 0, 0, 15, 1, 32, total_length
, buffer
);
777 errmsg
= insert_normal (cd
, fields
->f_csrn_lo
, 0, 0, 8, 4, 32, total_length
, buffer
);
782 case MEP_OPERAND_CSRN_IDX
:
785 FLD (f_csrn_lo
) = ((FLD (f_csrn
)) & (15));
786 FLD (f_csrn_hi
) = ((UINT
) (FLD (f_csrn
)) >> (4));
788 errmsg
= insert_normal (cd
, fields
->f_csrn_hi
, 0, 0, 15, 1, 32, total_length
, buffer
);
791 errmsg
= insert_normal (cd
, fields
->f_csrn_lo
, 0, 0, 8, 4, 32, total_length
, buffer
);
796 case MEP_OPERAND_DBG
:
798 case MEP_OPERAND_DEPC
:
800 case MEP_OPERAND_EPC
:
802 case MEP_OPERAND_EXC
:
804 case MEP_OPERAND_HI
:
806 case MEP_OPERAND_IMM16P0
:
809 FLD (f_ivc2_8u0
) = ((((UINT
) (FLD (f_ivc2_imm16p0
)) >> (8))) & (255));
810 FLD (f_ivc2_8u20
) = ((FLD (f_ivc2_imm16p0
)) & (255));
812 errmsg
= insert_normal (cd
, fields
->f_ivc2_8u0
, 0, 0, 0, 8, 32, total_length
, buffer
);
815 errmsg
= insert_normal (cd
, fields
->f_ivc2_8u20
, 0, 0, 20, 8, 32, total_length
, buffer
);
820 case MEP_OPERAND_IMM3P12
:
821 errmsg
= insert_normal (cd
, fields
->f_ivc2_3u12
, 0, 0, 12, 3, 32, total_length
, buffer
);
823 case MEP_OPERAND_IMM3P25
:
824 errmsg
= insert_normal (cd
, fields
->f_ivc2_3u25
, 0, 0, 25, 3, 32, total_length
, buffer
);
826 case MEP_OPERAND_IMM3P4
:
827 errmsg
= insert_normal (cd
, fields
->f_ivc2_3u4
, 0, 0, 4, 3, 32, total_length
, buffer
);
829 case MEP_OPERAND_IMM3P5
:
830 errmsg
= insert_normal (cd
, fields
->f_ivc2_3u5
, 0, 0, 5, 3, 32, total_length
, buffer
);
832 case MEP_OPERAND_IMM3P9
:
833 errmsg
= insert_normal (cd
, fields
->f_ivc2_3u9
, 0, 0, 9, 3, 32, total_length
, buffer
);
835 case MEP_OPERAND_IMM4P10
:
836 errmsg
= insert_normal (cd
, fields
->f_ivc2_4u10
, 0, 0, 10, 4, 32, total_length
, buffer
);
838 case MEP_OPERAND_IMM4P4
:
839 errmsg
= insert_normal (cd
, fields
->f_ivc2_4u4
, 0, 0, 4, 4, 32, total_length
, buffer
);
841 case MEP_OPERAND_IMM4P8
:
842 errmsg
= insert_normal (cd
, fields
->f_ivc2_4u8
, 0, 0, 8, 4, 32, total_length
, buffer
);
844 case MEP_OPERAND_IMM5P23
:
845 errmsg
= insert_normal (cd
, fields
->f_ivc2_5u23
, 0, 0, 23, 5, 32, total_length
, buffer
);
847 case MEP_OPERAND_IMM5P3
:
848 errmsg
= insert_normal (cd
, fields
->f_ivc2_5u3
, 0, 0, 3, 5, 32, total_length
, buffer
);
850 case MEP_OPERAND_IMM5P7
:
851 errmsg
= insert_normal (cd
, fields
->f_ivc2_5u7
, 0, 0, 7, 5, 32, total_length
, buffer
);
853 case MEP_OPERAND_IMM5P8
:
854 errmsg
= insert_normal (cd
, fields
->f_ivc2_5u8
, 0, 0, 8, 5, 32, total_length
, buffer
);
856 case MEP_OPERAND_IMM6P2
:
857 errmsg
= insert_normal (cd
, fields
->f_ivc2_6u2
, 0, 0, 2, 6, 32, total_length
, buffer
);
859 case MEP_OPERAND_IMM6P6
:
860 errmsg
= insert_normal (cd
, fields
->f_ivc2_6u6
, 0, 0, 6, 6, 32, total_length
, buffer
);
862 case MEP_OPERAND_IMM8P0
:
863 errmsg
= insert_normal (cd
, fields
->f_ivc2_8u0
, 0, 0, 0, 8, 32, total_length
, buffer
);
865 case MEP_OPERAND_IMM8P20
:
866 errmsg
= insert_normal (cd
, fields
->f_ivc2_8u20
, 0, 0, 20, 8, 32, total_length
, buffer
);
868 case MEP_OPERAND_IMM8P4
:
869 errmsg
= insert_normal (cd
, fields
->f_ivc2_8u4
, 0, 0, 4, 8, 32, total_length
, buffer
);
871 case MEP_OPERAND_IVC_X_0_2
:
872 errmsg
= insert_normal (cd
, fields
->f_ivc2_2u0
, 0, 0, 0, 2, 32, total_length
, buffer
);
874 case MEP_OPERAND_IVC_X_0_3
:
875 errmsg
= insert_normal (cd
, fields
->f_ivc2_3u0
, 0, 0, 0, 3, 32, total_length
, buffer
);
877 case MEP_OPERAND_IVC_X_0_4
:
878 errmsg
= insert_normal (cd
, fields
->f_ivc2_4u0
, 0, 0, 0, 4, 32, total_length
, buffer
);
880 case MEP_OPERAND_IVC_X_0_5
:
881 errmsg
= insert_normal (cd
, fields
->f_ivc2_5u0
, 0, 0, 0, 5, 32, total_length
, buffer
);
883 case MEP_OPERAND_IVC_X_6_1
:
884 errmsg
= insert_normal (cd
, fields
->f_ivc2_1u6
, 0, 0, 6, 1, 32, total_length
, buffer
);
886 case MEP_OPERAND_IVC_X_6_2
:
887 errmsg
= insert_normal (cd
, fields
->f_ivc2_2u6
, 0, 0, 6, 2, 32, total_length
, buffer
);
889 case MEP_OPERAND_IVC_X_6_3
:
890 errmsg
= insert_normal (cd
, fields
->f_ivc2_3u6
, 0, 0, 6, 3, 32, total_length
, buffer
);
892 case MEP_OPERAND_IVC2_ACC0_0
:
894 case MEP_OPERAND_IVC2_ACC0_1
:
896 case MEP_OPERAND_IVC2_ACC0_2
:
898 case MEP_OPERAND_IVC2_ACC0_3
:
900 case MEP_OPERAND_IVC2_ACC0_4
:
902 case MEP_OPERAND_IVC2_ACC0_5
:
904 case MEP_OPERAND_IVC2_ACC0_6
:
906 case MEP_OPERAND_IVC2_ACC0_7
:
908 case MEP_OPERAND_IVC2_ACC1_0
:
910 case MEP_OPERAND_IVC2_ACC1_1
:
912 case MEP_OPERAND_IVC2_ACC1_2
:
914 case MEP_OPERAND_IVC2_ACC1_3
:
916 case MEP_OPERAND_IVC2_ACC1_4
:
918 case MEP_OPERAND_IVC2_ACC1_5
:
920 case MEP_OPERAND_IVC2_ACC1_6
:
922 case MEP_OPERAND_IVC2_ACC1_7
:
924 case MEP_OPERAND_IVC2_CC
:
926 case MEP_OPERAND_IVC2_COFA0
:
928 case MEP_OPERAND_IVC2_COFA1
:
930 case MEP_OPERAND_IVC2_COFR0
:
932 case MEP_OPERAND_IVC2_COFR1
:
934 case MEP_OPERAND_IVC2_CSAR0
:
936 case MEP_OPERAND_IVC2_CSAR1
:
938 case MEP_OPERAND_IVC2C3CCRN
:
941 FLD (f_ivc2_ccrn_c3hi
) = ((((UINT
) (FLD (f_ivc2_ccrn_c3
)) >> (4))) & (3));
942 FLD (f_ivc2_ccrn_c3lo
) = ((FLD (f_ivc2_ccrn_c3
)) & (15));
944 errmsg
= insert_normal (cd
, fields
->f_ivc2_ccrn_c3hi
, 0, 0, 28, 2, 32, total_length
, buffer
);
947 errmsg
= insert_normal (cd
, fields
->f_ivc2_ccrn_c3lo
, 0, 0, 4, 4, 32, total_length
, buffer
);
952 case MEP_OPERAND_IVC2CCRN
:
955 FLD (f_ivc2_ccrn_h2
) = ((((UINT
) (FLD (f_ivc2_ccrn
)) >> (4))) & (3));
956 FLD (f_ivc2_ccrn_lo
) = ((FLD (f_ivc2_ccrn
)) & (15));
958 errmsg
= insert_normal (cd
, fields
->f_ivc2_ccrn_h2
, 0, 0, 20, 2, 32, total_length
, buffer
);
961 errmsg
= insert_normal (cd
, fields
->f_ivc2_ccrn_lo
, 0, 0, 0, 4, 32, total_length
, buffer
);
966 case MEP_OPERAND_IVC2CRN
:
969 FLD (f_ivc2_ccrn_h1
) = ((((UINT
) (FLD (f_ivc2_crnx
)) >> (4))) & (1));
970 FLD (f_ivc2_ccrn_lo
) = ((FLD (f_ivc2_crnx
)) & (15));
972 errmsg
= insert_normal (cd
, fields
->f_ivc2_ccrn_h1
, 0, 0, 20, 1, 32, total_length
, buffer
);
975 errmsg
= insert_normal (cd
, fields
->f_ivc2_ccrn_lo
, 0, 0, 0, 4, 32, total_length
, buffer
);
980 case MEP_OPERAND_IVC2RM
:
981 errmsg
= insert_normal (cd
, fields
->f_ivc2_crm
, 0, 0, 4, 4, 32, total_length
, buffer
);
983 case MEP_OPERAND_LO
:
985 case MEP_OPERAND_LP
:
987 case MEP_OPERAND_MB0
:
989 case MEP_OPERAND_MB1
:
991 case MEP_OPERAND_ME0
:
993 case MEP_OPERAND_ME1
:
995 case MEP_OPERAND_NPC
:
997 case MEP_OPERAND_OPT
:
999 case MEP_OPERAND_PCABS24A2
:
1002 FLD (f_24u5a2n_lo
) = ((UINT
) (((FLD (f_24u5a2n
)) & (255))) >> (1));
1003 FLD (f_24u5a2n_hi
) = ((UINT
) (FLD (f_24u5a2n
)) >> (8));
1005 errmsg
= insert_normal (cd
, fields
->f_24u5a2n_hi
, 0, 0, 16, 16, 32, total_length
, buffer
);
1008 errmsg
= insert_normal (cd
, fields
->f_24u5a2n_lo
, 0, 0, 5, 7, 32, total_length
, buffer
);
1013 case MEP_OPERAND_PCREL12A2
:
1015 long value
= fields
->f_12s4a2
;
1016 value
= ((SI
) (((value
) - (pc
))) >> (1));
1017 errmsg
= insert_normal (cd
, value
, 0|(1<<CGEN_IFLD_SIGNED
)|(1<<CGEN_IFLD_PCREL_ADDR
), 0, 4, 11, 32, total_length
, buffer
);
1020 case MEP_OPERAND_PCREL17A2
:
1022 long value
= fields
->f_17s16a2
;
1023 value
= ((SI
) (((value
) - (pc
))) >> (1));
1024 errmsg
= insert_normal (cd
, value
, 0|(1<<CGEN_IFLD_SIGNED
)|(1<<CGEN_IFLD_PCREL_ADDR
), 0, 16, 16, 32, total_length
, buffer
);
1027 case MEP_OPERAND_PCREL24A2
:
1030 FLD (f_24s5a2n
) = ((FLD (f_24s5a2n
)) - (pc
));
1031 FLD (f_24s5a2n_lo
) = ((UINT
) (((FLD (f_24s5a2n
)) & (254))) >> (1));
1032 FLD (f_24s5a2n_hi
) = ((INT
) (FLD (f_24s5a2n
)) >> (8));
1034 errmsg
= insert_normal (cd
, fields
->f_24s5a2n_hi
, 0|(1<<CGEN_IFLD_SIGNED
)|(1<<CGEN_IFLD_PCREL_ADDR
), 0, 16, 16, 32, total_length
, buffer
);
1037 errmsg
= insert_normal (cd
, fields
->f_24s5a2n_lo
, 0|(1<<CGEN_IFLD_PCREL_ADDR
), 0, 5, 7, 32, total_length
, buffer
);
1042 case MEP_OPERAND_PCREL8A2
:
1044 long value
= fields
->f_8s8a2
;
1045 value
= ((SI
) (((value
) - (pc
))) >> (1));
1046 errmsg
= insert_normal (cd
, value
, 0|(1<<CGEN_IFLD_SIGNED
)|(1<<CGEN_IFLD_PCREL_ADDR
), 0, 8, 7, 32, total_length
, buffer
);
1049 case MEP_OPERAND_PSW
:
1051 case MEP_OPERAND_R0
:
1053 case MEP_OPERAND_R1
:
1055 case MEP_OPERAND_RL
:
1056 errmsg
= insert_normal (cd
, fields
->f_rl
, 0, 0, 12, 4, 32, total_length
, buffer
);
1058 case MEP_OPERAND_RL5
:
1059 errmsg
= insert_normal (cd
, fields
->f_rl5
, 0, 0, 20, 4, 32, total_length
, buffer
);
1061 case MEP_OPERAND_RM
:
1062 errmsg
= insert_normal (cd
, fields
->f_rm
, 0, 0, 8, 4, 32, total_length
, buffer
);
1064 case MEP_OPERAND_RMA
:
1065 errmsg
= insert_normal (cd
, fields
->f_rm
, 0, 0, 8, 4, 32, total_length
, buffer
);
1067 case MEP_OPERAND_RN
:
1068 errmsg
= insert_normal (cd
, fields
->f_rn
, 0, 0, 4, 4, 32, total_length
, buffer
);
1070 case MEP_OPERAND_RN3
:
1071 errmsg
= insert_normal (cd
, fields
->f_rn3
, 0, 0, 5, 3, 32, total_length
, buffer
);
1073 case MEP_OPERAND_RN3C
:
1074 errmsg
= insert_normal (cd
, fields
->f_rn3
, 0, 0, 5, 3, 32, total_length
, buffer
);
1076 case MEP_OPERAND_RN3L
:
1077 errmsg
= insert_normal (cd
, fields
->f_rn3
, 0, 0, 5, 3, 32, total_length
, buffer
);
1079 case MEP_OPERAND_RN3S
:
1080 errmsg
= insert_normal (cd
, fields
->f_rn3
, 0, 0, 5, 3, 32, total_length
, buffer
);
1082 case MEP_OPERAND_RN3UC
:
1083 errmsg
= insert_normal (cd
, fields
->f_rn3
, 0, 0, 5, 3, 32, total_length
, buffer
);
1085 case MEP_OPERAND_RN3UL
:
1086 errmsg
= insert_normal (cd
, fields
->f_rn3
, 0, 0, 5, 3, 32, total_length
, buffer
);
1088 case MEP_OPERAND_RN3US
:
1089 errmsg
= insert_normal (cd
, fields
->f_rn3
, 0, 0, 5, 3, 32, total_length
, buffer
);
1091 case MEP_OPERAND_RNC
:
1092 errmsg
= insert_normal (cd
, fields
->f_rn
, 0, 0, 4, 4, 32, total_length
, buffer
);
1094 case MEP_OPERAND_RNL
:
1095 errmsg
= insert_normal (cd
, fields
->f_rn
, 0, 0, 4, 4, 32, total_length
, buffer
);
1097 case MEP_OPERAND_RNS
:
1098 errmsg
= insert_normal (cd
, fields
->f_rn
, 0, 0, 4, 4, 32, total_length
, buffer
);
1100 case MEP_OPERAND_RNUC
:
1101 errmsg
= insert_normal (cd
, fields
->f_rn
, 0, 0, 4, 4, 32, total_length
, buffer
);
1103 case MEP_OPERAND_RNUL
:
1104 errmsg
= insert_normal (cd
, fields
->f_rn
, 0, 0, 4, 4, 32, total_length
, buffer
);
1106 case MEP_OPERAND_RNUS
:
1107 errmsg
= insert_normal (cd
, fields
->f_rn
, 0, 0, 4, 4, 32, total_length
, buffer
);
1109 case MEP_OPERAND_SAR
:
1111 case MEP_OPERAND_SDISP16
:
1112 errmsg
= insert_normal (cd
, fields
->f_16s16
, 0|(1<<CGEN_IFLD_SIGNED
), 0, 16, 16, 32, total_length
, buffer
);
1114 case MEP_OPERAND_SIMM16
:
1115 errmsg
= insert_normal (cd
, fields
->f_16s16
, 0|(1<<CGEN_IFLD_SIGNED
), 0, 16, 16, 32, total_length
, buffer
);
1117 case MEP_OPERAND_SIMM16P0
:
1120 FLD (f_ivc2_8u0
) = ((((UINT
) (FLD (f_ivc2_simm16p0
)) >> (8))) & (255));
1121 FLD (f_ivc2_8u20
) = ((FLD (f_ivc2_simm16p0
)) & (255));
1123 errmsg
= insert_normal (cd
, fields
->f_ivc2_8u0
, 0, 0, 0, 8, 32, total_length
, buffer
);
1126 errmsg
= insert_normal (cd
, fields
->f_ivc2_8u20
, 0, 0, 20, 8, 32, total_length
, buffer
);
1131 case MEP_OPERAND_SIMM6
:
1132 errmsg
= insert_normal (cd
, fields
->f_6s8
, 0|(1<<CGEN_IFLD_SIGNED
), 0, 8, 6, 32, total_length
, buffer
);
1134 case MEP_OPERAND_SIMM8
:
1135 errmsg
= insert_normal (cd
, fields
->f_8s8
, 0|(1<<CGEN_IFLD_SIGNED
), 0, 8, 8, 32, total_length
, buffer
);
1137 case MEP_OPERAND_SIMM8P0
:
1138 errmsg
= insert_normal (cd
, fields
->f_ivc2_8s0
, 0|(1<<CGEN_IFLD_SIGNED
), 0, 0, 8, 32, total_length
, buffer
);
1140 case MEP_OPERAND_SIMM8P20
:
1141 errmsg
= insert_normal (cd
, fields
->f_ivc2_8s20
, 0|(1<<CGEN_IFLD_SIGNED
), 0, 20, 8, 32, total_length
, buffer
);
1143 case MEP_OPERAND_SIMM8P4
:
1144 errmsg
= insert_normal (cd
, fields
->f_ivc2_8s4
, 0|(1<<CGEN_IFLD_SIGNED
), 0, 4, 8, 32, total_length
, buffer
);
1146 case MEP_OPERAND_SP
:
1148 case MEP_OPERAND_SPR
:
1150 case MEP_OPERAND_TP
:
1152 case MEP_OPERAND_TPR
:
1154 case MEP_OPERAND_UDISP2
:
1155 errmsg
= insert_normal (cd
, fields
->f_2u6
, 0, 0, 6, 2, 32, total_length
, buffer
);
1157 case MEP_OPERAND_UDISP7
:
1158 errmsg
= insert_normal (cd
, fields
->f_7u9
, 0, 0, 9, 7, 32, total_length
, buffer
);
1160 case MEP_OPERAND_UDISP7A2
:
1162 long value
= fields
->f_7u9a2
;
1163 value
= ((USI
) (value
) >> (1));
1164 errmsg
= insert_normal (cd
, value
, 0, 0, 9, 6, 32, total_length
, buffer
);
1167 case MEP_OPERAND_UDISP7A4
:
1169 long value
= fields
->f_7u9a4
;
1170 value
= ((USI
) (value
) >> (2));
1171 errmsg
= insert_normal (cd
, value
, 0, 0, 9, 5, 32, total_length
, buffer
);
1174 case MEP_OPERAND_UIMM16
:
1175 errmsg
= insert_normal (cd
, fields
->f_16u16
, 0, 0, 16, 16, 32, total_length
, buffer
);
1177 case MEP_OPERAND_UIMM2
:
1178 errmsg
= insert_normal (cd
, fields
->f_2u10
, 0, 0, 10, 2, 32, total_length
, buffer
);
1180 case MEP_OPERAND_UIMM24
:
1183 FLD (f_24u8n_hi
) = ((UINT
) (FLD (f_24u8n
)) >> (8));
1184 FLD (f_24u8n_lo
) = ((FLD (f_24u8n
)) & (255));
1186 errmsg
= insert_normal (cd
, fields
->f_24u8n_hi
, 0, 0, 16, 16, 32, total_length
, buffer
);
1189 errmsg
= insert_normal (cd
, fields
->f_24u8n_lo
, 0, 0, 8, 8, 32, total_length
, buffer
);
1194 case MEP_OPERAND_UIMM3
:
1195 errmsg
= insert_normal (cd
, fields
->f_3u5
, 0, 0, 5, 3, 32, total_length
, buffer
);
1197 case MEP_OPERAND_UIMM4
:
1198 errmsg
= insert_normal (cd
, fields
->f_4u8
, 0, 0, 8, 4, 32, total_length
, buffer
);
1200 case MEP_OPERAND_UIMM5
:
1201 errmsg
= insert_normal (cd
, fields
->f_5u8
, 0, 0, 8, 5, 32, total_length
, buffer
);
1203 case MEP_OPERAND_UIMM7A4
:
1205 long value
= fields
->f_7u9a4
;
1206 value
= ((USI
) (value
) >> (2));
1207 errmsg
= insert_normal (cd
, value
, 0, 0, 9, 5, 32, total_length
, buffer
);
1210 case MEP_OPERAND_ZERO
:
1214 /* xgettext:c-format */
1215 opcodes_error_handler
1216 (_("internal error: unrecognized field %d while building insn"),
1224 int mep_cgen_extract_operand
1225 (CGEN_CPU_DESC
, int, CGEN_EXTRACT_INFO
*, CGEN_INSN_INT
, CGEN_FIELDS
*, bfd_vma
);
1227 /* Main entry point for operand extraction.
1228 The result is <= 0 for error, >0 for success.
1229 ??? Actual values aren't well defined right now.
1231 This function is basically just a big switch statement. Earlier versions
1232 used tables to look up the function to use, but
1233 - if the table contains both assembler and disassembler functions then
1234 the disassembler contains much of the assembler and vice-versa,
1235 - there's a lot of inlining possibilities as things grow,
1236 - using a switch statement avoids the function call overhead.
1238 This function could be moved into `print_insn_normal', but keeping it
1239 separate makes clear the interface between `print_insn_normal' and each of
1243 mep_cgen_extract_operand (CGEN_CPU_DESC cd
,
1245 CGEN_EXTRACT_INFO
*ex_info
,
1246 CGEN_INSN_INT insn_value
,
1247 CGEN_FIELDS
* fields
,
1250 /* Assume success (for those operands that are nops). */
1252 unsigned int total_length
= CGEN_FIELDS_BITSIZE (fields
);
1256 case MEP_OPERAND_ADDR24A4
:
1258 length
= extract_normal (cd
, ex_info
, insn_value
, 0, 0, 16, 16, 32, total_length
, pc
, & fields
->f_24u8a4n_hi
);
1259 if (length
<= 0) break;
1260 length
= extract_normal (cd
, ex_info
, insn_value
, 0, 0, 8, 6, 32, total_length
, pc
, & fields
->f_24u8a4n_lo
);
1261 if (length
<= 0) break;
1262 FLD (f_24u8a4n
) = ((((FLD (f_24u8a4n_hi
)) << (8))) | (((FLD (f_24u8a4n_lo
)) << (2))));
1265 case MEP_OPERAND_C5RMUIMM20
:
1267 length
= extract_normal (cd
, ex_info
, insn_value
, 0, 0, 8, 4, 32, total_length
, pc
, & fields
->f_c5_rm
);
1268 if (length
<= 0) break;
1269 length
= extract_normal (cd
, ex_info
, insn_value
, 0, 0, 16, 16, 32, total_length
, pc
, & fields
->f_c5_16u16
);
1270 if (length
<= 0) break;
1272 FLD (f_c5_rmuimm20
) = ((FLD (f_c5_16u16
)) | (((FLD (f_c5_rm
)) << (16))));
1276 case MEP_OPERAND_C5RNMUIMM24
:
1278 length
= extract_normal (cd
, ex_info
, insn_value
, 0, 0, 4, 8, 32, total_length
, pc
, & fields
->f_c5_rnm
);
1279 if (length
<= 0) break;
1280 length
= extract_normal (cd
, ex_info
, insn_value
, 0, 0, 16, 16, 32, total_length
, pc
, & fields
->f_c5_16u16
);
1281 if (length
<= 0) break;
1283 FLD (f_c5_rnmuimm24
) = ((FLD (f_c5_16u16
)) | (((FLD (f_c5_rnm
)) << (16))));
1287 case MEP_OPERAND_CALLNUM
:
1289 length
= extract_normal (cd
, ex_info
, insn_value
, 0, 0, 5, 1, 32, total_length
, pc
, & fields
->f_5
);
1290 if (length
<= 0) break;
1291 length
= extract_normal (cd
, ex_info
, insn_value
, 0, 0, 6, 1, 32, total_length
, pc
, & fields
->f_6
);
1292 if (length
<= 0) break;
1293 length
= extract_normal (cd
, ex_info
, insn_value
, 0, 0, 7, 1, 32, total_length
, pc
, & fields
->f_7
);
1294 if (length
<= 0) break;
1295 length
= extract_normal (cd
, ex_info
, insn_value
, 0, 0, 11, 1, 32, total_length
, pc
, & fields
->f_11
);
1296 if (length
<= 0) break;
1297 FLD (f_callnum
) = ((((FLD (f_5
)) << (3))) | (((((FLD (f_6
)) << (2))) | (((((FLD (f_7
)) << (1))) | (FLD (f_11
)))))));
1300 case MEP_OPERAND_CCCC
:
1301 length
= extract_normal (cd
, ex_info
, insn_value
, 0, 0, 8, 4, 32, total_length
, pc
, & fields
->f_rm
);
1303 case MEP_OPERAND_CCRN
:
1305 length
= extract_normal (cd
, ex_info
, insn_value
, 0, 0, 28, 2, 32, total_length
, pc
, & fields
->f_ccrn_hi
);
1306 if (length
<= 0) break;
1307 length
= extract_normal (cd
, ex_info
, insn_value
, 0, 0, 4, 4, 32, total_length
, pc
, & fields
->f_ccrn_lo
);
1308 if (length
<= 0) break;
1309 FLD (f_ccrn
) = ((((FLD (f_ccrn_hi
)) << (4))) | (FLD (f_ccrn_lo
)));
1312 case MEP_OPERAND_CDISP10
:
1315 length
= extract_normal (cd
, ex_info
, insn_value
, 0|(1<<CGEN_IFLD_SIGNED
), 0, 22, 10, 32, total_length
, pc
, & value
);
1316 value
= (((((((((value
) & (128))) ? (((value
) ^ (768))) : (value
)) & (512))) ? ((((((value
) & (128))) ? (((value
) ^ (768))) : (value
)) - (1024))) : ((((value
) & (128))) ? (((value
) ^ (768))) : (value
))) & (512))) ? (((((((((((value
) & (128))) ? (((value
) ^ (768))) : (value
)) & (512))) ? ((((((value
) & (128))) ? (((value
) ^ (768))) : (value
)) - (1024))) : ((((value
) & (128))) ? (((value
) ^ (768))) : (value
))) & (1023))) - (1024))) : (((((((((value
) & (128))) ? (((value
) ^ (768))) : (value
)) & (512))) ? ((((((value
) & (128))) ? (((value
) ^ (768))) : (value
)) - (1024))) : ((((value
) & (128))) ? (((value
) ^ (768))) : (value
))) & (1023)));
1317 fields
->f_cdisp10
= value
;
1320 case MEP_OPERAND_CDISP10A2
:
1323 length
= extract_normal (cd
, ex_info
, insn_value
, 0|(1<<CGEN_IFLD_SIGNED
), 0, 22, 10, 32, total_length
, pc
, & value
);
1324 value
= (((((((((value
) & (128))) ? (((value
) ^ (768))) : (value
)) & (512))) ? ((((((value
) & (128))) ? (((value
) ^ (768))) : (value
)) - (1024))) : ((((value
) & (128))) ? (((value
) ^ (768))) : (value
))) & (512))) ? (((((((((((value
) & (128))) ? (((value
) ^ (768))) : (value
)) & (512))) ? ((((((value
) & (128))) ? (((value
) ^ (768))) : (value
)) - (1024))) : ((((value
) & (128))) ? (((value
) ^ (768))) : (value
))) & (1023))) - (1024))) : (((((((((value
) & (128))) ? (((value
) ^ (768))) : (value
)) & (512))) ? ((((((value
) & (128))) ? (((value
) ^ (768))) : (value
)) - (1024))) : ((((value
) & (128))) ? (((value
) ^ (768))) : (value
))) & (1023)));
1325 fields
->f_cdisp10
= value
;
1328 case MEP_OPERAND_CDISP10A4
:
1331 length
= extract_normal (cd
, ex_info
, insn_value
, 0|(1<<CGEN_IFLD_SIGNED
), 0, 22, 10, 32, total_length
, pc
, & value
);
1332 value
= (((((((((value
) & (128))) ? (((value
) ^ (768))) : (value
)) & (512))) ? ((((((value
) & (128))) ? (((value
) ^ (768))) : (value
)) - (1024))) : ((((value
) & (128))) ? (((value
) ^ (768))) : (value
))) & (512))) ? (((((((((((value
) & (128))) ? (((value
) ^ (768))) : (value
)) & (512))) ? ((((((value
) & (128))) ? (((value
) ^ (768))) : (value
)) - (1024))) : ((((value
) & (128))) ? (((value
) ^ (768))) : (value
))) & (1023))) - (1024))) : (((((((((value
) & (128))) ? (((value
) ^ (768))) : (value
)) & (512))) ? ((((((value
) & (128))) ? (((value
) ^ (768))) : (value
)) - (1024))) : ((((value
) & (128))) ? (((value
) ^ (768))) : (value
))) & (1023)));
1333 fields
->f_cdisp10
= value
;
1336 case MEP_OPERAND_CDISP10A8
:
1339 length
= extract_normal (cd
, ex_info
, insn_value
, 0|(1<<CGEN_IFLD_SIGNED
), 0, 22, 10, 32, total_length
, pc
, & value
);
1340 value
= (((((((((value
) & (128))) ? (((value
) ^ (768))) : (value
)) & (512))) ? ((((((value
) & (128))) ? (((value
) ^ (768))) : (value
)) - (1024))) : ((((value
) & (128))) ? (((value
) ^ (768))) : (value
))) & (512))) ? (((((((((((value
) & (128))) ? (((value
) ^ (768))) : (value
)) & (512))) ? ((((((value
) & (128))) ? (((value
) ^ (768))) : (value
)) - (1024))) : ((((value
) & (128))) ? (((value
) ^ (768))) : (value
))) & (1023))) - (1024))) : (((((((((value
) & (128))) ? (((value
) ^ (768))) : (value
)) & (512))) ? ((((((value
) & (128))) ? (((value
) ^ (768))) : (value
)) - (1024))) : ((((value
) & (128))) ? (((value
) ^ (768))) : (value
))) & (1023)));
1341 fields
->f_cdisp10
= value
;
1344 case MEP_OPERAND_CDISP12
:
1345 length
= extract_normal (cd
, ex_info
, insn_value
, 0|(1<<CGEN_IFLD_SIGNED
), 0, 20, 12, 32, total_length
, pc
, & fields
->f_12s20
);
1347 case MEP_OPERAND_CIMM4
:
1348 length
= extract_normal (cd
, ex_info
, insn_value
, 0, 0, 4, 4, 32, total_length
, pc
, & fields
->f_rn
);
1350 case MEP_OPERAND_CIMM5
:
1351 length
= extract_normal (cd
, ex_info
, insn_value
, 0, 0, 24, 5, 32, total_length
, pc
, & fields
->f_5u24
);
1353 case MEP_OPERAND_CODE16
:
1354 length
= extract_normal (cd
, ex_info
, insn_value
, 0, 0, 16, 16, 32, total_length
, pc
, & fields
->f_16u16
);
1356 case MEP_OPERAND_CODE24
:
1358 length
= extract_normal (cd
, ex_info
, insn_value
, 0, 0, 4, 8, 32, total_length
, pc
, & fields
->f_24u4n_hi
);
1359 if (length
<= 0) break;
1360 length
= extract_normal (cd
, ex_info
, insn_value
, 0, 0, 16, 16, 32, total_length
, pc
, & fields
->f_24u4n_lo
);
1361 if (length
<= 0) break;
1362 FLD (f_24u4n
) = ((((FLD (f_24u4n_hi
)) << (16))) | (FLD (f_24u4n_lo
)));
1365 case MEP_OPERAND_CP_FLAG
:
1367 case MEP_OPERAND_CRN
:
1368 length
= extract_normal (cd
, ex_info
, insn_value
, 0, 0, 4, 4, 32, total_length
, pc
, & fields
->f_crn
);
1370 case MEP_OPERAND_CRN64
:
1371 length
= extract_normal (cd
, ex_info
, insn_value
, 0, 0, 4, 4, 32, total_length
, pc
, & fields
->f_crn
);
1373 case MEP_OPERAND_CRNX
:
1375 length
= extract_normal (cd
, ex_info
, insn_value
, 0, 0, 28, 1, 32, total_length
, pc
, & fields
->f_crnx_hi
);
1376 if (length
<= 0) break;
1377 length
= extract_normal (cd
, ex_info
, insn_value
, 0, 0, 4, 4, 32, total_length
, pc
, & fields
->f_crnx_lo
);
1378 if (length
<= 0) break;
1379 FLD (f_crnx
) = ((((FLD (f_crnx_hi
)) << (4))) | (FLD (f_crnx_lo
)));
1382 case MEP_OPERAND_CRNX64
:
1384 length
= extract_normal (cd
, ex_info
, insn_value
, 0, 0, 28, 1, 32, total_length
, pc
, & fields
->f_crnx_hi
);
1385 if (length
<= 0) break;
1386 length
= extract_normal (cd
, ex_info
, insn_value
, 0, 0, 4, 4, 32, total_length
, pc
, & fields
->f_crnx_lo
);
1387 if (length
<= 0) break;
1388 FLD (f_crnx
) = ((((FLD (f_crnx_hi
)) << (4))) | (FLD (f_crnx_lo
)));
1391 case MEP_OPERAND_CROC
:
1392 length
= extract_normal (cd
, ex_info
, insn_value
, 0, 0, 7, 5, 32, total_length
, pc
, & fields
->f_ivc2_5u7
);
1394 case MEP_OPERAND_CROP
:
1395 length
= extract_normal (cd
, ex_info
, insn_value
, 0, 0, 23, 5, 32, total_length
, pc
, & fields
->f_ivc2_5u23
);
1397 case MEP_OPERAND_CRPC
:
1398 length
= extract_normal (cd
, ex_info
, insn_value
, 0, 0, 26, 5, 32, total_length
, pc
, & fields
->f_ivc2_5u26
);
1400 case MEP_OPERAND_CRPP
:
1401 length
= extract_normal (cd
, ex_info
, insn_value
, 0, 0, 18, 5, 32, total_length
, pc
, & fields
->f_ivc2_5u18
);
1403 case MEP_OPERAND_CRQC
:
1404 length
= extract_normal (cd
, ex_info
, insn_value
, 0, 0, 21, 5, 32, total_length
, pc
, & fields
->f_ivc2_5u21
);
1406 case MEP_OPERAND_CRQP
:
1407 length
= extract_normal (cd
, ex_info
, insn_value
, 0, 0, 13, 5, 32, total_length
, pc
, & fields
->f_ivc2_5u13
);
1409 case MEP_OPERAND_CSRN
:
1411 length
= extract_normal (cd
, ex_info
, insn_value
, 0, 0, 15, 1, 32, total_length
, pc
, & fields
->f_csrn_hi
);
1412 if (length
<= 0) break;
1413 length
= extract_normal (cd
, ex_info
, insn_value
, 0, 0, 8, 4, 32, total_length
, pc
, & fields
->f_csrn_lo
);
1414 if (length
<= 0) break;
1415 FLD (f_csrn
) = ((((FLD (f_csrn_hi
)) << (4))) | (FLD (f_csrn_lo
)));
1418 case MEP_OPERAND_CSRN_IDX
:
1420 length
= extract_normal (cd
, ex_info
, insn_value
, 0, 0, 15, 1, 32, total_length
, pc
, & fields
->f_csrn_hi
);
1421 if (length
<= 0) break;
1422 length
= extract_normal (cd
, ex_info
, insn_value
, 0, 0, 8, 4, 32, total_length
, pc
, & fields
->f_csrn_lo
);
1423 if (length
<= 0) break;
1424 FLD (f_csrn
) = ((((FLD (f_csrn_hi
)) << (4))) | (FLD (f_csrn_lo
)));
1427 case MEP_OPERAND_DBG
:
1429 case MEP_OPERAND_DEPC
:
1431 case MEP_OPERAND_EPC
:
1433 case MEP_OPERAND_EXC
:
1435 case MEP_OPERAND_HI
:
1437 case MEP_OPERAND_IMM16P0
:
1439 length
= extract_normal (cd
, ex_info
, insn_value
, 0, 0, 0, 8, 32, total_length
, pc
, & fields
->f_ivc2_8u0
);
1440 if (length
<= 0) break;
1441 length
= extract_normal (cd
, ex_info
, insn_value
, 0, 0, 20, 8, 32, total_length
, pc
, & fields
->f_ivc2_8u20
);
1442 if (length
<= 0) break;
1444 FLD (f_ivc2_imm16p0
) = ((FLD (f_ivc2_8u20
)) | (((FLD (f_ivc2_8u0
)) << (8))));
1448 case MEP_OPERAND_IMM3P12
:
1449 length
= extract_normal (cd
, ex_info
, insn_value
, 0, 0, 12, 3, 32, total_length
, pc
, & fields
->f_ivc2_3u12
);
1451 case MEP_OPERAND_IMM3P25
:
1452 length
= extract_normal (cd
, ex_info
, insn_value
, 0, 0, 25, 3, 32, total_length
, pc
, & fields
->f_ivc2_3u25
);
1454 case MEP_OPERAND_IMM3P4
:
1455 length
= extract_normal (cd
, ex_info
, insn_value
, 0, 0, 4, 3, 32, total_length
, pc
, & fields
->f_ivc2_3u4
);
1457 case MEP_OPERAND_IMM3P5
:
1458 length
= extract_normal (cd
, ex_info
, insn_value
, 0, 0, 5, 3, 32, total_length
, pc
, & fields
->f_ivc2_3u5
);
1460 case MEP_OPERAND_IMM3P9
:
1461 length
= extract_normal (cd
, ex_info
, insn_value
, 0, 0, 9, 3, 32, total_length
, pc
, & fields
->f_ivc2_3u9
);
1463 case MEP_OPERAND_IMM4P10
:
1464 length
= extract_normal (cd
, ex_info
, insn_value
, 0, 0, 10, 4, 32, total_length
, pc
, & fields
->f_ivc2_4u10
);
1466 case MEP_OPERAND_IMM4P4
:
1467 length
= extract_normal (cd
, ex_info
, insn_value
, 0, 0, 4, 4, 32, total_length
, pc
, & fields
->f_ivc2_4u4
);
1469 case MEP_OPERAND_IMM4P8
:
1470 length
= extract_normal (cd
, ex_info
, insn_value
, 0, 0, 8, 4, 32, total_length
, pc
, & fields
->f_ivc2_4u8
);
1472 case MEP_OPERAND_IMM5P23
:
1473 length
= extract_normal (cd
, ex_info
, insn_value
, 0, 0, 23, 5, 32, total_length
, pc
, & fields
->f_ivc2_5u23
);
1475 case MEP_OPERAND_IMM5P3
:
1476 length
= extract_normal (cd
, ex_info
, insn_value
, 0, 0, 3, 5, 32, total_length
, pc
, & fields
->f_ivc2_5u3
);
1478 case MEP_OPERAND_IMM5P7
:
1479 length
= extract_normal (cd
, ex_info
, insn_value
, 0, 0, 7, 5, 32, total_length
, pc
, & fields
->f_ivc2_5u7
);
1481 case MEP_OPERAND_IMM5P8
:
1482 length
= extract_normal (cd
, ex_info
, insn_value
, 0, 0, 8, 5, 32, total_length
, pc
, & fields
->f_ivc2_5u8
);
1484 case MEP_OPERAND_IMM6P2
:
1485 length
= extract_normal (cd
, ex_info
, insn_value
, 0, 0, 2, 6, 32, total_length
, pc
, & fields
->f_ivc2_6u2
);
1487 case MEP_OPERAND_IMM6P6
:
1488 length
= extract_normal (cd
, ex_info
, insn_value
, 0, 0, 6, 6, 32, total_length
, pc
, & fields
->f_ivc2_6u6
);
1490 case MEP_OPERAND_IMM8P0
:
1491 length
= extract_normal (cd
, ex_info
, insn_value
, 0, 0, 0, 8, 32, total_length
, pc
, & fields
->f_ivc2_8u0
);
1493 case MEP_OPERAND_IMM8P20
:
1494 length
= extract_normal (cd
, ex_info
, insn_value
, 0, 0, 20, 8, 32, total_length
, pc
, & fields
->f_ivc2_8u20
);
1496 case MEP_OPERAND_IMM8P4
:
1497 length
= extract_normal (cd
, ex_info
, insn_value
, 0, 0, 4, 8, 32, total_length
, pc
, & fields
->f_ivc2_8u4
);
1499 case MEP_OPERAND_IVC_X_0_2
:
1500 length
= extract_normal (cd
, ex_info
, insn_value
, 0, 0, 0, 2, 32, total_length
, pc
, & fields
->f_ivc2_2u0
);
1502 case MEP_OPERAND_IVC_X_0_3
:
1503 length
= extract_normal (cd
, ex_info
, insn_value
, 0, 0, 0, 3, 32, total_length
, pc
, & fields
->f_ivc2_3u0
);
1505 case MEP_OPERAND_IVC_X_0_4
:
1506 length
= extract_normal (cd
, ex_info
, insn_value
, 0, 0, 0, 4, 32, total_length
, pc
, & fields
->f_ivc2_4u0
);
1508 case MEP_OPERAND_IVC_X_0_5
:
1509 length
= extract_normal (cd
, ex_info
, insn_value
, 0, 0, 0, 5, 32, total_length
, pc
, & fields
->f_ivc2_5u0
);
1511 case MEP_OPERAND_IVC_X_6_1
:
1512 length
= extract_normal (cd
, ex_info
, insn_value
, 0, 0, 6, 1, 32, total_length
, pc
, & fields
->f_ivc2_1u6
);
1514 case MEP_OPERAND_IVC_X_6_2
:
1515 length
= extract_normal (cd
, ex_info
, insn_value
, 0, 0, 6, 2, 32, total_length
, pc
, & fields
->f_ivc2_2u6
);
1517 case MEP_OPERAND_IVC_X_6_3
:
1518 length
= extract_normal (cd
, ex_info
, insn_value
, 0, 0, 6, 3, 32, total_length
, pc
, & fields
->f_ivc2_3u6
);
1520 case MEP_OPERAND_IVC2_ACC0_0
:
1522 case MEP_OPERAND_IVC2_ACC0_1
:
1524 case MEP_OPERAND_IVC2_ACC0_2
:
1526 case MEP_OPERAND_IVC2_ACC0_3
:
1528 case MEP_OPERAND_IVC2_ACC0_4
:
1530 case MEP_OPERAND_IVC2_ACC0_5
:
1532 case MEP_OPERAND_IVC2_ACC0_6
:
1534 case MEP_OPERAND_IVC2_ACC0_7
:
1536 case MEP_OPERAND_IVC2_ACC1_0
:
1538 case MEP_OPERAND_IVC2_ACC1_1
:
1540 case MEP_OPERAND_IVC2_ACC1_2
:
1542 case MEP_OPERAND_IVC2_ACC1_3
:
1544 case MEP_OPERAND_IVC2_ACC1_4
:
1546 case MEP_OPERAND_IVC2_ACC1_5
:
1548 case MEP_OPERAND_IVC2_ACC1_6
:
1550 case MEP_OPERAND_IVC2_ACC1_7
:
1552 case MEP_OPERAND_IVC2_CC
:
1554 case MEP_OPERAND_IVC2_COFA0
:
1556 case MEP_OPERAND_IVC2_COFA1
:
1558 case MEP_OPERAND_IVC2_COFR0
:
1560 case MEP_OPERAND_IVC2_COFR1
:
1562 case MEP_OPERAND_IVC2_CSAR0
:
1564 case MEP_OPERAND_IVC2_CSAR1
:
1566 case MEP_OPERAND_IVC2C3CCRN
:
1568 length
= extract_normal (cd
, ex_info
, insn_value
, 0, 0, 28, 2, 32, total_length
, pc
, & fields
->f_ivc2_ccrn_c3hi
);
1569 if (length
<= 0) break;
1570 length
= extract_normal (cd
, ex_info
, insn_value
, 0, 0, 4, 4, 32, total_length
, pc
, & fields
->f_ivc2_ccrn_c3lo
);
1571 if (length
<= 0) break;
1572 FLD (f_ivc2_ccrn_c3
) = ((((FLD (f_ivc2_ccrn_c3hi
)) << (4))) | (FLD (f_ivc2_ccrn_c3lo
)));
1575 case MEP_OPERAND_IVC2CCRN
:
1577 length
= extract_normal (cd
, ex_info
, insn_value
, 0, 0, 20, 2, 32, total_length
, pc
, & fields
->f_ivc2_ccrn_h2
);
1578 if (length
<= 0) break;
1579 length
= extract_normal (cd
, ex_info
, insn_value
, 0, 0, 0, 4, 32, total_length
, pc
, & fields
->f_ivc2_ccrn_lo
);
1580 if (length
<= 0) break;
1581 FLD (f_ivc2_ccrn
) = ((((FLD (f_ivc2_ccrn_h2
)) << (4))) | (FLD (f_ivc2_ccrn_lo
)));
1584 case MEP_OPERAND_IVC2CRN
:
1586 length
= extract_normal (cd
, ex_info
, insn_value
, 0, 0, 20, 1, 32, total_length
, pc
, & fields
->f_ivc2_ccrn_h1
);
1587 if (length
<= 0) break;
1588 length
= extract_normal (cd
, ex_info
, insn_value
, 0, 0, 0, 4, 32, total_length
, pc
, & fields
->f_ivc2_ccrn_lo
);
1589 if (length
<= 0) break;
1590 FLD (f_ivc2_crnx
) = ((((FLD (f_ivc2_ccrn_h1
)) << (4))) | (FLD (f_ivc2_ccrn_lo
)));
1593 case MEP_OPERAND_IVC2RM
:
1594 length
= extract_normal (cd
, ex_info
, insn_value
, 0, 0, 4, 4, 32, total_length
, pc
, & fields
->f_ivc2_crm
);
1596 case MEP_OPERAND_LO
:
1598 case MEP_OPERAND_LP
:
1600 case MEP_OPERAND_MB0
:
1602 case MEP_OPERAND_MB1
:
1604 case MEP_OPERAND_ME0
:
1606 case MEP_OPERAND_ME1
:
1608 case MEP_OPERAND_NPC
:
1610 case MEP_OPERAND_OPT
:
1612 case MEP_OPERAND_PCABS24A2
:
1614 length
= extract_normal (cd
, ex_info
, insn_value
, 0, 0, 16, 16, 32, total_length
, pc
, & fields
->f_24u5a2n_hi
);
1615 if (length
<= 0) break;
1616 length
= extract_normal (cd
, ex_info
, insn_value
, 0, 0, 5, 7, 32, total_length
, pc
, & fields
->f_24u5a2n_lo
);
1617 if (length
<= 0) break;
1618 FLD (f_24u5a2n
) = ((((FLD (f_24u5a2n_hi
)) << (8))) | (((FLD (f_24u5a2n_lo
)) << (1))));
1621 case MEP_OPERAND_PCREL12A2
:
1624 length
= extract_normal (cd
, ex_info
, insn_value
, 0|(1<<CGEN_IFLD_SIGNED
)|(1<<CGEN_IFLD_PCREL_ADDR
), 0, 4, 11, 32, total_length
, pc
, & value
);
1625 value
= ((((value
) << (1))) + (pc
));
1626 fields
->f_12s4a2
= value
;
1629 case MEP_OPERAND_PCREL17A2
:
1632 length
= extract_normal (cd
, ex_info
, insn_value
, 0|(1<<CGEN_IFLD_SIGNED
)|(1<<CGEN_IFLD_PCREL_ADDR
), 0, 16, 16, 32, total_length
, pc
, & value
);
1633 value
= ((((value
) << (1))) + (pc
));
1634 fields
->f_17s16a2
= value
;
1637 case MEP_OPERAND_PCREL24A2
:
1639 length
= extract_normal (cd
, ex_info
, insn_value
, 0|(1<<CGEN_IFLD_SIGNED
)|(1<<CGEN_IFLD_PCREL_ADDR
), 0, 16, 16, 32, total_length
, pc
, & fields
->f_24s5a2n_hi
);
1640 if (length
<= 0) break;
1641 length
= extract_normal (cd
, ex_info
, insn_value
, 0|(1<<CGEN_IFLD_PCREL_ADDR
), 0, 5, 7, 32, total_length
, pc
, & fields
->f_24s5a2n_lo
);
1642 if (length
<= 0) break;
1643 FLD (f_24s5a2n
) = ((((((FLD (f_24s5a2n_hi
)) << (8))) | (((FLD (f_24s5a2n_lo
)) << (1))))) + (pc
));
1646 case MEP_OPERAND_PCREL8A2
:
1649 length
= extract_normal (cd
, ex_info
, insn_value
, 0|(1<<CGEN_IFLD_SIGNED
)|(1<<CGEN_IFLD_PCREL_ADDR
), 0, 8, 7, 32, total_length
, pc
, & value
);
1650 value
= ((((value
) << (1))) + (pc
));
1651 fields
->f_8s8a2
= value
;
1654 case MEP_OPERAND_PSW
:
1656 case MEP_OPERAND_R0
:
1658 case MEP_OPERAND_R1
:
1660 case MEP_OPERAND_RL
:
1661 length
= extract_normal (cd
, ex_info
, insn_value
, 0, 0, 12, 4, 32, total_length
, pc
, & fields
->f_rl
);
1663 case MEP_OPERAND_RL5
:
1664 length
= extract_normal (cd
, ex_info
, insn_value
, 0, 0, 20, 4, 32, total_length
, pc
, & fields
->f_rl5
);
1666 case MEP_OPERAND_RM
:
1667 length
= extract_normal (cd
, ex_info
, insn_value
, 0, 0, 8, 4, 32, total_length
, pc
, & fields
->f_rm
);
1669 case MEP_OPERAND_RMA
:
1670 length
= extract_normal (cd
, ex_info
, insn_value
, 0, 0, 8, 4, 32, total_length
, pc
, & fields
->f_rm
);
1672 case MEP_OPERAND_RN
:
1673 length
= extract_normal (cd
, ex_info
, insn_value
, 0, 0, 4, 4, 32, total_length
, pc
, & fields
->f_rn
);
1675 case MEP_OPERAND_RN3
:
1676 length
= extract_normal (cd
, ex_info
, insn_value
, 0, 0, 5, 3, 32, total_length
, pc
, & fields
->f_rn3
);
1678 case MEP_OPERAND_RN3C
:
1679 length
= extract_normal (cd
, ex_info
, insn_value
, 0, 0, 5, 3, 32, total_length
, pc
, & fields
->f_rn3
);
1681 case MEP_OPERAND_RN3L
:
1682 length
= extract_normal (cd
, ex_info
, insn_value
, 0, 0, 5, 3, 32, total_length
, pc
, & fields
->f_rn3
);
1684 case MEP_OPERAND_RN3S
:
1685 length
= extract_normal (cd
, ex_info
, insn_value
, 0, 0, 5, 3, 32, total_length
, pc
, & fields
->f_rn3
);
1687 case MEP_OPERAND_RN3UC
:
1688 length
= extract_normal (cd
, ex_info
, insn_value
, 0, 0, 5, 3, 32, total_length
, pc
, & fields
->f_rn3
);
1690 case MEP_OPERAND_RN3UL
:
1691 length
= extract_normal (cd
, ex_info
, insn_value
, 0, 0, 5, 3, 32, total_length
, pc
, & fields
->f_rn3
);
1693 case MEP_OPERAND_RN3US
:
1694 length
= extract_normal (cd
, ex_info
, insn_value
, 0, 0, 5, 3, 32, total_length
, pc
, & fields
->f_rn3
);
1696 case MEP_OPERAND_RNC
:
1697 length
= extract_normal (cd
, ex_info
, insn_value
, 0, 0, 4, 4, 32, total_length
, pc
, & fields
->f_rn
);
1699 case MEP_OPERAND_RNL
:
1700 length
= extract_normal (cd
, ex_info
, insn_value
, 0, 0, 4, 4, 32, total_length
, pc
, & fields
->f_rn
);
1702 case MEP_OPERAND_RNS
:
1703 length
= extract_normal (cd
, ex_info
, insn_value
, 0, 0, 4, 4, 32, total_length
, pc
, & fields
->f_rn
);
1705 case MEP_OPERAND_RNUC
:
1706 length
= extract_normal (cd
, ex_info
, insn_value
, 0, 0, 4, 4, 32, total_length
, pc
, & fields
->f_rn
);
1708 case MEP_OPERAND_RNUL
:
1709 length
= extract_normal (cd
, ex_info
, insn_value
, 0, 0, 4, 4, 32, total_length
, pc
, & fields
->f_rn
);
1711 case MEP_OPERAND_RNUS
:
1712 length
= extract_normal (cd
, ex_info
, insn_value
, 0, 0, 4, 4, 32, total_length
, pc
, & fields
->f_rn
);
1714 case MEP_OPERAND_SAR
:
1716 case MEP_OPERAND_SDISP16
:
1717 length
= extract_normal (cd
, ex_info
, insn_value
, 0|(1<<CGEN_IFLD_SIGNED
), 0, 16, 16, 32, total_length
, pc
, & fields
->f_16s16
);
1719 case MEP_OPERAND_SIMM16
:
1720 length
= extract_normal (cd
, ex_info
, insn_value
, 0|(1<<CGEN_IFLD_SIGNED
), 0, 16, 16, 32, total_length
, pc
, & fields
->f_16s16
);
1722 case MEP_OPERAND_SIMM16P0
:
1724 length
= extract_normal (cd
, ex_info
, insn_value
, 0, 0, 0, 8, 32, total_length
, pc
, & fields
->f_ivc2_8u0
);
1725 if (length
<= 0) break;
1726 length
= extract_normal (cd
, ex_info
, insn_value
, 0, 0, 20, 8, 32, total_length
, pc
, & fields
->f_ivc2_8u20
);
1727 if (length
<= 0) break;
1729 FLD (f_ivc2_simm16p0
) = ((FLD (f_ivc2_8u20
)) | (((FLD (f_ivc2_8u0
)) << (8))));
1733 case MEP_OPERAND_SIMM6
:
1734 length
= extract_normal (cd
, ex_info
, insn_value
, 0|(1<<CGEN_IFLD_SIGNED
), 0, 8, 6, 32, total_length
, pc
, & fields
->f_6s8
);
1736 case MEP_OPERAND_SIMM8
:
1737 length
= extract_normal (cd
, ex_info
, insn_value
, 0|(1<<CGEN_IFLD_SIGNED
), 0, 8, 8, 32, total_length
, pc
, & fields
->f_8s8
);
1739 case MEP_OPERAND_SIMM8P0
:
1740 length
= extract_normal (cd
, ex_info
, insn_value
, 0|(1<<CGEN_IFLD_SIGNED
), 0, 0, 8, 32, total_length
, pc
, & fields
->f_ivc2_8s0
);
1742 case MEP_OPERAND_SIMM8P20
:
1743 length
= extract_normal (cd
, ex_info
, insn_value
, 0|(1<<CGEN_IFLD_SIGNED
), 0, 20, 8, 32, total_length
, pc
, & fields
->f_ivc2_8s20
);
1745 case MEP_OPERAND_SIMM8P4
:
1746 length
= extract_normal (cd
, ex_info
, insn_value
, 0|(1<<CGEN_IFLD_SIGNED
), 0, 4, 8, 32, total_length
, pc
, & fields
->f_ivc2_8s4
);
1748 case MEP_OPERAND_SP
:
1750 case MEP_OPERAND_SPR
:
1752 case MEP_OPERAND_TP
:
1754 case MEP_OPERAND_TPR
:
1756 case MEP_OPERAND_UDISP2
:
1757 length
= extract_normal (cd
, ex_info
, insn_value
, 0, 0, 6, 2, 32, total_length
, pc
, & fields
->f_2u6
);
1759 case MEP_OPERAND_UDISP7
:
1760 length
= extract_normal (cd
, ex_info
, insn_value
, 0, 0, 9, 7, 32, total_length
, pc
, & fields
->f_7u9
);
1762 case MEP_OPERAND_UDISP7A2
:
1765 length
= extract_normal (cd
, ex_info
, insn_value
, 0, 0, 9, 6, 32, total_length
, pc
, & value
);
1766 value
= ((value
) << (1));
1767 fields
->f_7u9a2
= value
;
1770 case MEP_OPERAND_UDISP7A4
:
1773 length
= extract_normal (cd
, ex_info
, insn_value
, 0, 0, 9, 5, 32, total_length
, pc
, & value
);
1774 value
= ((value
) << (2));
1775 fields
->f_7u9a4
= value
;
1778 case MEP_OPERAND_UIMM16
:
1779 length
= extract_normal (cd
, ex_info
, insn_value
, 0, 0, 16, 16, 32, total_length
, pc
, & fields
->f_16u16
);
1781 case MEP_OPERAND_UIMM2
:
1782 length
= extract_normal (cd
, ex_info
, insn_value
, 0, 0, 10, 2, 32, total_length
, pc
, & fields
->f_2u10
);
1784 case MEP_OPERAND_UIMM24
:
1786 length
= extract_normal (cd
, ex_info
, insn_value
, 0, 0, 16, 16, 32, total_length
, pc
, & fields
->f_24u8n_hi
);
1787 if (length
<= 0) break;
1788 length
= extract_normal (cd
, ex_info
, insn_value
, 0, 0, 8, 8, 32, total_length
, pc
, & fields
->f_24u8n_lo
);
1789 if (length
<= 0) break;
1790 FLD (f_24u8n
) = ((((FLD (f_24u8n_hi
)) << (8))) | (FLD (f_24u8n_lo
)));
1793 case MEP_OPERAND_UIMM3
:
1794 length
= extract_normal (cd
, ex_info
, insn_value
, 0, 0, 5, 3, 32, total_length
, pc
, & fields
->f_3u5
);
1796 case MEP_OPERAND_UIMM4
:
1797 length
= extract_normal (cd
, ex_info
, insn_value
, 0, 0, 8, 4, 32, total_length
, pc
, & fields
->f_4u8
);
1799 case MEP_OPERAND_UIMM5
:
1800 length
= extract_normal (cd
, ex_info
, insn_value
, 0, 0, 8, 5, 32, total_length
, pc
, & fields
->f_5u8
);
1802 case MEP_OPERAND_UIMM7A4
:
1805 length
= extract_normal (cd
, ex_info
, insn_value
, 0, 0, 9, 5, 32, total_length
, pc
, & value
);
1806 value
= ((value
) << (2));
1807 fields
->f_7u9a4
= value
;
1810 case MEP_OPERAND_ZERO
:
1814 /* xgettext:c-format */
1815 opcodes_error_handler
1816 (_("internal error: unrecognized field %d while decoding insn"),
1824 cgen_insert_fn
* const mep_cgen_insert_handlers
[] =
1829 cgen_extract_fn
* const mep_cgen_extract_handlers
[] =
1831 extract_insn_normal
,
1834 int mep_cgen_get_int_operand (CGEN_CPU_DESC
, int, const CGEN_FIELDS
*);
1835 bfd_vma
mep_cgen_get_vma_operand (CGEN_CPU_DESC
, int, const CGEN_FIELDS
*);
1837 /* Getting values from cgen_fields is handled by a collection of functions.
1838 They are distinguished by the type of the VALUE argument they return.
1839 TODO: floating point, inlining support, remove cases where result type
1843 mep_cgen_get_int_operand (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED
,
1845 const CGEN_FIELDS
* fields
)
1851 case MEP_OPERAND_ADDR24A4
:
1852 value
= fields
->f_24u8a4n
;
1854 case MEP_OPERAND_C5RMUIMM20
:
1855 value
= fields
->f_c5_rmuimm20
;
1857 case MEP_OPERAND_C5RNMUIMM24
:
1858 value
= fields
->f_c5_rnmuimm24
;
1860 case MEP_OPERAND_CALLNUM
:
1861 value
= fields
->f_callnum
;
1863 case MEP_OPERAND_CCCC
:
1864 value
= fields
->f_rm
;
1866 case MEP_OPERAND_CCRN
:
1867 value
= fields
->f_ccrn
;
1869 case MEP_OPERAND_CDISP10
:
1870 value
= fields
->f_cdisp10
;
1872 case MEP_OPERAND_CDISP10A2
:
1873 value
= fields
->f_cdisp10
;
1875 case MEP_OPERAND_CDISP10A4
:
1876 value
= fields
->f_cdisp10
;
1878 case MEP_OPERAND_CDISP10A8
:
1879 value
= fields
->f_cdisp10
;
1881 case MEP_OPERAND_CDISP12
:
1882 value
= fields
->f_12s20
;
1884 case MEP_OPERAND_CIMM4
:
1885 value
= fields
->f_rn
;
1887 case MEP_OPERAND_CIMM5
:
1888 value
= fields
->f_5u24
;
1890 case MEP_OPERAND_CODE16
:
1891 value
= fields
->f_16u16
;
1893 case MEP_OPERAND_CODE24
:
1894 value
= fields
->f_24u4n
;
1896 case MEP_OPERAND_CP_FLAG
:
1899 case MEP_OPERAND_CRN
:
1900 value
= fields
->f_crn
;
1902 case MEP_OPERAND_CRN64
:
1903 value
= fields
->f_crn
;
1905 case MEP_OPERAND_CRNX
:
1906 value
= fields
->f_crnx
;
1908 case MEP_OPERAND_CRNX64
:
1909 value
= fields
->f_crnx
;
1911 case MEP_OPERAND_CROC
:
1912 value
= fields
->f_ivc2_5u7
;
1914 case MEP_OPERAND_CROP
:
1915 value
= fields
->f_ivc2_5u23
;
1917 case MEP_OPERAND_CRPC
:
1918 value
= fields
->f_ivc2_5u26
;
1920 case MEP_OPERAND_CRPP
:
1921 value
= fields
->f_ivc2_5u18
;
1923 case MEP_OPERAND_CRQC
:
1924 value
= fields
->f_ivc2_5u21
;
1926 case MEP_OPERAND_CRQP
:
1927 value
= fields
->f_ivc2_5u13
;
1929 case MEP_OPERAND_CSRN
:
1930 value
= fields
->f_csrn
;
1932 case MEP_OPERAND_CSRN_IDX
:
1933 value
= fields
->f_csrn
;
1935 case MEP_OPERAND_DBG
:
1938 case MEP_OPERAND_DEPC
:
1941 case MEP_OPERAND_EPC
:
1944 case MEP_OPERAND_EXC
:
1947 case MEP_OPERAND_HI
:
1950 case MEP_OPERAND_IMM16P0
:
1951 value
= fields
->f_ivc2_imm16p0
;
1953 case MEP_OPERAND_IMM3P12
:
1954 value
= fields
->f_ivc2_3u12
;
1956 case MEP_OPERAND_IMM3P25
:
1957 value
= fields
->f_ivc2_3u25
;
1959 case MEP_OPERAND_IMM3P4
:
1960 value
= fields
->f_ivc2_3u4
;
1962 case MEP_OPERAND_IMM3P5
:
1963 value
= fields
->f_ivc2_3u5
;
1965 case MEP_OPERAND_IMM3P9
:
1966 value
= fields
->f_ivc2_3u9
;
1968 case MEP_OPERAND_IMM4P10
:
1969 value
= fields
->f_ivc2_4u10
;
1971 case MEP_OPERAND_IMM4P4
:
1972 value
= fields
->f_ivc2_4u4
;
1974 case MEP_OPERAND_IMM4P8
:
1975 value
= fields
->f_ivc2_4u8
;
1977 case MEP_OPERAND_IMM5P23
:
1978 value
= fields
->f_ivc2_5u23
;
1980 case MEP_OPERAND_IMM5P3
:
1981 value
= fields
->f_ivc2_5u3
;
1983 case MEP_OPERAND_IMM5P7
:
1984 value
= fields
->f_ivc2_5u7
;
1986 case MEP_OPERAND_IMM5P8
:
1987 value
= fields
->f_ivc2_5u8
;
1989 case MEP_OPERAND_IMM6P2
:
1990 value
= fields
->f_ivc2_6u2
;
1992 case MEP_OPERAND_IMM6P6
:
1993 value
= fields
->f_ivc2_6u6
;
1995 case MEP_OPERAND_IMM8P0
:
1996 value
= fields
->f_ivc2_8u0
;
1998 case MEP_OPERAND_IMM8P20
:
1999 value
= fields
->f_ivc2_8u20
;
2001 case MEP_OPERAND_IMM8P4
:
2002 value
= fields
->f_ivc2_8u4
;
2004 case MEP_OPERAND_IVC_X_0_2
:
2005 value
= fields
->f_ivc2_2u0
;
2007 case MEP_OPERAND_IVC_X_0_3
:
2008 value
= fields
->f_ivc2_3u0
;
2010 case MEP_OPERAND_IVC_X_0_4
:
2011 value
= fields
->f_ivc2_4u0
;
2013 case MEP_OPERAND_IVC_X_0_5
:
2014 value
= fields
->f_ivc2_5u0
;
2016 case MEP_OPERAND_IVC_X_6_1
:
2017 value
= fields
->f_ivc2_1u6
;
2019 case MEP_OPERAND_IVC_X_6_2
:
2020 value
= fields
->f_ivc2_2u6
;
2022 case MEP_OPERAND_IVC_X_6_3
:
2023 value
= fields
->f_ivc2_3u6
;
2025 case MEP_OPERAND_IVC2_ACC0_0
:
2028 case MEP_OPERAND_IVC2_ACC0_1
:
2031 case MEP_OPERAND_IVC2_ACC0_2
:
2034 case MEP_OPERAND_IVC2_ACC0_3
:
2037 case MEP_OPERAND_IVC2_ACC0_4
:
2040 case MEP_OPERAND_IVC2_ACC0_5
:
2043 case MEP_OPERAND_IVC2_ACC0_6
:
2046 case MEP_OPERAND_IVC2_ACC0_7
:
2049 case MEP_OPERAND_IVC2_ACC1_0
:
2052 case MEP_OPERAND_IVC2_ACC1_1
:
2055 case MEP_OPERAND_IVC2_ACC1_2
:
2058 case MEP_OPERAND_IVC2_ACC1_3
:
2061 case MEP_OPERAND_IVC2_ACC1_4
:
2064 case MEP_OPERAND_IVC2_ACC1_5
:
2067 case MEP_OPERAND_IVC2_ACC1_6
:
2070 case MEP_OPERAND_IVC2_ACC1_7
:
2073 case MEP_OPERAND_IVC2_CC
:
2076 case MEP_OPERAND_IVC2_COFA0
:
2079 case MEP_OPERAND_IVC2_COFA1
:
2082 case MEP_OPERAND_IVC2_COFR0
:
2085 case MEP_OPERAND_IVC2_COFR1
:
2088 case MEP_OPERAND_IVC2_CSAR0
:
2091 case MEP_OPERAND_IVC2_CSAR1
:
2094 case MEP_OPERAND_IVC2C3CCRN
:
2095 value
= fields
->f_ivc2_ccrn_c3
;
2097 case MEP_OPERAND_IVC2CCRN
:
2098 value
= fields
->f_ivc2_ccrn
;
2100 case MEP_OPERAND_IVC2CRN
:
2101 value
= fields
->f_ivc2_crnx
;
2103 case MEP_OPERAND_IVC2RM
:
2104 value
= fields
->f_ivc2_crm
;
2106 case MEP_OPERAND_LO
:
2109 case MEP_OPERAND_LP
:
2112 case MEP_OPERAND_MB0
:
2115 case MEP_OPERAND_MB1
:
2118 case MEP_OPERAND_ME0
:
2121 case MEP_OPERAND_ME1
:
2124 case MEP_OPERAND_NPC
:
2127 case MEP_OPERAND_OPT
:
2130 case MEP_OPERAND_PCABS24A2
:
2131 value
= fields
->f_24u5a2n
;
2133 case MEP_OPERAND_PCREL12A2
:
2134 value
= fields
->f_12s4a2
;
2136 case MEP_OPERAND_PCREL17A2
:
2137 value
= fields
->f_17s16a2
;
2139 case MEP_OPERAND_PCREL24A2
:
2140 value
= fields
->f_24s5a2n
;
2142 case MEP_OPERAND_PCREL8A2
:
2143 value
= fields
->f_8s8a2
;
2145 case MEP_OPERAND_PSW
:
2148 case MEP_OPERAND_R0
:
2151 case MEP_OPERAND_R1
:
2154 case MEP_OPERAND_RL
:
2155 value
= fields
->f_rl
;
2157 case MEP_OPERAND_RL5
:
2158 value
= fields
->f_rl5
;
2160 case MEP_OPERAND_RM
:
2161 value
= fields
->f_rm
;
2163 case MEP_OPERAND_RMA
:
2164 value
= fields
->f_rm
;
2166 case MEP_OPERAND_RN
:
2167 value
= fields
->f_rn
;
2169 case MEP_OPERAND_RN3
:
2170 value
= fields
->f_rn3
;
2172 case MEP_OPERAND_RN3C
:
2173 value
= fields
->f_rn3
;
2175 case MEP_OPERAND_RN3L
:
2176 value
= fields
->f_rn3
;
2178 case MEP_OPERAND_RN3S
:
2179 value
= fields
->f_rn3
;
2181 case MEP_OPERAND_RN3UC
:
2182 value
= fields
->f_rn3
;
2184 case MEP_OPERAND_RN3UL
:
2185 value
= fields
->f_rn3
;
2187 case MEP_OPERAND_RN3US
:
2188 value
= fields
->f_rn3
;
2190 case MEP_OPERAND_RNC
:
2191 value
= fields
->f_rn
;
2193 case MEP_OPERAND_RNL
:
2194 value
= fields
->f_rn
;
2196 case MEP_OPERAND_RNS
:
2197 value
= fields
->f_rn
;
2199 case MEP_OPERAND_RNUC
:
2200 value
= fields
->f_rn
;
2202 case MEP_OPERAND_RNUL
:
2203 value
= fields
->f_rn
;
2205 case MEP_OPERAND_RNUS
:
2206 value
= fields
->f_rn
;
2208 case MEP_OPERAND_SAR
:
2211 case MEP_OPERAND_SDISP16
:
2212 value
= fields
->f_16s16
;
2214 case MEP_OPERAND_SIMM16
:
2215 value
= fields
->f_16s16
;
2217 case MEP_OPERAND_SIMM16P0
:
2218 value
= fields
->f_ivc2_simm16p0
;
2220 case MEP_OPERAND_SIMM6
:
2221 value
= fields
->f_6s8
;
2223 case MEP_OPERAND_SIMM8
:
2224 value
= fields
->f_8s8
;
2226 case MEP_OPERAND_SIMM8P0
:
2227 value
= fields
->f_ivc2_8s0
;
2229 case MEP_OPERAND_SIMM8P20
:
2230 value
= fields
->f_ivc2_8s20
;
2232 case MEP_OPERAND_SIMM8P4
:
2233 value
= fields
->f_ivc2_8s4
;
2235 case MEP_OPERAND_SP
:
2238 case MEP_OPERAND_SPR
:
2241 case MEP_OPERAND_TP
:
2244 case MEP_OPERAND_TPR
:
2247 case MEP_OPERAND_UDISP2
:
2248 value
= fields
->f_2u6
;
2250 case MEP_OPERAND_UDISP7
:
2251 value
= fields
->f_7u9
;
2253 case MEP_OPERAND_UDISP7A2
:
2254 value
= fields
->f_7u9a2
;
2256 case MEP_OPERAND_UDISP7A4
:
2257 value
= fields
->f_7u9a4
;
2259 case MEP_OPERAND_UIMM16
:
2260 value
= fields
->f_16u16
;
2262 case MEP_OPERAND_UIMM2
:
2263 value
= fields
->f_2u10
;
2265 case MEP_OPERAND_UIMM24
:
2266 value
= fields
->f_24u8n
;
2268 case MEP_OPERAND_UIMM3
:
2269 value
= fields
->f_3u5
;
2271 case MEP_OPERAND_UIMM4
:
2272 value
= fields
->f_4u8
;
2274 case MEP_OPERAND_UIMM5
:
2275 value
= fields
->f_5u8
;
2277 case MEP_OPERAND_UIMM7A4
:
2278 value
= fields
->f_7u9a4
;
2280 case MEP_OPERAND_ZERO
:
2285 /* xgettext:c-format */
2286 opcodes_error_handler
2287 (_("internal error: unrecognized field %d while getting int operand"),
2296 mep_cgen_get_vma_operand (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED
,
2298 const CGEN_FIELDS
* fields
)
2304 case MEP_OPERAND_ADDR24A4
:
2305 value
= fields
->f_24u8a4n
;
2307 case MEP_OPERAND_C5RMUIMM20
:
2308 value
= fields
->f_c5_rmuimm20
;
2310 case MEP_OPERAND_C5RNMUIMM24
:
2311 value
= fields
->f_c5_rnmuimm24
;
2313 case MEP_OPERAND_CALLNUM
:
2314 value
= fields
->f_callnum
;
2316 case MEP_OPERAND_CCCC
:
2317 value
= fields
->f_rm
;
2319 case MEP_OPERAND_CCRN
:
2320 value
= fields
->f_ccrn
;
2322 case MEP_OPERAND_CDISP10
:
2323 value
= fields
->f_cdisp10
;
2325 case MEP_OPERAND_CDISP10A2
:
2326 value
= fields
->f_cdisp10
;
2328 case MEP_OPERAND_CDISP10A4
:
2329 value
= fields
->f_cdisp10
;
2331 case MEP_OPERAND_CDISP10A8
:
2332 value
= fields
->f_cdisp10
;
2334 case MEP_OPERAND_CDISP12
:
2335 value
= fields
->f_12s20
;
2337 case MEP_OPERAND_CIMM4
:
2338 value
= fields
->f_rn
;
2340 case MEP_OPERAND_CIMM5
:
2341 value
= fields
->f_5u24
;
2343 case MEP_OPERAND_CODE16
:
2344 value
= fields
->f_16u16
;
2346 case MEP_OPERAND_CODE24
:
2347 value
= fields
->f_24u4n
;
2349 case MEP_OPERAND_CP_FLAG
:
2352 case MEP_OPERAND_CRN
:
2353 value
= fields
->f_crn
;
2355 case MEP_OPERAND_CRN64
:
2356 value
= fields
->f_crn
;
2358 case MEP_OPERAND_CRNX
:
2359 value
= fields
->f_crnx
;
2361 case MEP_OPERAND_CRNX64
:
2362 value
= fields
->f_crnx
;
2364 case MEP_OPERAND_CROC
:
2365 value
= fields
->f_ivc2_5u7
;
2367 case MEP_OPERAND_CROP
:
2368 value
= fields
->f_ivc2_5u23
;
2370 case MEP_OPERAND_CRPC
:
2371 value
= fields
->f_ivc2_5u26
;
2373 case MEP_OPERAND_CRPP
:
2374 value
= fields
->f_ivc2_5u18
;
2376 case MEP_OPERAND_CRQC
:
2377 value
= fields
->f_ivc2_5u21
;
2379 case MEP_OPERAND_CRQP
:
2380 value
= fields
->f_ivc2_5u13
;
2382 case MEP_OPERAND_CSRN
:
2383 value
= fields
->f_csrn
;
2385 case MEP_OPERAND_CSRN_IDX
:
2386 value
= fields
->f_csrn
;
2388 case MEP_OPERAND_DBG
:
2391 case MEP_OPERAND_DEPC
:
2394 case MEP_OPERAND_EPC
:
2397 case MEP_OPERAND_EXC
:
2400 case MEP_OPERAND_HI
:
2403 case MEP_OPERAND_IMM16P0
:
2404 value
= fields
->f_ivc2_imm16p0
;
2406 case MEP_OPERAND_IMM3P12
:
2407 value
= fields
->f_ivc2_3u12
;
2409 case MEP_OPERAND_IMM3P25
:
2410 value
= fields
->f_ivc2_3u25
;
2412 case MEP_OPERAND_IMM3P4
:
2413 value
= fields
->f_ivc2_3u4
;
2415 case MEP_OPERAND_IMM3P5
:
2416 value
= fields
->f_ivc2_3u5
;
2418 case MEP_OPERAND_IMM3P9
:
2419 value
= fields
->f_ivc2_3u9
;
2421 case MEP_OPERAND_IMM4P10
:
2422 value
= fields
->f_ivc2_4u10
;
2424 case MEP_OPERAND_IMM4P4
:
2425 value
= fields
->f_ivc2_4u4
;
2427 case MEP_OPERAND_IMM4P8
:
2428 value
= fields
->f_ivc2_4u8
;
2430 case MEP_OPERAND_IMM5P23
:
2431 value
= fields
->f_ivc2_5u23
;
2433 case MEP_OPERAND_IMM5P3
:
2434 value
= fields
->f_ivc2_5u3
;
2436 case MEP_OPERAND_IMM5P7
:
2437 value
= fields
->f_ivc2_5u7
;
2439 case MEP_OPERAND_IMM5P8
:
2440 value
= fields
->f_ivc2_5u8
;
2442 case MEP_OPERAND_IMM6P2
:
2443 value
= fields
->f_ivc2_6u2
;
2445 case MEP_OPERAND_IMM6P6
:
2446 value
= fields
->f_ivc2_6u6
;
2448 case MEP_OPERAND_IMM8P0
:
2449 value
= fields
->f_ivc2_8u0
;
2451 case MEP_OPERAND_IMM8P20
:
2452 value
= fields
->f_ivc2_8u20
;
2454 case MEP_OPERAND_IMM8P4
:
2455 value
= fields
->f_ivc2_8u4
;
2457 case MEP_OPERAND_IVC_X_0_2
:
2458 value
= fields
->f_ivc2_2u0
;
2460 case MEP_OPERAND_IVC_X_0_3
:
2461 value
= fields
->f_ivc2_3u0
;
2463 case MEP_OPERAND_IVC_X_0_4
:
2464 value
= fields
->f_ivc2_4u0
;
2466 case MEP_OPERAND_IVC_X_0_5
:
2467 value
= fields
->f_ivc2_5u0
;
2469 case MEP_OPERAND_IVC_X_6_1
:
2470 value
= fields
->f_ivc2_1u6
;
2472 case MEP_OPERAND_IVC_X_6_2
:
2473 value
= fields
->f_ivc2_2u6
;
2475 case MEP_OPERAND_IVC_X_6_3
:
2476 value
= fields
->f_ivc2_3u6
;
2478 case MEP_OPERAND_IVC2_ACC0_0
:
2481 case MEP_OPERAND_IVC2_ACC0_1
:
2484 case MEP_OPERAND_IVC2_ACC0_2
:
2487 case MEP_OPERAND_IVC2_ACC0_3
:
2490 case MEP_OPERAND_IVC2_ACC0_4
:
2493 case MEP_OPERAND_IVC2_ACC0_5
:
2496 case MEP_OPERAND_IVC2_ACC0_6
:
2499 case MEP_OPERAND_IVC2_ACC0_7
:
2502 case MEP_OPERAND_IVC2_ACC1_0
:
2505 case MEP_OPERAND_IVC2_ACC1_1
:
2508 case MEP_OPERAND_IVC2_ACC1_2
:
2511 case MEP_OPERAND_IVC2_ACC1_3
:
2514 case MEP_OPERAND_IVC2_ACC1_4
:
2517 case MEP_OPERAND_IVC2_ACC1_5
:
2520 case MEP_OPERAND_IVC2_ACC1_6
:
2523 case MEP_OPERAND_IVC2_ACC1_7
:
2526 case MEP_OPERAND_IVC2_CC
:
2529 case MEP_OPERAND_IVC2_COFA0
:
2532 case MEP_OPERAND_IVC2_COFA1
:
2535 case MEP_OPERAND_IVC2_COFR0
:
2538 case MEP_OPERAND_IVC2_COFR1
:
2541 case MEP_OPERAND_IVC2_CSAR0
:
2544 case MEP_OPERAND_IVC2_CSAR1
:
2547 case MEP_OPERAND_IVC2C3CCRN
:
2548 value
= fields
->f_ivc2_ccrn_c3
;
2550 case MEP_OPERAND_IVC2CCRN
:
2551 value
= fields
->f_ivc2_ccrn
;
2553 case MEP_OPERAND_IVC2CRN
:
2554 value
= fields
->f_ivc2_crnx
;
2556 case MEP_OPERAND_IVC2RM
:
2557 value
= fields
->f_ivc2_crm
;
2559 case MEP_OPERAND_LO
:
2562 case MEP_OPERAND_LP
:
2565 case MEP_OPERAND_MB0
:
2568 case MEP_OPERAND_MB1
:
2571 case MEP_OPERAND_ME0
:
2574 case MEP_OPERAND_ME1
:
2577 case MEP_OPERAND_NPC
:
2580 case MEP_OPERAND_OPT
:
2583 case MEP_OPERAND_PCABS24A2
:
2584 value
= fields
->f_24u5a2n
;
2586 case MEP_OPERAND_PCREL12A2
:
2587 value
= fields
->f_12s4a2
;
2589 case MEP_OPERAND_PCREL17A2
:
2590 value
= fields
->f_17s16a2
;
2592 case MEP_OPERAND_PCREL24A2
:
2593 value
= fields
->f_24s5a2n
;
2595 case MEP_OPERAND_PCREL8A2
:
2596 value
= fields
->f_8s8a2
;
2598 case MEP_OPERAND_PSW
:
2601 case MEP_OPERAND_R0
:
2604 case MEP_OPERAND_R1
:
2607 case MEP_OPERAND_RL
:
2608 value
= fields
->f_rl
;
2610 case MEP_OPERAND_RL5
:
2611 value
= fields
->f_rl5
;
2613 case MEP_OPERAND_RM
:
2614 value
= fields
->f_rm
;
2616 case MEP_OPERAND_RMA
:
2617 value
= fields
->f_rm
;
2619 case MEP_OPERAND_RN
:
2620 value
= fields
->f_rn
;
2622 case MEP_OPERAND_RN3
:
2623 value
= fields
->f_rn3
;
2625 case MEP_OPERAND_RN3C
:
2626 value
= fields
->f_rn3
;
2628 case MEP_OPERAND_RN3L
:
2629 value
= fields
->f_rn3
;
2631 case MEP_OPERAND_RN3S
:
2632 value
= fields
->f_rn3
;
2634 case MEP_OPERAND_RN3UC
:
2635 value
= fields
->f_rn3
;
2637 case MEP_OPERAND_RN3UL
:
2638 value
= fields
->f_rn3
;
2640 case MEP_OPERAND_RN3US
:
2641 value
= fields
->f_rn3
;
2643 case MEP_OPERAND_RNC
:
2644 value
= fields
->f_rn
;
2646 case MEP_OPERAND_RNL
:
2647 value
= fields
->f_rn
;
2649 case MEP_OPERAND_RNS
:
2650 value
= fields
->f_rn
;
2652 case MEP_OPERAND_RNUC
:
2653 value
= fields
->f_rn
;
2655 case MEP_OPERAND_RNUL
:
2656 value
= fields
->f_rn
;
2658 case MEP_OPERAND_RNUS
:
2659 value
= fields
->f_rn
;
2661 case MEP_OPERAND_SAR
:
2664 case MEP_OPERAND_SDISP16
:
2665 value
= fields
->f_16s16
;
2667 case MEP_OPERAND_SIMM16
:
2668 value
= fields
->f_16s16
;
2670 case MEP_OPERAND_SIMM16P0
:
2671 value
= fields
->f_ivc2_simm16p0
;
2673 case MEP_OPERAND_SIMM6
:
2674 value
= fields
->f_6s8
;
2676 case MEP_OPERAND_SIMM8
:
2677 value
= fields
->f_8s8
;
2679 case MEP_OPERAND_SIMM8P0
:
2680 value
= fields
->f_ivc2_8s0
;
2682 case MEP_OPERAND_SIMM8P20
:
2683 value
= fields
->f_ivc2_8s20
;
2685 case MEP_OPERAND_SIMM8P4
:
2686 value
= fields
->f_ivc2_8s4
;
2688 case MEP_OPERAND_SP
:
2691 case MEP_OPERAND_SPR
:
2694 case MEP_OPERAND_TP
:
2697 case MEP_OPERAND_TPR
:
2700 case MEP_OPERAND_UDISP2
:
2701 value
= fields
->f_2u6
;
2703 case MEP_OPERAND_UDISP7
:
2704 value
= fields
->f_7u9
;
2706 case MEP_OPERAND_UDISP7A2
:
2707 value
= fields
->f_7u9a2
;
2709 case MEP_OPERAND_UDISP7A4
:
2710 value
= fields
->f_7u9a4
;
2712 case MEP_OPERAND_UIMM16
:
2713 value
= fields
->f_16u16
;
2715 case MEP_OPERAND_UIMM2
:
2716 value
= fields
->f_2u10
;
2718 case MEP_OPERAND_UIMM24
:
2719 value
= fields
->f_24u8n
;
2721 case MEP_OPERAND_UIMM3
:
2722 value
= fields
->f_3u5
;
2724 case MEP_OPERAND_UIMM4
:
2725 value
= fields
->f_4u8
;
2727 case MEP_OPERAND_UIMM5
:
2728 value
= fields
->f_5u8
;
2730 case MEP_OPERAND_UIMM7A4
:
2731 value
= fields
->f_7u9a4
;
2733 case MEP_OPERAND_ZERO
:
2738 /* xgettext:c-format */
2739 opcodes_error_handler
2740 (_("internal error: unrecognized field %d while getting vma operand"),
2748 void mep_cgen_set_int_operand (CGEN_CPU_DESC
, int, CGEN_FIELDS
*, int);
2749 void mep_cgen_set_vma_operand (CGEN_CPU_DESC
, int, CGEN_FIELDS
*, bfd_vma
);
2751 /* Stuffing values in cgen_fields is handled by a collection of functions.
2752 They are distinguished by the type of the VALUE argument they accept.
2753 TODO: floating point, inlining support, remove cases where argument type
2757 mep_cgen_set_int_operand (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED
,
2759 CGEN_FIELDS
* fields
,
2764 case MEP_OPERAND_ADDR24A4
:
2765 fields
->f_24u8a4n
= value
;
2767 case MEP_OPERAND_C5RMUIMM20
:
2768 fields
->f_c5_rmuimm20
= value
;
2770 case MEP_OPERAND_C5RNMUIMM24
:
2771 fields
->f_c5_rnmuimm24
= value
;
2773 case MEP_OPERAND_CALLNUM
:
2774 fields
->f_callnum
= value
;
2776 case MEP_OPERAND_CCCC
:
2777 fields
->f_rm
= value
;
2779 case MEP_OPERAND_CCRN
:
2780 fields
->f_ccrn
= value
;
2782 case MEP_OPERAND_CDISP10
:
2783 fields
->f_cdisp10
= value
;
2785 case MEP_OPERAND_CDISP10A2
:
2786 fields
->f_cdisp10
= value
;
2788 case MEP_OPERAND_CDISP10A4
:
2789 fields
->f_cdisp10
= value
;
2791 case MEP_OPERAND_CDISP10A8
:
2792 fields
->f_cdisp10
= value
;
2794 case MEP_OPERAND_CDISP12
:
2795 fields
->f_12s20
= value
;
2797 case MEP_OPERAND_CIMM4
:
2798 fields
->f_rn
= value
;
2800 case MEP_OPERAND_CIMM5
:
2801 fields
->f_5u24
= value
;
2803 case MEP_OPERAND_CODE16
:
2804 fields
->f_16u16
= value
;
2806 case MEP_OPERAND_CODE24
:
2807 fields
->f_24u4n
= value
;
2809 case MEP_OPERAND_CP_FLAG
:
2811 case MEP_OPERAND_CRN
:
2812 fields
->f_crn
= value
;
2814 case MEP_OPERAND_CRN64
:
2815 fields
->f_crn
= value
;
2817 case MEP_OPERAND_CRNX
:
2818 fields
->f_crnx
= value
;
2820 case MEP_OPERAND_CRNX64
:
2821 fields
->f_crnx
= value
;
2823 case MEP_OPERAND_CROC
:
2824 fields
->f_ivc2_5u7
= value
;
2826 case MEP_OPERAND_CROP
:
2827 fields
->f_ivc2_5u23
= value
;
2829 case MEP_OPERAND_CRPC
:
2830 fields
->f_ivc2_5u26
= value
;
2832 case MEP_OPERAND_CRPP
:
2833 fields
->f_ivc2_5u18
= value
;
2835 case MEP_OPERAND_CRQC
:
2836 fields
->f_ivc2_5u21
= value
;
2838 case MEP_OPERAND_CRQP
:
2839 fields
->f_ivc2_5u13
= value
;
2841 case MEP_OPERAND_CSRN
:
2842 fields
->f_csrn
= value
;
2844 case MEP_OPERAND_CSRN_IDX
:
2845 fields
->f_csrn
= value
;
2847 case MEP_OPERAND_DBG
:
2849 case MEP_OPERAND_DEPC
:
2851 case MEP_OPERAND_EPC
:
2853 case MEP_OPERAND_EXC
:
2855 case MEP_OPERAND_HI
:
2857 case MEP_OPERAND_IMM16P0
:
2858 fields
->f_ivc2_imm16p0
= value
;
2860 case MEP_OPERAND_IMM3P12
:
2861 fields
->f_ivc2_3u12
= value
;
2863 case MEP_OPERAND_IMM3P25
:
2864 fields
->f_ivc2_3u25
= value
;
2866 case MEP_OPERAND_IMM3P4
:
2867 fields
->f_ivc2_3u4
= value
;
2869 case MEP_OPERAND_IMM3P5
:
2870 fields
->f_ivc2_3u5
= value
;
2872 case MEP_OPERAND_IMM3P9
:
2873 fields
->f_ivc2_3u9
= value
;
2875 case MEP_OPERAND_IMM4P10
:
2876 fields
->f_ivc2_4u10
= value
;
2878 case MEP_OPERAND_IMM4P4
:
2879 fields
->f_ivc2_4u4
= value
;
2881 case MEP_OPERAND_IMM4P8
:
2882 fields
->f_ivc2_4u8
= value
;
2884 case MEP_OPERAND_IMM5P23
:
2885 fields
->f_ivc2_5u23
= value
;
2887 case MEP_OPERAND_IMM5P3
:
2888 fields
->f_ivc2_5u3
= value
;
2890 case MEP_OPERAND_IMM5P7
:
2891 fields
->f_ivc2_5u7
= value
;
2893 case MEP_OPERAND_IMM5P8
:
2894 fields
->f_ivc2_5u8
= value
;
2896 case MEP_OPERAND_IMM6P2
:
2897 fields
->f_ivc2_6u2
= value
;
2899 case MEP_OPERAND_IMM6P6
:
2900 fields
->f_ivc2_6u6
= value
;
2902 case MEP_OPERAND_IMM8P0
:
2903 fields
->f_ivc2_8u0
= value
;
2905 case MEP_OPERAND_IMM8P20
:
2906 fields
->f_ivc2_8u20
= value
;
2908 case MEP_OPERAND_IMM8P4
:
2909 fields
->f_ivc2_8u4
= value
;
2911 case MEP_OPERAND_IVC_X_0_2
:
2912 fields
->f_ivc2_2u0
= value
;
2914 case MEP_OPERAND_IVC_X_0_3
:
2915 fields
->f_ivc2_3u0
= value
;
2917 case MEP_OPERAND_IVC_X_0_4
:
2918 fields
->f_ivc2_4u0
= value
;
2920 case MEP_OPERAND_IVC_X_0_5
:
2921 fields
->f_ivc2_5u0
= value
;
2923 case MEP_OPERAND_IVC_X_6_1
:
2924 fields
->f_ivc2_1u6
= value
;
2926 case MEP_OPERAND_IVC_X_6_2
:
2927 fields
->f_ivc2_2u6
= value
;
2929 case MEP_OPERAND_IVC_X_6_3
:
2930 fields
->f_ivc2_3u6
= value
;
2932 case MEP_OPERAND_IVC2_ACC0_0
:
2934 case MEP_OPERAND_IVC2_ACC0_1
:
2936 case MEP_OPERAND_IVC2_ACC0_2
:
2938 case MEP_OPERAND_IVC2_ACC0_3
:
2940 case MEP_OPERAND_IVC2_ACC0_4
:
2942 case MEP_OPERAND_IVC2_ACC0_5
:
2944 case MEP_OPERAND_IVC2_ACC0_6
:
2946 case MEP_OPERAND_IVC2_ACC0_7
:
2948 case MEP_OPERAND_IVC2_ACC1_0
:
2950 case MEP_OPERAND_IVC2_ACC1_1
:
2952 case MEP_OPERAND_IVC2_ACC1_2
:
2954 case MEP_OPERAND_IVC2_ACC1_3
:
2956 case MEP_OPERAND_IVC2_ACC1_4
:
2958 case MEP_OPERAND_IVC2_ACC1_5
:
2960 case MEP_OPERAND_IVC2_ACC1_6
:
2962 case MEP_OPERAND_IVC2_ACC1_7
:
2964 case MEP_OPERAND_IVC2_CC
:
2966 case MEP_OPERAND_IVC2_COFA0
:
2968 case MEP_OPERAND_IVC2_COFA1
:
2970 case MEP_OPERAND_IVC2_COFR0
:
2972 case MEP_OPERAND_IVC2_COFR1
:
2974 case MEP_OPERAND_IVC2_CSAR0
:
2976 case MEP_OPERAND_IVC2_CSAR1
:
2978 case MEP_OPERAND_IVC2C3CCRN
:
2979 fields
->f_ivc2_ccrn_c3
= value
;
2981 case MEP_OPERAND_IVC2CCRN
:
2982 fields
->f_ivc2_ccrn
= value
;
2984 case MEP_OPERAND_IVC2CRN
:
2985 fields
->f_ivc2_crnx
= value
;
2987 case MEP_OPERAND_IVC2RM
:
2988 fields
->f_ivc2_crm
= value
;
2990 case MEP_OPERAND_LO
:
2992 case MEP_OPERAND_LP
:
2994 case MEP_OPERAND_MB0
:
2996 case MEP_OPERAND_MB1
:
2998 case MEP_OPERAND_ME0
:
3000 case MEP_OPERAND_ME1
:
3002 case MEP_OPERAND_NPC
:
3004 case MEP_OPERAND_OPT
:
3006 case MEP_OPERAND_PCABS24A2
:
3007 fields
->f_24u5a2n
= value
;
3009 case MEP_OPERAND_PCREL12A2
:
3010 fields
->f_12s4a2
= value
;
3012 case MEP_OPERAND_PCREL17A2
:
3013 fields
->f_17s16a2
= value
;
3015 case MEP_OPERAND_PCREL24A2
:
3016 fields
->f_24s5a2n
= value
;
3018 case MEP_OPERAND_PCREL8A2
:
3019 fields
->f_8s8a2
= value
;
3021 case MEP_OPERAND_PSW
:
3023 case MEP_OPERAND_R0
:
3025 case MEP_OPERAND_R1
:
3027 case MEP_OPERAND_RL
:
3028 fields
->f_rl
= value
;
3030 case MEP_OPERAND_RL5
:
3031 fields
->f_rl5
= value
;
3033 case MEP_OPERAND_RM
:
3034 fields
->f_rm
= value
;
3036 case MEP_OPERAND_RMA
:
3037 fields
->f_rm
= value
;
3039 case MEP_OPERAND_RN
:
3040 fields
->f_rn
= value
;
3042 case MEP_OPERAND_RN3
:
3043 fields
->f_rn3
= value
;
3045 case MEP_OPERAND_RN3C
:
3046 fields
->f_rn3
= value
;
3048 case MEP_OPERAND_RN3L
:
3049 fields
->f_rn3
= value
;
3051 case MEP_OPERAND_RN3S
:
3052 fields
->f_rn3
= value
;
3054 case MEP_OPERAND_RN3UC
:
3055 fields
->f_rn3
= value
;
3057 case MEP_OPERAND_RN3UL
:
3058 fields
->f_rn3
= value
;
3060 case MEP_OPERAND_RN3US
:
3061 fields
->f_rn3
= value
;
3063 case MEP_OPERAND_RNC
:
3064 fields
->f_rn
= value
;
3066 case MEP_OPERAND_RNL
:
3067 fields
->f_rn
= value
;
3069 case MEP_OPERAND_RNS
:
3070 fields
->f_rn
= value
;
3072 case MEP_OPERAND_RNUC
:
3073 fields
->f_rn
= value
;
3075 case MEP_OPERAND_RNUL
:
3076 fields
->f_rn
= value
;
3078 case MEP_OPERAND_RNUS
:
3079 fields
->f_rn
= value
;
3081 case MEP_OPERAND_SAR
:
3083 case MEP_OPERAND_SDISP16
:
3084 fields
->f_16s16
= value
;
3086 case MEP_OPERAND_SIMM16
:
3087 fields
->f_16s16
= value
;
3089 case MEP_OPERAND_SIMM16P0
:
3090 fields
->f_ivc2_simm16p0
= value
;
3092 case MEP_OPERAND_SIMM6
:
3093 fields
->f_6s8
= value
;
3095 case MEP_OPERAND_SIMM8
:
3096 fields
->f_8s8
= value
;
3098 case MEP_OPERAND_SIMM8P0
:
3099 fields
->f_ivc2_8s0
= value
;
3101 case MEP_OPERAND_SIMM8P20
:
3102 fields
->f_ivc2_8s20
= value
;
3104 case MEP_OPERAND_SIMM8P4
:
3105 fields
->f_ivc2_8s4
= value
;
3107 case MEP_OPERAND_SP
:
3109 case MEP_OPERAND_SPR
:
3111 case MEP_OPERAND_TP
:
3113 case MEP_OPERAND_TPR
:
3115 case MEP_OPERAND_UDISP2
:
3116 fields
->f_2u6
= value
;
3118 case MEP_OPERAND_UDISP7
:
3119 fields
->f_7u9
= value
;
3121 case MEP_OPERAND_UDISP7A2
:
3122 fields
->f_7u9a2
= value
;
3124 case MEP_OPERAND_UDISP7A4
:
3125 fields
->f_7u9a4
= value
;
3127 case MEP_OPERAND_UIMM16
:
3128 fields
->f_16u16
= value
;
3130 case MEP_OPERAND_UIMM2
:
3131 fields
->f_2u10
= value
;
3133 case MEP_OPERAND_UIMM24
:
3134 fields
->f_24u8n
= value
;
3136 case MEP_OPERAND_UIMM3
:
3137 fields
->f_3u5
= value
;
3139 case MEP_OPERAND_UIMM4
:
3140 fields
->f_4u8
= value
;
3142 case MEP_OPERAND_UIMM5
:
3143 fields
->f_5u8
= value
;
3145 case MEP_OPERAND_UIMM7A4
:
3146 fields
->f_7u9a4
= value
;
3148 case MEP_OPERAND_ZERO
:
3152 /* xgettext:c-format */
3153 opcodes_error_handler
3154 (_("internal error: unrecognized field %d while setting int operand"),
3161 mep_cgen_set_vma_operand (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED
,
3163 CGEN_FIELDS
* fields
,
3168 case MEP_OPERAND_ADDR24A4
:
3169 fields
->f_24u8a4n
= value
;
3171 case MEP_OPERAND_C5RMUIMM20
:
3172 fields
->f_c5_rmuimm20
= value
;
3174 case MEP_OPERAND_C5RNMUIMM24
:
3175 fields
->f_c5_rnmuimm24
= value
;
3177 case MEP_OPERAND_CALLNUM
:
3178 fields
->f_callnum
= value
;
3180 case MEP_OPERAND_CCCC
:
3181 fields
->f_rm
= value
;
3183 case MEP_OPERAND_CCRN
:
3184 fields
->f_ccrn
= value
;
3186 case MEP_OPERAND_CDISP10
:
3187 fields
->f_cdisp10
= value
;
3189 case MEP_OPERAND_CDISP10A2
:
3190 fields
->f_cdisp10
= value
;
3192 case MEP_OPERAND_CDISP10A4
:
3193 fields
->f_cdisp10
= value
;
3195 case MEP_OPERAND_CDISP10A8
:
3196 fields
->f_cdisp10
= value
;
3198 case MEP_OPERAND_CDISP12
:
3199 fields
->f_12s20
= value
;
3201 case MEP_OPERAND_CIMM4
:
3202 fields
->f_rn
= value
;
3204 case MEP_OPERAND_CIMM5
:
3205 fields
->f_5u24
= value
;
3207 case MEP_OPERAND_CODE16
:
3208 fields
->f_16u16
= value
;
3210 case MEP_OPERAND_CODE24
:
3211 fields
->f_24u4n
= value
;
3213 case MEP_OPERAND_CP_FLAG
:
3215 case MEP_OPERAND_CRN
:
3216 fields
->f_crn
= value
;
3218 case MEP_OPERAND_CRN64
:
3219 fields
->f_crn
= value
;
3221 case MEP_OPERAND_CRNX
:
3222 fields
->f_crnx
= value
;
3224 case MEP_OPERAND_CRNX64
:
3225 fields
->f_crnx
= value
;
3227 case MEP_OPERAND_CROC
:
3228 fields
->f_ivc2_5u7
= value
;
3230 case MEP_OPERAND_CROP
:
3231 fields
->f_ivc2_5u23
= value
;
3233 case MEP_OPERAND_CRPC
:
3234 fields
->f_ivc2_5u26
= value
;
3236 case MEP_OPERAND_CRPP
:
3237 fields
->f_ivc2_5u18
= value
;
3239 case MEP_OPERAND_CRQC
:
3240 fields
->f_ivc2_5u21
= value
;
3242 case MEP_OPERAND_CRQP
:
3243 fields
->f_ivc2_5u13
= value
;
3245 case MEP_OPERAND_CSRN
:
3246 fields
->f_csrn
= value
;
3248 case MEP_OPERAND_CSRN_IDX
:
3249 fields
->f_csrn
= value
;
3251 case MEP_OPERAND_DBG
:
3253 case MEP_OPERAND_DEPC
:
3255 case MEP_OPERAND_EPC
:
3257 case MEP_OPERAND_EXC
:
3259 case MEP_OPERAND_HI
:
3261 case MEP_OPERAND_IMM16P0
:
3262 fields
->f_ivc2_imm16p0
= value
;
3264 case MEP_OPERAND_IMM3P12
:
3265 fields
->f_ivc2_3u12
= value
;
3267 case MEP_OPERAND_IMM3P25
:
3268 fields
->f_ivc2_3u25
= value
;
3270 case MEP_OPERAND_IMM3P4
:
3271 fields
->f_ivc2_3u4
= value
;
3273 case MEP_OPERAND_IMM3P5
:
3274 fields
->f_ivc2_3u5
= value
;
3276 case MEP_OPERAND_IMM3P9
:
3277 fields
->f_ivc2_3u9
= value
;
3279 case MEP_OPERAND_IMM4P10
:
3280 fields
->f_ivc2_4u10
= value
;
3282 case MEP_OPERAND_IMM4P4
:
3283 fields
->f_ivc2_4u4
= value
;
3285 case MEP_OPERAND_IMM4P8
:
3286 fields
->f_ivc2_4u8
= value
;
3288 case MEP_OPERAND_IMM5P23
:
3289 fields
->f_ivc2_5u23
= value
;
3291 case MEP_OPERAND_IMM5P3
:
3292 fields
->f_ivc2_5u3
= value
;
3294 case MEP_OPERAND_IMM5P7
:
3295 fields
->f_ivc2_5u7
= value
;
3297 case MEP_OPERAND_IMM5P8
:
3298 fields
->f_ivc2_5u8
= value
;
3300 case MEP_OPERAND_IMM6P2
:
3301 fields
->f_ivc2_6u2
= value
;
3303 case MEP_OPERAND_IMM6P6
:
3304 fields
->f_ivc2_6u6
= value
;
3306 case MEP_OPERAND_IMM8P0
:
3307 fields
->f_ivc2_8u0
= value
;
3309 case MEP_OPERAND_IMM8P20
:
3310 fields
->f_ivc2_8u20
= value
;
3312 case MEP_OPERAND_IMM8P4
:
3313 fields
->f_ivc2_8u4
= value
;
3315 case MEP_OPERAND_IVC_X_0_2
:
3316 fields
->f_ivc2_2u0
= value
;
3318 case MEP_OPERAND_IVC_X_0_3
:
3319 fields
->f_ivc2_3u0
= value
;
3321 case MEP_OPERAND_IVC_X_0_4
:
3322 fields
->f_ivc2_4u0
= value
;
3324 case MEP_OPERAND_IVC_X_0_5
:
3325 fields
->f_ivc2_5u0
= value
;
3327 case MEP_OPERAND_IVC_X_6_1
:
3328 fields
->f_ivc2_1u6
= value
;
3330 case MEP_OPERAND_IVC_X_6_2
:
3331 fields
->f_ivc2_2u6
= value
;
3333 case MEP_OPERAND_IVC_X_6_3
:
3334 fields
->f_ivc2_3u6
= value
;
3336 case MEP_OPERAND_IVC2_ACC0_0
:
3338 case MEP_OPERAND_IVC2_ACC0_1
:
3340 case MEP_OPERAND_IVC2_ACC0_2
:
3342 case MEP_OPERAND_IVC2_ACC0_3
:
3344 case MEP_OPERAND_IVC2_ACC0_4
:
3346 case MEP_OPERAND_IVC2_ACC0_5
:
3348 case MEP_OPERAND_IVC2_ACC0_6
:
3350 case MEP_OPERAND_IVC2_ACC0_7
:
3352 case MEP_OPERAND_IVC2_ACC1_0
:
3354 case MEP_OPERAND_IVC2_ACC1_1
:
3356 case MEP_OPERAND_IVC2_ACC1_2
:
3358 case MEP_OPERAND_IVC2_ACC1_3
:
3360 case MEP_OPERAND_IVC2_ACC1_4
:
3362 case MEP_OPERAND_IVC2_ACC1_5
:
3364 case MEP_OPERAND_IVC2_ACC1_6
:
3366 case MEP_OPERAND_IVC2_ACC1_7
:
3368 case MEP_OPERAND_IVC2_CC
:
3370 case MEP_OPERAND_IVC2_COFA0
:
3372 case MEP_OPERAND_IVC2_COFA1
:
3374 case MEP_OPERAND_IVC2_COFR0
:
3376 case MEP_OPERAND_IVC2_COFR1
:
3378 case MEP_OPERAND_IVC2_CSAR0
:
3380 case MEP_OPERAND_IVC2_CSAR1
:
3382 case MEP_OPERAND_IVC2C3CCRN
:
3383 fields
->f_ivc2_ccrn_c3
= value
;
3385 case MEP_OPERAND_IVC2CCRN
:
3386 fields
->f_ivc2_ccrn
= value
;
3388 case MEP_OPERAND_IVC2CRN
:
3389 fields
->f_ivc2_crnx
= value
;
3391 case MEP_OPERAND_IVC2RM
:
3392 fields
->f_ivc2_crm
= value
;
3394 case MEP_OPERAND_LO
:
3396 case MEP_OPERAND_LP
:
3398 case MEP_OPERAND_MB0
:
3400 case MEP_OPERAND_MB1
:
3402 case MEP_OPERAND_ME0
:
3404 case MEP_OPERAND_ME1
:
3406 case MEP_OPERAND_NPC
:
3408 case MEP_OPERAND_OPT
:
3410 case MEP_OPERAND_PCABS24A2
:
3411 fields
->f_24u5a2n
= value
;
3413 case MEP_OPERAND_PCREL12A2
:
3414 fields
->f_12s4a2
= value
;
3416 case MEP_OPERAND_PCREL17A2
:
3417 fields
->f_17s16a2
= value
;
3419 case MEP_OPERAND_PCREL24A2
:
3420 fields
->f_24s5a2n
= value
;
3422 case MEP_OPERAND_PCREL8A2
:
3423 fields
->f_8s8a2
= value
;
3425 case MEP_OPERAND_PSW
:
3427 case MEP_OPERAND_R0
:
3429 case MEP_OPERAND_R1
:
3431 case MEP_OPERAND_RL
:
3432 fields
->f_rl
= value
;
3434 case MEP_OPERAND_RL5
:
3435 fields
->f_rl5
= value
;
3437 case MEP_OPERAND_RM
:
3438 fields
->f_rm
= value
;
3440 case MEP_OPERAND_RMA
:
3441 fields
->f_rm
= value
;
3443 case MEP_OPERAND_RN
:
3444 fields
->f_rn
= value
;
3446 case MEP_OPERAND_RN3
:
3447 fields
->f_rn3
= value
;
3449 case MEP_OPERAND_RN3C
:
3450 fields
->f_rn3
= value
;
3452 case MEP_OPERAND_RN3L
:
3453 fields
->f_rn3
= value
;
3455 case MEP_OPERAND_RN3S
:
3456 fields
->f_rn3
= value
;
3458 case MEP_OPERAND_RN3UC
:
3459 fields
->f_rn3
= value
;
3461 case MEP_OPERAND_RN3UL
:
3462 fields
->f_rn3
= value
;
3464 case MEP_OPERAND_RN3US
:
3465 fields
->f_rn3
= value
;
3467 case MEP_OPERAND_RNC
:
3468 fields
->f_rn
= value
;
3470 case MEP_OPERAND_RNL
:
3471 fields
->f_rn
= value
;
3473 case MEP_OPERAND_RNS
:
3474 fields
->f_rn
= value
;
3476 case MEP_OPERAND_RNUC
:
3477 fields
->f_rn
= value
;
3479 case MEP_OPERAND_RNUL
:
3480 fields
->f_rn
= value
;
3482 case MEP_OPERAND_RNUS
:
3483 fields
->f_rn
= value
;
3485 case MEP_OPERAND_SAR
:
3487 case MEP_OPERAND_SDISP16
:
3488 fields
->f_16s16
= value
;
3490 case MEP_OPERAND_SIMM16
:
3491 fields
->f_16s16
= value
;
3493 case MEP_OPERAND_SIMM16P0
:
3494 fields
->f_ivc2_simm16p0
= value
;
3496 case MEP_OPERAND_SIMM6
:
3497 fields
->f_6s8
= value
;
3499 case MEP_OPERAND_SIMM8
:
3500 fields
->f_8s8
= value
;
3502 case MEP_OPERAND_SIMM8P0
:
3503 fields
->f_ivc2_8s0
= value
;
3505 case MEP_OPERAND_SIMM8P20
:
3506 fields
->f_ivc2_8s20
= value
;
3508 case MEP_OPERAND_SIMM8P4
:
3509 fields
->f_ivc2_8s4
= value
;
3511 case MEP_OPERAND_SP
:
3513 case MEP_OPERAND_SPR
:
3515 case MEP_OPERAND_TP
:
3517 case MEP_OPERAND_TPR
:
3519 case MEP_OPERAND_UDISP2
:
3520 fields
->f_2u6
= value
;
3522 case MEP_OPERAND_UDISP7
:
3523 fields
->f_7u9
= value
;
3525 case MEP_OPERAND_UDISP7A2
:
3526 fields
->f_7u9a2
= value
;
3528 case MEP_OPERAND_UDISP7A4
:
3529 fields
->f_7u9a4
= value
;
3531 case MEP_OPERAND_UIMM16
:
3532 fields
->f_16u16
= value
;
3534 case MEP_OPERAND_UIMM2
:
3535 fields
->f_2u10
= value
;
3537 case MEP_OPERAND_UIMM24
:
3538 fields
->f_24u8n
= value
;
3540 case MEP_OPERAND_UIMM3
:
3541 fields
->f_3u5
= value
;
3543 case MEP_OPERAND_UIMM4
:
3544 fields
->f_4u8
= value
;
3546 case MEP_OPERAND_UIMM5
:
3547 fields
->f_5u8
= value
;
3549 case MEP_OPERAND_UIMM7A4
:
3550 fields
->f_7u9a4
= value
;
3552 case MEP_OPERAND_ZERO
:
3556 /* xgettext:c-format */
3557 opcodes_error_handler
3558 (_("internal error: unrecognized field %d while setting vma operand"),
3564 /* Function to call before using the instruction builder tables. */
3567 mep_cgen_init_ibld_table (CGEN_CPU_DESC cd
)
3569 cd
->insert_handlers
= & mep_cgen_insert_handlers
[0];
3570 cd
->extract_handlers
= & mep_cgen_extract_handlers
[0];
3572 cd
->insert_operand
= mep_cgen_insert_operand
;
3573 cd
->extract_operand
= mep_cgen_extract_operand
;
3575 cd
->get_int_operand
= mep_cgen_get_int_operand
;
3576 cd
->set_int_operand
= mep_cgen_set_int_operand
;
3577 cd
->get_vma_operand
= mep_cgen_get_vma_operand
;
3578 cd
->set_vma_operand
= mep_cgen_set_vma_operand
;