1 /* m32c opcode support. -*- C -*-
3 Copyright 2005 Free Software Foundation, Inc.
5 Contributed by Red Hat Inc; developed under contract from Renesas
7 This file is part of the GNU Binutils.
9 This program is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
11 the Free Software Foundation; either version 2 of the License, or
12 (at your option) any later version.
14 This program is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 GNU General Public License for more details.
19 You should have received a copy of the GNU General Public License
20 along with this program; if not, write to the Free Software
21 Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */
23 /* This file is an addendum to m32c.cpu. Heavy use of C code isn't
24 appropriate in .cpu files, so it resides here. This especially applies
25 to assembly/disassembly where parsing/printing can be quite involved.
26 Such things aren't really part of the specification of the cpu, per se,
27 so .cpu files provide the general framework and .opc files handle the
28 nitty-gritty details as necessary.
30 Each section is delimited with start and end markers.
32 <arch>-opc.h additions use: "-- opc.h"
33 <arch>-opc.c additions use: "-- opc.c"
34 <arch>-asm.c additions use: "-- asm.c"
35 <arch>-dis.c additions use: "-- dis.c"
36 <arch>-ibd.h additions use: "-- ibd.h". */
40 /* Needed for RTL's 'ext' and 'trunc' operators. */
41 #include "cgen-types.h"
44 /* We can't use the default hash size because many bits are used by
46 #define CGEN_DIS_HASH_SIZE 1
47 #define CGEN_DIS_HASH(buf, value) 0
48 #define CGEN_VERBOSE_ASSEMBLER_ERRORS
49 #define CGEN_VALIDATE_INSN_SUPPORTED
51 extern int m32c_cgen_insn_supported (CGEN_CPU_DESC, const CGEN_INSN *);
53 #define CGEN_ASM_HASH_SIZE 0xffff
54 #define CGEN_ASM_HASH(mnem) m32c_asm_hash ((mnem))
60 m32c_asm_hash (const char *mnem)
64 /* The length of the mnemonic for the Jcnd insns is 1. Hash jsri. */
65 if (mnem[0] == 'j' && mnem[1] != 's')
68 /* Don't hash scCND */
69 if (mnem[0] == 's' && mnem[1] == 'c')
72 for (h = 0; *mnem && *mnem != ' ' && *mnem != ':'; ++mnem)
74 return h % CGEN_ASM_HASH_SIZE;
78 #include "safe-ctype.h"
80 #define MACH_M32C 5 /* Must match md_begin. */
83 m32c_cgen_isa_register (const char **strp)
86 const char *s = *strp;
87 static char * m32c_register_names [] =
89 "r0", "r1", "r2", "r3", "r0l", "r0h", "r1l", "r1h",
90 "a0", "a1", "r2r0", "r3r1", "sp", "fb", "dct0", "dct1", "flg", "svf",
91 "drc0", "drc1", "dmd0", "dmd1", "intb", "svp", "vct", "isp", "dma0",
92 "dma1", "dra0", "dra1", "dsa0", "dsa1", 0
95 for (u = 0; m32c_register_names[u]; u++)
97 int len = strlen (m32c_register_names[u]);
99 if (memcmp (m32c_register_names[u], s, len) == 0
100 && (s[len] == 0 || ! ISALNUM (s[len])))
106 #define PARSE_UNSIGNED \
109 /* Don't successfully parse literals beginning with '['. */ \
111 return "Invalid literal"; /* Anything -- will not be seen. */ \
113 errmsg = cgen_parse_unsigned_integer (cd, strp, opindex, & value);\
119 #define PARSE_SIGNED \
122 /* Don't successfully parse literals beginning with '['. */ \
124 return "Invalid literal"; /* Anything -- will not be seen. */ \
126 errmsg = cgen_parse_signed_integer (cd, strp, opindex, & value); \
133 parse_unsigned6 (CGEN_CPU_DESC cd, const char **strp,
134 int opindex, unsigned long *valuep)
136 const char *errmsg = 0;
142 return _("imm:6 immediate is out of range");
149 parse_unsigned8 (CGEN_CPU_DESC cd, const char **strp,
150 int opindex, unsigned long *valuep)
152 const char *errmsg = 0;
156 if (strncasecmp (*strp, "%dsp8(", 6) == 0)
158 enum cgen_parse_operand_result result_type;
163 errmsg = cgen_parse_address (cd, strp, opindex, BFD_RELOC_8,
164 & result_type, & value);
166 return _("missing `)'");
170 && result_type == CGEN_PARSE_OPERAND_RESULT_NUMBER)
172 return _("%dsp8() takes a symbolic address, not a number");
178 if (strncmp (*strp, "0x0", 3) == 0
179 || (**strp == '0' && *(*strp + 1) != 'x'))
185 return _("dsp:8 immediate is out of range");
187 /* If this field may require a relocation then use larger dsp16. */
188 if (! have_zero && value == 0)
189 return _("dsp:8 immediate is out of range");
196 parse_signed4 (CGEN_CPU_DESC cd, const char **strp,
197 int opindex, signed long *valuep)
199 const char *errmsg = 0;
203 if (strncmp (*strp, "0x0", 3) == 0
204 || (**strp == '0' && *(*strp + 1) != 'x'))
209 if (value < -8 || value > 7)
210 return _("Immediate is out of range -8 to 7");
212 /* If this field may require a relocation then use larger dsp16. */
213 if (! have_zero && value == 0)
214 return _("Immediate is out of range -8 to 7");
221 parse_signed8 (CGEN_CPU_DESC cd, const char **strp,
222 int opindex, signed long *valuep)
224 const char *errmsg = 0;
227 if (strncasecmp (*strp, "%hi8(", 5) == 0)
229 enum cgen_parse_operand_result result_type;
234 errmsg = cgen_parse_address (cd, strp, opindex, BFD_RELOC_M32C_HI8,
235 & result_type, & value);
237 return _("missing `)'");
241 && result_type == CGEN_PARSE_OPERAND_RESULT_NUMBER)
251 if (value <= 255 && value > 127)
254 if (value < -128 || value > 127)
255 return _("dsp:8 immediate is out of range");
262 parse_unsigned16 (CGEN_CPU_DESC cd, const char **strp,
263 int opindex, unsigned long *valuep)
265 const char *errmsg = 0;
269 if (strncasecmp (*strp, "%dsp16(", 7) == 0)
271 enum cgen_parse_operand_result result_type;
276 errmsg = cgen_parse_address (cd, strp, opindex, BFD_RELOC_16,
277 & result_type, & value);
279 return _("missing `)'");
283 && result_type == CGEN_PARSE_OPERAND_RESULT_NUMBER)
285 return _("%dsp16() takes a symbolic address, not a number");
291 /* Don't successfully parse literals beginning with '['. */
293 return "Invalid literal"; /* Anything -- will not be seen. */
295 /* Don't successfully parse register names. */
296 if (m32c_cgen_isa_register (strp))
297 return "Invalid literal"; /* Anything -- will not be seen. */
299 if (strncmp (*strp, "0x0", 3) == 0
300 || (**strp == '0' && *(*strp + 1) != 'x'))
303 errmsg = cgen_parse_unsigned_integer (cd, strp, opindex, & value);
308 return _("dsp:16 immediate is out of range");
310 /* If this field may require a relocation then use larger dsp24. */
311 if (cd->machs == MACH_M32C && ! have_zero && value == 0
312 && (strncmp (*strp, "[a", 2) == 0
315 return _("dsp:16 immediate is out of range");
322 parse_signed16 (CGEN_CPU_DESC cd, const char **strp,
323 int opindex, signed long *valuep)
325 const char *errmsg = 0;
328 if (strncasecmp (*strp, "%lo16(", 6) == 0)
330 enum cgen_parse_operand_result result_type;
335 errmsg = cgen_parse_address (cd, strp, opindex, BFD_RELOC_LO16,
336 & result_type, & value);
338 return _("missing `)'");
342 && result_type == CGEN_PARSE_OPERAND_RESULT_NUMBER)
350 if (strncasecmp (*strp, "%hi16(", 6) == 0)
352 enum cgen_parse_operand_result result_type;
357 errmsg = cgen_parse_address (cd, strp, opindex, BFD_RELOC_HI16,
358 & result_type, & value);
360 return _("missing `)'");
364 && result_type == CGEN_PARSE_OPERAND_RESULT_NUMBER)
374 if (value <= 65535 && value > 32767)
377 if (value < -32768 || value > 32767)
378 return _("dsp:16 immediate is out of range");
385 parse_unsigned20 (CGEN_CPU_DESC cd, const char **strp,
386 int opindex, unsigned long *valuep)
388 const char *errmsg = 0;
391 /* Don't successfully parse literals beginning with '['. */
393 return "Invalid literal"; /* Anything -- will not be seen. */
395 /* Don't successfully parse register names. */
396 if (m32c_cgen_isa_register (strp))
397 return "Invalid literal"; /* Anything -- will not be seen. */
399 errmsg = cgen_parse_unsigned_integer (cd, strp, opindex, & value);
404 return _("dsp:20 immediate is out of range");
411 parse_unsigned24 (CGEN_CPU_DESC cd, const char **strp,
412 int opindex, unsigned long *valuep)
414 const char *errmsg = 0;
417 /* Don't successfully parse literals beginning with '['. */
419 return "Invalid literal"; /* Anything -- will not be seen. */
421 /* Don't successfully parse register names. */
422 if (m32c_cgen_isa_register (strp))
423 return "Invalid literal"; /* Anything -- will not be seen. */
425 errmsg = cgen_parse_unsigned_integer (cd, strp, opindex, & value);
429 if (value > 0xffffff)
430 return _("dsp:24 immediate is out of range");
436 /* This should only be used for #imm->reg. */
438 parse_signed24 (CGEN_CPU_DESC cd, const char **strp,
439 int opindex, signed long *valuep)
441 const char *errmsg = 0;
446 if (value <= 0xffffff && value > 0x7fffff)
449 if (value > 0xffffff)
450 return _("dsp:24 immediate is out of range");
457 parse_signed32 (CGEN_CPU_DESC cd, const char **strp,
458 int opindex, signed long *valuep)
460 const char *errmsg = 0;
463 errmsg = cgen_parse_signed_integer (cd, strp, opindex, & value);
472 parse_imm1_S (CGEN_CPU_DESC cd, const char **strp,
473 int opindex, signed long *valuep)
475 const char *errmsg = 0;
478 errmsg = cgen_parse_signed_integer (cd, strp, opindex, & value);
482 if (value < 1 || value > 2)
483 return _("immediate is out of range 1-2");
490 parse_imm3_S (CGEN_CPU_DESC cd, const char **strp,
491 int opindex, signed long *valuep)
493 const char *errmsg = 0;
496 errmsg = cgen_parse_signed_integer (cd, strp, opindex, & value);
500 if (value < 1 || value > 8)
501 return _("immediate is out of range 1-8");
508 parse_lab_5_3 (CGEN_CPU_DESC cd,
510 int opindex ATTRIBUTE_UNUSED,
512 enum cgen_parse_operand_result *type_addr,
515 const char *errmsg = 0;
517 enum cgen_parse_operand_result op_res;
519 errmsg = cgen_parse_address (cd, strp, M32C_OPERAND_LAB_5_3,
520 opinfo, & op_res, & value);
525 if (op_res == CGEN_PARSE_OPERAND_ADDRESS)
527 /* This is a hack; the field cannot handle near-zero signed
528 offsets that CGEN wants to put in to indicate an "empty"
536 if (value < 2 || value > 9)
537 return _("immediate is out of range 2-9");
544 parse_Bitno16R (CGEN_CPU_DESC cd, const char **strp,
545 int opindex, unsigned long *valuep)
547 const char *errmsg = 0;
550 errmsg = cgen_parse_unsigned_integer (cd, strp, opindex, & value);
555 return _("Bit number for indexing general register is out of range 0-15");
562 parse_unsigned_bitbase (CGEN_CPU_DESC cd, const char **strp,
563 int opindex, unsigned long *valuep,
566 const char *errmsg = 0;
569 const char *newp = *strp;
570 unsigned long long bitbase;
572 errmsg = cgen_parse_unsigned_integer (cd, & newp, opindex, & bit);
577 return "Missing base for bit,base:8";
580 errmsg = cgen_parse_unsigned_integer (cd, & newp, opindex, & base);
584 bitbase = (unsigned long long) bit + ((unsigned long long) base * 8);
586 if (bitbase >= (1ull << bits))
587 return _("bit,base is out of range");
595 parse_signed_bitbase (CGEN_CPU_DESC cd, const char **strp,
596 int opindex, signed long *valuep,
599 const char *errmsg = 0;
602 const char *newp = *strp;
606 errmsg = cgen_parse_unsigned_integer (cd, & newp, opindex, & bit);
611 return "Missing base for bit,base:8";
614 errmsg = cgen_parse_signed_integer (cd, & newp, opindex, & base);
618 bitbase = (long long)bit + ((long long)base * 8);
620 limit = 1ll << (bits - 1);
621 if (bitbase < -limit || bitbase >= limit)
622 return _("bit,base is out of range");
630 parse_unsigned_bitbase8 (CGEN_CPU_DESC cd, const char **strp,
631 int opindex, unsigned long *valuep)
633 return parse_unsigned_bitbase (cd, strp, opindex, valuep, 8);
637 parse_unsigned_bitbase11 (CGEN_CPU_DESC cd, const char **strp,
638 int opindex, unsigned long *valuep)
640 return parse_unsigned_bitbase (cd, strp, opindex, valuep, 11);
644 parse_unsigned_bitbase16 (CGEN_CPU_DESC cd, const char **strp,
645 int opindex, unsigned long *valuep)
647 return parse_unsigned_bitbase (cd, strp, opindex, valuep, 16);
651 parse_unsigned_bitbase19 (CGEN_CPU_DESC cd, const char **strp,
652 int opindex, unsigned long *valuep)
654 return parse_unsigned_bitbase (cd, strp, opindex, valuep, 19);
658 parse_unsigned_bitbase27 (CGEN_CPU_DESC cd, const char **strp,
659 int opindex, unsigned long *valuep)
661 return parse_unsigned_bitbase (cd, strp, opindex, valuep, 27);
665 parse_signed_bitbase8 (CGEN_CPU_DESC cd, const char **strp,
666 int opindex, signed long *valuep)
668 return parse_signed_bitbase (cd, strp, opindex, valuep, 8);
672 parse_signed_bitbase11 (CGEN_CPU_DESC cd, const char **strp,
673 int opindex, signed long *valuep)
675 return parse_signed_bitbase (cd, strp, opindex, valuep, 11);
679 parse_signed_bitbase19 (CGEN_CPU_DESC cd, const char **strp,
680 int opindex, signed long *valuep)
682 return parse_signed_bitbase (cd, strp, opindex, valuep, 19);
685 /* Parse the suffix as :<char> or as nothing followed by a whitespace. */
688 parse_suffix (const char **strp, char suffix)
690 const char *newp = *strp;
692 if (**strp == ':' && TOLOWER (*(*strp + 1)) == suffix)
701 return "Invalid suffix"; /* Anything -- will not be seen. */
705 parse_S (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED, const char **strp,
706 int opindex ATTRIBUTE_UNUSED, signed long *valuep ATTRIBUTE_UNUSED)
708 return parse_suffix (strp, 's');
712 parse_G (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED, const char **strp,
713 int opindex ATTRIBUTE_UNUSED, signed long *valuep ATTRIBUTE_UNUSED)
715 return parse_suffix (strp, 'g');
719 parse_Q (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED, const char **strp,
720 int opindex ATTRIBUTE_UNUSED, signed long *valuep ATTRIBUTE_UNUSED)
722 return parse_suffix (strp, 'q');
726 parse_Z (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED, const char **strp,
727 int opindex ATTRIBUTE_UNUSED, signed long *valuep ATTRIBUTE_UNUSED)
729 return parse_suffix (strp, 'z');
732 /* Parse an empty suffix. Fail if the next char is ':'. */
735 parse_X (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED, const char **strp,
736 int opindex ATTRIBUTE_UNUSED, signed long *valuep ATTRIBUTE_UNUSED)
739 return "Unexpected suffix";
744 parse_r0l_r0h (CGEN_CPU_DESC cd, const char **strp,
745 int opindex ATTRIBUTE_UNUSED, signed long *valuep)
750 const char *newp = *strp;
753 errmsg = cgen_parse_keyword (cd, & newp, & m32c_cgen_opval_h_r0l_r0h, & value);
758 return _("not a valid r0l/r0h pair");
761 /* Parse the second register in the pair. */
762 if (value == 0) /* r0l */
763 errmsg = cgen_parse_keyword (cd, & newp, & m32c_cgen_opval_h_r0h, & junk);
765 errmsg = cgen_parse_keyword (cd, & newp, & m32c_cgen_opval_h_r0l, & junk);
774 /* Accept .b or .w in any case. */
777 parse_size (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED, const char **strp,
778 int opindex ATTRIBUTE_UNUSED, signed long *valuep ATTRIBUTE_UNUSED)
781 && (*(*strp + 1) == 'b' || *(*strp + 1) == 'B'
782 || *(*strp + 1) == 'w' || *(*strp + 1) == 'W'))
788 return _("Invalid size specifier");
791 /* Special check to ensure that instruction exists for given machine. */
794 m32c_cgen_insn_supported (CGEN_CPU_DESC cd,
795 const CGEN_INSN *insn)
797 int machs = CGEN_INSN_ATTR_VALUE (insn, CGEN_INSN_MACH);
798 int isas = CGEN_INSN_ATTR_VALUE (insn, CGEN_INSN_ISA);
800 /* If attributes are absent, assume no restriction. */
804 return ((machs & cd->machs)
805 && (isas & cd->isas));
808 /* Parse a set of registers, R0,R1,A0,A1,SB,FB. */
811 parse_regset (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED,
813 int opindex ATTRIBUTE_UNUSED,
814 unsigned long *valuep,
817 const char *errmsg = 0;
821 while (**strp && **strp != ')')
823 if (**strp == 'r' || **strp == 'R')
826 regno = **strp - '0';
828 errmsg = _("Register number is not valid");
830 else if (**strp == 'a' || **strp == 'A')
833 regno = **strp - '0';
835 errmsg = _("Register number is not valid");
836 regno = **strp - '0' + 4;
839 else if (strncasecmp (*strp, "sb", 2) == 0 || strncasecmp (*strp, "SB", 2) == 0)
845 else if (strncasecmp (*strp, "fb", 2) == 0 || strncasecmp (*strp, "FB", 2) == 0)
851 if (push) /* Mask is reversed for push. */
852 *valuep |= 0x80 >> regno;
854 *valuep |= 1 << regno;
859 if (*(*strp + 1) == ')')
866 errmsg = _("Register list is not valid");
875 parse_pop_regset (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED,
877 int opindex ATTRIBUTE_UNUSED,
878 unsigned long *valuep)
880 return parse_regset (cd, strp, opindex, valuep, POP);
884 parse_push_regset (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED,
886 int opindex ATTRIBUTE_UNUSED,
887 unsigned long *valuep)
889 return parse_regset (cd, strp, opindex, valuep, PUSH);
894 #include "elf/m32c.h"
897 /* Always print the short insn format suffix as ':<char>'. */
900 print_suffix (void * dis_info, char suffix)
902 disassemble_info *info = dis_info;
904 (*info->fprintf_func) (info->stream, ":%c", suffix);
908 print_S (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED,
910 long value ATTRIBUTE_UNUSED,
911 unsigned int attrs ATTRIBUTE_UNUSED,
912 bfd_vma pc ATTRIBUTE_UNUSED,
913 int length ATTRIBUTE_UNUSED)
915 print_suffix (dis_info, 's');
920 print_G (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED,
922 long value ATTRIBUTE_UNUSED,
923 unsigned int attrs ATTRIBUTE_UNUSED,
924 bfd_vma pc ATTRIBUTE_UNUSED,
925 int length ATTRIBUTE_UNUSED)
927 print_suffix (dis_info, 'g');
931 print_Q (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED,
933 long value ATTRIBUTE_UNUSED,
934 unsigned int attrs ATTRIBUTE_UNUSED,
935 bfd_vma pc ATTRIBUTE_UNUSED,
936 int length ATTRIBUTE_UNUSED)
938 print_suffix (dis_info, 'q');
942 print_Z (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED,
944 long value ATTRIBUTE_UNUSED,
945 unsigned int attrs ATTRIBUTE_UNUSED,
946 bfd_vma pc ATTRIBUTE_UNUSED,
947 int length ATTRIBUTE_UNUSED)
949 print_suffix (dis_info, 'z');
952 /* Print the empty suffix. */
955 print_X (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED,
956 void * dis_info ATTRIBUTE_UNUSED,
957 long value ATTRIBUTE_UNUSED,
958 unsigned int attrs ATTRIBUTE_UNUSED,
959 bfd_vma pc ATTRIBUTE_UNUSED,
960 int length ATTRIBUTE_UNUSED)
966 print_r0l_r0h (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED,
969 unsigned int attrs ATTRIBUTE_UNUSED,
970 bfd_vma pc ATTRIBUTE_UNUSED,
971 int length ATTRIBUTE_UNUSED)
973 disassemble_info *info = dis_info;
976 (*info->fprintf_func) (info->stream, "r0h,r0l");
978 (*info->fprintf_func) (info->stream, "r0l,r0h");
982 print_unsigned_bitbase (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED,
985 unsigned int attrs ATTRIBUTE_UNUSED,
986 bfd_vma pc ATTRIBUTE_UNUSED,
987 int length ATTRIBUTE_UNUSED)
989 disassemble_info *info = dis_info;
991 (*info->fprintf_func) (info->stream, "%ld,0x%lx", value & 0x7, value >> 3);
995 print_signed_bitbase (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED,
998 unsigned int attrs ATTRIBUTE_UNUSED,
999 bfd_vma pc ATTRIBUTE_UNUSED,
1000 int length ATTRIBUTE_UNUSED)
1002 disassemble_info *info = dis_info;
1004 (*info->fprintf_func) (info->stream, "%ld,%ld", value & 0x7, value >> 3);
1008 print_size (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED,
1010 long value ATTRIBUTE_UNUSED,
1011 unsigned int attrs ATTRIBUTE_UNUSED,
1012 bfd_vma pc ATTRIBUTE_UNUSED,
1013 int length ATTRIBUTE_UNUSED)
1015 /* Always print the size as '.w'. */
1016 disassemble_info *info = dis_info;
1018 (*info->fprintf_func) (info->stream, ".w");
1024 static void print_pop_regset (CGEN_CPU_DESC, void *, long, unsigned int, bfd_vma, int);
1025 static void print_push_regset (CGEN_CPU_DESC, void *, long, unsigned int, bfd_vma, int);
1027 /* Print a set of registers, R0,R1,A0,A1,SB,FB. */
1030 print_regset (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED,
1033 unsigned int attrs ATTRIBUTE_UNUSED,
1034 bfd_vma pc ATTRIBUTE_UNUSED,
1035 int length ATTRIBUTE_UNUSED,
1038 static char * m16c_register_names [] =
1040 "r0", "r1", "r2", "r3", "a0", "a1", "sb", "fb"
1042 disassemble_info *info = dis_info;
1054 (*info->fprintf_func) (info->stream, "%s", m16c_register_names [0]);
1058 for (index = 1; index <= 7; ++index)
1067 (*info->fprintf_func) (info->stream, "%s%s", comma,
1068 m16c_register_names [index]);
1075 print_pop_regset (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED,
1078 unsigned int attrs ATTRIBUTE_UNUSED,
1079 bfd_vma pc ATTRIBUTE_UNUSED,
1080 int length ATTRIBUTE_UNUSED)
1082 print_regset (cd, dis_info, value, attrs, pc, length, POP);
1086 print_push_regset (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED,
1089 unsigned int attrs ATTRIBUTE_UNUSED,
1090 bfd_vma pc ATTRIBUTE_UNUSED,
1091 int length ATTRIBUTE_UNUSED)
1093 print_regset (cd, dis_info, value, attrs, pc, length, PUSH);