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