1 /* Assembler interface for targets using CGEN. -*- C -*-
2 CGEN: Cpu tools GENerator
4 THIS FILE IS MACHINE GENERATED WITH CGEN.
5 - the resultant file is machine generated, cgen-asm.in isn't
7 Copyright 1996, 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
9 This file is part of the GNU Binutils and GDB, the GNU debugger.
11 This program 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 2, or (at your option)
16 This program is distributed in the hope that it will be useful,
17 but WITHOUT ANY WARRANTY; without even the implied warranty of
18 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 GNU General Public License for more details.
21 You should have received a copy of the GNU General Public License
22 along with this program; if not, write to the Free Software Foundation, Inc.,
23 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */
25 /* ??? Eventually more and more of this stuff can go to cpu-independent files.
33 #include "m32c-desc.h"
37 #include "libiberty.h"
38 #include "safe-ctype.h"
41 #define min(a,b) ((a) < (b) ? (a) : (b))
43 #define max(a,b) ((a) > (b) ? (a) : (b))
45 static const char * parse_insn_normal
46 (CGEN_CPU_DESC, const CGEN_INSN *, const char **, CGEN_FIELDS *);
48 /* -- assembler routines inserted here. */
53 #define MACH_M32C 5 /* Must match md_begin. */
56 m32c_cgen_isa_register (const char **strp)
59 const char *s = *strp;
60 static char * m32c_register_names [] =
62 "r0", "r1", "r2", "r3", "r0l", "r0h", "r1l", "r1h",
63 "a0", "a1", "r2r0", "r3r1", "sp", "fb", "dct0", "dct1", "flg", "svf",
64 "drc0", "drc1", "dmd0", "dmd1", "intb", "svp", "vct", "isp", "dma0",
65 "dma1", "dra0", "dra1", "dsa0", "dsa1", 0
68 for (u = 0; m32c_register_names[u]; u++)
70 int len = strlen (m32c_register_names[u]);
72 if (memcmp (m32c_register_names[u], s, len) == 0
73 && (s[len] == 0 || ! ISALNUM (s[len])))
80 parse_unsigned6 (CGEN_CPU_DESC cd, const char **strp,
81 int opindex, unsigned long *valuep)
83 const char *errmsg = 0;
87 /* Don't successfully parse literals beginning with '[' */
89 return "Invalid literal"; /* anything -- will not be seen */
91 if (strncmp (*strp, "0x0", 3) == 0
92 || (**strp == '0' && *(*strp + 1) != 'x'))
95 errmsg = cgen_parse_unsigned_integer (cd, strp, opindex, & value);
100 return _("imm:6 immediate is out of range");
107 parse_unsigned8 (CGEN_CPU_DESC cd, const char **strp,
108 int opindex, unsigned long *valuep)
110 const char *errmsg = 0;
114 /* Don't successfully parse literals beginning with '[' */
116 return "Invalid literal"; /* anything -- will not be seen */
118 if (strncmp (*strp, "0x0", 3) == 0
119 || (**strp == '0' && *(*strp + 1) != 'x'))
122 errmsg = cgen_parse_unsigned_integer (cd, strp, opindex, & value);
127 return _("dsp:8 immediate is out of range");
129 /* If this field may require a relocation then use larger dsp16. */
130 if (! have_zero && value == 0)
131 return _("dsp:8 immediate is out of range");
138 parse_signed4 (CGEN_CPU_DESC cd, const char **strp,
139 int opindex, signed long *valuep)
141 const char *errmsg = 0;
145 /* Don't successfully parse literals beginning with '[' */
147 return "Invalid literal"; /* anything -- will not be seen */
149 if (strncmp (*strp, "0x0", 3) == 0
150 || (**strp == '0' && *(*strp + 1) != 'x'))
153 errmsg = cgen_parse_signed_integer (cd, strp, opindex, & value);
157 if (value < -8 || value > 7)
158 return _("Immediate is out of range -8 to 7");
160 /* If this field may require a relocation then use larger dsp16. */
161 if (! have_zero && value == 0)
162 return _("Immediate is out of range -8 to 7");
169 parse_signed8 (CGEN_CPU_DESC cd, const char **strp,
170 int opindex, signed long *valuep)
172 const char *errmsg = 0;
175 /* Don't successfully parse literals beginning with '[' */
177 return "Invalid literal"; /* anything -- will not be seen */
179 errmsg = cgen_parse_signed_integer (cd, strp, opindex, & value);
183 if (value <= 255 && value > 127)
186 if (value < -128 || value > 127)
187 return _("dsp:8 immediate is out of range");
194 parse_unsigned16 (CGEN_CPU_DESC cd, const char **strp,
195 int opindex, unsigned long *valuep)
197 const char *errmsg = 0;
201 /* Don't successfully parse literals beginning with '[' */
203 return "Invalid literal"; /* anything -- will not be seen */
205 /* Don't successfully parse register names */
206 if (m32c_cgen_isa_register (strp))
207 return "Invalid literal"; /* anything -- will not be seen */
209 if (strncmp (*strp, "0x0", 3) == 0
210 || (**strp == '0' && *(*strp + 1) != 'x'))
213 errmsg = cgen_parse_unsigned_integer (cd, strp, opindex, & value);
218 return _("dsp:16 immediate is out of range");
220 /* If this field may require a relocation then use larger dsp24. */
221 if (cd->machs == MACH_M32C && ! have_zero && value == 0
222 && (strncmp (*strp, "[a", 2) == 0
225 return _("dsp:16 immediate is out of range");
232 parse_signed16 (CGEN_CPU_DESC cd, const char **strp,
233 int opindex, signed long *valuep)
235 const char *errmsg = 0;
238 /* Don't successfully parse literals beginning with '[' */
240 return "Invalid literal"; /* anything -- will not be seen */
242 errmsg = cgen_parse_signed_integer (cd, strp, opindex, & value);
246 if (value <= 65535 && value > 32767)
249 if (value < -32768 || value > 32767)
250 return _("dsp:16 immediate is out of range");
257 parse_unsigned20 (CGEN_CPU_DESC cd, const char **strp,
258 int opindex, unsigned long *valuep)
260 const char *errmsg = 0;
263 /* Don't successfully parse literals beginning with '[' */
265 return "Invalid literal"; /* anything -- will not be seen */
267 /* Don't successfully parse register names */
268 if (m32c_cgen_isa_register (strp))
269 return "Invalid literal"; /* anything -- will not be seen */
271 errmsg = cgen_parse_unsigned_integer (cd, strp, opindex, & value);
276 return _("dsp:20 immediate is out of range");
283 parse_unsigned24 (CGEN_CPU_DESC cd, const char **strp,
284 int opindex, unsigned long *valuep)
286 const char *errmsg = 0;
289 /* Don't successfully parse literals beginning with '[' */
291 return "Invalid literal"; /* anything -- will not be seen */
293 /* Don't successfully parse register names */
294 if (m32c_cgen_isa_register (strp))
295 return "Invalid literal"; /* anything -- will not be seen */
297 errmsg = cgen_parse_unsigned_integer (cd, strp, opindex, & value);
301 if (value > 0xffffff)
302 return _("dsp:24 immediate is out of range");
309 parse_signed32 (CGEN_CPU_DESC cd, const char **strp,
310 int opindex, signed long *valuep)
312 const char *errmsg = 0;
316 /* Don't successfully parse literals beginning with '[' */
318 return "Invalid literal"; /* anything -- will not be seen */
320 /* Don't successfully parse register names */
321 if (m32c_cgen_isa_register (strp))
322 return "Invalid literal"; /* anything -- will not be seen */
325 errmsg = cgen_parse_signed_integer (cd, strp, opindex, & value);
334 parse_imm1_S (CGEN_CPU_DESC cd, const char **strp,
335 int opindex, signed long *valuep)
337 const char *errmsg = 0;
341 /* Don't successfully parse literals beginning with '[' */
343 return "Invalid literal"; /* anything -- will not be seen */
345 /* Don't successfully parse register names */
346 if (m32c_cgen_isa_register (strp))
347 return "Invalid literal"; /* anything -- will not be seen */
350 errmsg = cgen_parse_unsigned_integer (cd, strp, opindex, & value);
354 if (value < 1 || value > 2)
355 return _("immediate is out of range 1-2");
362 parse_imm3_S (CGEN_CPU_DESC cd, const char **strp,
363 int opindex, signed long *valuep)
365 const char *errmsg = 0;
369 /* Don't successfully parse literals beginning with '[' */
371 return "Invalid literal"; /* anything -- will not be seen */
373 /* Don't successfully parse register names */
374 if (m32c_cgen_isa_register (strp))
375 return "Invalid literal"; /* anything -- will not be seen */
378 errmsg = cgen_parse_unsigned_integer (cd, strp, opindex, & value);
382 if (value < 1 || value > 8)
383 return _("immediate is out of range 1-8");
390 parse_Bitno16R (CGEN_CPU_DESC cd, const char **strp,
391 int opindex, unsigned long *valuep)
393 const char *errmsg = 0;
397 /* Don't successfully parse literals beginning with '[' */
399 return "Invalid literal"; /* anything -- will not be seen */
402 errmsg = cgen_parse_unsigned_integer (cd, strp, opindex, & value);
407 return _("Bit number for indexing general register is out of range 0-15");
414 parse_unsigned_bitbase (CGEN_CPU_DESC cd, const char **strp,
415 int opindex, unsigned long *valuep,
418 const char *errmsg = 0;
421 const char *newp = *strp;
422 unsigned long long bitbase;
425 /* Don't successfully parse literals beginning with '[' */
427 return "Invalid literal"; /* anything -- will not be seen */
430 errmsg = cgen_parse_unsigned_integer (cd, & newp, opindex, & bit);
435 return "Missing base for bit,base:8";
438 errmsg = cgen_parse_unsigned_integer (cd, & newp, opindex, & base);
442 bitbase = (unsigned long long)bit + ((unsigned long long)base * 8);
444 if (bitbase >= (1ull << bits))
445 return _("bit,base is out of range");
453 parse_signed_bitbase (CGEN_CPU_DESC cd, const char **strp,
454 int opindex, signed long *valuep,
457 const char *errmsg = 0;
460 const char *newp = *strp;
465 /* Don't successfully parse literals beginning with '[' */
467 return "Invalid literal"; /* anything -- will not be seen */
470 errmsg = cgen_parse_unsigned_integer (cd, & newp, opindex, & bit);
475 return "Missing base for bit,base:8";
478 errmsg = cgen_parse_signed_integer (cd, & newp, opindex, & base);
482 bitbase = (long long)bit + ((long long)base * 8);
484 limit = 1ll << (bits - 1);
485 if (bitbase < -limit || bitbase >= limit)
486 return _("bit,base is out of range");
494 parse_unsigned_bitbase8 (CGEN_CPU_DESC cd, const char **strp,
495 int opindex, unsigned long *valuep)
497 return parse_unsigned_bitbase (cd, strp, opindex, valuep, 8);
501 parse_unsigned_bitbase11 (CGEN_CPU_DESC cd, const char **strp,
502 int opindex, unsigned long *valuep)
504 return parse_unsigned_bitbase (cd, strp, opindex, valuep, 11);
508 parse_unsigned_bitbase16 (CGEN_CPU_DESC cd, const char **strp,
509 int opindex, unsigned long *valuep)
511 return parse_unsigned_bitbase (cd, strp, opindex, valuep, 16);
515 parse_unsigned_bitbase19 (CGEN_CPU_DESC cd, const char **strp,
516 int opindex, unsigned long *valuep)
518 return parse_unsigned_bitbase (cd, strp, opindex, valuep, 19);
522 parse_unsigned_bitbase27 (CGEN_CPU_DESC cd, const char **strp,
523 int opindex, unsigned long *valuep)
525 return parse_unsigned_bitbase (cd, strp, opindex, valuep, 27);
529 parse_signed_bitbase8 (CGEN_CPU_DESC cd, const char **strp,
530 int opindex, signed long *valuep)
532 return parse_signed_bitbase (cd, strp, opindex, valuep, 8);
536 parse_signed_bitbase11 (CGEN_CPU_DESC cd, const char **strp,
537 int opindex, signed long *valuep)
539 return parse_signed_bitbase (cd, strp, opindex, valuep, 11);
543 parse_signed_bitbase19 (CGEN_CPU_DESC cd, const char **strp,
544 int opindex, signed long *valuep)
546 return parse_signed_bitbase (cd, strp, opindex, valuep, 19);
549 /* Parse the suffix as :<char> or as nothing followed by a whitespace. */
551 parse_suffix (const char **strp, char suffix)
553 const char *newp = *strp;
555 if (**strp == ':' && tolower (*(*strp + 1)) == suffix)
564 return "Invalid suffix"; /* anything -- will not be seen */
568 parse_S (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED, const char **strp,
569 int opindex ATTRIBUTE_UNUSED, signed long *valuep ATTRIBUTE_UNUSED)
571 return parse_suffix (strp, 's');
575 parse_G (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED, const char **strp,
576 int opindex ATTRIBUTE_UNUSED, signed long *valuep ATTRIBUTE_UNUSED)
578 return parse_suffix (strp, 'g');
582 parse_Q (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED, const char **strp,
583 int opindex ATTRIBUTE_UNUSED, signed long *valuep ATTRIBUTE_UNUSED)
585 return parse_suffix (strp, 'q');
589 parse_Z (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED, const char **strp,
590 int opindex ATTRIBUTE_UNUSED, signed long *valuep ATTRIBUTE_UNUSED)
592 return parse_suffix (strp, 'z');
595 /* Parse an empty suffix. Fail if the next char is ':'. */
597 parse_X (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED, const char **strp,
598 int opindex ATTRIBUTE_UNUSED, signed long *valuep ATTRIBUTE_UNUSED)
601 return "Unexpected suffix";
606 parse_r0l_r0h (CGEN_CPU_DESC cd, const char **strp,
607 int opindex ATTRIBUTE_UNUSED, signed long *valuep)
612 const char *newp = *strp;
615 errmsg = cgen_parse_keyword (cd, & newp, & m32c_cgen_opval_h_r0l_r0h, & value);
620 return "not a valid r0l/r0h pair";
623 /* Parse the second register in the pair */
624 if (value == 0) /* r0l */
625 errmsg = cgen_parse_keyword (cd, & newp, & m32c_cgen_opval_h_r0h, & junk);
627 errmsg = cgen_parse_keyword (cd, & newp, & m32c_cgen_opval_h_r0l, & junk);
636 /* Accept .b or .w in any case */
638 parse_size (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED, const char **strp,
639 int opindex ATTRIBUTE_UNUSED, signed long *valuep ATTRIBUTE_UNUSED)
642 && (*(*strp + 1) == 'b' || *(*strp + 1) == 'B'
643 || *(*strp + 1) == 'w' || *(*strp + 1) == 'W'))
648 return "Invalid size specifier";
651 /* static const char * parse_abs (CGEN_CPU_DESC, const char **, int, */
652 /* unsigned long *, unsigned long); */
653 /* static const char * parse_abs16 (CGEN_CPU_DESC, const char **, int, */
654 /* int ATTRIBUTE_UNUSED, */
655 /* enum cgen_parse_operand_result * ATTRIBUTE_UNUSED, */
656 /* unsigned long * ); */
657 /* static const char * parse_abs24 (CGEN_CPU_DESC, const char **, int, */
658 /* int ATTRIBUTE_UNUSED, */
659 /* enum cgen_parse_operand_result * ATTRIBUTE_UNUSED, */
660 /* unsigned long *); */
662 /* /\* Parse absolute *\/ */
664 /* static const char * */
665 /* parse_abs16 (CGEN_CPU_DESC cd, const char **strp, int opindex, */
666 /* int reloc ATTRIBUTE_UNUSED, */
667 /* enum cgen_parse_operand_result *type_addr ATTRIBUTE_UNUSED, */
668 /* unsigned long *valuep) */
670 /* return parse_abs (cd, strp, opindex, valuep, 16); */
673 /* static const char * */
674 /* parse_abs24 (CGEN_CPU_DESC cd, const char **strp, int opindex, */
675 /* int reloc ATTRIBUTE_UNUSED, */
676 /* enum cgen_parse_operand_result *type_addr ATTRIBUTE_UNUSED, */
677 /* unsigned long *valuep) */
679 /* return parse_abs (cd, strp, opindex, valuep, 24); */
682 /* static const char * */
683 /* parse_abs (CGEN_CPU_DESC cd, const char **strp, int opindex, */
684 /* unsigned long *valuep, */
685 /* unsigned long length) */
687 /* const char *errmsg = 0; */
688 /* const char *op; */
689 /* int has_register = 0; */
691 /* for (op = *strp; *op != '\0'; op++) */
693 /* if (*op == '[') */
695 /* has_register = 1; */
698 /* else if (*op == ',') */
702 /* if (has_register || m32c_cgen_isa_register (strp)) */
703 /* errmsg = _("immediate value cannot be register"); */
706 /* enum cgen_parse_operand_result result_type; */
708 /* const char *errmsg; */
710 /* errmsg = cgen_parse_address (cd, strp, opindex, BFD_RELOC_HI16, */
711 /* &result_type, &value); */
712 /* *valuep = value; */
716 /* /\* Handle signed/unsigned literal. *\/ */
718 /* static const char * */
719 /* parse_imm8 (cd, strp, opindex, valuep) */
720 /* CGEN_CPU_DESC cd; */
721 /* const char **strp; */
723 /* unsigned long *valuep; */
725 /* const char *errmsg = 0; */
727 /* long have_zero = 0; */
729 /* if (strncmp (*strp, "0x0", 3) == 0 */
730 /* || (**strp == '0' && *(*strp + 1) != 'x')) */
732 /* errmsg = cgen_parse_signed_integer (cd, strp, opindex, & value); */
733 /* *valuep = value; */
734 /* /\* If this field may require a relocation then use larger dsp16. *\/ */
735 /* if (! have_zero && value == 0) */
736 /* errmsg = _("immediate value may not fit in dsp8 field"); */
741 /* static const char * */
742 /* parse_imm16 (cd, strp, opindex, valuep) */
743 /* CGEN_CPU_DESC cd; */
744 /* const char **strp; */
746 /* unsigned long *valuep; */
748 /* const char *errmsg; */
751 /* errmsg = cgen_parse_signed_integer (cd, strp, opindex, & value); */
752 /* *valuep = value; */
756 /* static const char * */
757 /* parse_imm24 (cd, strp, opindex, valuep) */
758 /* CGEN_CPU_DESC cd; */
759 /* const char **strp; */
761 /* unsigned long *valuep; */
763 /* const char *errmsg; */
766 /* errmsg = cgen_parse_signed_integer (cd, strp, opindex, & value); */
767 /* *valuep = value; */
771 /* static const char * */
772 /* parse_imm32 (cd, strp, opindex, valuep) */
773 /* CGEN_CPU_DESC cd; */
774 /* const char **strp; */
776 /* unsigned long *valuep; */
778 /* const char *errmsg; */
781 /* errmsg = cgen_parse_signed_integer (cd, strp, opindex, & value); */
782 /* *valuep = value; */
786 /* /\* Handle bitfields. *\/ */
788 /* static const char * */
789 /* parse_boff8 (cd, strp, opindex, valuep) */
790 /* CGEN_CPU_DESC cd; */
791 /* const char **strp; */
793 /* unsigned long *valuep; */
795 /* const char *errmsg; */
796 /* long bit_value, value; */
798 /* errmsg = cgen_parse_signed_integer (cd, strp, opindex, & bit_value); */
799 /* if (errmsg == 0) */
801 /* *strp = *strp + 1; */
802 /* errmsg = cgen_parse_signed_integer (cd, strp, opindex, & value); */
804 /* value = value * 8 + bit_value; */
805 /* *valuep = value; */
806 /* if (value > 0x100) */
807 /* errmsg = _("Operand out of range. Must be between 0 and 255."); */
811 /* static const char * */
812 /* parse_boff16 (cd, strp, opindex, valuep) */
813 /* CGEN_CPU_DESC cd; */
814 /* const char **strp; */
816 /* unsigned long *valuep; */
818 /* const char *errmsg; */
819 /* long bit_value, value; */
821 /* errmsg = cgen_parse_signed_integer (cd, strp, opindex, & bit_value); */
822 /* if (errmsg == 0) */
824 /* *strp = *strp + 1; */
825 /* errmsg = cgen_parse_signed_integer (cd, strp, opindex, & value); */
827 /* value = value * 8 + bit_value; */
828 /* *valuep = value; */
829 /* if (value > 0x1000) */
830 /* errmsg = _("Operand out of range. Must be between 0 and 65535."); */
835 /* Special check to ensure that instruction exists for given machine */
837 m32c_cgen_insn_supported (CGEN_CPU_DESC cd,
838 const CGEN_INSN *insn)
840 int machs = CGEN_INSN_ATTR_VALUE (insn, CGEN_INSN_MACH);
841 int isas = CGEN_INSN_ATTR_VALUE (insn, CGEN_INSN_ISA);
843 /* If attributes are absent, assume no restriction. */
847 return ((machs & cd->machs)
848 && (isas & cd->isas));
851 /* Parse a set of registers, R0,R1,A0,A1,SB,FB. */
854 parse_regset (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED,
856 int opindex ATTRIBUTE_UNUSED,
857 unsigned long *valuep,
861 const char *errmsg = 0;
865 while (**strp && **strp != ')')
867 if (**strp == 'r' || **strp == 'R')
870 regno = **strp - '0';
872 errmsg = _("Register number is not valid");
874 else if (**strp == 'a' || **strp == 'A')
877 regno = **strp - '0';
879 errmsg = _("Register number is not valid");
880 regno = **strp - '0' + 4;
883 else if (strncasecmp (*strp, "sb", 2) == 0 || strncasecmp (*strp, "SB", 2) == 0)
889 else if (strncasecmp (*strp, "fb", 2) == 0 || strncasecmp (*strp, "FB", 2) == 0)
895 if (push) /* Mask is reversed for push. */
896 *valuep |= 0x80 >> regno;
898 *valuep |= 1 << regno;
903 if (*(*strp + 1) == ')')
910 errmsg = _("Register list is not valid");
919 parse_pop_regset (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED,
921 int opindex ATTRIBUTE_UNUSED,
922 unsigned long *valuep)
924 return parse_regset (cd, strp, opindex, valuep, POP);
928 parse_push_regset (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED,
930 int opindex ATTRIBUTE_UNUSED,
931 unsigned long *valuep)
933 return parse_regset (cd, strp, opindex, valuep, PUSH);
938 const char * m32c_cgen_parse_operand
939 PARAMS ((CGEN_CPU_DESC, int, const char **, CGEN_FIELDS *));
941 /* Main entry point for operand parsing.
943 This function is basically just a big switch statement. Earlier versions
944 used tables to look up the function to use, but
945 - if the table contains both assembler and disassembler functions then
946 the disassembler contains much of the assembler and vice-versa,
947 - there's a lot of inlining possibilities as things grow,
948 - using a switch statement avoids the function call overhead.
950 This function could be moved into `parse_insn_normal', but keeping it
951 separate makes clear the interface between `parse_insn_normal' and each of
955 m32c_cgen_parse_operand (cd, opindex, strp, fields)
959 CGEN_FIELDS * fields;
961 const char * errmsg = NULL;
962 /* Used by scalar operands that still need to be parsed. */
963 long junk ATTRIBUTE_UNUSED;
967 case M32C_OPERAND_A0 :
968 errmsg = cgen_parse_keyword (cd, strp, & m32c_cgen_opval_h_a0, & junk);
970 case M32C_OPERAND_A1 :
971 errmsg = cgen_parse_keyword (cd, strp, & m32c_cgen_opval_h_a1, & junk);
973 case M32C_OPERAND_AN16_PUSH_S :
974 errmsg = cgen_parse_keyword (cd, strp, & m32c_cgen_opval_h_ar_HI, & fields->f_4_1);
976 case M32C_OPERAND_BIT16AN :
977 errmsg = cgen_parse_keyword (cd, strp, & m32c_cgen_opval_h_ar, & fields->f_dst16_an);
979 case M32C_OPERAND_BIT16RN :
980 errmsg = cgen_parse_keyword (cd, strp, & m32c_cgen_opval_h_gr_HI, & fields->f_dst16_rn);
982 case M32C_OPERAND_BIT32ANPREFIXED :
983 errmsg = cgen_parse_keyword (cd, strp, & m32c_cgen_opval_h_ar, & fields->f_dst32_an_prefixed);
985 case M32C_OPERAND_BIT32ANUNPREFIXED :
986 errmsg = cgen_parse_keyword (cd, strp, & m32c_cgen_opval_h_ar, & fields->f_dst32_an_unprefixed);
988 case M32C_OPERAND_BIT32RNPREFIXED :
989 errmsg = cgen_parse_keyword (cd, strp, & m32c_cgen_opval_h_gr_QI, & fields->f_dst32_rn_prefixed_QI);
991 case M32C_OPERAND_BIT32RNUNPREFIXED :
992 errmsg = cgen_parse_keyword (cd, strp, & m32c_cgen_opval_h_gr_QI, & fields->f_dst32_rn_unprefixed_QI);
994 case M32C_OPERAND_BITBASE16_16_S8 :
995 errmsg = parse_signed_bitbase8 (cd, strp, M32C_OPERAND_BITBASE16_16_S8, (unsigned long *) (& fields->f_dsp_16_s8));
997 case M32C_OPERAND_BITBASE16_16_U16 :
998 errmsg = parse_unsigned_bitbase16 (cd, strp, M32C_OPERAND_BITBASE16_16_U16, (unsigned long *) (& fields->f_dsp_16_u16));
1000 case M32C_OPERAND_BITBASE16_16_U8 :
1001 errmsg = parse_unsigned_bitbase8 (cd, strp, M32C_OPERAND_BITBASE16_16_U8, (unsigned long *) (& fields->f_dsp_16_u8));
1003 case M32C_OPERAND_BITBASE16_8_U11_S :
1004 errmsg = parse_unsigned_bitbase11 (cd, strp, M32C_OPERAND_BITBASE16_8_U11_S, (long *) (& fields->f_bitbase16_u11_S));
1006 case M32C_OPERAND_BITBASE32_16_S11_UNPREFIXED :
1007 errmsg = parse_signed_bitbase11 (cd, strp, M32C_OPERAND_BITBASE32_16_S11_UNPREFIXED, (long *) (& fields->f_bitbase32_16_s11_unprefixed));
1009 case M32C_OPERAND_BITBASE32_16_S19_UNPREFIXED :
1010 errmsg = parse_signed_bitbase19 (cd, strp, M32C_OPERAND_BITBASE32_16_S19_UNPREFIXED, (long *) (& fields->f_bitbase32_16_s19_unprefixed));
1012 case M32C_OPERAND_BITBASE32_16_U11_UNPREFIXED :
1013 errmsg = parse_unsigned_bitbase11 (cd, strp, M32C_OPERAND_BITBASE32_16_U11_UNPREFIXED, (unsigned long *) (& fields->f_bitbase32_16_u11_unprefixed));
1015 case M32C_OPERAND_BITBASE32_16_U19_UNPREFIXED :
1016 errmsg = parse_unsigned_bitbase19 (cd, strp, M32C_OPERAND_BITBASE32_16_U19_UNPREFIXED, (unsigned long *) (& fields->f_bitbase32_16_u19_unprefixed));
1018 case M32C_OPERAND_BITBASE32_16_U27_UNPREFIXED :
1019 errmsg = parse_unsigned_bitbase27 (cd, strp, M32C_OPERAND_BITBASE32_16_U27_UNPREFIXED, (unsigned long *) (& fields->f_bitbase32_16_u27_unprefixed));
1021 case M32C_OPERAND_BITBASE32_24_S11_PREFIXED :
1022 errmsg = parse_signed_bitbase11 (cd, strp, M32C_OPERAND_BITBASE32_24_S11_PREFIXED, (long *) (& fields->f_bitbase32_24_s11_prefixed));
1024 case M32C_OPERAND_BITBASE32_24_S19_PREFIXED :
1025 errmsg = parse_signed_bitbase19 (cd, strp, M32C_OPERAND_BITBASE32_24_S19_PREFIXED, (long *) (& fields->f_bitbase32_24_s19_prefixed));
1027 case M32C_OPERAND_BITBASE32_24_U11_PREFIXED :
1028 errmsg = parse_unsigned_bitbase11 (cd, strp, M32C_OPERAND_BITBASE32_24_U11_PREFIXED, (unsigned long *) (& fields->f_bitbase32_24_u11_prefixed));
1030 case M32C_OPERAND_BITBASE32_24_U19_PREFIXED :
1031 errmsg = parse_unsigned_bitbase19 (cd, strp, M32C_OPERAND_BITBASE32_24_U19_PREFIXED, (unsigned long *) (& fields->f_bitbase32_24_u19_prefixed));
1033 case M32C_OPERAND_BITBASE32_24_U27_PREFIXED :
1034 errmsg = parse_unsigned_bitbase27 (cd, strp, M32C_OPERAND_BITBASE32_24_U27_PREFIXED, (unsigned long *) (& fields->f_bitbase32_24_u27_prefixed));
1036 case M32C_OPERAND_BITNO16R :
1037 errmsg = parse_Bitno16R (cd, strp, M32C_OPERAND_BITNO16R, (unsigned long *) (& fields->f_dsp_16_u8));
1039 case M32C_OPERAND_BITNO32PREFIXED :
1040 errmsg = cgen_parse_unsigned_integer (cd, strp, M32C_OPERAND_BITNO32PREFIXED, (unsigned long *) (& fields->f_bitno32_prefixed));
1042 case M32C_OPERAND_BITNO32UNPREFIXED :
1043 errmsg = cgen_parse_unsigned_integer (cd, strp, M32C_OPERAND_BITNO32UNPREFIXED, (unsigned long *) (& fields->f_bitno32_unprefixed));
1045 case M32C_OPERAND_DSP_10_U6 :
1046 errmsg = parse_unsigned6 (cd, strp, M32C_OPERAND_DSP_10_U6, (unsigned long *) (& fields->f_dsp_10_u6));
1048 case M32C_OPERAND_DSP_16_S16 :
1049 errmsg = parse_signed16 (cd, strp, M32C_OPERAND_DSP_16_S16, (long *) (& fields->f_dsp_16_s16));
1051 case M32C_OPERAND_DSP_16_S8 :
1052 errmsg = parse_signed8 (cd, strp, M32C_OPERAND_DSP_16_S8, (long *) (& fields->f_dsp_16_s8));
1054 case M32C_OPERAND_DSP_16_U16 :
1055 errmsg = parse_unsigned16 (cd, strp, M32C_OPERAND_DSP_16_U16, (unsigned long *) (& fields->f_dsp_16_u16));
1057 case M32C_OPERAND_DSP_16_U20 :
1058 errmsg = parse_unsigned20 (cd, strp, M32C_OPERAND_DSP_16_U20, (unsigned long *) (& fields->f_dsp_16_u24));
1060 case M32C_OPERAND_DSP_16_U24 :
1061 errmsg = parse_unsigned24 (cd, strp, M32C_OPERAND_DSP_16_U24, (unsigned long *) (& fields->f_dsp_16_u24));
1063 case M32C_OPERAND_DSP_16_U8 :
1064 errmsg = parse_unsigned8 (cd, strp, M32C_OPERAND_DSP_16_U8, (unsigned long *) (& fields->f_dsp_16_u8));
1066 case M32C_OPERAND_DSP_24_S16 :
1067 errmsg = parse_signed16 (cd, strp, M32C_OPERAND_DSP_24_S16, (long *) (& fields->f_dsp_24_s16));
1069 case M32C_OPERAND_DSP_24_S8 :
1070 errmsg = parse_signed8 (cd, strp, M32C_OPERAND_DSP_24_S8, (long *) (& fields->f_dsp_24_s8));
1072 case M32C_OPERAND_DSP_24_U16 :
1073 errmsg = parse_unsigned16 (cd, strp, M32C_OPERAND_DSP_24_U16, (unsigned long *) (& fields->f_dsp_24_u16));
1075 case M32C_OPERAND_DSP_24_U20 :
1076 errmsg = parse_unsigned20 (cd, strp, M32C_OPERAND_DSP_24_U20, (unsigned long *) (& fields->f_dsp_24_u24));
1078 case M32C_OPERAND_DSP_24_U24 :
1079 errmsg = parse_unsigned24 (cd, strp, M32C_OPERAND_DSP_24_U24, (unsigned long *) (& fields->f_dsp_24_u24));
1081 case M32C_OPERAND_DSP_24_U8 :
1082 errmsg = parse_unsigned8 (cd, strp, M32C_OPERAND_DSP_24_U8, (unsigned long *) (& fields->f_dsp_24_u8));
1084 case M32C_OPERAND_DSP_32_S16 :
1085 errmsg = parse_signed16 (cd, strp, M32C_OPERAND_DSP_32_S16, (long *) (& fields->f_dsp_32_s16));
1087 case M32C_OPERAND_DSP_32_S8 :
1088 errmsg = parse_signed8 (cd, strp, M32C_OPERAND_DSP_32_S8, (long *) (& fields->f_dsp_32_s8));
1090 case M32C_OPERAND_DSP_32_U16 :
1091 errmsg = parse_unsigned16 (cd, strp, M32C_OPERAND_DSP_32_U16, (unsigned long *) (& fields->f_dsp_32_u16));
1093 case M32C_OPERAND_DSP_32_U20 :
1094 errmsg = parse_unsigned20 (cd, strp, M32C_OPERAND_DSP_32_U20, (unsigned long *) (& fields->f_dsp_32_u24));
1096 case M32C_OPERAND_DSP_32_U24 :
1097 errmsg = parse_unsigned24 (cd, strp, M32C_OPERAND_DSP_32_U24, (unsigned long *) (& fields->f_dsp_32_u24));
1099 case M32C_OPERAND_DSP_32_U8 :
1100 errmsg = parse_unsigned8 (cd, strp, M32C_OPERAND_DSP_32_U8, (unsigned long *) (& fields->f_dsp_32_u8));
1102 case M32C_OPERAND_DSP_40_S16 :
1103 errmsg = parse_signed16 (cd, strp, M32C_OPERAND_DSP_40_S16, (unsigned long *) (& fields->f_dsp_40_s16));
1105 case M32C_OPERAND_DSP_40_S8 :
1106 errmsg = parse_signed8 (cd, strp, M32C_OPERAND_DSP_40_S8, (unsigned long *) (& fields->f_dsp_40_s8));
1108 case M32C_OPERAND_DSP_40_U16 :
1109 errmsg = parse_unsigned16 (cd, strp, M32C_OPERAND_DSP_40_U16, (unsigned long *) (& fields->f_dsp_40_u16));
1111 case M32C_OPERAND_DSP_40_U24 :
1112 errmsg = parse_unsigned24 (cd, strp, M32C_OPERAND_DSP_40_U24, (unsigned long *) (& fields->f_dsp_40_u24));
1114 case M32C_OPERAND_DSP_40_U8 :
1115 errmsg = parse_unsigned8 (cd, strp, M32C_OPERAND_DSP_40_U8, (unsigned long *) (& fields->f_dsp_40_u8));
1117 case M32C_OPERAND_DSP_48_S16 :
1118 errmsg = parse_signed16 (cd, strp, M32C_OPERAND_DSP_48_S16, (unsigned long *) (& fields->f_dsp_48_s16));
1120 case M32C_OPERAND_DSP_48_S8 :
1121 errmsg = parse_signed8 (cd, strp, M32C_OPERAND_DSP_48_S8, (unsigned long *) (& fields->f_dsp_48_s8));
1123 case M32C_OPERAND_DSP_48_U16 :
1124 errmsg = parse_unsigned16 (cd, strp, M32C_OPERAND_DSP_48_U16, (unsigned long *) (& fields->f_dsp_48_u16));
1126 case M32C_OPERAND_DSP_48_U24 :
1127 errmsg = parse_unsigned24 (cd, strp, M32C_OPERAND_DSP_48_U24, (unsigned long *) (& fields->f_dsp_48_u24));
1129 case M32C_OPERAND_DSP_48_U8 :
1130 errmsg = parse_unsigned8 (cd, strp, M32C_OPERAND_DSP_48_U8, (unsigned long *) (& fields->f_dsp_48_u8));
1132 case M32C_OPERAND_DSP_8_S8 :
1133 errmsg = parse_signed8 (cd, strp, M32C_OPERAND_DSP_8_S8, (long *) (& fields->f_dsp_8_s8));
1135 case M32C_OPERAND_DSP_8_U16 :
1136 errmsg = parse_unsigned16 (cd, strp, M32C_OPERAND_DSP_8_U16, (unsigned long *) (& fields->f_dsp_8_u16));
1138 case M32C_OPERAND_DSP_8_U6 :
1139 errmsg = parse_unsigned6 (cd, strp, M32C_OPERAND_DSP_8_U6, (unsigned long *) (& fields->f_dsp_8_u6));
1141 case M32C_OPERAND_DSP_8_U8 :
1142 errmsg = parse_unsigned8 (cd, strp, M32C_OPERAND_DSP_8_U8, (unsigned long *) (& fields->f_dsp_8_u8));
1144 case M32C_OPERAND_DST16AN :
1145 errmsg = cgen_parse_keyword (cd, strp, & m32c_cgen_opval_h_ar, & fields->f_dst16_an);
1147 case M32C_OPERAND_DST16AN_S :
1148 errmsg = cgen_parse_keyword (cd, strp, & m32c_cgen_opval_h_ar_HI, & fields->f_dst16_an_s);
1150 case M32C_OPERAND_DST16ANHI :
1151 errmsg = cgen_parse_keyword (cd, strp, & m32c_cgen_opval_h_ar_HI, & fields->f_dst16_an);
1153 case M32C_OPERAND_DST16ANQI :
1154 errmsg = cgen_parse_keyword (cd, strp, & m32c_cgen_opval_h_ar_QI, & fields->f_dst16_an);
1156 case M32C_OPERAND_DST16ANQI_S :
1157 errmsg = cgen_parse_keyword (cd, strp, & m32c_cgen_opval_h_ar_QI, & fields->f_dst16_rn_QI_s);
1159 case M32C_OPERAND_DST16ANSI :
1160 errmsg = cgen_parse_keyword (cd, strp, & m32c_cgen_opval_h_ar_SI, & fields->f_dst16_an);
1162 case M32C_OPERAND_DST16RNEXTQI :
1163 errmsg = cgen_parse_keyword (cd, strp, & m32c_cgen_opval_h_gr_ext_QI, & fields->f_dst16_rn_ext);
1165 case M32C_OPERAND_DST16RNHI :
1166 errmsg = cgen_parse_keyword (cd, strp, & m32c_cgen_opval_h_gr_HI, & fields->f_dst16_rn);
1168 case M32C_OPERAND_DST16RNQI :
1169 errmsg = cgen_parse_keyword (cd, strp, & m32c_cgen_opval_h_gr_QI, & fields->f_dst16_rn);
1171 case M32C_OPERAND_DST16RNQI_S :
1172 errmsg = cgen_parse_keyword (cd, strp, & m32c_cgen_opval_h_r0l_r0h, & fields->f_dst16_rn_QI_s);
1174 case M32C_OPERAND_DST16RNSI :
1175 errmsg = cgen_parse_keyword (cd, strp, & m32c_cgen_opval_h_gr_SI, & fields->f_dst16_rn);
1177 case M32C_OPERAND_DST32ANEXTUNPREFIXED :
1178 errmsg = cgen_parse_keyword (cd, strp, & m32c_cgen_opval_h_ar, & fields->f_dst32_an_unprefixed);
1180 case M32C_OPERAND_DST32ANPREFIXED :
1181 errmsg = cgen_parse_keyword (cd, strp, & m32c_cgen_opval_h_ar, & fields->f_dst32_an_prefixed);
1183 case M32C_OPERAND_DST32ANPREFIXEDHI :
1184 errmsg = cgen_parse_keyword (cd, strp, & m32c_cgen_opval_h_ar_HI, & fields->f_dst32_an_prefixed);
1186 case M32C_OPERAND_DST32ANPREFIXEDQI :
1187 errmsg = cgen_parse_keyword (cd, strp, & m32c_cgen_opval_h_ar_QI, & fields->f_dst32_an_prefixed);
1189 case M32C_OPERAND_DST32ANPREFIXEDSI :
1190 errmsg = cgen_parse_keyword (cd, strp, & m32c_cgen_opval_h_ar, & fields->f_dst32_an_prefixed);
1192 case M32C_OPERAND_DST32ANUNPREFIXED :
1193 errmsg = cgen_parse_keyword (cd, strp, & m32c_cgen_opval_h_ar, & fields->f_dst32_an_unprefixed);
1195 case M32C_OPERAND_DST32ANUNPREFIXEDHI :
1196 errmsg = cgen_parse_keyword (cd, strp, & m32c_cgen_opval_h_ar_HI, & fields->f_dst32_an_unprefixed);
1198 case M32C_OPERAND_DST32ANUNPREFIXEDQI :
1199 errmsg = cgen_parse_keyword (cd, strp, & m32c_cgen_opval_h_ar_QI, & fields->f_dst32_an_unprefixed);
1201 case M32C_OPERAND_DST32ANUNPREFIXEDSI :
1202 errmsg = cgen_parse_keyword (cd, strp, & m32c_cgen_opval_h_ar, & fields->f_dst32_an_unprefixed);
1204 case M32C_OPERAND_DST32R0HI_S :
1205 errmsg = cgen_parse_keyword (cd, strp, & m32c_cgen_opval_h_r0, & junk);
1207 case M32C_OPERAND_DST32R0QI_S :
1208 errmsg = cgen_parse_keyword (cd, strp, & m32c_cgen_opval_h_r0l, & junk);
1210 case M32C_OPERAND_DST32RNEXTUNPREFIXEDHI :
1211 errmsg = cgen_parse_keyword (cd, strp, & m32c_cgen_opval_h_gr_ext_HI, & fields->f_dst32_rn_ext_unprefixed);
1213 case M32C_OPERAND_DST32RNEXTUNPREFIXEDQI :
1214 errmsg = cgen_parse_keyword (cd, strp, & m32c_cgen_opval_h_gr_ext_QI, & fields->f_dst32_rn_ext_unprefixed);
1216 case M32C_OPERAND_DST32RNPREFIXEDHI :
1217 errmsg = cgen_parse_keyword (cd, strp, & m32c_cgen_opval_h_gr_HI, & fields->f_dst32_rn_prefixed_HI);
1219 case M32C_OPERAND_DST32RNPREFIXEDQI :
1220 errmsg = cgen_parse_keyword (cd, strp, & m32c_cgen_opval_h_gr_QI, & fields->f_dst32_rn_prefixed_QI);
1222 case M32C_OPERAND_DST32RNPREFIXEDSI :
1223 errmsg = cgen_parse_keyword (cd, strp, & m32c_cgen_opval_h_gr_SI, & fields->f_dst32_rn_prefixed_SI);
1225 case M32C_OPERAND_DST32RNUNPREFIXEDHI :
1226 errmsg = cgen_parse_keyword (cd, strp, & m32c_cgen_opval_h_gr_HI, & fields->f_dst32_rn_unprefixed_HI);
1228 case M32C_OPERAND_DST32RNUNPREFIXEDQI :
1229 errmsg = cgen_parse_keyword (cd, strp, & m32c_cgen_opval_h_gr_QI, & fields->f_dst32_rn_unprefixed_QI);
1231 case M32C_OPERAND_DST32RNUNPREFIXEDSI :
1232 errmsg = cgen_parse_keyword (cd, strp, & m32c_cgen_opval_h_gr_SI, & fields->f_dst32_rn_unprefixed_SI);
1234 case M32C_OPERAND_G :
1235 errmsg = parse_G (cd, strp, M32C_OPERAND_G, (long *) (& junk));
1237 case M32C_OPERAND_IMM_12_S4 :
1238 errmsg = parse_signed4 (cd, strp, M32C_OPERAND_IMM_12_S4, (long *) (& fields->f_imm_12_s4));
1240 case M32C_OPERAND_IMM_13_U3 :
1241 errmsg = parse_signed4 (cd, strp, M32C_OPERAND_IMM_13_U3, (unsigned long *) (& fields->f_imm_13_u3));
1243 case M32C_OPERAND_IMM_16_HI :
1244 errmsg = parse_signed16 (cd, strp, M32C_OPERAND_IMM_16_HI, (long *) (& fields->f_dsp_16_s16));
1246 case M32C_OPERAND_IMM_16_QI :
1247 errmsg = parse_signed8 (cd, strp, M32C_OPERAND_IMM_16_QI, (long *) (& fields->f_dsp_16_s8));
1249 case M32C_OPERAND_IMM_16_SI :
1250 errmsg = parse_signed32 (cd, strp, M32C_OPERAND_IMM_16_SI, (long *) (& fields->f_dsp_16_s32));
1252 case M32C_OPERAND_IMM_20_S4 :
1253 errmsg = parse_signed4 (cd, strp, M32C_OPERAND_IMM_20_S4, (long *) (& fields->f_imm_20_s4));
1255 case M32C_OPERAND_IMM_24_HI :
1256 errmsg = parse_signed16 (cd, strp, M32C_OPERAND_IMM_24_HI, (long *) (& fields->f_dsp_24_s16));
1258 case M32C_OPERAND_IMM_24_QI :
1259 errmsg = parse_signed8 (cd, strp, M32C_OPERAND_IMM_24_QI, (long *) (& fields->f_dsp_24_s8));
1261 case M32C_OPERAND_IMM_24_SI :
1262 errmsg = parse_signed32 (cd, strp, M32C_OPERAND_IMM_24_SI, (long *) (& fields->f_dsp_24_s32));
1264 case M32C_OPERAND_IMM_32_HI :
1265 errmsg = parse_signed16 (cd, strp, M32C_OPERAND_IMM_32_HI, (long *) (& fields->f_dsp_32_s16));
1267 case M32C_OPERAND_IMM_32_QI :
1268 errmsg = parse_signed8 (cd, strp, M32C_OPERAND_IMM_32_QI, (long *) (& fields->f_dsp_32_s8));
1270 case M32C_OPERAND_IMM_32_SI :
1271 errmsg = parse_signed32 (cd, strp, M32C_OPERAND_IMM_32_SI, (long *) (& fields->f_dsp_32_s32));
1273 case M32C_OPERAND_IMM_40_HI :
1274 errmsg = parse_signed16 (cd, strp, M32C_OPERAND_IMM_40_HI, (long *) (& fields->f_dsp_40_s16));
1276 case M32C_OPERAND_IMM_40_QI :
1277 errmsg = parse_signed8 (cd, strp, M32C_OPERAND_IMM_40_QI, (long *) (& fields->f_dsp_40_s8));
1279 case M32C_OPERAND_IMM_40_SI :
1280 errmsg = parse_signed32 (cd, strp, M32C_OPERAND_IMM_40_SI, (long *) (& fields->f_dsp_40_s32));
1282 case M32C_OPERAND_IMM_48_HI :
1283 errmsg = parse_signed16 (cd, strp, M32C_OPERAND_IMM_48_HI, (long *) (& fields->f_dsp_48_s16));
1285 case M32C_OPERAND_IMM_48_QI :
1286 errmsg = parse_signed8 (cd, strp, M32C_OPERAND_IMM_48_QI, (long *) (& fields->f_dsp_48_s8));
1288 case M32C_OPERAND_IMM_48_SI :
1289 errmsg = parse_signed32 (cd, strp, M32C_OPERAND_IMM_48_SI, (long *) (& fields->f_dsp_48_s32));
1291 case M32C_OPERAND_IMM_56_HI :
1292 errmsg = parse_signed16 (cd, strp, M32C_OPERAND_IMM_56_HI, (long *) (& fields->f_dsp_56_s16));
1294 case M32C_OPERAND_IMM_56_QI :
1295 errmsg = parse_signed8 (cd, strp, M32C_OPERAND_IMM_56_QI, (long *) (& fields->f_dsp_56_s8));
1297 case M32C_OPERAND_IMM_64_HI :
1298 errmsg = parse_signed16 (cd, strp, M32C_OPERAND_IMM_64_HI, (long *) (& fields->f_dsp_64_s16));
1300 case M32C_OPERAND_IMM_8_HI :
1301 errmsg = parse_signed16 (cd, strp, M32C_OPERAND_IMM_8_HI, (long *) (& fields->f_dsp_8_s16));
1303 case M32C_OPERAND_IMM_8_QI :
1304 errmsg = parse_signed8 (cd, strp, M32C_OPERAND_IMM_8_QI, (long *) (& fields->f_dsp_8_s8));
1306 case M32C_OPERAND_IMM_8_S4 :
1307 errmsg = parse_signed4 (cd, strp, M32C_OPERAND_IMM_8_S4, (long *) (& fields->f_imm_8_s4));
1309 case M32C_OPERAND_IMM_SH_12_S4 :
1310 errmsg = cgen_parse_keyword (cd, strp, & m32c_cgen_opval_h_shimm, & fields->f_imm_12_s4);
1312 case M32C_OPERAND_IMM_SH_20_S4 :
1313 errmsg = cgen_parse_keyword (cd, strp, & m32c_cgen_opval_h_shimm, & fields->f_imm_20_s4);
1315 case M32C_OPERAND_IMM_SH_8_S4 :
1316 errmsg = cgen_parse_keyword (cd, strp, & m32c_cgen_opval_h_shimm, & fields->f_imm_8_s4);
1318 case M32C_OPERAND_IMM1_S :
1319 errmsg = parse_imm1_S (cd, strp, M32C_OPERAND_IMM1_S, (long *) (& fields->f_imm1_S));
1321 case M32C_OPERAND_IMM3_S :
1322 errmsg = parse_imm3_S (cd, strp, M32C_OPERAND_IMM3_S, (long *) (& fields->f_imm3_S));
1324 case M32C_OPERAND_LAB_16_8 :
1327 errmsg = cgen_parse_address (cd, strp, M32C_OPERAND_LAB_16_8, 0, NULL, & value);
1328 fields->f_lab_16_8 = value;
1331 case M32C_OPERAND_LAB_24_8 :
1334 errmsg = cgen_parse_address (cd, strp, M32C_OPERAND_LAB_24_8, 0, NULL, & value);
1335 fields->f_lab_24_8 = value;
1338 case M32C_OPERAND_LAB_32_8 :
1341 errmsg = cgen_parse_address (cd, strp, M32C_OPERAND_LAB_32_8, 0, NULL, & value);
1342 fields->f_lab_32_8 = value;
1345 case M32C_OPERAND_LAB_40_8 :
1348 errmsg = cgen_parse_address (cd, strp, M32C_OPERAND_LAB_40_8, 0, NULL, & value);
1349 fields->f_lab_40_8 = value;
1352 case M32C_OPERAND_LAB_5_3 :
1355 errmsg = cgen_parse_address (cd, strp, M32C_OPERAND_LAB_5_3, 0, NULL, & value);
1356 fields->f_lab_5_3 = value;
1359 case M32C_OPERAND_LAB_8_16 :
1362 errmsg = cgen_parse_address (cd, strp, M32C_OPERAND_LAB_8_16, 0, NULL, & value);
1363 fields->f_lab_8_16 = value;
1366 case M32C_OPERAND_LAB_8_24 :
1369 errmsg = cgen_parse_address (cd, strp, M32C_OPERAND_LAB_8_24, 0, NULL, & value);
1370 fields->f_lab_8_24 = value;
1373 case M32C_OPERAND_LAB_8_8 :
1376 errmsg = cgen_parse_address (cd, strp, M32C_OPERAND_LAB_8_8, 0, NULL, & value);
1377 fields->f_lab_8_8 = value;
1380 case M32C_OPERAND_LAB32_JMP_S :
1383 errmsg = cgen_parse_address (cd, strp, M32C_OPERAND_LAB32_JMP_S, 0, NULL, & value);
1384 fields->f_lab32_jmp_s = value;
1387 case M32C_OPERAND_Q :
1388 errmsg = parse_Q (cd, strp, M32C_OPERAND_Q, (long *) (& junk));
1390 case M32C_OPERAND_R0 :
1391 errmsg = cgen_parse_keyword (cd, strp, & m32c_cgen_opval_h_r0, & junk);
1393 case M32C_OPERAND_R0H :
1394 errmsg = cgen_parse_keyword (cd, strp, & m32c_cgen_opval_h_r0h, & junk);
1396 case M32C_OPERAND_R0L :
1397 errmsg = cgen_parse_keyword (cd, strp, & m32c_cgen_opval_h_r0l, & junk);
1399 case M32C_OPERAND_R1 :
1400 errmsg = cgen_parse_keyword (cd, strp, & m32c_cgen_opval_h_r1, & junk);
1402 case M32C_OPERAND_R1R2R0 :
1403 errmsg = cgen_parse_keyword (cd, strp, & m32c_cgen_opval_h_r1r2r0, & junk);
1405 case M32C_OPERAND_R2 :
1406 errmsg = cgen_parse_keyword (cd, strp, & m32c_cgen_opval_h_r2, & junk);
1408 case M32C_OPERAND_R2R0 :
1409 errmsg = cgen_parse_keyword (cd, strp, & m32c_cgen_opval_h_r2r0, & junk);
1411 case M32C_OPERAND_R3 :
1412 errmsg = cgen_parse_keyword (cd, strp, & m32c_cgen_opval_h_r3, & junk);
1414 case M32C_OPERAND_R3R1 :
1415 errmsg = cgen_parse_keyword (cd, strp, & m32c_cgen_opval_h_r3r1, & junk);
1417 case M32C_OPERAND_REGSETPOP :
1418 errmsg = parse_pop_regset (cd, strp, M32C_OPERAND_REGSETPOP, (unsigned long *) (& fields->f_8_8));
1420 case M32C_OPERAND_REGSETPUSH :
1421 errmsg = parse_push_regset (cd, strp, M32C_OPERAND_REGSETPUSH, (unsigned long *) (& fields->f_8_8));
1423 case M32C_OPERAND_RN16_PUSH_S :
1424 errmsg = cgen_parse_keyword (cd, strp, & m32c_cgen_opval_h_gr_QI, & fields->f_4_1);
1426 case M32C_OPERAND_S :
1427 errmsg = parse_S (cd, strp, M32C_OPERAND_S, (long *) (& junk));
1429 case M32C_OPERAND_SRC16AN :
1430 errmsg = cgen_parse_keyword (cd, strp, & m32c_cgen_opval_h_ar, & fields->f_src16_an);
1432 case M32C_OPERAND_SRC16ANHI :
1433 errmsg = cgen_parse_keyword (cd, strp, & m32c_cgen_opval_h_ar_HI, & fields->f_src16_an);
1435 case M32C_OPERAND_SRC16ANQI :
1436 errmsg = cgen_parse_keyword (cd, strp, & m32c_cgen_opval_h_ar_QI, & fields->f_src16_an);
1438 case M32C_OPERAND_SRC16RNHI :
1439 errmsg = cgen_parse_keyword (cd, strp, & m32c_cgen_opval_h_gr_HI, & fields->f_src16_rn);
1441 case M32C_OPERAND_SRC16RNQI :
1442 errmsg = cgen_parse_keyword (cd, strp, & m32c_cgen_opval_h_gr_QI, & fields->f_src16_rn);
1444 case M32C_OPERAND_SRC32ANPREFIXED :
1445 errmsg = cgen_parse_keyword (cd, strp, & m32c_cgen_opval_h_ar, & fields->f_src32_an_prefixed);
1447 case M32C_OPERAND_SRC32ANPREFIXEDHI :
1448 errmsg = cgen_parse_keyword (cd, strp, & m32c_cgen_opval_h_ar_HI, & fields->f_src32_an_prefixed);
1450 case M32C_OPERAND_SRC32ANPREFIXEDQI :
1451 errmsg = cgen_parse_keyword (cd, strp, & m32c_cgen_opval_h_ar_QI, & fields->f_src32_an_prefixed);
1453 case M32C_OPERAND_SRC32ANPREFIXEDSI :
1454 errmsg = cgen_parse_keyword (cd, strp, & m32c_cgen_opval_h_ar, & fields->f_src32_an_prefixed);
1456 case M32C_OPERAND_SRC32ANUNPREFIXED :
1457 errmsg = cgen_parse_keyword (cd, strp, & m32c_cgen_opval_h_ar, & fields->f_src32_an_unprefixed);
1459 case M32C_OPERAND_SRC32ANUNPREFIXEDHI :
1460 errmsg = cgen_parse_keyword (cd, strp, & m32c_cgen_opval_h_ar_HI, & fields->f_src32_an_unprefixed);
1462 case M32C_OPERAND_SRC32ANUNPREFIXEDQI :
1463 errmsg = cgen_parse_keyword (cd, strp, & m32c_cgen_opval_h_ar_QI, & fields->f_src32_an_unprefixed);
1465 case M32C_OPERAND_SRC32ANUNPREFIXEDSI :
1466 errmsg = cgen_parse_keyword (cd, strp, & m32c_cgen_opval_h_ar, & fields->f_src32_an_unprefixed);
1468 case M32C_OPERAND_SRC32RNPREFIXEDHI :
1469 errmsg = cgen_parse_keyword (cd, strp, & m32c_cgen_opval_h_gr_HI, & fields->f_src32_rn_prefixed_HI);
1471 case M32C_OPERAND_SRC32RNPREFIXEDQI :
1472 errmsg = cgen_parse_keyword (cd, strp, & m32c_cgen_opval_h_gr_QI, & fields->f_src32_rn_prefixed_QI);
1474 case M32C_OPERAND_SRC32RNPREFIXEDSI :
1475 errmsg = cgen_parse_keyword (cd, strp, & m32c_cgen_opval_h_gr_SI, & fields->f_src32_rn_prefixed_SI);
1477 case M32C_OPERAND_SRC32RNUNPREFIXEDHI :
1478 errmsg = cgen_parse_keyword (cd, strp, & m32c_cgen_opval_h_gr_HI, & fields->f_src32_rn_unprefixed_HI);
1480 case M32C_OPERAND_SRC32RNUNPREFIXEDQI :
1481 errmsg = cgen_parse_keyword (cd, strp, & m32c_cgen_opval_h_gr_QI, & fields->f_src32_rn_unprefixed_QI);
1483 case M32C_OPERAND_SRC32RNUNPREFIXEDSI :
1484 errmsg = cgen_parse_keyword (cd, strp, & m32c_cgen_opval_h_gr_SI, & fields->f_src32_rn_unprefixed_SI);
1486 case M32C_OPERAND_SRCDST16_R0L_R0H_S_NORMAL :
1487 errmsg = parse_r0l_r0h (cd, strp, M32C_OPERAND_SRCDST16_R0L_R0H_S_NORMAL, (long *) (& fields->f_5_1));
1489 case M32C_OPERAND_X :
1490 errmsg = parse_X (cd, strp, M32C_OPERAND_X, (long *) (& junk));
1492 case M32C_OPERAND_Z :
1493 errmsg = parse_Z (cd, strp, M32C_OPERAND_Z, (long *) (& junk));
1495 case M32C_OPERAND_COND16_16 :
1496 errmsg = cgen_parse_keyword (cd, strp, & m32c_cgen_opval_h_cond16, & fields->f_dsp_16_u8);
1498 case M32C_OPERAND_COND16_24 :
1499 errmsg = cgen_parse_keyword (cd, strp, & m32c_cgen_opval_h_cond16, & fields->f_dsp_24_u8);
1501 case M32C_OPERAND_COND16_32 :
1502 errmsg = cgen_parse_keyword (cd, strp, & m32c_cgen_opval_h_cond16, & fields->f_dsp_32_u8);
1504 case M32C_OPERAND_COND16C :
1505 errmsg = cgen_parse_keyword (cd, strp, & m32c_cgen_opval_h_cond16c, & fields->f_cond16);
1507 case M32C_OPERAND_COND16J :
1508 errmsg = cgen_parse_keyword (cd, strp, & m32c_cgen_opval_h_cond16j, & fields->f_cond16);
1510 case M32C_OPERAND_COND16J5 :
1511 errmsg = cgen_parse_keyword (cd, strp, & m32c_cgen_opval_h_cond16j_5, & fields->f_cond16j_5);
1513 case M32C_OPERAND_COND32 :
1514 errmsg = cgen_parse_keyword (cd, strp, & m32c_cgen_opval_h_cond32, & fields->f_cond32);
1516 case M32C_OPERAND_COND32_16 :
1517 errmsg = cgen_parse_keyword (cd, strp, & m32c_cgen_opval_h_cond32, & fields->f_dsp_16_u8);
1519 case M32C_OPERAND_COND32_24 :
1520 errmsg = cgen_parse_keyword (cd, strp, & m32c_cgen_opval_h_cond32, & fields->f_dsp_24_u8);
1522 case M32C_OPERAND_COND32_32 :
1523 errmsg = cgen_parse_keyword (cd, strp, & m32c_cgen_opval_h_cond32, & fields->f_dsp_32_u8);
1525 case M32C_OPERAND_COND32_40 :
1526 errmsg = cgen_parse_keyword (cd, strp, & m32c_cgen_opval_h_cond32, & fields->f_dsp_40_u8);
1528 case M32C_OPERAND_COND32J :
1529 errmsg = cgen_parse_keyword (cd, strp, & m32c_cgen_opval_h_cond32, & fields->f_cond32j);
1531 case M32C_OPERAND_CR1_PREFIXED_32 :
1532 errmsg = cgen_parse_keyword (cd, strp, & m32c_cgen_opval_h_cr1_32, & fields->f_21_3);
1534 case M32C_OPERAND_CR1_UNPREFIXED_32 :
1535 errmsg = cgen_parse_keyword (cd, strp, & m32c_cgen_opval_h_cr1_32, & fields->f_13_3);
1537 case M32C_OPERAND_CR16 :
1538 errmsg = cgen_parse_keyword (cd, strp, & m32c_cgen_opval_h_cr_16, & fields->f_9_3);
1540 case M32C_OPERAND_CR2_32 :
1541 errmsg = cgen_parse_keyword (cd, strp, & m32c_cgen_opval_h_cr2_32, & fields->f_13_3);
1543 case M32C_OPERAND_CR3_PREFIXED_32 :
1544 errmsg = cgen_parse_keyword (cd, strp, & m32c_cgen_opval_h_cr3_32, & fields->f_21_3);
1546 case M32C_OPERAND_CR3_UNPREFIXED_32 :
1547 errmsg = cgen_parse_keyword (cd, strp, & m32c_cgen_opval_h_cr3_32, & fields->f_13_3);
1549 case M32C_OPERAND_FLAGS16 :
1550 errmsg = cgen_parse_keyword (cd, strp, & m32c_cgen_opval_h_flags, & fields->f_9_3);
1552 case M32C_OPERAND_FLAGS32 :
1553 errmsg = cgen_parse_keyword (cd, strp, & m32c_cgen_opval_h_flags, & fields->f_13_3);
1555 case M32C_OPERAND_SCCOND32 :
1556 errmsg = cgen_parse_keyword (cd, strp, & m32c_cgen_opval_h_cond32, & fields->f_cond16);
1558 case M32C_OPERAND_SIZE :
1559 errmsg = parse_size (cd, strp, M32C_OPERAND_SIZE, (long *) (& junk));
1563 /* xgettext:c-format */
1564 fprintf (stderr, _("Unrecognized field %d while parsing.\n"), opindex);
1571 cgen_parse_fn * const m32c_cgen_parse_handlers[] =
1577 m32c_cgen_init_asm (cd)
1580 m32c_cgen_init_opcode_table (cd);
1581 m32c_cgen_init_ibld_table (cd);
1582 cd->parse_handlers = & m32c_cgen_parse_handlers[0];
1583 cd->parse_operand = m32c_cgen_parse_operand;
1588 /* Regex construction routine.
1590 This translates an opcode syntax string into a regex string,
1591 by replacing any non-character syntax element (such as an
1592 opcode) with the pattern '.*'
1594 It then compiles the regex and stores it in the opcode, for
1595 later use by m32c_cgen_assemble_insn
1597 Returns NULL for success, an error message for failure. */
1600 m32c_cgen_build_insn_regex (CGEN_INSN *insn)
1602 CGEN_OPCODE *opc = (CGEN_OPCODE *) CGEN_INSN_OPCODE (insn);
1603 const char *mnem = CGEN_INSN_MNEMONIC (insn);
1604 char rxbuf[CGEN_MAX_RX_ELEMENTS];
1606 const CGEN_SYNTAX_CHAR_TYPE *syn;
1609 syn = CGEN_SYNTAX_STRING (CGEN_OPCODE_SYNTAX (opc));
1611 /* Mnemonics come first in the syntax string. */
1612 if (! CGEN_SYNTAX_MNEMONIC_P (* syn))
1613 return _("missing mnemonic in syntax string");
1616 /* Generate a case sensitive regular expression that emulates case
1617 insensitive matching in the "C" locale. We cannot generate a case
1618 insensitive regular expression because in Turkish locales, 'i' and 'I'
1619 are not equal modulo case conversion. */
1621 /* Copy the literal mnemonic out of the insn. */
1622 for (; *mnem; mnem++)
1629 *rx++ = TOLOWER (c);
1630 *rx++ = TOUPPER (c);
1637 /* Copy any remaining literals from the syntax string into the rx. */
1638 for(; * syn != 0 && rx <= rxbuf + (CGEN_MAX_RX_ELEMENTS - 7 - 4); ++syn)
1640 if (CGEN_SYNTAX_CHAR_P (* syn))
1642 char c = CGEN_SYNTAX_CHAR (* syn);
1646 /* Escape any regex metacharacters in the syntax. */
1647 case '.': case '[': case '\\':
1648 case '*': case '^': case '$':
1650 #ifdef CGEN_ESCAPE_EXTENDED_REGEX
1651 case '?': case '{': case '}':
1652 case '(': case ')': case '*':
1653 case '|': case '+': case ']':
1663 *rx++ = TOLOWER (c);
1664 *rx++ = TOUPPER (c);
1674 /* Replace non-syntax fields with globs. */
1680 /* Trailing whitespace ok. */
1687 /* But anchor it after that. */
1691 CGEN_INSN_RX (insn) = xmalloc (sizeof (regex_t));
1692 reg_err = regcomp ((regex_t *) CGEN_INSN_RX (insn), rxbuf, REG_NOSUB);
1698 static char msg[80];
1700 regerror (reg_err, (regex_t *) CGEN_INSN_RX (insn), msg, 80);
1701 regfree ((regex_t *) CGEN_INSN_RX (insn));
1702 free (CGEN_INSN_RX (insn));
1703 (CGEN_INSN_RX (insn)) = NULL;
1709 /* Default insn parser.
1711 The syntax string is scanned and operands are parsed and stored in FIELDS.
1712 Relocs are queued as we go via other callbacks.
1714 ??? Note that this is currently an all-or-nothing parser. If we fail to
1715 parse the instruction, we return 0 and the caller will start over from
1716 the beginning. Backtracking will be necessary in parsing subexpressions,
1717 but that can be handled there. Not handling backtracking here may get
1718 expensive in the case of the m68k. Deal with later.
1720 Returns NULL for success, an error message for failure. */
1723 parse_insn_normal (CGEN_CPU_DESC cd,
1724 const CGEN_INSN *insn,
1726 CGEN_FIELDS *fields)
1728 /* ??? Runtime added insns not handled yet. */
1729 const CGEN_SYNTAX *syntax = CGEN_INSN_SYNTAX (insn);
1730 const char *str = *strp;
1733 const CGEN_SYNTAX_CHAR_TYPE * syn;
1734 #ifdef CGEN_MNEMONIC_OPERANDS
1739 /* For now we assume the mnemonic is first (there are no leading operands).
1740 We can parse it without needing to set up operand parsing.
1741 GAS's input scrubber will ensure mnemonics are lowercase, but we may
1742 not be called from GAS. */
1743 p = CGEN_INSN_MNEMONIC (insn);
1744 while (*p && TOLOWER (*p) == TOLOWER (*str))
1748 return _("unrecognized instruction");
1750 #ifndef CGEN_MNEMONIC_OPERANDS
1751 if (* str && ! ISSPACE (* str))
1752 return _("unrecognized instruction");
1755 CGEN_INIT_PARSE (cd);
1756 cgen_init_parse_operand (cd);
1757 #ifdef CGEN_MNEMONIC_OPERANDS
1761 /* We don't check for (*str != '\0') here because we want to parse
1762 any trailing fake arguments in the syntax string. */
1763 syn = CGEN_SYNTAX_STRING (syntax);
1765 /* Mnemonics come first for now, ensure valid string. */
1766 if (! CGEN_SYNTAX_MNEMONIC_P (* syn))
1773 /* Non operand chars must match exactly. */
1774 if (CGEN_SYNTAX_CHAR_P (* syn))
1776 /* FIXME: While we allow for non-GAS callers above, we assume the
1777 first char after the mnemonic part is a space. */
1778 /* FIXME: We also take inappropriate advantage of the fact that
1779 GAS's input scrubber will remove extraneous blanks. */
1780 if (TOLOWER (*str) == TOLOWER (CGEN_SYNTAX_CHAR (* syn)))
1782 #ifdef CGEN_MNEMONIC_OPERANDS
1783 if (CGEN_SYNTAX_CHAR(* syn) == ' ')
1791 /* Syntax char didn't match. Can't be this insn. */
1792 static char msg [80];
1794 /* xgettext:c-format */
1795 sprintf (msg, _("syntax error (expected char `%c', found `%c')"),
1796 CGEN_SYNTAX_CHAR(*syn), *str);
1801 /* Ran out of input. */
1802 static char msg [80];
1804 /* xgettext:c-format */
1805 sprintf (msg, _("syntax error (expected char `%c', found end of instruction)"),
1806 CGEN_SYNTAX_CHAR(*syn));
1812 /* We have an operand of some sort. */
1813 errmsg = cd->parse_operand (cd, CGEN_SYNTAX_FIELD (*syn),
1818 /* Done with this operand, continue with next one. */
1822 /* If we're at the end of the syntax string, we're done. */
1825 /* FIXME: For the moment we assume a valid `str' can only contain
1826 blanks now. IE: We needn't try again with a longer version of
1827 the insn and it is assumed that longer versions of insns appear
1828 before shorter ones (eg: lsr r2,r3,1 vs lsr r2,r3). */
1829 while (ISSPACE (* str))
1833 return _("junk at end of line"); /* FIXME: would like to include `str' */
1838 /* We couldn't parse it. */
1839 return _("unrecognized instruction");
1842 /* Main entry point.
1843 This routine is called for each instruction to be assembled.
1844 STR points to the insn to be assembled.
1845 We assume all necessary tables have been initialized.
1846 The assembled instruction, less any fixups, is stored in BUF.
1847 Remember that if CGEN_INT_INSN_P then BUF is an int and thus the value
1848 still needs to be converted to target byte order, otherwise BUF is an array
1849 of bytes in target byte order.
1850 The result is a pointer to the insn's entry in the opcode table,
1851 or NULL if an error occured (an error message will have already been
1854 Note that when processing (non-alias) macro-insns,
1855 this function recurses.
1857 ??? It's possible to make this cpu-independent.
1858 One would have to deal with a few minor things.
1859 At this point in time doing so would be more of a curiosity than useful
1860 [for example this file isn't _that_ big], but keeping the possibility in
1861 mind helps keep the design clean. */
1864 m32c_cgen_assemble_insn (CGEN_CPU_DESC cd,
1866 CGEN_FIELDS *fields,
1867 CGEN_INSN_BYTES_PTR buf,
1871 CGEN_INSN_LIST *ilist;
1872 const char *parse_errmsg = NULL;
1873 const char *insert_errmsg = NULL;
1874 int recognized_mnemonic = 0;
1876 /* Skip leading white space. */
1877 while (ISSPACE (* str))
1880 /* The instructions are stored in hashed lists.
1881 Get the first in the list. */
1882 ilist = CGEN_ASM_LOOKUP_INSN (cd, str);
1884 /* Keep looking until we find a match. */
1886 for ( ; ilist != NULL ; ilist = CGEN_ASM_NEXT_INSN (ilist))
1888 const CGEN_INSN *insn = ilist->insn;
1889 recognized_mnemonic = 1;
1891 #ifdef CGEN_VALIDATE_INSN_SUPPORTED
1892 /* Not usually needed as unsupported opcodes
1893 shouldn't be in the hash lists. */
1894 /* Is this insn supported by the selected cpu? */
1895 if (! m32c_cgen_insn_supported (cd, insn))
1898 /* If the RELAXED attribute is set, this is an insn that shouldn't be
1899 chosen immediately. Instead, it is used during assembler/linker
1900 relaxation if possible. */
1901 if (CGEN_INSN_ATTR_VALUE (insn, CGEN_INSN_RELAXED) != 0)
1906 /* Skip this insn if str doesn't look right lexically. */
1907 if (CGEN_INSN_RX (insn) != NULL &&
1908 regexec ((regex_t *) CGEN_INSN_RX (insn), str, 0, NULL, 0) == REG_NOMATCH)
1911 /* Allow parse/insert handlers to obtain length of insn. */
1912 CGEN_FIELDS_BITSIZE (fields) = CGEN_INSN_BITSIZE (insn);
1914 parse_errmsg = CGEN_PARSE_FN (cd, insn) (cd, insn, & str, fields);
1915 if (parse_errmsg != NULL)
1918 /* ??? 0 is passed for `pc'. */
1919 insert_errmsg = CGEN_INSERT_FN (cd, insn) (cd, insn, fields, buf,
1921 if (insert_errmsg != NULL)
1924 /* It is up to the caller to actually output the insn and any
1930 static char errbuf[150];
1931 #ifdef CGEN_VERBOSE_ASSEMBLER_ERRORS
1932 const char *tmp_errmsg;
1934 /* If requesting verbose error messages, use insert_errmsg.
1935 Failing that, use parse_errmsg. */
1936 tmp_errmsg = (insert_errmsg ? insert_errmsg :
1937 parse_errmsg ? parse_errmsg :
1938 recognized_mnemonic ?
1939 _("unrecognized form of instruction") :
1940 _("unrecognized instruction"));
1942 if (strlen (start) > 50)
1943 /* xgettext:c-format */
1944 sprintf (errbuf, "%s `%.50s...'", tmp_errmsg, start);
1946 /* xgettext:c-format */
1947 sprintf (errbuf, "%s `%.50s'", tmp_errmsg, start);
1949 if (strlen (start) > 50)
1950 /* xgettext:c-format */
1951 sprintf (errbuf, _("bad instruction `%.50s...'"), start);
1953 /* xgettext:c-format */
1954 sprintf (errbuf, _("bad instruction `%.50s'"), start);
1962 #if 0 /* This calls back to GAS which we can't do without care. */
1964 /* Record each member of OPVALS in the assembler's symbol table.
1965 This lets GAS parse registers for us.
1966 ??? Interesting idea but not currently used. */
1968 /* Record each member of OPVALS in the assembler's symbol table.
1969 FIXME: Not currently used. */
1972 m32c_cgen_asm_hash_keywords (CGEN_CPU_DESC cd, CGEN_KEYWORD *opvals)
1974 CGEN_KEYWORD_SEARCH search = cgen_keyword_search_init (opvals, NULL);
1975 const CGEN_KEYWORD_ENTRY * ke;
1977 while ((ke = cgen_keyword_search_next (& search)) != NULL)
1979 #if 0 /* Unnecessary, should be done in the search routine. */
1980 if (! m32c_cgen_opval_supported (ke))
1983 cgen_asm_record_register (cd, ke->name, ke->value);