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");
437 parse_signed32 (CGEN_CPU_DESC cd, const char **strp,
438 int opindex, signed long *valuep)
440 const char *errmsg = 0;
443 errmsg = cgen_parse_signed_integer (cd, strp, opindex, & value);
452 parse_imm1_S (CGEN_CPU_DESC cd, const char **strp,
453 int opindex, signed long *valuep)
455 const char *errmsg = 0;
458 errmsg = cgen_parse_signed_integer (cd, strp, opindex, & value);
462 if (value < 1 || value > 2)
463 return _("immediate is out of range 1-2");
470 parse_imm3_S (CGEN_CPU_DESC cd, const char **strp,
471 int opindex, signed long *valuep)
473 const char *errmsg = 0;
476 errmsg = cgen_parse_signed_integer (cd, strp, opindex, & value);
480 if (value < 1 || value > 8)
481 return _("immediate is out of range 1-8");
488 parse_lab_5_3 (CGEN_CPU_DESC cd,
490 int opindex ATTRIBUTE_UNUSED,
492 enum cgen_parse_operand_result *type_addr,
495 const char *errmsg = 0;
497 enum cgen_parse_operand_result op_res;
499 errmsg = cgen_parse_address (cd, strp, M32C_OPERAND_LAB_5_3,
500 opinfo, & op_res, & value);
505 if (op_res == CGEN_PARSE_OPERAND_ADDRESS)
507 /* This is a hack; the field cannot handle near-zero signed
508 offsets that CGEN wants to put in to indicate an "empty"
516 if (value < 2 || value > 9)
517 return _("immediate is out of range 2-9");
524 parse_Bitno16R (CGEN_CPU_DESC cd, const char **strp,
525 int opindex, unsigned long *valuep)
527 const char *errmsg = 0;
530 errmsg = cgen_parse_unsigned_integer (cd, strp, opindex, & value);
535 return _("Bit number for indexing general register is out of range 0-15");
542 parse_unsigned_bitbase (CGEN_CPU_DESC cd, const char **strp,
543 int opindex, unsigned long *valuep,
546 const char *errmsg = 0;
549 const char *newp = *strp;
550 unsigned long long bitbase;
552 errmsg = cgen_parse_unsigned_integer (cd, & newp, opindex, & bit);
557 return "Missing base for bit,base:8";
560 errmsg = cgen_parse_unsigned_integer (cd, & newp, opindex, & base);
564 bitbase = (unsigned long long) bit + ((unsigned long long) base * 8);
566 if (bitbase >= (1ull << bits))
567 return _("bit,base is out of range");
575 parse_signed_bitbase (CGEN_CPU_DESC cd, const char **strp,
576 int opindex, signed long *valuep,
579 const char *errmsg = 0;
582 const char *newp = *strp;
586 errmsg = cgen_parse_unsigned_integer (cd, & newp, opindex, & bit);
591 return "Missing base for bit,base:8";
594 errmsg = cgen_parse_signed_integer (cd, & newp, opindex, & base);
598 bitbase = (long long)bit + ((long long)base * 8);
600 limit = 1ll << (bits - 1);
601 if (bitbase < -limit || bitbase >= limit)
602 return _("bit,base is out of range");
610 parse_unsigned_bitbase8 (CGEN_CPU_DESC cd, const char **strp,
611 int opindex, unsigned long *valuep)
613 return parse_unsigned_bitbase (cd, strp, opindex, valuep, 8);
617 parse_unsigned_bitbase11 (CGEN_CPU_DESC cd, const char **strp,
618 int opindex, unsigned long *valuep)
620 return parse_unsigned_bitbase (cd, strp, opindex, valuep, 11);
624 parse_unsigned_bitbase16 (CGEN_CPU_DESC cd, const char **strp,
625 int opindex, unsigned long *valuep)
627 return parse_unsigned_bitbase (cd, strp, opindex, valuep, 16);
631 parse_unsigned_bitbase19 (CGEN_CPU_DESC cd, const char **strp,
632 int opindex, unsigned long *valuep)
634 return parse_unsigned_bitbase (cd, strp, opindex, valuep, 19);
638 parse_unsigned_bitbase27 (CGEN_CPU_DESC cd, const char **strp,
639 int opindex, unsigned long *valuep)
641 return parse_unsigned_bitbase (cd, strp, opindex, valuep, 27);
645 parse_signed_bitbase8 (CGEN_CPU_DESC cd, const char **strp,
646 int opindex, signed long *valuep)
648 return parse_signed_bitbase (cd, strp, opindex, valuep, 8);
652 parse_signed_bitbase11 (CGEN_CPU_DESC cd, const char **strp,
653 int opindex, signed long *valuep)
655 return parse_signed_bitbase (cd, strp, opindex, valuep, 11);
659 parse_signed_bitbase19 (CGEN_CPU_DESC cd, const char **strp,
660 int opindex, signed long *valuep)
662 return parse_signed_bitbase (cd, strp, opindex, valuep, 19);
665 /* Parse the suffix as :<char> or as nothing followed by a whitespace. */
668 parse_suffix (const char **strp, char suffix)
670 const char *newp = *strp;
672 if (**strp == ':' && TOLOWER (*(*strp + 1)) == suffix)
681 return "Invalid suffix"; /* Anything -- will not be seen. */
685 parse_S (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED, const char **strp,
686 int opindex ATTRIBUTE_UNUSED, signed long *valuep ATTRIBUTE_UNUSED)
688 return parse_suffix (strp, 's');
692 parse_G (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED, const char **strp,
693 int opindex ATTRIBUTE_UNUSED, signed long *valuep ATTRIBUTE_UNUSED)
695 return parse_suffix (strp, 'g');
699 parse_Q (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED, const char **strp,
700 int opindex ATTRIBUTE_UNUSED, signed long *valuep ATTRIBUTE_UNUSED)
702 return parse_suffix (strp, 'q');
706 parse_Z (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED, const char **strp,
707 int opindex ATTRIBUTE_UNUSED, signed long *valuep ATTRIBUTE_UNUSED)
709 return parse_suffix (strp, 'z');
712 /* Parse an empty suffix. Fail if the next char is ':'. */
715 parse_X (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED, const char **strp,
716 int opindex ATTRIBUTE_UNUSED, signed long *valuep ATTRIBUTE_UNUSED)
719 return "Unexpected suffix";
724 parse_r0l_r0h (CGEN_CPU_DESC cd, const char **strp,
725 int opindex ATTRIBUTE_UNUSED, signed long *valuep)
730 const char *newp = *strp;
733 errmsg = cgen_parse_keyword (cd, & newp, & m32c_cgen_opval_h_r0l_r0h, & value);
738 return _("not a valid r0l/r0h pair");
741 /* Parse the second register in the pair. */
742 if (value == 0) /* r0l */
743 errmsg = cgen_parse_keyword (cd, & newp, & m32c_cgen_opval_h_r0h, & junk);
745 errmsg = cgen_parse_keyword (cd, & newp, & m32c_cgen_opval_h_r0l, & junk);
754 /* Accept .b or .w in any case. */
757 parse_size (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED, const char **strp,
758 int opindex ATTRIBUTE_UNUSED, signed long *valuep ATTRIBUTE_UNUSED)
761 && (*(*strp + 1) == 'b' || *(*strp + 1) == 'B'
762 || *(*strp + 1) == 'w' || *(*strp + 1) == 'W'))
768 return _("Invalid size specifier");
771 /* Special check to ensure that instruction exists for given machine. */
774 m32c_cgen_insn_supported (CGEN_CPU_DESC cd,
775 const CGEN_INSN *insn)
777 int machs = CGEN_INSN_ATTR_VALUE (insn, CGEN_INSN_MACH);
778 int isas = CGEN_INSN_ATTR_VALUE (insn, CGEN_INSN_ISA);
780 /* If attributes are absent, assume no restriction. */
784 return ((machs & cd->machs)
785 && (isas & cd->isas));
788 /* Parse a set of registers, R0,R1,A0,A1,SB,FB. */
791 parse_regset (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED,
793 int opindex ATTRIBUTE_UNUSED,
794 unsigned long *valuep,
797 const char *errmsg = 0;
801 while (**strp && **strp != ')')
803 if (**strp == 'r' || **strp == 'R')
806 regno = **strp - '0';
808 errmsg = _("Register number is not valid");
810 else if (**strp == 'a' || **strp == 'A')
813 regno = **strp - '0';
815 errmsg = _("Register number is not valid");
816 regno = **strp - '0' + 4;
819 else if (strncasecmp (*strp, "sb", 2) == 0 || strncasecmp (*strp, "SB", 2) == 0)
825 else if (strncasecmp (*strp, "fb", 2) == 0 || strncasecmp (*strp, "FB", 2) == 0)
831 if (push) /* Mask is reversed for push. */
832 *valuep |= 0x80 >> regno;
834 *valuep |= 1 << regno;
839 if (*(*strp + 1) == ')')
846 errmsg = _("Register list is not valid");
855 parse_pop_regset (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED,
857 int opindex ATTRIBUTE_UNUSED,
858 unsigned long *valuep)
860 return parse_regset (cd, strp, opindex, valuep, POP);
864 parse_push_regset (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED,
866 int opindex ATTRIBUTE_UNUSED,
867 unsigned long *valuep)
869 return parse_regset (cd, strp, opindex, valuep, PUSH);
874 #include "elf/m32c.h"
877 /* Always print the short insn format suffix as ':<char>'. */
880 print_suffix (void * dis_info, char suffix)
882 disassemble_info *info = dis_info;
884 (*info->fprintf_func) (info->stream, ":%c", suffix);
888 print_S (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED,
890 long value ATTRIBUTE_UNUSED,
891 unsigned int attrs ATTRIBUTE_UNUSED,
892 bfd_vma pc ATTRIBUTE_UNUSED,
893 int length ATTRIBUTE_UNUSED)
895 print_suffix (dis_info, 's');
900 print_G (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED,
902 long value ATTRIBUTE_UNUSED,
903 unsigned int attrs ATTRIBUTE_UNUSED,
904 bfd_vma pc ATTRIBUTE_UNUSED,
905 int length ATTRIBUTE_UNUSED)
907 print_suffix (dis_info, 'g');
911 print_Q (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED,
913 long value ATTRIBUTE_UNUSED,
914 unsigned int attrs ATTRIBUTE_UNUSED,
915 bfd_vma pc ATTRIBUTE_UNUSED,
916 int length ATTRIBUTE_UNUSED)
918 print_suffix (dis_info, 'q');
922 print_Z (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED,
924 long value ATTRIBUTE_UNUSED,
925 unsigned int attrs ATTRIBUTE_UNUSED,
926 bfd_vma pc ATTRIBUTE_UNUSED,
927 int length ATTRIBUTE_UNUSED)
929 print_suffix (dis_info, 'z');
932 /* Print the empty suffix. */
935 print_X (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED,
936 void * dis_info ATTRIBUTE_UNUSED,
937 long value ATTRIBUTE_UNUSED,
938 unsigned int attrs ATTRIBUTE_UNUSED,
939 bfd_vma pc ATTRIBUTE_UNUSED,
940 int length ATTRIBUTE_UNUSED)
946 print_r0l_r0h (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED,
949 unsigned int attrs ATTRIBUTE_UNUSED,
950 bfd_vma pc ATTRIBUTE_UNUSED,
951 int length ATTRIBUTE_UNUSED)
953 disassemble_info *info = dis_info;
956 (*info->fprintf_func) (info->stream, "r0h,r0l");
958 (*info->fprintf_func) (info->stream, "r0l,r0h");
962 print_unsigned_bitbase (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED,
965 unsigned int attrs ATTRIBUTE_UNUSED,
966 bfd_vma pc ATTRIBUTE_UNUSED,
967 int length ATTRIBUTE_UNUSED)
969 disassemble_info *info = dis_info;
971 (*info->fprintf_func) (info->stream, "%ld,0x%lx", value & 0x7, value >> 3);
975 print_signed_bitbase (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED,
978 unsigned int attrs ATTRIBUTE_UNUSED,
979 bfd_vma pc ATTRIBUTE_UNUSED,
980 int length ATTRIBUTE_UNUSED)
982 disassemble_info *info = dis_info;
984 (*info->fprintf_func) (info->stream, "%ld,%ld", value & 0x7, value >> 3);
988 print_size (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED,
990 long value ATTRIBUTE_UNUSED,
991 unsigned int attrs ATTRIBUTE_UNUSED,
992 bfd_vma pc ATTRIBUTE_UNUSED,
993 int length ATTRIBUTE_UNUSED)
995 /* Always print the size as '.w'. */
996 disassemble_info *info = dis_info;
998 (*info->fprintf_func) (info->stream, ".w");
1004 static void print_pop_regset (CGEN_CPU_DESC, void *, long, unsigned int, bfd_vma, int);
1005 static void print_push_regset (CGEN_CPU_DESC, void *, long, unsigned int, bfd_vma, int);
1007 /* Print a set of registers, R0,R1,A0,A1,SB,FB. */
1010 print_regset (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED,
1013 unsigned int attrs ATTRIBUTE_UNUSED,
1014 bfd_vma pc ATTRIBUTE_UNUSED,
1015 int length ATTRIBUTE_UNUSED,
1018 static char * m16c_register_names [] =
1020 "r0", "r1", "r2", "r3", "a0", "a1", "sb", "fb"
1022 disassemble_info *info = dis_info;
1034 (*info->fprintf_func) (info->stream, "%s", m16c_register_names [0]);
1038 for (index = 1; index <= 7; ++index)
1047 (*info->fprintf_func) (info->stream, "%s%s", comma,
1048 m16c_register_names [index]);
1055 print_pop_regset (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED,
1058 unsigned int attrs ATTRIBUTE_UNUSED,
1059 bfd_vma pc ATTRIBUTE_UNUSED,
1060 int length ATTRIBUTE_UNUSED)
1062 print_regset (cd, dis_info, value, attrs, pc, length, POP);
1066 print_push_regset (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED,
1069 unsigned int attrs ATTRIBUTE_UNUSED,
1070 bfd_vma pc ATTRIBUTE_UNUSED,
1071 int length ATTRIBUTE_UNUSED)
1073 print_regset (cd, dis_info, value, attrs, pc, length, PUSH);