* [PATCH, updated] Add support for setting disassembler-options in GDB for POWER, ARM and S390 @ 2017-02-08 21:03 Peter Bergner 2017-02-13 15:53 ` Yao Qi 2017-02-13 18:52 ` Peter Bergner 0 siblings, 2 replies; 16+ messages in thread From: Peter Bergner @ 2017-02-08 21:03 UTC (permalink / raw) To: gdb-patches Cc: Alan Modra, Pedro Alves, Yao Qi, Ulrich Weigand, Eli Zaretskii, Nick Clifton, binutils Ok, I think this resolves all of the suggestions mentioned in the reviews so far. Alan/Nick, I modified objdump to also call remove_whitespace_and_extra_commas() on the disassembler_options it is given, so that I can use the new FOR_EACH_DISASSEMBLER_OPTION without worry. I assume this is ok? Some comments from Yao's last review below... On 1/25/17 8:23 AM, Yao Qi wrote: > Why don't we merge functions "_names_" and "_desc_" into one function, Done. > options_t is what you defined in s390-dis.c. So I created a new struct to hold both the option names and descriptions, but I couldn't reuse struct options_t. The problem with that struct is that it makes getting an array of just the option names very difficult, and disassembler_options_completer() requires that. >> typedef struct >> { >> const char *name; >> + const char *long_name; > > Is this field necessary? Ok, I was able to consolidate those two fields into one field. >> + c->var = &style; >> + set_disassembler_options (args, from_tty, c); > > We usually don't relay the command call this way. It is fragile, IMO. > Can you factor out a function from set_disassembler_options, which > accept "normalized" options, and both set_disassembly_style_sfunc > and set_disassembler_options can call it. Done. Ok for trunk now? Peter include/ * dis-asm.h (disasm_options_t): New typedef. (parse_arm_disassembler_option): Remove prototype. (set_arm_regname_option): Likewise. (get_arm_regnames): Update prototype. (disassemble_init_s390): New prototype. (disassembler_options_powerpc): Likewise. (disassembler_options_arm): Likewise. (disassembler_options_s390): Likewise. (remove_whitespace_and_extra_commas): Likewise. (parse_one_disassembler_option): Likewise. (FOR_EACH_DISASSEMBLER_OPTION): New macro. opcodes/ * disassemble.c Include "safe-ctype.h". (disassemble_init_for_target): Handle s390 init. (remove_whitespace_and_extra_commas): New function. (parse_one_disassembler_option): Likewise. * arm-dis.c: Include "libiberty.h". (regnames): Use long disassembler style names. Add force-thumb and no-force-thumb options. (NUM_ARM_REGNAMES): Rename to NUM_ARM_OPTIONS. (get_arm_regname_num_options): Compute number of regname styles. (set_arm_regname_option): Delete. (get_arm_regnames): Delete unused argument. Update return type. Handle long long disassembler style names. (parse_arm_disassembler_option): Rename from this... (parse_arm_disassembler_options): ...to this. Make static. Use new FOR_EACH_DISASSEMBLER_OPTION macro to scan over options. (parse_disassembler_options): Delete. (print_insn): Call parse_arm_disassembler_options. (disassembler_options_arm): New function. (print_arm_disassembler_options): Handle updated regnames. * ppc-dis.c: Include "libiberty.h". (ppc_opts): Add "32" and "64" entries. (powerpc_init_dialect): Add break to switch statement. Use new FOR_EACH_DISASSEMBLER_OPTION macro. (disassembler_options_powerpc): New function. (print_ppc_disassembler_options): Remove printing of "32" and "64". * s390-dis.c: Include "libiberty.h". (init_flag): Remove unneeded variable. (struct s390_options_t): New structure type. (options): New structure. (init_disasm): Rename from this... (disassemble_init_s390): ...to this. Add initializations for current_arch_mask and option_use_insn_len_bits_p. Remove init_flag. (print_insn_s390): Delete call to init_disasm. (disassembler_options_s390): New function. (print_s390_disassembler_options): Print using information from struct 'options'. * po/opcodes.pot: Regenerate. binutils/ * objdump.c (main): Call remove_whitespace_and_extra_commas to cleanup disassembler_options. gdb/ * NEWS: Mention new set/show disassembler-options commands. * doc/gdb.texinfo: Document new set/show disassembler-options commands. * disasm.c: Include "arch-utils.h", "gdbcmd.h" and "safe-ctype.h". (prospective_options): New static variable. (gdb_disassembler::gdb_disassembler): Initialize m_di.disassembler_options. (gdb_buffered_insn_length_init_dis): Initilize di->application_data and di->disassembler_options. (set_disassembler_options): New function. (set_disassembler_options_sfunc): Likewise. (show_disassembler_options_sfunc): Likewise. (disassembler_options_completer): Likewise. (_initialize_disasm): Likewise. * disasm.h (set_disassembler_options): New prototype. * gdbarch.sh (gdbarch_disassembler_options): New variable. (gdbarch_disassembler_options): Likewise. * gdbarch.c: Regenerate. * gdbarch.h: Likewise. * arm-tdep.c (set_disassembly_style): Delete function and prototype. (set_disassembly_style_sfunc): Call set_disassembler_options. (show_disassembly_style_sfunc): New function. (arm_gdbarch_init): Call set_gdbarch_disassembler_options, set_gdbarch_disassembler_options_arch. (_initialize_arm_tdep): Delete unused regnames variable and update callers. Remove calls to parse_arm_disassembler_option & set_arm_regname_option. Pass show_disassembly_style_sfunc to the "disassembler" setshow command. * rs6000-tdep.c (rs6000_gdbarch_init): Call set_gdbarch_disassembler_options_arch. * s390-tdep.c (s390_gdbarch_init): Likewise. gdb/testsuite/ * gdb.arch/powerpc-power.exp: Delete test. * gdb.arch/powerpc-power.s: Likewise. * gdb.disasm/disassembler-options.exp: New test. * gdb.arch/powerpc-altivec.exp: Likewise. * gdb.arch/powerpc-altivec.s: Likewise. * gdb.arch/powerpc-altivec2.exp: Likewise. * gdb.arch/powerpc-altivec2.s: Likewise. * gdb.arch/powerpc-altivec3.exp: Likewise. * gdb.arch/powerpc-altivec3.s: Likewise. * gdb.arch/powerpc-power7.exp: Likewise. * gdb.arch/powerpc-power7.s: Likewise. * gdb.arch/powerpc-power8.exp: Likewise. * gdb.arch/powerpc-power8.s: Likewise. * gdb.arch/powerpc-power9.exp: Likewise. * gdb.arch/powerpc-power9.s: Likewise. * gdb.arch/powerpc-vsx.exp: Likewise. * gdb.arch/powerpc-vsx.s: Likewise. * gdb.arch/powerpc-vsx2.exp: Likewise. * gdb.arch/powerpc-vsx2.s: Likewise. * gdb.arch/powerpc-vsx3.exp: Likewise. * gdb.arch/powerpc-vsx3.s: Likewise. diff --git a/include/dis-asm.h b/include/dis-asm.h index 4872920..adbb733 100644 --- a/include/dis-asm.h +++ b/include/dis-asm.h @@ -222,6 +222,16 @@ typedef struct disassemble_info } disassemble_info; +/* This struct is used to pass information about valid disassembler options + and their descriptions from the target to the generic GDB functions that + set and display them. */ + +typedef struct +{ + const char **name; + const char **description; +} disasm_options_t; + \f /* Standard disassemblers. Disassemble one instruction at the given target address. Return number of octets processed. */ @@ -332,14 +342,16 @@ extern void print_ppc_disassembler_options (FILE *); extern void print_riscv_disassembler_options (FILE *); extern void print_arm_disassembler_options (FILE *); extern void print_arc_disassembler_options (FILE *); -extern void parse_arm_disassembler_option (char *); extern void print_s390_disassembler_options (FILE *); extern int get_arm_regname_num_options (void); -extern int set_arm_regname_option (int); -extern int get_arm_regnames (int, const char **, const char **, const char *const **); +extern void get_arm_regnames (int, const char **, const char **); extern bfd_boolean aarch64_symbol_is_valid (asymbol *, struct disassemble_info *); extern bfd_boolean arm_symbol_is_valid (asymbol *, struct disassemble_info *); extern void disassemble_init_powerpc (struct disassemble_info *); +extern void disassemble_init_s390 (struct disassemble_info *); +extern const disasm_options_t *disassembler_options_powerpc (void); +extern const disasm_options_t *disassembler_options_arm (void); +extern const disasm_options_t *disassembler_options_s390 (void); /* Fetch the disassembler for a given BFD, if that support is available. */ extern disassembler_ftype disassembler (bfd *); @@ -351,6 +363,21 @@ extern void disassemble_init_for_target (struct disassemble_info * dinfo); /* Document any target specific options available from the disassembler. */ extern void disassembler_usage (FILE *); +/* Remove whitespace and consecutive commas. */ +extern char *remove_whitespace_and_extra_commas (char *); + +/* Parse the disassembler options, looking for ',' seperated options. */ +extern char *parse_one_disassembler_option (char *, const char *); + +/* A macro for iterating over each comma seperated option in OPTIONS. +================================================================================ + OPT +*/ +#define FOR_EACH_DISASSEMBLER_OPTION(OPT, ITER, OPTIONS) \ + for ((ITER) = parse_one_disassembler_option (OPT, OPTIONS); \ + (OPT)[0] != 0; \ + (ITER) = parse_one_disassembler_option (OPT, ITER)) + \f /* This block of definitions is for particular callers who read instructions into a buffer before calling the instruction decoder. */ diff --git a/opcodes/disassemble.c b/opcodes/disassemble.c index 1b15242..c31255e 100644 --- a/opcodes/disassemble.c +++ b/opcodes/disassemble.c @@ -20,6 +20,7 @@ #include "sysdep.h" #include "dis-asm.h" +#include "safe-ctype.h" #ifdef ARCH_all #define ARCH_aarch64 @@ -649,7 +650,78 @@ disassemble_init_for_target (struct disassemble_info * info) disassemble_init_powerpc (info); break; #endif +#ifdef ARCH_s390 + case bfd_arch_s390: + disassemble_init_s390 (info); + break; +#endif default: break; } } + +/* Remove whitespace and consecutive commas from OPTIONS. */ + +char * +remove_whitespace_and_extra_commas (char *options) +{ + char *str; + size_t i, len; + + if (options == NULL) + return NULL; + + /* Strip off all trailing whitespace and commas. */ + for (len = strlen (options); len > 0; len--) + { + if (!ISSPACE (options[len - 1]) && options[len - 1] != ',') + break; + options[len - 1] = '\0'; + } + + /* Convert all remaining whitespace to commas. */ + for (i = 0; options[i] != '\0'; i++) + if (ISSPACE (options[i])) + options[i] = ','; + + /* Remove consecutive commas. */ + for (str = options; *str != '\0'; str++) + if (*str == ',' && (*(str + 1) == ',' || str == options)) + { + char *next = str + 1; + while (*next == ',') + next++; + len = strlen (next); + if (str != options) + str++; + memmove (str, next, len); + next[len - (size_t)(next - str)] = '\0'; + } + return (strlen (options) != 0) ? options : NULL; +} + +/* Parse the OPTIONS argument looking for ',' seperated options. + Copy the current disassembler option into OPT. It is up to the + caller to ensure OPT contains enough space to hold the option. */ + +char * +parse_one_disassembler_option (char *opt, const char *options) +{ + if (options == NULL || options[0] == 0) + { + opt[0] = 0; + return NULL; + } + + char *next = strchr (options, ','); + if (next != NULL) + { + strncpy (opt, options, (size_t) (next - options)); + opt[(size_t) (next - options)] = 0; + next++; + } + else + strcpy (opt, options); + + return next; +} diff --git a/opcodes/arm-dis.c b/opcodes/arm-dis.c index 2987403..25d4d55 100644 --- a/opcodes/arm-dis.c +++ b/opcodes/arm-dis.c @@ -26,6 +26,7 @@ #include "opcode/arm.h" #include "opintl.h" #include "safe-ctype.h" +#include "libiberty.h" #include "floatformat.h" /* FIXME: This shouldn't be done here. */ @@ -3198,18 +3199,22 @@ arm_regname; static const arm_regname regnames[] = { - { "raw" , "Select raw register names", + { "reg-names-raw", N_("Select raw register names"), { "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15"}}, - { "gcc", "Select register names used by GCC", + { "reg-names-gcc", N_("Select register names used by GCC"), { "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "sl", "fp", "ip", "sp", "lr", "pc" }}, - { "std", "Select register names used in ARM's ISA documentation", + { "reg-names-std", N_("Select register names used in ARM's ISA documentation"), { "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12", "sp", "lr", "pc" }}, - { "apcs", "Select register names used in the APCS", + { "reg-names-apcs", N_("Select register names used in the APCS"), { "a1", "a2", "a3", "a4", "v1", "v2", "v3", "v4", "v5", "v6", "sl", "fp", "ip", "sp", "lr", "pc" }}, - { "atpcs", "Select register names used in the ATPCS", + { "reg-names-atpcs", N_("Select register names used in the ATPCS"), { "a1", "a2", "a3", "a4", "v1", "v2", "v3", "v4", "v5", "v6", "v7", "v8", "IP", "SP", "LR", "PC" }}, - { "special-atpcs", "Select special register names used in the ATPCS", + { "reg-names-special-atpcs", N_("Select special register names used in the ATPCS"), { "a1", "a2", "a3", "a4", "v1", "v2", "v3", "WR", "v5", "SB", "SL", "FP", "IP", "SP", "LR", "PC" }}, + + /* All non "reg-names-* options must be listed last. */ + { "force-thumb", N_("Assume all insns are Thumb insns"), {NULL} }, + { "no-force-thumb", N_("Examine preceding label to determine an insn's type"), {NULL} } }; static const char *const iwmmxt_wwnames[] = @@ -3235,7 +3240,7 @@ static const char *const iwmmxt_cregnames[] = /* Default to GCC register name set. */ static unsigned int regname_selected = 1; -#define NUM_ARM_REGNAMES NUM_ELEM (regnames) +#define NUM_ARM_OPTIONS NUM_ELEM (regnames) #define arm_regnames regnames[regname_selected].reg_names static bfd_boolean force_thumb = FALSE; @@ -3257,27 +3262,26 @@ static bfd_vma ifthen_address; int get_arm_regname_num_options (void) { - return NUM_ARM_REGNAMES; -} + static int num_opts = 0; -int -set_arm_regname_option (int option) -{ - int old = regname_selected; - regname_selected = option; - return old; + if (num_opts == 0) + { + unsigned int i; + for (i = 0; i < NUM_ARM_OPTIONS; i++) + if (CONST_STRNEQ (regnames[i].name, "reg-names-")) + num_opts++; + } + + return num_opts; } -int +void get_arm_regnames (int option, const char **setname, - const char **setdescription, - const char *const **register_names) + const char **setdescription) { - *setname = regnames[option].name; - *setdescription = regnames[option].description; - *register_names = regnames[option].reg_names; - return 16; + *setname = regnames[option].name + strlen ("reg-names-"); + *setdescription = _(regnames[option].description); } /* Decode a bitfield of the form matching regexp (N(-N)?,)*N(-N)?. @@ -6124,64 +6128,39 @@ arm_symbol_is_valid (asymbol * sym, return (name && *name != '$' && strncmp (name, "__tagsym$$", 10)); } -/* Parse an individual disassembler option. */ +/* Parse the string of disassembler options. */ -void -parse_arm_disassembler_option (char *option) +static void +parse_arm_disassembler_options (char *options) { - if (option == NULL) - return; + char *iter, opt[64]; - if (CONST_STRNEQ (option, "reg-names-")) + FOR_EACH_DISASSEMBLER_OPTION (opt, iter, options) { - int i; - - option += 10; - - for (i = NUM_ARM_REGNAMES; i--;) - if (strneq (option, regnames[i].name, strlen (regnames[i].name))) - { - regname_selected = i; - break; - } + if (CONST_STRNEQ (opt, "reg-names-")) + { + unsigned int i; + for (i = 0; i < NUM_ARM_OPTIONS; i++) + if (strcmp (opt, regnames[i].name) == 0) + { + regname_selected = i; + break; + } - if (i < 0) - /* XXX - should break 'option' at following delimiter. */ - fprintf (stderr, _("Unrecognised register name set: %s\n"), option); + if (i >= NUM_ARM_OPTIONS) + fprintf (stderr, _("Unrecognised register name set: %s\n"), opt); + } + else if (CONST_STRNEQ (opt, "force-thumb")) + force_thumb = 1; + else if (CONST_STRNEQ (opt, "no-force-thumb")) + force_thumb = 0; + else + fprintf (stderr, _("Unrecognised disassembler option: %s\n"), opt); } - else if (CONST_STRNEQ (option, "force-thumb")) - force_thumb = 1; - else if (CONST_STRNEQ (option, "no-force-thumb")) - force_thumb = 0; - else - /* XXX - should break 'option' at following delimiter. */ - fprintf (stderr, _("Unrecognised disassembler option: %s\n"), option); return; } -/* Parse the string of disassembler options, spliting it at whitespaces - or commas. (Whitespace separators supported for backwards compatibility). */ - -static void -parse_disassembler_options (char *options) -{ - if (options == NULL) - return; - - while (*options) - { - parse_arm_disassembler_option (options); - - /* Skip forward to next seperator. */ - while ((*options) && (! ISSPACE (*options)) && (*options != ',')) - ++ options; - /* Skip forward past seperators. */ - while (ISSPACE (*options) || (*options == ',')) - ++ options; - } -} - static bfd_boolean mapping_symbol_for_insn (bfd_vma pc, struct disassemble_info *info, enum map_type *map_symbol); @@ -6473,7 +6452,7 @@ print_insn (bfd_vma pc, struct disassemble_info *info, bfd_boolean little) if (info->disassembler_options) { - parse_disassembler_options (info->disassembler_options); + parse_arm_disassembler_options (info->disassembler_options); /* To avoid repeated parsing of these options, we remove them here. */ info->disassembler_options = NULL; @@ -6842,21 +6821,52 @@ print_insn_little_arm (bfd_vma pc, struct disassemble_info *info) return print_insn (pc, info, TRUE); } +const disasm_options_t * +disassembler_options_arm (void) +{ + static disasm_options_t *opts = NULL; + + if (opts == NULL) + { + unsigned int i; + opts = XNEW (disasm_options_t); + opts->name = XNEWVEC (const char *, NUM_ARM_OPTIONS + 1); + opts->description = XNEWVEC (const char *, NUM_ARM_OPTIONS + 1); + for (i = 0; i < NUM_ARM_OPTIONS; i++) + { + opts->name[i] = regnames[i].name; + if (regnames[i].description != NULL) + opts->description[i] = _(regnames[i].description); + else + opts->description[i] = NULL; + } + /* The array we return must be NULL terminated. */ + opts->name[i] = NULL; + opts->description[i] = NULL; + } + + return opts; +} + void print_arm_disassembler_options (FILE *stream) { - int i; - + unsigned int i, max_len = 0; fprintf (stream, _("\n\ The following ARM specific disassembler options are supported for use with\n\ the -M switch:\n")); - for (i = NUM_ARM_REGNAMES; i--;) - fprintf (stream, " reg-names-%s %*c%s\n", - regnames[i].name, - (int)(14 - strlen (regnames[i].name)), ' ', - regnames[i].description); + for (i = 0; i < NUM_ARM_OPTIONS; i++) + { + unsigned int len = strlen (regnames[i].name); + if (max_len < len) + max_len = len; + } - fprintf (stream, " force-thumb Assume all insns are Thumb insns\n"); - fprintf (stream, " no-force-thumb Examine preceding label to determine an insn's type\n\n"); + for (i = 0, max_len++; i < NUM_ARM_OPTIONS; i++) + fprintf (stream, " %s%*c %s\n", + regnames[i].name, + (int)(max_len - strlen (regnames[i].name)), ' ', + _(regnames[i].description)); } + diff --git a/opcodes/ppc-dis.c b/opcodes/ppc-dis.c index e0eff7a..8f4c487 100644 --- a/opcodes/ppc-dis.c +++ b/opcodes/ppc-dis.c @@ -26,6 +26,7 @@ #include "elf/ppc.h" #include "opintl.h" #include "opcode/ppc.h" +#include "libiberty.h" /* This file provides several disassembler functions, all of which use the disassembler interface defined in dis-asm.h. Several functions @@ -172,8 +173,12 @@ struct ppc_mopt ppc_opts[] = { 0 }, { "ppc32", PPC_OPCODE_PPC, 0 }, + { "32", PPC_OPCODE_PPC, + 0 }, { "ppc64", PPC_OPCODE_PPC | PPC_OPCODE_64, 0 }, + { "64", PPC_OPCODE_PPC | PPC_OPCODE_64, + 0 }, { "ppc64bridge", PPC_OPCODE_PPC | PPC_OPCODE_64_BRIDGE, 0 }, { "ppcps", PPC_OPCODE_PPC | PPC_OPCODE_PPCPS, @@ -278,7 +283,6 @@ powerpc_init_dialect (struct disassemble_info *info) { ppc_cpu_t dialect = 0; ppc_cpu_t sticky = 0; - char *arg; struct dis_private *priv = calloc (sizeof (*priv), 1); if (priv == NULL) @@ -324,29 +328,23 @@ powerpc_init_dialect (struct disassemble_info *info) break; default: dialect = ppc_parse_cpu (dialect, &sticky, "power9") | PPC_OPCODE_ANY; + break; } - arg = info->disassembler_options; - while (arg != NULL) + char opt[64]; + char *iter; + FOR_EACH_DISASSEMBLER_OPTION (opt, iter, info->disassembler_options) { ppc_cpu_t new_cpu = 0; - char *end = strchr (arg, ','); - - if (end != NULL) - *end = 0; - if ((new_cpu = ppc_parse_cpu (dialect, &sticky, arg)) != 0) - dialect = new_cpu; - else if (strcmp (arg, "32") == 0) + if (strcmp (opt, "32") == 0) dialect &= ~(ppc_cpu_t) PPC_OPCODE_64; - else if (strcmp (arg, "64") == 0) + else if (strcmp (opt, "64") == 0) dialect |= PPC_OPCODE_64; + else if ((new_cpu = ppc_parse_cpu (dialect, &sticky, opt)) != 0) + dialect = new_cpu; else - fprintf (stderr, _("warning: ignoring unknown -M%s option\n"), arg); - - if (end != NULL) - *end++ = ','; - arg = end; + fprintf (stderr, _("warning: ignoring unknown -M%s option\n"), opt); } info->private_data = priv; @@ -767,6 +765,26 @@ print_insn_powerpc (bfd_vma memaddr, return 4; } +const disasm_options_t * +disassembler_options_powerpc (void) +{ + static disasm_options_t *opts = NULL; + + if (opts == NULL) + { + size_t i, num_options = sizeof (ppc_opts) / sizeof (ppc_opts[0]); + opts = XNEW (disasm_options_t); + opts->name = XNEWVEC (const char *, num_options + 1); + for (i = 0; i < num_options; i++) + opts->name[i] = ppc_opts[i].opt; + /* The array we return must be NULL terminated. */ + opts->name[i] = NULL; + opts->description = NULL; + } + + return opts; +} + void print_ppc_disassembler_options (FILE *stream) { @@ -785,5 +803,5 @@ the -M switch:\n")); col = 0; } } - fprintf (stream, " 32, 64\n"); + fprintf (stream, "\n"); } diff --git a/opcodes/s390-dis.c b/opcodes/s390-dis.c index 328ba2d..e84b38a 100644 --- a/opcodes/s390-dis.c +++ b/opcodes/s390-dis.c @@ -25,16 +25,30 @@ #include "dis-asm.h" #include "opintl.h" #include "opcode/s390.h" +#include "libiberty.h" -static int init_flag = 0; static int opc_index[256]; static int current_arch_mask = 0; static int option_use_insn_len_bits_p = 0; +typedef struct +{ + const char *name; + const char *description; +} s390_options_t; + +static const s390_options_t options[] = +{ + { "esa" , N_("Disassemble in ESA architecture mode") }, + { "zarch", N_("Disassemble in z/Architecture mode") }, + { "insnlength", N_("Print unknown instructions according to " + "length from first two bits") } +}; + /* Set up index table for first opcode byte. */ -static void -init_disasm (struct disassemble_info *info) +void +disassemble_init_s390 (struct disassemble_info *info) { int i; const char *p; @@ -46,6 +60,9 @@ init_disasm (struct disassemble_info *info) for (i = s390_num_opcodes; i--; ) opc_index[s390_opcodes[i].opcode[0]] = i; + current_arch_mask = 1 << S390_OPCODE_ZARCH; + option_use_insn_len_bits_p = 0; + for (p = info->disassembler_options; p != NULL; ) { if (CONST_STRNEQ (p, "esa")) @@ -61,11 +78,6 @@ init_disasm (struct disassemble_info *info) if (p != NULL) p++; } - - if (!current_arch_mask) - current_arch_mask = 1 << S390_OPCODE_ZARCH; - - init_flag = 1; } /* Derive the length of an instruction from its first byte. */ @@ -266,9 +278,6 @@ print_insn_s390 (bfd_vma memaddr, struct disassemble_info *info) unsigned int value; int status, opsize, bufsize, bytes_to_dump, i; - if (init_flag == 0) - init_disasm (info); - /* The output looks better if we put 6 bytes on a line. */ info->bytes_per_line = 6; @@ -360,15 +369,48 @@ print_insn_s390 (bfd_vma memaddr, struct disassemble_info *info) return 0; } +const disasm_options_t * +disassembler_options_s390 (void) +{ + static disasm_options_t *opts = NULL; + + if (opts == NULL) + { + size_t i, num_options = sizeof (options) / sizeof (options[0]); + opts = XNEW (disasm_options_t); + opts->name = XNEWVEC (const char *, num_options + 1); + opts->description = XNEWVEC (const char *, num_options + 1); + for (i = 0; i < num_options; i++) + { + opts->name[i] = options[i].name; + opts->description[i] = _(options[i].description); + } + /* The array we return must be NULL terminated. */ + opts->name[i] = NULL; + opts->description[i] = NULL; + } + + return opts; +} + void print_s390_disassembler_options (FILE *stream) { + unsigned int i, max_len = 0; fprintf (stream, _("\n\ The following S/390 specific disassembler options are supported for use\n\ with the -M switch (multiple options should be separated by commas):\n")); - fprintf (stream, _(" esa Disassemble in ESA architecture mode\n")); - fprintf (stream, _(" zarch Disassemble in z/Architecture mode\n")); - fprintf (stream, _(" insnlength Print unknown instructions according " - "to length from first two bits\n")); + for (i = 0; i < sizeof (options) / sizeof (options[0]); i++) + { + unsigned int len = strlen (options[i].name); + if (max_len < len) + max_len = len; + } + + for (i = 0, max_len++; i < sizeof (options) / sizeof (options[0]); i++) + fprintf (stream, " %s%*c %s\n", + options[i].name, + (int)(max_len - strlen (options[i].name)), ' ', + _(options[i].description)); } diff --git a/opcodes/po/opcodes.pot b/opcodes/po/opcodes.pot index 56c7a23..e64a678 100644 --- a/opcodes/po/opcodes.pot +++ b/opcodes/po/opcodes.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: bug-binutils@gnu.org\n" -"POT-Creation-Date: 2016-12-23 09:23+0100\n" +"POT-Creation-Date: 2017-02-08 13:38-0600\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" @@ -18,8 +18,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" #. Invalid option. -#. XXX - should break 'option' at following delimiter. -#: aarch64-dis.c:81 arc-dis.c:699 arm-dis.c:6158 +#: aarch64-dis.c:81 arc-dis.c:769 arm-dis.c:6158 #, c-format msgid "Unrecognised disassembler option: %s\n" msgstr "" @@ -54,7 +53,7 @@ msgid "" msgstr "" #: aarch64-dis.c:3215 mips-dis.c:2477 mips-dis.c:2485 mips-dis.c:2487 -#: riscv-dis.c:505 +#: riscv-dis.c:506 #, c-format msgid "\n" msgstr "" @@ -262,7 +261,7 @@ msgstr "" msgid "jump hint unaligned" msgstr "" -#: arc-dis.c:323 +#: arc-dis.c:368 msgid "" "\n" "Warning: disassembly may be wrong due to guessed opcode class choice.\n" @@ -270,7 +269,7 @@ msgid "" "\t\t\t\t" msgstr "" -#: arc-dis.c:1182 +#: arc-dis.c:1267 #, c-format msgid "" "\n" @@ -278,37 +277,37 @@ msgid "" "with -M switch (multiple options should be separated by commas):\n" msgstr "" -#: arc-dis.c:1186 +#: arc-dis.c:1271 #, c-format msgid " dsp Recognize DSP instructions.\n" msgstr "" -#: arc-dis.c:1188 +#: arc-dis.c:1273 #, c-format msgid " spfp Recognize FPX SP instructions.\n" msgstr "" -#: arc-dis.c:1190 +#: arc-dis.c:1275 #, c-format msgid " dpfp Recognize FPX DP instructions.\n" msgstr "" -#: arc-dis.c:1192 +#: arc-dis.c:1277 #, c-format msgid " quarkse_em Recognize FPU QuarkSE-EM instructions.\n" msgstr "" -#: arc-dis.c:1194 +#: arc-dis.c:1279 #, c-format msgid " fpuda Recognize double assist FPU instructions.\n" msgstr "" -#: arc-dis.c:1196 +#: arc-dis.c:1281 #, c-format msgid " fpus Recognize single precision FPU instructions.\n" msgstr "" -#: arc-dis.c:1198 +#: arc-dis.c:1283 #, c-format msgid " fpud Recognize double precision FPU instructions.\n" msgstr "" @@ -454,17 +453,49 @@ msgstr "" msgid "Value must be in the range 0 to 31" msgstr "" -#: arm-dis.c:3634 +#: arm-dis.c:3202 +msgid "Select raw register names" +msgstr "" + +#: arm-dis.c:3204 +msgid "Select register names used by GCC" +msgstr "" + +#: arm-dis.c:3206 +msgid "Select register names used in ARM's ISA documentation" +msgstr "" + +#: arm-dis.c:3208 +msgid "Select register names used in the APCS" +msgstr "" + +#: arm-dis.c:3210 +msgid "Select register names used in the ATPCS" +msgstr "" + +#: arm-dis.c:3212 +msgid "Select special register names used in the ATPCS" +msgstr "" + +#. All non "reg-names-* options must be listed last. +#: arm-dis.c:3216 +msgid "Assume all insns are Thumb insns" +msgstr "" + +#: arm-dis.c:3217 +msgid "Examine preceding label to determine an insn's type" +msgstr "" + +#: arm-dis.c:3638 msgid "<illegal precision>" msgstr "" -#. XXX - should break 'option' at following delimiter. -#: arm-dis.c:6150 +#: arm-dis.c:6151 #, c-format msgid "Unrecognised register name set: %s\n" msgstr "" -#: arm-dis.c:6850 +#: arm-dis.c:6855 #, c-format msgid "" "\n" @@ -472,17 +503,17 @@ msgid "" "the -M switch:\n" msgstr "" -#: avr-dis.c:114 avr-dis.c:135 +#: avr-dis.c:115 avr-dis.c:136 #, c-format msgid "undefined" msgstr "" -#: avr-dis.c:214 +#: avr-dis.c:215 #, c-format msgid "Internal disassembler error" msgstr "" -#: avr-dis.c:267 +#: avr-dis.c:268 #, c-format msgid "unknown constraint `%c'" msgstr "" @@ -573,12 +604,12 @@ msgstr "" #: ip2k-asm.c:789 ip2k-asm.c:896 iq2000-asm.c:644 iq2000-asm.c:648 #: iq2000-asm.c:737 iq2000-asm.c:844 lm32-asm.c:534 lm32-asm.c:538 #: lm32-asm.c:627 lm32-asm.c:734 m32c-asm.c:1769 m32c-asm.c:1773 -#: m32c-asm.c:1862 m32c-asm.c:1969 m32r-asm.c:513 m32r-asm.c:517 -#: m32r-asm.c:606 m32r-asm.c:713 mep-asm.c:1472 mep-asm.c:1476 mep-asm.c:1565 -#: mep-asm.c:1672 mt-asm.c:780 mt-asm.c:784 mt-asm.c:873 mt-asm.c:980 -#: or1k-asm.c:688 or1k-asm.c:692 or1k-asm.c:781 or1k-asm.c:888 xc16x-asm.c:561 -#: xc16x-asm.c:565 xc16x-asm.c:654 xc16x-asm.c:761 xstormy16-asm.c:461 -#: xstormy16-asm.c:465 xstormy16-asm.c:554 xstormy16-asm.c:661 +#: m32c-asm.c:1862 m32c-asm.c:1969 m32r-asm.c:513 m32r-asm.c:517 m32r-asm.c:606 +#: m32r-asm.c:713 mep-asm.c:1472 mep-asm.c:1476 mep-asm.c:1565 mep-asm.c:1672 +#: mt-asm.c:780 mt-asm.c:784 mt-asm.c:873 mt-asm.c:980 or1k-asm.c:688 +#: or1k-asm.c:692 or1k-asm.c:781 or1k-asm.c:888 xc16x-asm.c:561 xc16x-asm.c:565 +#: xc16x-asm.c:654 xc16x-asm.c:761 xstormy16-asm.c:461 xstormy16-asm.c:465 +#: xstormy16-asm.c:554 xstormy16-asm.c:661 msgid "unrecognized instruction" msgstr "" @@ -636,9 +667,8 @@ msgid "*unknown*" msgstr "" #: epiphany-dis.c:277 fr30-dis.c:298 frv-dis.c:395 ip2k-dis.c:287 -#: iq2000-dis.c:188 lm32-dis.c:146 m32c-dis.c:890 m32r-dis.c:278 -#: mep-dis.c:1186 mt-dis.c:289 or1k-dis.c:140 xc16x-dis.c:419 -#: xstormy16-dis.c:167 +#: iq2000-dis.c:188 lm32-dis.c:146 m32c-dis.c:890 m32r-dis.c:278 mep-dis.c:1186 +#: mt-dis.c:289 or1k-dis.c:140 xc16x-dis.c:419 xstormy16-dis.c:167 #, c-format msgid "Unrecognized field %d while printing insn.\n" msgstr "" @@ -760,11 +790,11 @@ msgstr "" msgid "%02x\t\t*unknown*" msgstr "" -#: i386-dis.c:12198 +#: i386-dis.c:12200 msgid "<internal disassembler error>" msgstr "" -#: i386-dis.c:12490 +#: i386-dis.c:12492 #, c-format msgid "" "\n" @@ -773,145 +803,145 @@ msgid "" "with the -M switch (multiple options should be separated by commas):\n" msgstr "" -#: i386-dis.c:12494 +#: i386-dis.c:12496 #, c-format msgid " x86-64 Disassemble in 64bit mode\n" msgstr "" -#: i386-dis.c:12495 +#: i386-dis.c:12497 #, c-format msgid " i386 Disassemble in 32bit mode\n" msgstr "" -#: i386-dis.c:12496 +#: i386-dis.c:12498 #, c-format msgid " i8086 Disassemble in 16bit mode\n" msgstr "" -#: i386-dis.c:12497 +#: i386-dis.c:12499 #, c-format msgid " att Display instruction in AT&T syntax\n" msgstr "" -#: i386-dis.c:12498 +#: i386-dis.c:12500 #, c-format msgid " intel Display instruction in Intel syntax\n" msgstr "" -#: i386-dis.c:12499 +#: i386-dis.c:12501 #, c-format msgid "" " att-mnemonic\n" " Display instruction in AT&T mnemonic\n" msgstr "" -#: i386-dis.c:12501 +#: i386-dis.c:12503 #, c-format msgid "" " intel-mnemonic\n" " Display instruction in Intel mnemonic\n" msgstr "" -#: i386-dis.c:12503 +#: i386-dis.c:12505 #, c-format msgid " addr64 Assume 64bit address size\n" msgstr "" -#: i386-dis.c:12504 +#: i386-dis.c:12506 #, c-format msgid " addr32 Assume 32bit address size\n" msgstr "" -#: i386-dis.c:12505 +#: i386-dis.c:12507 #, c-format msgid " addr16 Assume 16bit address size\n" msgstr "" -#: i386-dis.c:12506 +#: i386-dis.c:12508 #, c-format msgid " data32 Assume 32bit data size\n" msgstr "" -#: i386-dis.c:12507 +#: i386-dis.c:12509 #, c-format msgid " data16 Assume 16bit data size\n" msgstr "" -#: i386-dis.c:12508 +#: i386-dis.c:12510 #, c-format msgid " suffix Always display instruction suffix in AT&T syntax\n" msgstr "" -#: i386-dis.c:12509 +#: i386-dis.c:12511 #, c-format msgid " amd64 Display instruction in AMD64 ISA\n" msgstr "" -#: i386-dis.c:12510 +#: i386-dis.c:12512 #, c-format msgid " intel64 Display instruction in Intel64 ISA\n" msgstr "" -#: i386-dis.c:13061 +#: i386-dis.c:13063 msgid "64-bit address is disabled" msgstr "" -#: i386-gen.c:674 ia64-gen.c:306 +#: i386-gen.c:679 ia64-gen.c:306 #, c-format msgid "%s: Error: " msgstr "" -#: i386-gen.c:838 +#: i386-gen.c:843 #, c-format msgid "%s: %d: Unknown bitfield: %s\n" msgstr "" -#: i386-gen.c:840 +#: i386-gen.c:845 #, c-format msgid "Unknown bitfield: %s\n" msgstr "" -#: i386-gen.c:899 +#: i386-gen.c:904 #, c-format msgid "%s: %d: Missing `)' in bitfield: %s\n" msgstr "" -#: i386-gen.c:1170 +#: i386-gen.c:1175 #, c-format msgid "can't find i386-opc.tbl for reading, errno = %s\n" msgstr "" -#: i386-gen.c:1301 +#: i386-gen.c:1306 #, c-format msgid "can't find i386-reg.tbl for reading, errno = %s\n" msgstr "" -#: i386-gen.c:1378 +#: i386-gen.c:1383 #, c-format msgid "can't create i386-init.h, errno = %s\n" msgstr "" -#: i386-gen.c:1468 ia64-gen.c:2829 +#: i386-gen.c:1473 ia64-gen.c:2829 #, c-format msgid "unable to change directory to \"%s\", errno = %s\n" msgstr "" -#: i386-gen.c:1480 i386-gen.c:1483 +#: i386-gen.c:1485 i386-gen.c:1488 #, c-format msgid "CpuMax != %d!\n" msgstr "" -#: i386-gen.c:1487 +#: i386-gen.c:1492 #, c-format msgid "%d unused bits in i386_cpu_flags.\n" msgstr "" -#: i386-gen.c:1494 +#: i386-gen.c:1499 #, c-format msgid "%d unused bits in i386_operand_type.\n" msgstr "" -#: i386-gen.c:1508 +#: i386-gen.c:1513 #, c-format msgid "can't create i386-tbl.h, errno = %s\n" msgstr "" @@ -1181,12 +1211,12 @@ msgstr "" msgid "Invalid size specifier" msgstr "" -#: m68k-dis.c:1278 +#: m68k-dis.c:1292 #, c-format msgid "<function code %d>" msgstr "" -#: m68k-dis.c:1437 +#: m68k-dis.c:1455 #, c-format msgid "<internal error in opcode table: %s %s>\n" msgstr "" @@ -1229,7 +1259,7 @@ msgstr "" msgid "Value is not aligned enough" msgstr "" -#: mips-dis.c:1633 mips-dis.c:1844 +#: mips-dis.c:1634 mips-dis.c:1846 #, c-format msgid "# internal error, undefined operand in `%s %s'" msgstr "" @@ -1359,20 +1389,20 @@ msgstr "" msgid "Error: read from memory failed" msgstr "" -#: msp430-dis.c:485 +#: msp430-dis.c:499 msgid "Warning: illegal as emulation instr" msgstr "" #. R2/R3 are illegal as dest: may be data section. -#: msp430-dis.c:569 +#: msp430-dis.c:591 msgid "Warning: illegal as 2-op instr" msgstr "" -#: msp430-dis.c:950 +#: msp430-dis.c:1002 msgid "Warning: unrecognised CALLA addressing mode" msgstr "" -#: msp430-dis.c:1232 msp430-dis.c:1249 msp430-dis.c:1270 +#: msp430-dis.c:1303 msp430-dis.c:1324 msp430-dis.c:1345 #, c-format msgid "Warning: reserved use of A/L and B/W bits detected" msgstr "" @@ -1403,12 +1433,12 @@ msgstr "" msgid "$<undefined>" msgstr "" -#: ppc-dis.c:345 +#: ppc-dis.c:347 #, c-format msgid "warning: ignoring unknown -M%s option\n" msgstr "" -#: ppc-dis.c:775 +#: ppc-dis.c:793 #, c-format msgid "" "\n" @@ -1490,12 +1520,12 @@ msgstr "" msgid "Unrecognized disassembler option: %s\n" msgstr "" -#: riscv-dis.c:342 +#: riscv-dis.c:343 #, c-format msgid "# internal error, undefined modifier (%c)" msgstr "" -#: riscv-dis.c:494 +#: riscv-dis.c:495 #, c-format msgid "" "\n" @@ -1503,14 +1533,14 @@ msgid "" "with the -M switch (multiple options should be separated by commas):\n" msgstr "" -#: riscv-dis.c:498 +#: riscv-dis.c:499 #, c-format msgid "" "\n" " numeric Print numeric reigster names, rather than ABI names.\n" msgstr "" -#: riscv-dis.c:501 +#: riscv-dis.c:502 #, c-format msgid "" "\n" @@ -1518,29 +1548,24 @@ msgid "" " than into pseudoinstructions.\n" msgstr "" -#: s390-dis.c:366 -#, c-format -msgid "" -"\n" -"The following S/390 specific disassembler options are supported for use\n" -"with the -M switch (multiple options should be separated by commas):\n" +#: s390-dis.c:42 +msgid "Disassemble in ESA architecture mode" msgstr "" -#: s390-dis.c:370 -#, c-format -msgid " esa Disassemble in ESA architecture mode\n" +#: s390-dis.c:43 +msgid "Disassemble in z/Architecture mode" msgstr "" -#: s390-dis.c:371 -#, c-format -msgid " zarch Disassemble in z/Architecture mode\n" +#: s390-dis.c:44 +msgid "Print unknown instructions according to length from first two bits" msgstr "" -#: s390-dis.c:372 +#: s390-dis.c:400 #, c-format msgid "" -" insnlength Print unknown instructions according to length from first two " -"bits\n" +"\n" +"The following S/390 specific disassembler options are supported for use\n" +"with the -M switch (multiple options should be separated by commas):\n" msgstr "" #: score-dis.c:662 score-dis.c:869 score-dis.c:1030 score-dis.c:1144 diff --git a/binutils/objdump.c b/binutils/objdump.c index b9fecef..4609858 100644 --- a/binutils/objdump.c +++ b/binutils/objdump.c @@ -3728,12 +3728,16 @@ main (int argc, char **argv) machine = optarg; break; case 'M': - if (disassembler_options) - /* Ignore potential memory leak for now. */ - disassembler_options = concat (disassembler_options, ",", - optarg, (const char *) NULL); - else - disassembler_options = optarg; + { + char *options; + if (disassembler_options) + /* Ignore potential memory leak for now. */ + options = concat (disassembler_options, ",", + optarg, (const char *) NULL); + else + options = optarg; + disassembler_options = remove_whitespace_and_extra_commas (options); + } break; case 'j': add_only (optarg); diff --git a/gdb/NEWS b/gdb/NEWS index 08f97c0..c63f1e2 100644 --- a/gdb/NEWS +++ b/gdb/NEWS @@ -73,6 +73,16 @@ flash-erase Erases all the flash memory regions reported by the target. This is equivalent to the CLI command flash-erase. +* New commands + +set disassembler-options +show disassembler-options + Controls the passing of target specific information to the disassembler. + If it is necessary to specify more than one disassembler option then + multiple options can be placed together into a comma separated list. + Default is ''. Currently, the only supported targets are ARM, PowerPC + and S/390. + *** Changes in GDB 7.12 * GDB and GDBserver now build with a C++ compiler by default. diff --git a/gdb/doc/gdb.texinfo b/gdb/doc/gdb.texinfo index a969d1b..26abd9c 100644 --- a/gdb/doc/gdb.texinfo +++ b/gdb/doc/gdb.texinfo @@ -8516,6 +8516,25 @@ location of the relocation table. On some architectures, @value{GDBN} might be able to resolve these to actual function names. @table @code +@kindex set disassembler-options +@cindex disassembler options +@item set disassembler-options @var{option1}[,@var{option2}@dots{}] +This command controls the passing of target specific information to the +disassembler. For a list of valid options, please refer to the +@code{-M}/@code{--disassembler-options} section of the @samp{objdump} +manual and/or the output of @kbd{objdump --help}. The default value is ''. + +If it is necessary to specify more than one disassembler option, then +multiple options can be placed together into a comma separated list. +Currently this command is only supported on targets ARM, PowerPC +and S/390. + +@kindex show disassembler-options +@item show disassembler-options +Show the current setting of the disassembler options. +@end table + +@table @code @kindex set disassembly-flavor @cindex Intel disassembly flavor @cindex AT&T disassembly flavor diff --git a/gdb/disasm.c b/gdb/disasm.c index 64d6684..19f3846 100644 --- a/gdb/disasm.c +++ b/gdb/disasm.c @@ -18,19 +18,27 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include "defs.h" +#include "arch-utils.h" #include "target.h" #include "value.h" #include "ui-out.h" #include "disasm.h" #include "gdbcore.h" +#include "gdbcmd.h" #include "dis-asm.h" #include "source.h" +#include "safe-ctype.h" #include <algorithm> /* Disassemble functions. FIXME: We should get rid of all the duplicate code in gdb that does the same thing: disassemble_command() and the gdbtk variation. */ +/* This variable is used to hold the prospective disassembler_options value + which is set by the "set disassembler_options" command. */ +static char *prospective_options = NULL; + /* This structure is used to store line number information for the deprecated /m option. We need a different sort of line table from the normal one cuz we can't @@ -780,6 +788,7 @@ gdb_disassembler::gdb_disassembler (struct gdbarch *gdbarch, m_di.endian = gdbarch_byte_order (gdbarch); m_di.endian_code = gdbarch_byte_order_for_code (gdbarch); m_di.application_data = this; + m_di.disassembler_options = gdbarch_disassembler_options (gdbarch); disassemble_init_for_target (&m_di); } @@ -888,6 +897,8 @@ gdb_buffered_insn_length_init_dis (struct gdbarch *gdbarch, di->endian = gdbarch_byte_order (gdbarch); di->endian_code = gdbarch_byte_order_for_code (gdbarch); + di->application_data = gdbarch; + di->disassembler_options = gdbarch_disassembler_options (gdbarch); disassemble_init_for_target (di); } @@ -904,3 +915,166 @@ gdb_buffered_insn_length (struct gdbarch *gdbarch, return gdbarch_print_insn (gdbarch, addr, &di); } + +void +set_disassembler_options (char *prospective_options) +{ + struct gdbarch *gdbarch = get_current_arch (); + const disasm_options_t *valid_options; + char *options = remove_whitespace_and_extra_commas (prospective_options); + char *iter, opt[256]; + + if (options == NULL) + { + free (gdbarch_disassembler_options (gdbarch)); + set_gdbarch_disassembler_options (gdbarch, NULL); + return; + } + + valid_options = gdbarch_disassembler_options_arch (gdbarch); + if (valid_options == NULL) + { + fprintf_filtered (gdb_stdlog, _("\ +'set disassembler-options ...' is not supported on this architecture.\n")); + return; + } + + /* Verify we have valid disassembler options. */ + FOR_EACH_DISASSEMBLER_OPTION (opt, iter, options) + { + size_t i; + for (i = 0; valid_options->name[i] != NULL; i++) + if (strcmp (opt, valid_options->name[i]) == 0) + break; + if (valid_options->name[i] == NULL) + { + fprintf_filtered (gdb_stdlog, + _("Invalid disassembler option value: '%s'.\n"), + opt); + return; + } + } + + free (gdbarch_disassembler_options (gdbarch)); + set_gdbarch_disassembler_options (gdbarch, xstrdup (options)); +} + +static void +set_disassembler_options_sfunc (char *args, int from_tty, + struct cmd_list_element *c) +{ + set_disassembler_options (prospective_options); +} + +static void +show_disassembler_options_sfunc (struct ui_file *file, int from_tty, + struct cmd_list_element *c, const char *value) +{ + struct gdbarch *gdbarch = get_current_arch (); + const disasm_options_t *valid_options; + + const char *options = gdbarch_disassembler_options (gdbarch); + if (options == NULL) + options = ""; + + fprintf_filtered (file, _("The current disassembler options are '%s'\n"), + options); + + valid_options = gdbarch_disassembler_options_arch (gdbarch); + + if (valid_options == NULL) + return; + + fprintf_filtered (file, _("\n\ +The following disassembler options are supported for use with\n\ +the 'set disassembler-options <option>[,<option>...]' command:\n")); + + if (valid_options->description != NULL) + { + size_t i, max_len = 0; + + /* Compute the length of the longest option name. */ + for (i = 0; valid_options->name[i] != NULL; i++) + { + size_t len = strlen (valid_options->name[i]); + if (max_len < len) + max_len = len; + } + + for (i = 0, max_len++; valid_options->name[i] != NULL; i++) + { + fprintf_filtered (file, " %s", valid_options->name[i]); + if (valid_options->description[i] != NULL) + fprintf_filtered (file, "%*c %s", + (int)(max_len - strlen (valid_options->name[i])), ' ', + valid_options->description[i]); + fprintf_filtered (file, "\n"); + } + } + else + { + size_t i, col; + for (i = 0, col = 0; valid_options->name[i] != NULL; i++) + { + /* Include the " " and "," we print below. */ + size_t len = strlen (valid_options->name[i]) + 2; + if (col + len > 80) + { + fprintf_filtered (file, "\n"); + col = 0; + } + if (col == 0) + fprintf_filtered (file, " %s", valid_options->name[i]); + else + fprintf_filtered (file, ", %s", valid_options->name[i]); + col += len; + } + fprintf_filtered (file, "\n"); + } +} + +/* A completion function for "set disassembler". */ + +static VEC (char_ptr) * +disassembler_options_completer (struct cmd_list_element *ignore, + const char *text, const char *word) +{ + struct gdbarch *gdbarch = get_current_arch (); + const disasm_options_t *opts = gdbarch_disassembler_options_arch (gdbarch); + + if (opts != NULL) + { + /* Only attempt to complete on the last option text. */ + const char *separator = strrchr (text, ','); + if (separator != NULL) + text = separator + 1; + while (ISSPACE (*text)) + text++; + return complete_on_enum (opts->name, text, word); + } + return NULL; +} + + +/* Initialization code. */ + +/* -Wmissing-prototypes */ +extern initialize_file_ftype _initialize_disasm; + +void +_initialize_disasm (void) +{ + struct cmd_list_element *cmd; + + /* Add the command that controls the disassembler options. */ + cmd = add_setshow_string_noescape_cmd ("disassembler-options", no_class, + &prospective_options, _("\ +Set the disassembler options.\n\ +Usage: set disassembler <option>[,<option>...]\n\n\ +See: show disassembler' for valid option values.\n"), _("\ +Show the disassembler options."), NULL, + set_disassembler_options_sfunc, + show_disassembler_options_sfunc, + &setlist, &showlist); + set_cmd_completer (cmd, disassembler_options_completer); +} diff --git a/gdb/disasm.h b/gdb/disasm.h index 42c1f3a..4d29446 100644 --- a/gdb/disasm.h +++ b/gdb/disasm.h @@ -138,4 +138,6 @@ extern int gdb_buffered_insn_length (struct gdbarch *gdbarch, const gdb_byte *insn, int max_len, CORE_ADDR memaddr); +extern void set_disassembler_options (char *); + #endif diff --git a/gdb/gdbarch.sh b/gdb/gdbarch.sh index 54549b6..c607853 100755 --- a/gdb/gdbarch.sh +++ b/gdb/gdbarch.sh @@ -1163,6 +1163,10 @@ m:const char *:gnu_triplet_regexp:void:::default_gnu_triplet_regexp::0 # each address in memory. m:int:addressable_memory_unit_size:void:::default_addressable_memory_unit_size::0 +# Functions for allowing a target to modify its disassembler options. +v:char *:disassembler_options:::0:0::0:pstring (gdbarch->disassembler_options) +v:const disasm_options_t *:disassembler_options_arch:::0:0::0:host_address_to_string (gdbarch->disassembler_options_arch->name) + EOF } @@ -1259,6 +1263,7 @@ cat <<EOF #define GDBARCH_H #include "frame.h" +#include "dis-asm.h" struct floatformat; struct ui_file; diff --git a/gdb/gdbarch.c b/gdb/gdbarch.c index 266f2e9..dfd6a97 100644 --- a/gdb/gdbarch.c +++ b/gdb/gdbarch.c @@ -339,6 +339,8 @@ struct gdbarch gdbarch_gcc_target_options_ftype *gcc_target_options; gdbarch_gnu_triplet_regexp_ftype *gnu_triplet_regexp; gdbarch_addressable_memory_unit_size_ftype *addressable_memory_unit_size; + char * disassembler_options; + const disasm_options_t * disassembler_options_arch; }; /* Create a new ``struct gdbarch'' based on information provided by @@ -692,6 +694,8 @@ verify_gdbarch (struct gdbarch *gdbarch) /* Skip verify of gcc_target_options, invalid_p == 0 */ /* Skip verify of gnu_triplet_regexp, invalid_p == 0 */ /* Skip verify of addressable_memory_unit_size, invalid_p == 0 */ + /* Skip verify of disassembler_options, invalid_p == 0 */ + /* Skip verify of disassembler_options_arch, invalid_p == 0 */ if (!log.empty ()) internal_error (__FILE__, __LINE__, _("verify_gdbarch: the following are invalid ...%s"), @@ -875,6 +879,12 @@ gdbarch_dump (struct gdbarch *gdbarch, struct ui_file *file) "gdbarch_dump: deprecated_function_start_offset = %s\n", core_addr_to_string_nz (gdbarch->deprecated_function_start_offset)); fprintf_unfiltered (file, + "gdbarch_dump: disassembler_options = %s\n", + pstring (gdbarch->disassembler_options)); + fprintf_unfiltered (file, + "gdbarch_dump: disassembler_options_arch = %s\n", + host_address_to_string (gdbarch->disassembler_options_arch->name)); + fprintf_unfiltered (file, "gdbarch_dump: gdbarch_displaced_step_copy_insn_p() = %d\n", gdbarch_displaced_step_copy_insn_p (gdbarch)); fprintf_unfiltered (file, @@ -4956,6 +4966,40 @@ set_gdbarch_addressable_memory_unit_size (struct gdbarch *gdbarch, gdbarch->addressable_memory_unit_size = addressable_memory_unit_size; } +char * +gdbarch_disassembler_options (struct gdbarch *gdbarch) +{ + gdb_assert (gdbarch != NULL); + /* Skip verify of disassembler_options, invalid_p == 0 */ + if (gdbarch_debug >= 2) + fprintf_unfiltered (gdb_stdlog, "gdbarch_disassembler_options called\n"); + return gdbarch->disassembler_options; +} + +void +set_gdbarch_disassembler_options (struct gdbarch *gdbarch, + char * disassembler_options) +{ + gdbarch->disassembler_options = disassembler_options; +} + +const disasm_options_t * +gdbarch_disassembler_options_arch (struct gdbarch *gdbarch) +{ + gdb_assert (gdbarch != NULL); + /* Skip verify of disassembler_options_arch, invalid_p == 0 */ + if (gdbarch_debug >= 2) + fprintf_unfiltered (gdb_stdlog, "gdbarch_disassembler_options_arch called\n"); + return gdbarch->disassembler_options_arch; +} + +void +set_gdbarch_disassembler_options_arch (struct gdbarch *gdbarch, + const disasm_options_t * disassembler_options_arch) +{ + gdbarch->disassembler_options_arch = disassembler_options_arch; +} + /* Keep a registry of per-architecture data-pointers required by GDB modules. */ diff --git a/gdb/gdbarch.h b/gdb/gdbarch.h index 50bc6a9..1e6e938 100644 --- a/gdb/gdbarch.h +++ b/gdb/gdbarch.h @@ -36,6 +36,7 @@ #define GDBARCH_H #include "frame.h" +#include "dis-asm.h" struct floatformat; struct ui_file; @@ -1545,6 +1546,14 @@ typedef int (gdbarch_addressable_memory_unit_size_ftype) (struct gdbarch *gdbarc extern int gdbarch_addressable_memory_unit_size (struct gdbarch *gdbarch); extern void set_gdbarch_addressable_memory_unit_size (struct gdbarch *gdbarch, gdbarch_addressable_memory_unit_size_ftype *addressable_memory_unit_size); +/* Functions for allowing a target to modify its disassembler options. */ + +extern char * gdbarch_disassembler_options (struct gdbarch *gdbarch); +extern void set_gdbarch_disassembler_options (struct gdbarch *gdbarch, char * disassembler_options); + +extern const disasm_options_t * gdbarch_disassembler_options_arch (struct gdbarch *gdbarch); +extern void set_gdbarch_disassembler_options_arch (struct gdbarch *gdbarch, const disasm_options_t * disassembler_options_arch); + /* Definition for an unknown syscall, used basically in error-cases. */ #define UNKNOWN_SYSCALL (-1) diff --git a/gdb/arm-tdep.c b/gdb/arm-tdep.c index 88ed391..41d8a25 100644 --- a/gdb/arm-tdep.c +++ b/gdb/arm-tdep.c @@ -218,7 +218,9 @@ static const char *disassembly_style; style. */ static void set_disassembly_style_sfunc(char *, int, struct cmd_list_element *); -static void set_disassembly_style (void); +static void show_disassembly_style_sfunc (struct ui_file *, int, + struct cmd_list_element *, + const char *); static void convert_from_extended (const struct floatformat *, const void *, void *, int); @@ -8539,9 +8541,34 @@ arm_show_force_mode (struct ui_file *file, int from_tty, static void set_disassembly_style_sfunc (char *args, int from_tty, - struct cmd_list_element *c) + struct cmd_list_element *c) { - set_disassembly_style (); + /* Convert the short style name into the long style name (eg, reg-names-*) + before calling the generic set_disassembler_options() function. */ + char long_name[64], *style = long_name; + snprintf (style, 64, "reg-names-%s", disassembly_style); + set_disassembler_options (style); +} + +static void +show_disassembly_style_sfunc (struct ui_file *file, int from_tty, + struct cmd_list_element *c, const char *value) +{ + struct gdbarch *gdbarch = get_current_arch (); + const char *options = gdbarch_disassembler_options (gdbarch); + char *style = "default"; + char *iter, opt[64]; + + FOR_EACH_DISASSEMBLER_OPTION (opt, iter, options) + { + if (CONST_STRNEQ (opt, "reg-names-")) + { + style = &opt[strlen ("reg-names-")]; + break; + } + } + + fprintf_unfiltered (file, "The disassembly style is \"%s\".\n", style); } \f /* Return the ARM register name corresponding to register I. */ @@ -8582,21 +8609,6 @@ arm_register_name (struct gdbarch *gdbarch, int i) return arm_register_names[i]; } -static void -set_disassembly_style (void) -{ - int current; - - /* Find the style that the user wants. */ - for (current = 0; current < num_disassembly_options; current++) - if (disassembly_style == valid_disassembly_styles[current]) - break; - gdb_assert (current < num_disassembly_options); - - /* Synchronize the disassembler. */ - set_arm_regname_option (current); -} - /* Test whether the coff symbol specific value corresponds to a Thumb function. */ @@ -9556,6 +9568,9 @@ arm_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches) user_reg_add (gdbarch, arm_register_aliases[i].name, value_of_arm_user_reg, &arm_register_aliases[i].regnum); + set_gdbarch_disassembler_options (gdbarch, xstrdup ("reg-names-std")); + set_gdbarch_disassembler_options_arch (gdbarch, disassembler_options_arm ()); + return gdbarch; } @@ -9579,7 +9594,6 @@ _initialize_arm_tdep (void) long length; const char *setname; const char *setdesc; - const char *const *regnames; int i; char regdesc[1024], *rdptr = regdesc; size_t rest = sizeof (regdesc); @@ -9620,27 +9634,16 @@ _initialize_arm_tdep (void) _("Various ARM-specific commands."), &showarmcmdlist, "show arm ", 0, &showlist); - /* Sync the opcode insn printer with our register viewer. */ - parse_arm_disassembler_option ("reg-names-std"); - - /* Initialize the array that will be passed to - add_setshow_enum_cmd(). */ + /* Initialize the array that will be passed to add_setshow_enum_cmd(). */ valid_disassembly_styles = XNEWVEC (const char *, num_disassembly_options + 1); for (i = 0; i < num_disassembly_options; i++) { - get_arm_regnames (i, &setname, &setdesc, ®names); + get_arm_regnames (i, &setname, &setdesc); valid_disassembly_styles[i] = setname; length = snprintf (rdptr, rest, "%s - %s\n", setname, setdesc); rdptr += length; rest -= length; - /* When we find the default names, tell the disassembler to use - them. */ - if (!strcmp (setname, "std")) - { - disassembly_style = setname; - set_arm_regname_option (i); - } } /* Mark the end of valid options. */ valid_disassembly_styles[num_disassembly_options] = NULL; @@ -9657,8 +9660,7 @@ _initialize_arm_tdep (void) _("Show the disassembly style."), helptext.c_str (), set_disassembly_style_sfunc, - NULL, /* FIXME: i18n: The disassembly style is - \"%s\". */ + show_disassembly_style_sfunc, &setarmcmdlist, &showarmcmdlist); add_setshow_boolean_cmd ("apcs32", no_class, &arm_apcs_32, diff --git a/gdb/rs6000-tdep.c b/gdb/rs6000-tdep.c index 527f643..d789cfe 100644 --- a/gdb/rs6000-tdep.c +++ b/gdb/rs6000-tdep.c @@ -6592,6 +6592,9 @@ rs6000_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches) else register_ppc_ravenscar_ops (gdbarch); + set_gdbarch_disassembler_options_arch (gdbarch, + disassembler_options_powerpc ()); + return gdbarch; } diff --git a/gdb/s390-linux-tdep.c b/gdb/s390-linux-tdep.c index febdd14..060409e 100644 --- a/gdb/s390-linux-tdep.c +++ b/gdb/s390-linux-tdep.c @@ -8113,6 +8113,8 @@ s390_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches) s390_init_linux_record_tdep (&s390_linux_record_tdep, ABI_LINUX_S390); s390_init_linux_record_tdep (&s390x_linux_record_tdep, ABI_LINUX_ZSERIES); + set_gdbarch_disassembler_options_arch (gdbarch, disassembler_options_s390 ()); + return gdbarch; } diff --git a/gdb/testsuite/gdb.arch/powerpc-altivec.exp b/gdb/testsuite/gdb.arch/powerpc-altivec.exp new file mode 100644 index 0000000..8fd418e --- /dev/null +++ b/gdb/testsuite/gdb.arch/powerpc-altivec.exp @@ -0,0 +1,257 @@ +# Copyright 2016 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +# Test PowerPC instructions disassembly. + +standard_testfile .s +set objfile [standard_output_file ${testfile}.o] + +if {![istarget "powerpc*-*-*"]} then { + verbose "Skipping PowerPC instructions disassembly." + return +} + +if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${objfile}" object {debug}] != "" } { + untested "PowerPC instructions disassembly" + return -1 +} + +clean_restart ${objfile} + +# Disassemble the function. + +gdb_test "set disassembler-options altivec" +set test "disass func" +gdb_test_multiple $test $test { + -re "\r\nDump of assembler code for function func:(\r\n.*\r\n)End of assembler dump.\r\n$gdb_prompt $" { + set func $expect_out(1,string) + pass $test + } +} + +proc instr_to_patt {instr} { + # 0x0000000000000018 <+24>: stxvd2x vs43,r4,r5 + return ".*\r\n\[ \t\]*0x\[0-9a-f\]+ <\\+\[0-9a-f\]*>:\[ \t\]*[string map [list { } "\[ \t\]+" . {\.}] $instr]\[ \t\]*\r\n.*" +} + +proc func_check {instr} { + global func + + set test "Found: $instr" + if [regexp -nocase -line [instr_to_patt $instr] $func] { + pass $test + } else { + fail $test + } +} + +func_check "dss 3" +func_check "dssall" +func_check "dst r5,r4,1" +func_check "dstt r8,r7,0" +func_check "dstst r5,r6,3" +func_check "dststt r4,r5,2" +func_check "lvebx v30,r22,r24" +func_check "lvebx v21,0,r24" +func_check "lvehx v10,r16,r2" +func_check "lvehx v20,0,r23" +func_check "lvewx v17,r4,r18" +func_check "lvewx v23,0,r8" +func_check "lvsl v6,0,r25" +func_check "lvsl v2,0,r6" +func_check "lvsr v22,r16,r12" +func_check "lvsr v0,0,r29" +func_check "lvxl v15,r5,r13" +func_check "lvxl v19,0,r23" +func_check "lvx v22,r1,r2" +func_check "lvx v18,0,r17" +func_check "mfvrsave r31" +func_check "mfvscr v24" +func_check "mtvrsave r10" +func_check "mtvscr v25" +func_check "stvebx v18,r27,r10" +func_check "stvebx v16,0,r6" +func_check "stvehx v17,r13,r16" +func_check "stvehx v23,0,r20" +func_check "stvewx v11,r19,r31" +func_check "stvewx v31,0,r1" +func_check "stvxl v26,r21,r17" +func_check "stvxl v13,0,r22" +func_check "stvx v11,r31,r31" +func_check "stvx v30,0,r16" +func_check "vaddcuw v24,v7,v28" +func_check "vaddfp v3,v30,v11" +func_check "vaddsbs v8,v28,v9" +func_check "vaddshs v7,v5,v4" +func_check "vaddsws v22,v26,v27" +func_check "vaddubm v16,v14,v28" +func_check "vaddubs v6,v1,v25" +func_check "vadduhm v2,v4,v6" +func_check "vadduhs v26,v21,v8" +func_check "vadduwm v29,v31,v1" +func_check "vadduws v23,v13,v4" +func_check "vandc v30,v16,v9" +func_check "vand v3,v13,v27" +func_check "vavgsb v4,v6,v17" +func_check "vavgsh v23,v28,v19" +func_check "vavgsw v8,v15,v31" +func_check "vavgub v6,v7,v25" +func_check "vavguh v25,v22,v10" +func_check "vavguw v3,v23,v29" +func_check "vctsxs v14,v2,6" +func_check "vctuxs v9,v31,20" +func_check "vcfsx v24,v30,3" +func_check "vcfux v17,v21,29" +func_check "vcmpbfp v18,v28,v0" +func_check "vcmpbfp\. v19,v26,v3" +func_check "vcmpeqfp v16,v2,v11" +func_check "vcmpeqfp\. v23,v13,v13" +func_check "vcmpequb v25,v19,v10" +func_check "vcmpequb\. v18,v11,v2" +func_check "vcmpequh v9,v25,v7" +func_check "vcmpequh\. v14,v24,v21" +func_check "vcmpequw v24,v12,v5" +func_check "vcmpequw\. v19,v16,v1" +func_check "vcmpgefp v23,v17,v16" +func_check "vcmpgefp\. v19,v29,v17" +func_check "vcmpgtfp v16,v28,v13" +func_check "vcmpgtfp\. v14,v24,v7" +func_check "vcmpgtsb v16,v22,v6" +func_check "vcmpgtsb\. v2,v12,v14" +func_check "vcmpgtsh v28,v3,v29" +func_check "vcmpgtsh\. v16,v19,v13" +func_check "vcmpgtsw v15,v0,v5" +func_check "vcmpgtsw\. v21,v13,v0" +func_check "vcmpgtub v5,v10,v30" +func_check "vcmpgtub\. v7,v13,v10" +func_check "vcmpgtuh v24,v15,v16" +func_check "vcmpgtuh\. v25,v21,v27" +func_check "vcmpgtuw v17,v27,v6" +func_check "vcmpgtuw\. v8,v21,v27" +func_check "vcfsx v1,v1,14" +func_check "vctsxs v4,v15,25" +func_check "vctuxs v28,v23,14" +func_check "vcfux v6,v6,0" +func_check "vexptefp v0,v8" +func_check "vlogefp v22,v27" +func_check "vmaddfp v23,v18,v5,v18" +func_check "vmaxfp v13,v13,v27" +func_check "vmaxsb v8,v23,v14" +func_check "vmaxsh v19,v17,v0" +func_check "vmaxsw v19,v3,v22" +func_check "vmaxub v23,v30,v28" +func_check "vmaxuh v9,v20,v23" +func_check "vmaxuw v21,v19,v1" +func_check "vmhaddshs v22,v13,v5,v22" +func_check "vmhraddshs v31,v0,v3,v18" +func_check "vminfp v2,v21,v24" +func_check "vminsb v20,v6,v10" +func_check "vminsh v18,v27,v26" +func_check "vminsw v3,v4,v1" +func_check "vminub v7,v0,v13" +func_check "vminuh v0,v12,v6" +func_check "vminuw v6,v3,v1" +func_check "vmladduhm v3,v29,v3,v26" +func_check "vmrghb v21,v5,v31" +func_check "vmrghh v21,v24,v0" +func_check "vmrghw v16,v0,v22" +func_check "vmrglb v1,v17,v16" +func_check "vmrglh v14,v8,v15" +func_check "vmrglw v31,v21,v5" +func_check "vmr v24,v9" +func_check "vmr v24,v9" +func_check "vmsummbm v0,v24,v15,v23" +func_check "vmsumshm v1,v4,v7,v25" +func_check "vmsumshs v9,v8,v13,v31" +func_check "vmsumubm v23,v31,v12,v30" +func_check "vmsumuhm v29,v0,v26,v21" +func_check "vmsumuhs v27,v14,v25,v5" +func_check "vmulesb v10,v25,v14" +func_check "vmulesh v1,v18,v8" +func_check "vmuleub v17,v14,v9" +func_check "vmuleuh v5,v26,v9" +func_check "vmulosb v21,v18,v6" +func_check "vmulosh v4,v5,v8" +func_check "vmuloub v2,v9,v19" +func_check "vmulouh v29,v5,v4" +func_check "vnmsubfp v8,v2,v6,v5" +func_check "vnor v31,v9,v10" +func_check "vnot v25,v31" +func_check "vnot v25,v31" +func_check "vor v23,v7,v2" +func_check "vperm v0,v28,v22,v25" +func_check "vpkpx v16,v25,v17" +func_check "vpkshss v12,v16,v17" +func_check "vpkshus v1,v19,v23" +func_check "vpkswss v25,v7,v13" +func_check "vpkswus v4,v24,v10" +func_check "vpkuhum v9,v27,v12" +func_check "vpkuhus v22,v10,v25" +func_check "vpkuwum v30,v18,v0" +func_check "vpkuwus v7,v3,v22" +func_check "vrefp v24,v28" +func_check "vrfim v17,v19" +func_check "vrfin v24,v25" +func_check "vrfip v3,v5" +func_check "vrfiz v8,v10" +func_check "vrlb v26,v18,v30" +func_check "vrlh v16,v17,v25" +func_check "vrlw v23,v30,v9" +func_check "vrsqrtefp v2,v18" +func_check "vsel v20,v14,v18,v10" +func_check "vslb v25,v25,v12" +func_check "vsldoi v9,v9,v12,7" +func_check "vslh v14,v2,v11" +func_check "vslo v30,v5,v6" +func_check "vsl v22,v30,v9" +func_check "vslw v26,v26,v3" +func_check "vspltb v1,v20,6" +func_check "vsplth v16,v18,3" +func_check "vspltisb v25,-13" +func_check "vspltish v22,10" +func_check "vspltisw v13,13" +func_check "vspltw v9,v18,2" +func_check "vsrab v14,v22,v0" +func_check "vsrah v12,v12,v18" +func_check "vsraw v2,v2,v13" +func_check "vsrb v7,v27,v5" +func_check "vsrh v7,v11,v29" +func_check "vsro v18,v30,v31" +func_check "vsr v2,v9,v28" +func_check "vsrw v0,v25,v0" +func_check "vsubcuw v24,v2,v10" +func_check "vsubfp v22,v24,v20" +func_check "vsubsbs v10,v22,v13" +func_check "vsubshs v24,v17,v28" +func_check "vsubsws v10,v26,v0" +func_check "vsububm v16,v11,v24" +func_check "vsububs v11,v21,v1" +func_check "vsubuhm v6,v12,v24" +func_check "vsubuhs v30,v11,v9" +func_check "vsubuwm v19,v20,v13" +func_check "vsubuws v18,v25,v6" +func_check "vsum2sws v25,v10,v18" +func_check "vsum4sbs v13,v16,v21" +func_check "vsum4shs v23,v8,v4" +func_check "vsum4ubs v28,v13,v30" +func_check "vsumsws v22,v10,v8" +func_check "vupkhpx v24,v14" +func_check "vupkhsb v2,v22" +func_check "vupkhsh v16,v2" +func_check "vupklpx v10,v26" +func_check "vupklsb v15,v28" +func_check "vupklsh v8,v8" +func_check "vxor v25,v0,v3" diff --git a/gdb/testsuite/gdb.arch/powerpc-altivec.s b/gdb/testsuite/gdb.arch/powerpc-altivec.s new file mode 100644 index 0000000..8e10a4e --- /dev/null +++ b/gdb/testsuite/gdb.arch/powerpc-altivec.s @@ -0,0 +1,217 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2016 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + + .text + .globl func +func: + .long 0x7c60066c /* dss 3 */ + .long 0x7e00066c /* dssall */ + .long 0x7c2522ac /* dst r5,r4,1 */ + .long 0x7e083aac /* dstt r8,r7,0 */ + .long 0x7c6532ec /* dstst r5,r6,3 */ + .long 0x7e442aec /* dststt r4,r5,2 */ + .long 0x7fd6c00e /* lvebx v30,r22,r24 */ + .long 0x7ea0c00e /* lvebx v21,0,r24 */ + .long 0x7d50104e /* lvehx v10,r16,r2 */ + .long 0x7e80b84e /* lvehx v20,0,r23 */ + .long 0x7e24908e /* lvewx v17,r4,r18 */ + .long 0x7ee0408e /* lvewx v23,0,r8 */ + .long 0x7cc0c80c /* lvsl v6,0,r25 */ + .long 0x7c40300c /* lvsl v2,0,r6 */ + .long 0x7ed0604c /* lvsr v22,r16,r12 */ + .long 0x7c00e84c /* lvsr v0,0,r29 */ + .long 0x7de56ace /* lvxl v15,r5,r13 */ + .long 0x7e60bace /* lvxl v19,0,r23 */ + .long 0x7ec110ce /* lvx v22,r1,r2 */ + .long 0x7e4088ce /* lvx v18,0,r17 */ + .long 0x7fe042a6 /* mfvrsave r31 */ + .long 0x13000604 /* mfvscr v24 */ + .long 0x7d4043a6 /* mtvrsave r10 */ + .long 0x1000ce44 /* mtvscr v25 */ + .long 0x7e5b510e /* stvebx v18,r27,r10 */ + .long 0x7e00310e /* stvebx v16,0,r6 */ + .long 0x7e2d814e /* stvehx v17,r13,r16 */ + .long 0x7ee0a14e /* stvehx v23,0,r20 */ + .long 0x7d73f98e /* stvewx v11,r19,r31 */ + .long 0x7fe0098e /* stvewx v31,0,r1 */ + .long 0x7f558bce /* stvxl v26,r21,r17 */ + .long 0x7da0b3ce /* stvxl v13,0,r22 */ + .long 0x7d7ff9ce /* stvx v11,r31,r31 */ + .long 0x7fc081ce /* stvx v30,0,r16 */ + .long 0x1307e180 /* vaddcuw v24,v7,v28 */ + .long 0x107e580a /* vaddfp v3,v30,v11 */ + .long 0x111c4b00 /* vaddsbs v8,v28,v9 */ + .long 0x10e52340 /* vaddshs v7,v5,v4 */ + .long 0x12dadb80 /* vaddsws v22,v26,v27 */ + .long 0x120ee000 /* vaddubm v16,v14,v28 */ + .long 0x10c1ca00 /* vaddubs v6,v1,v25 */ + .long 0x10443040 /* vadduhm v2,v4,v6 */ + .long 0x13554240 /* vadduhs v26,v21,v8 */ + .long 0x13bf0880 /* vadduwm v29,v31,v1 */ + .long 0x12ed2280 /* vadduws v23,v13,v4 */ + .long 0x13d04c44 /* vandc v30,v16,v9 */ + .long 0x106ddc04 /* vand v3,v13,v27 */ + .long 0x10868d02 /* vavgsb v4,v6,v17 */ + .long 0x12fc9d42 /* vavgsh v23,v28,v19 */ + .long 0x110ffd82 /* vavgsw v8,v15,v31 */ + .long 0x10c7cc02 /* vavgub v6,v7,v25 */ + .long 0x13365442 /* vavguh v25,v22,v10 */ + .long 0x1077ec82 /* vavguw v3,v23,v29 */ + .long 0x11c613ca /* vctsxs v14,v2,6 */ + .long 0x1134fb8a /* vctuxs v9,v31,20 */ + .long 0x1303f34a /* vcfsx v24,v30,3 */ + .long 0x123dab0a /* vcfux v17,v21,29 */ + .long 0x125c03c6 /* vcmpbfp v18,v28,v0 */ + .long 0x127a1fc6 /* vcmpbfp. v19,v26,v3 */ + .long 0x120258c6 /* vcmpeqfp v16,v2,v11 */ + .long 0x12ed6cc6 /* vcmpeqfp. v23,v13,v13 */ + .long 0x13335006 /* vcmpequb v25,v19,v10 */ + .long 0x124b1406 /* vcmpequb. v18,v11,v2 */ + .long 0x11393846 /* vcmpequh v9,v25,v7 */ + .long 0x11d8ac46 /* vcmpequh. v14,v24,v21 */ + .long 0x130c2886 /* vcmpequw v24,v12,v5 */ + .long 0x12700c86 /* vcmpequw. v19,v16,v1 */ + .long 0x12f181c6 /* vcmpgefp v23,v17,v16 */ + .long 0x127d8dc6 /* vcmpgefp. v19,v29,v17 */ + .long 0x121c6ac6 /* vcmpgtfp v16,v28,v13 */ + .long 0x11d83ec6 /* vcmpgtfp. v14,v24,v7 */ + .long 0x12163306 /* vcmpgtsb v16,v22,v6 */ + .long 0x104c7706 /* vcmpgtsb. v2,v12,v14 */ + .long 0x1383eb46 /* vcmpgtsh v28,v3,v29 */ + .long 0x12136f46 /* vcmpgtsh. v16,v19,v13 */ + .long 0x11e02b86 /* vcmpgtsw v15,v0,v5 */ + .long 0x12ad0786 /* vcmpgtsw. v21,v13,v0 */ + .long 0x10aaf206 /* vcmpgtub v5,v10,v30 */ + .long 0x10ed5606 /* vcmpgtub. v7,v13,v10 */ + .long 0x130f8246 /* vcmpgtuh v24,v15,v16 */ + .long 0x1335de46 /* vcmpgtuh. v25,v21,v27 */ + .long 0x123b3286 /* vcmpgtuw v17,v27,v6 */ + .long 0x1115de86 /* vcmpgtuw. v8,v21,v27 */ + .long 0x102e0b4a /* vcfsx v1,v1,14 */ + .long 0x10997bca /* vctsxs v4,v15,25 */ + .long 0x138ebb8a /* vctuxs v28,v23,14 */ + .long 0x10c0330a /* vcfux v6,v6,0 */ + .long 0x1000418a /* vexptefp v0,v8 */ + .long 0x12c0d9ca /* vlogefp v22,v27 */ + .long 0x12f2916e /* vmaddfp v23,v18,v5,v18 */ + .long 0x11addc0a /* vmaxfp v13,v13,v27 */ + .long 0x11177102 /* vmaxsb v8,v23,v14 */ + .long 0x12710142 /* vmaxsh v19,v17,v0 */ + .long 0x1263b182 /* vmaxsw v19,v3,v22 */ + .long 0x12fee002 /* vmaxub v23,v30,v28 */ + .long 0x1134b842 /* vmaxuh v9,v20,v23 */ + .long 0x12b30882 /* vmaxuw v21,v19,v1 */ + .long 0x12cd2da0 /* vmhaddshs v22,v13,v5,v22 */ + .long 0x13e01ca1 /* vmhraddshs v31,v0,v3,v18 */ + .long 0x1055c44a /* vminfp v2,v21,v24 */ + .long 0x12865302 /* vminsb v20,v6,v10 */ + .long 0x125bd342 /* vminsh v18,v27,v26 */ + .long 0x10640b82 /* vminsw v3,v4,v1 */ + .long 0x10e06a02 /* vminub v7,v0,v13 */ + .long 0x100c3242 /* vminuh v0,v12,v6 */ + .long 0x10c30a82 /* vminuw v6,v3,v1 */ + .long 0x107d1ea2 /* vmladduhm v3,v29,v3,v26 */ + .long 0x12a5f80c /* vmrghb v21,v5,v31 */ + .long 0x12b8004c /* vmrghh v21,v24,v0 */ + .long 0x1200b08c /* vmrghw v16,v0,v22 */ + .long 0x1031810c /* vmrglb v1,v17,v16 */ + .long 0x11c8794c /* vmrglh v14,v8,v15 */ + .long 0x13f5298c /* vmrglw v31,v21,v5 */ + .long 0x13094c84 /* vmr v24,v9 */ + .long 0x13094c84 /* vmr v24,v9 */ + .long 0x10187de5 /* vmsummbm v0,v24,v15,v23 */ + .long 0x10243e68 /* vmsumshm v1,v4,v7,v25 */ + .long 0x11286fe9 /* vmsumshs v9,v8,v13,v31 */ + .long 0x12ff67a4 /* vmsumubm v23,v31,v12,v30 */ + .long 0x13a0d566 /* vmsumuhm v29,v0,v26,v21 */ + .long 0x136ec967 /* vmsumuhs v27,v14,v25,v5 */ + .long 0x11597308 /* vmulesb v10,v25,v14 */ + .long 0x10324348 /* vmulesh v1,v18,v8 */ + .long 0x122e4a08 /* vmuleub v17,v14,v9 */ + .long 0x10ba4a48 /* vmuleuh v5,v26,v9 */ + .long 0x12b23108 /* vmulosb v21,v18,v6 */ + .long 0x10854148 /* vmulosh v4,v5,v8 */ + .long 0x10499808 /* vmuloub v2,v9,v19 */ + .long 0x13a52048 /* vmulouh v29,v5,v4 */ + .long 0x110229af /* vnmsubfp v8,v2,v6,v5 */ + .long 0x13e95504 /* vnor v31,v9,v10 */ + .long 0x133ffd04 /* vnot v25,v31 */ + .long 0x133ffd04 /* vnot v25,v31 */ + .long 0x12e71484 /* vor v23,v7,v2 */ + .long 0x101cb66b /* vperm v0,v28,v22,v25 */ + .long 0x12198b0e /* vpkpx v16,v25,v17 */ + .long 0x1190898e /* vpkshss v12,v16,v17 */ + .long 0x1033b90e /* vpkshus v1,v19,v23 */ + .long 0x132769ce /* vpkswss v25,v7,v13 */ + .long 0x1098514e /* vpkswus v4,v24,v10 */ + .long 0x113b600e /* vpkuhum v9,v27,v12 */ + .long 0x12cac88e /* vpkuhus v22,v10,v25 */ + .long 0x13d2004e /* vpkuwum v30,v18,v0 */ + .long 0x10e3b0ce /* vpkuwus v7,v3,v22 */ + .long 0x1300e10a /* vrefp v24,v28 */ + .long 0x12209aca /* vrfim v17,v19 */ + .long 0x1300ca0a /* vrfin v24,v25 */ + .long 0x10602a8a /* vrfip v3,v5 */ + .long 0x1100524a /* vrfiz v8,v10 */ + .long 0x1352f004 /* vrlb v26,v18,v30 */ + .long 0x1211c844 /* vrlh v16,v17,v25 */ + .long 0x12fe4884 /* vrlw v23,v30,v9 */ + .long 0x1040914a /* vrsqrtefp v2,v18 */ + .long 0x128e92aa /* vsel v20,v14,v18,v10 */ + .long 0x13396104 /* vslb v25,v25,v12 */ + .long 0x112961ec /* vsldoi v9,v9,v12,7 */ + .long 0x11c25944 /* vslh v14,v2,v11 */ + .long 0x13c5340c /* vslo v30,v5,v6 */ + .long 0x12de49c4 /* vsl v22,v30,v9 */ + .long 0x135a1984 /* vslw v26,v26,v3 */ + .long 0x1026a20c /* vspltb v1,v20,6 */ + .long 0x1203924c /* vsplth v16,v18,3 */ + .long 0x1333030c /* vspltisb v25,-13 */ + .long 0x12ca034c /* vspltish v22,10 */ + .long 0x11ad038c /* vspltisw v13,13 */ + .long 0x1122928c /* vspltw v9,v18,2 */ + .long 0x11d60304 /* vsrab v14,v22,v0 */ + .long 0x118c9344 /* vsrah v12,v12,v18 */ + .long 0x10426b84 /* vsraw v2,v2,v13 */ + .long 0x10fb2a04 /* vsrb v7,v27,v5 */ + .long 0x10ebea44 /* vsrh v7,v11,v29 */ + .long 0x125efc4c /* vsro v18,v30,v31 */ + .long 0x1049e2c4 /* vsr v2,v9,v28 */ + .long 0x10190284 /* vsrw v0,v25,v0 */ + .long 0x13025580 /* vsubcuw v24,v2,v10 */ + .long 0x12d8a04a /* vsubfp v22,v24,v20 */ + .long 0x11566f00 /* vsubsbs v10,v22,v13 */ + .long 0x1311e740 /* vsubshs v24,v17,v28 */ + .long 0x115a0780 /* vsubsws v10,v26,v0 */ + .long 0x120bc400 /* vsububm v16,v11,v24 */ + .long 0x11750e00 /* vsububs v11,v21,v1 */ + .long 0x10ccc440 /* vsubuhm v6,v12,v24 */ + .long 0x13cb4e40 /* vsubuhs v30,v11,v9 */ + .long 0x12746c80 /* vsubuwm v19,v20,v13 */ + .long 0x12593680 /* vsubuws v18,v25,v6 */ + .long 0x132a9688 /* vsum2sws v25,v10,v18 */ + .long 0x11b0af08 /* vsum4sbs v13,v16,v21 */ + .long 0x12e82648 /* vsum4shs v23,v8,v4 */ + .long 0x138df608 /* vsum4ubs v28,v13,v30 */ + .long 0x12ca4788 /* vsumsws v22,v10,v8 */ + .long 0x1300734e /* vupkhpx v24,v14 */ + .long 0x1040b20e /* vupkhsb v2,v22 */ + .long 0x1200124e /* vupkhsh v16,v2 */ + .long 0x1140d3ce /* vupklpx v10,v26 */ + .long 0x11e0e28e /* vupklsb v15,v28 */ + .long 0x110042ce /* vupklsh v8,v8 */ + .long 0x13201cc4 /* vxor v25,v0,v3 */ diff --git a/gdb/testsuite/gdb.arch/powerpc-altivec2.exp b/gdb/testsuite/gdb.arch/powerpc-altivec2.exp new file mode 100644 index 0000000..5c046be --- /dev/null +++ b/gdb/testsuite/gdb.arch/powerpc-altivec2.exp @@ -0,0 +1,175 @@ +# Copyright 2016 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +# Test PowerPC instructions disassembly. + +standard_testfile .s +set objfile [standard_output_file ${testfile}.o] + +if {![istarget "powerpc*-*-*"]} then { + verbose "Skipping PowerPC instructions disassembly." + return +} + +if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${objfile}" object {debug}] != "" } { + untested "PowerPC instructions disassembly" + return -1 +} + +clean_restart ${objfile} + +# Disassemble the function. + +gdb_test "set disassembler-options altivec" +set test "disass func" +gdb_test_multiple $test $test { + -re "\r\nDump of assembler code for function func:(\r\n.*\r\n)End of assembler dump.\r\n$gdb_prompt $" { + set func $expect_out(1,string) + pass $test + } +} + +proc instr_to_patt {instr} { + # 0x0000000000000018 <+24>: stxvd2x vs43,r4,r5 + return ".*\r\n\[ \t\]*0x\[0-9a-f\]+ <\\+\[0-9a-f\]*>:\[ \t\]*[string map [list { } "\[ \t\]+" . {\.}] $instr]\[ \t\]*\r\n.*" +} + +proc func_check {instr} { + global func + + set test "Found: $instr" + if [regexp -nocase -line [instr_to_patt $instr] $func] { + pass $test + } else { + fail $test + } +} + +func_check "lvepxl v3,0,r28" +func_check "lvepxl v19,r4,r18" +func_check "lvepx v27,0,r19" +func_check "lvepx v1,r25,r18" +func_check "lvexbx v31,0,r27" +func_check "lvexbx v28,r1,r12" +func_check "lvexhx v31,0,r14" +func_check "lvexhx v17,r16,r31" +func_check "lvexwx v22,0,r29" +func_check "lvexwx v23,r25,r5" +func_check "lvsm v3,0,r12" +func_check "lvsm v27,r29,r1" +func_check "lvswxl v7,0,r6" +func_check "lvswxl v7,r16,r8" +func_check "lvswx v14,0,r18" +func_check "lvswx v28,r28,r16" +func_check "lvtlxl v27,0,r12" +func_check "lvtlxl v27,r28,r0" +func_check "lvtlx v23,0,r25" +func_check "lvtlx v1,r25,r14" +func_check "lvtrxl v20,0,r24" +func_check "lvtrxl v22,r29,r24" +func_check "lvtrx v24,0,r8" +func_check "lvtrx v13,r23,r28" +func_check "mvidsplt v12,r28,r12" +func_check "mviwsplt v10,r27,r0" +func_check "stvepxl v27,0,r13" +func_check "stvepxl v2,r2,r31" +func_check "stvepx v3,0,r10" +func_check "stvepx v27,r28,r0" +func_check "stvexbx v13,0,r6" +func_check "stvexbx v13,r25,r3" +func_check "stvexhx v22,0,r1" +func_check "stvexhx v17,r14,r10" +func_check "stvexwx v21,0,r27" +func_check "stvexwx v31,r18,r1" +func_check "stvflxl v26,0,r13" +func_check "stvflxl v22,r13,r21" +func_check "stvflx v5,0,r9" +func_check "stvflx v21,r24,r1" +func_check "stvfrxl v13,0,r10" +func_check "stvfrxl v13,r17,r25" +func_check "stvfrx v17,0,r10" +func_check "stvfrx v8,r12,r31" +func_check "stvswxl v18,0,r29" +func_check "stvswxl v26,r14,r8" +func_check "stvswx v0,0,r15" +func_check "stvswx v13,r23,r7" +func_check "vabsdub v6,v17,v16" +func_check "vabsduh v21,v18,v4" +func_check "vabsduw v25,v20,v9" +func_check "vpermxor v6,v17,v20,v26" +func_check "vaddeuqm v29,v26,v15,v28" +func_check "vaddecuq v15,v8,v7,v24" +func_check "vsubeuqm v2,v6,v21,v1" +func_check "vsubecuq v29,v6,v0,v4" +func_check "vmulouw v14,v9,v3" +func_check "vmuluwm v24,v16,v18" +func_check "vaddudm v10,v17,v17" +func_check "vmaxud v30,v25,v4" +func_check "vrld v10,v6,v28" +func_check "vcmpequd v27,v7,v7" +func_check "vadduqm v22,v16,v25" +func_check "vaddcuq v1,v21,v29" +func_check "vmulosw v20,v11,v19" +func_check "vmaxsd v24,v19,v1" +func_check "vmuleuw v13,v27,v30" +func_check "vminud v9,v24,v17" +func_check "vcmpgtud v10,v18,v28" +func_check "vmulesw v0,v29,v22" +func_check "vminsd v13,v28,v1" +func_check "vsrad v10,v20,v5" +func_check "vcmpgtsd v27,v21,v5" +func_check "bcdadd\. v0,v23,v30,1" +func_check "vpmsumb v25,v24,v26" +func_check "bcdsub\. v8,v4,v4,1" +func_check "vpmsumh v16,v14,v26" +func_check "vpkudum v27,v2,v26" +func_check "vpmsumw v6,v23,v17" +func_check "vpmsumd v20,v6,v25" +func_check "vpkudus v27,v22,v16" +func_check "vsubudm v21,v20,v18" +func_check "vsubuqm v21,v20,v18" +func_check "vcipher v29,v29,v6" +func_check "vcipherlast v2,v13,v20" +func_check "vgbbd v20,v18" +func_check "vsubcuq v19,v8,v25" +func_check "vorc v9,v26,v29" +func_check "vncipher v20,v20,v13" +func_check "vncipherlast v15,v5,v27" +func_check "vbpermq v3,v19,v6" +func_check "vpksdus v30,v4,v28" +func_check "vnand v0,v4,v14" +func_check "vsld v17,v8,v29" +func_check "vsbox v29,v20" +func_check "vpksdss v11,v7,v11" +func_check "vcmpequd\. v3,v19,v16" +func_check "vupkhsw v18,v17" +func_check "vshasigmaw v29,v8,0,13" +func_check "veqv v23,v28,v26" +func_check "vmrgew v29,v0,v2" +func_check "vmrgow v29,v0,v2" +func_check "vshasigmad v27,v19,0,0" +func_check "vsrd v20,v28,v28" +func_check "vupklsw v18,v21" +func_check "vclzb v30,v7" +func_check "vpopcntb v29,v21" +func_check "vclzh v25,v21" +func_check "vpopcnth v16,v30" +func_check "vclzw v28,v3" +func_check "vpopcntw v10,v9" +func_check "vclzd v22,v9" +func_check "vpopcntd v15,v30" +func_check "vcmpgtud\. v2,v31,v6" +func_check "vcmpgtsd\. v20,v15,v2" diff --git a/gdb/testsuite/gdb.arch/powerpc-altivec2.s b/gdb/testsuite/gdb.arch/powerpc-altivec2.s new file mode 100644 index 0000000..67e068c --- /dev/null +++ b/gdb/testsuite/gdb.arch/powerpc-altivec2.s @@ -0,0 +1,135 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2016 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + + .text + .globl func +func: + .long 0x7c60e20e /* lvepxl v3,0,r28 */ + .long 0x7e64920e /* lvepxl v19,r4,r18 */ + .long 0x7f609a4e /* lvepx v27,0,r19 */ + .long 0x7c39924e /* lvepx v1,r25,r18 */ + .long 0x7fe0da0a /* lvexbx v31,0,r27 */ + .long 0x7f81620a /* lvexbx v28,r1,r12 */ + .long 0x7fe0724a /* lvexhx v31,0,r14 */ + .long 0x7e30fa4a /* lvexhx v17,r16,r31 */ + .long 0x7ec0ea8a /* lvexwx v22,0,r29 */ + .long 0x7ef92a8a /* lvexwx v23,r25,r5 */ + .long 0x7c60660a /* lvsm v3,0,r12 */ + .long 0x7f7d0e0a /* lvsm v27,r29,r1 */ + .long 0x7ce036ca /* lvswxl v7,0,r6 */ + .long 0x7cf046ca /* lvswxl v7,r16,r8 */ + .long 0x7dc094ca /* lvswx v14,0,r18 */ + .long 0x7f9c84ca /* lvswx v28,r28,r16 */ + .long 0x7f60668a /* lvtlxl v27,0,r12 */ + .long 0x7f7c068a /* lvtlxl v27,r28,r0 */ + .long 0x7ee0cc8a /* lvtlx v23,0,r25 */ + .long 0x7c39748a /* lvtlx v1,r25,r14 */ + .long 0x7e80c64a /* lvtrxl v20,0,r24 */ + .long 0x7eddc64a /* lvtrxl v22,r29,r24 */ + .long 0x7f00444a /* lvtrx v24,0,r8 */ + .long 0x7db7e44a /* lvtrx v13,r23,r28 */ + .long 0x7d9c60dc /* mvidsplt v12,r28,r12 */ + .long 0x7d5b005c /* mviwsplt v10,r27,r0 */ + .long 0x7f606e0e /* stvepxl v27,0,r13 */ + .long 0x7c42fe0e /* stvepxl v2,r2,r31 */ + .long 0x7c60564e /* stvepx v3,0,r10 */ + .long 0x7f7c064e /* stvepx v27,r28,r0 */ + .long 0x7da0330a /* stvexbx v13,0,r6 */ + .long 0x7db91b0a /* stvexbx v13,r25,r3 */ + .long 0x7ec00b4a /* stvexhx v22,0,r1 */ + .long 0x7e2e534a /* stvexhx v17,r14,r10 */ + .long 0x7ea0db8a /* stvexwx v21,0,r27 */ + .long 0x7ff20b8a /* stvexwx v31,r18,r1 */ + .long 0x7f406f8a /* stvflxl v26,0,r13 */ + .long 0x7ecdaf8a /* stvflxl v22,r13,r21 */ + .long 0x7ca04d8a /* stvflx v5,0,r9 */ + .long 0x7eb80d8a /* stvflx v21,r24,r1 */ + .long 0x7da0574a /* stvfrxl v13,0,r10 */ + .long 0x7db1cf4a /* stvfrxl v13,r17,r25 */ + .long 0x7e20554a /* stvfrx v17,0,r10 */ + .long 0x7d0cfd4a /* stvfrx v8,r12,r31 */ + .long 0x7e40efca /* stvswxl v18,0,r29 */ + .long 0x7f4e47ca /* stvswxl v26,r14,r8 */ + .long 0x7c007dca /* stvswx v0,0,r15 */ + .long 0x7db73dca /* stvswx v13,r23,r7 */ + .long 0x10d18403 /* vabsdub v6,v17,v16 */ + .long 0x12b22443 /* vabsduh v21,v18,v4 */ + .long 0x13344c83 /* vabsduw v25,v20,v9 */ + .long 0x10d1a6ad /* vpermxor v6,v17,v20,v26 */ + .long 0x13ba7f3c /* vaddeuqm v29,v26,v15,v28 */ + .long 0x11e83e3d /* vaddecuq v15,v8,v7,v24 */ + .long 0x1046a87e /* vsubeuqm v2,v6,v21,v1 */ + .long 0x13a6013f /* vsubecuq v29,v6,v0,v4 */ + .long 0x11c91888 /* vmulouw v14,v9,v3 */ + .long 0x13109089 /* vmuluwm v24,v16,v18 */ + .long 0x115188c0 /* vaddudm v10,v17,v17 */ + .long 0x13d920c2 /* vmaxud v30,v25,v4 */ + .long 0x1146e0c4 /* vrld v10,v6,v28 */ + .long 0x136738c7 /* vcmpequd v27,v7,v7 */ + .long 0x12d0c900 /* vadduqm v22,v16,v25 */ + .long 0x1035e940 /* vaddcuq v1,v21,v29 */ + .long 0x128b9988 /* vmulosw v20,v11,v19 */ + .long 0x131309c2 /* vmaxsd v24,v19,v1 */ + .long 0x11bbf288 /* vmuleuw v13,v27,v30 */ + .long 0x11388ac2 /* vminud v9,v24,v17 */ + .long 0x1152e2c7 /* vcmpgtud v10,v18,v28 */ + .long 0x101db388 /* vmulesw v0,v29,v22 */ + .long 0x11bc0bc2 /* vminsd v13,v28,v1 */ + .long 0x11542bc4 /* vsrad v10,v20,v5 */ + .long 0x13752bc7 /* vcmpgtsd v27,v21,v5 */ + .long 0x1017f601 /* bcdadd. v0,v23,v30,1 */ + .long 0x1338d408 /* vpmsumb v25,v24,v26 */ + .long 0x11042641 /* bcdsub. v8,v4,v4,1 */ + .long 0x120ed448 /* vpmsumh v16,v14,v26 */ + .long 0x1362d44e /* vpkudum v27,v2,v26 */ + .long 0x10d78c88 /* vpmsumw v6,v23,v17 */ + .long 0x1286ccc8 /* vpmsumd v20,v6,v25 */ + .long 0x137684ce /* vpkudus v27,v22,v16 */ + .long 0x12b494c0 /* vsubudm v21,v20,v18 */ + .long 0x12b49500 /* vsubuqm v21,v20,v18 */ + .long 0x13bd3508 /* vcipher v29,v29,v6 */ + .long 0x104da509 /* vcipherlast v2,v13,v20 */ + .long 0x1280950c /* vgbbd v20,v18 */ + .long 0x1268cd40 /* vsubcuq v19,v8,v25 */ + .long 0x113aed44 /* vorc v9,v26,v29 */ + .long 0x12946d48 /* vncipher v20,v20,v13 */ + .long 0x11e5dd49 /* vncipherlast v15,v5,v27 */ + .long 0x1073354c /* vbpermq v3,v19,v6 */ + .long 0x13c4e54e /* vpksdus v30,v4,v28 */ + .long 0x10047584 /* vnand v0,v4,v14 */ + .long 0x1228edc4 /* vsld v17,v8,v29 */ + .long 0x13b405c8 /* vsbox v29,v20 */ + .long 0x11675dce /* vpksdss v11,v7,v11 */ + .long 0x107384c7 /* vcmpequd. v3,v19,v16 */ + .long 0x12408e4e /* vupkhsw v18,v17 */ + .long 0x13a86e82 /* vshasigmaw v29,v8,0,13 */ + .long 0x12fcd684 /* veqv v23,v28,v26 */ + .long 0x13a0178c /* vmrgew v29,v0,v2 */ + .long 0x13a0168c /* vmrgow v29,v0,v2 */ + .long 0x137306c2 /* vshasigmad v27,v19,0,0 */ + .long 0x129ce6c4 /* vsrd v20,v28,v28 */ + .long 0x1240aece /* vupklsw v18,v21 */ + .long 0x13c03f02 /* vclzb v30,v7 */ + .long 0x13a0af03 /* vpopcntb v29,v21 */ + .long 0x1320af42 /* vclzh v25,v21 */ + .long 0x1200f743 /* vpopcnth v16,v30 */ + .long 0x13801f82 /* vclzw v28,v3 */ + .long 0x11404f83 /* vpopcntw v10,v9 */ + .long 0x12c04fc2 /* vclzd v22,v9 */ + .long 0x11e0f7c3 /* vpopcntd v15,v30 */ + .long 0x105f36c7 /* vcmpgtud. v2,v31,v6 */ + .long 0x128f17c7 /* vcmpgtsd. v20,v15,v2 */ diff --git a/gdb/testsuite/gdb.arch/powerpc-altivec3.exp b/gdb/testsuite/gdb.arch/powerpc-altivec3.exp new file mode 100644 index 0000000..d3e90e5 --- /dev/null +++ b/gdb/testsuite/gdb.arch/powerpc-altivec3.exp @@ -0,0 +1,128 @@ +# Copyright 2016 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +# Test PowerPC instructions disassembly. + +standard_testfile .s +set objfile [standard_output_file ${testfile}.o] + +if {![istarget "powerpc*-*-*"]} then { + verbose "Skipping PowerPC instructions disassembly." + return +} + +if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${objfile}" object {debug}] != "" } { + untested "PowerPC instructions disassembly" + return -1 +} + +clean_restart ${objfile} + +# Disassemble the function. + +gdb_test "set disassembler-options altivec" +set test "disass func" +gdb_test_multiple $test $test { + -re "\r\nDump of assembler code for function func:(\r\n.*\r\n)End of assembler dump.\r\n$gdb_prompt $" { + set func $expect_out(1,string) + pass $test + } +} + +proc instr_to_patt {instr} { + # 0x0000000000000018 <+24>: stxvd2x vs43,r4,r5 + return ".*\r\n\[ \t\]*0x\[0-9a-f\]+ <\\+\[0-9a-f\]*>:\[ \t\]*[string map [list { } "\[ \t\]+" . {\.}] $instr]\[ \t\]*\r\n.*" +} + +proc func_check {instr} { + global func + + set test "Found: $instr" + if [regexp -nocase -line [instr_to_patt $instr] $func] { + pass $test + } else { + fail $test + } +} + +func_check "vmul10cuq v11,v30" +func_check "vcmpneb v30,v1,v23" +func_check "vpermr v30,v19,v30,v29" +func_check "vmul10ecuq v20,v20,v17" +func_check "vcmpneh v27,v19,v31" +func_check "vrlwmi v6,v9,v23" +func_check "vcmpnew v22,v26,v1" +func_check "vrldmi v24,v30,v25" +func_check "vcmpnezb v19,v29,v22" +func_check "vcmpnezh v8,v23,v19" +func_check "vrlwnm v27,v24,v11" +func_check "vcmpnezw v21,v13,v10" +func_check "vrldnm v5,v20,v29" +func_check "vmul10uq v30,v19" +func_check "vextractub v24,v21,12" +func_check "vmul10euq v0,v19,v28" +func_check "vextractuh v10,v3,12" +func_check "vextractuw v28,v12,7" +func_check "vextractd v30,v27,1" +func_check "vinsertb v25,v31,4" +func_check "bcdcpsgn\. v21,v14,v30" +func_check "vinserth v22,v18,5" +func_check "vinsertw v29,v22,1" +func_check "vinsertd v29,v13,7" +func_check "vcmpneb\. v22,v25,v8" +func_check "vcmpneh\. v16,v15,v21" +func_check "bcdus\. v22,v21,v31" +func_check "vcmpnew\. v1,v12,v12" +func_check "bcds\. v5,v3,v8,1" +func_check "bcdtrunc\. v27,v22,v1,0" +func_check "vcmpnezb\. v2,v26,v0" +func_check "bcdutrunc\. v26,v14,v7" +func_check "vcmpnezh\. v16,v5,v12" +func_check "bcdctsq\. v24,v5" +func_check "bcdcfsq\. v7,v0,0" +func_check "bcdctz\. v30,v12,1" +func_check "bcdctn\. v17,v23" +func_check "bcdcfz\. v4,v15,1" +func_check "bcdcfn\. v29,v5,1" +func_check "bcdsetsgn\. v27,v12,0" +func_check "vcmpnezw\. v14,v28,v25" +func_check "bcdsr\. v2,v2,v6,1" +func_check "vbpermd v25,v0,v5" +func_check "vclzlsbb r28,v25" +func_check "vctzlsbb r2,v24" +func_check "vnegw v21,v11" +func_check "vnegd v17,v27" +func_check "vprtybw v31,v23" +func_check "vprtybd v21,v23" +func_check "vprtybq v21,v18" +func_check "vextsb2w v30,v4" +func_check "vextsh2w v3,v26" +func_check "vextsb2d v11,v17" +func_check "vextsh2d v5,v10" +func_check "vextsw2d v13,v25" +func_check "vctzb v25,v2" +func_check "vctzh v0,v3" +func_check "vctzw v22,v6" +func_check "vctzd v26,v24" +func_check "vextublx r6,r31,v2" +func_check "vextuhlx r13,r0,v18" +func_check "vextuwlx r14,r30,v31" +func_check "vsrv v15,v12,v14" +func_check "vextubrx r20,r10,v30" +func_check "vslv v21,v21,v2" +func_check "vextuhrx r15,r9,v1" +func_check "vextuwrx r21,r17,v16" +func_check "vmsumudm v20,v21,v22,v23" diff --git a/gdb/testsuite/gdb.arch/powerpc-altivec3.s b/gdb/testsuite/gdb.arch/powerpc-altivec3.s new file mode 100644 index 0000000..bdc9ddc --- /dev/null +++ b/gdb/testsuite/gdb.arch/powerpc-altivec3.s @@ -0,0 +1,88 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2016 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + + .text + .globl func +func: + .long 0x117e0001 /* vmul10cuq v11,v30 */ + .long 0x13c1b807 /* vcmpneb v30,v1,v23 */ + .long 0x13d3f77b /* vpermr v30,v19,v30,v29 */ + .long 0x12948841 /* vmul10ecuq v20,v20,v17 */ + .long 0x1373f847 /* vcmpneh v27,v19,v31 */ + .long 0x10c9b885 /* vrlwmi v6,v9,v23 */ + .long 0x12da0887 /* vcmpnew v22,v26,v1 */ + .long 0x131ec8c5 /* vrldmi v24,v30,v25 */ + .long 0x127db107 /* vcmpnezb v19,v29,v22 */ + .long 0x11179947 /* vcmpnezh v8,v23,v19 */ + .long 0x13785985 /* vrlwnm v27,v24,v11 */ + .long 0x12ad5187 /* vcmpnezw v21,v13,v10 */ + .long 0x10b4e9c5 /* vrldnm v5,v20,v29 */ + .long 0x13d30201 /* vmul10uq v30,v19 */ + .long 0x130caa0d /* vextractub v24,v21,12 */ + .long 0x1013e241 /* vmul10euq v0,v19,v28 */ + .long 0x114c1a4d /* vextractuh v10,v3,12 */ + .long 0x1387628d /* vextractuw v28,v12,7 */ + .long 0x13c1dacd /* vextractd v30,v27,1 */ + .long 0x1324fb0d /* vinsertb v25,v31,4 */ + .long 0x12aef341 /* bcdcpsgn. v21,v14,v30 */ + .long 0x12c5934d /* vinserth v22,v18,5 */ + .long 0x13a1b38d /* vinsertw v29,v22,1 */ + .long 0x13a76bcd /* vinsertd v29,v13,7 */ + .long 0x12d94407 /* vcmpneb. v22,v25,v8 */ + .long 0x120fac47 /* vcmpneh. v16,v15,v21 */ + .long 0x12d5fc81 /* bcdus. v22,v21,v31 */ + .long 0x102c6487 /* vcmpnew. v1,v12,v12 */ + .long 0x10a346c1 /* bcds. v5,v3,v8,1 */ + .long 0x13760d01 /* bcdtrunc. v27,v22,v1,0 */ + .long 0x105a0507 /* vcmpnezb. v2,v26,v0 */ + .long 0x134e3d41 /* bcdutrunc. v26,v14,v7 */ + .long 0x12056547 /* vcmpnezh. v16,v5,v12 */ + .long 0x13002d81 /* bcdctsq. v24,v5 */ + .long 0x10e20581 /* bcdcfsq. v7,v0,0 */ + .long 0x13c46781 /* bcdctz. v30,v12,1 */ + .long 0x1225bd81 /* bcdctn. v17,v23 */ + .long 0x10867f81 /* bcdcfz. v4,v15,1 */ + .long 0x13a72f81 /* bcdcfn. v29,v5,1 */ + .long 0x137f6581 /* bcdsetsgn. v27,v12,0 */ + .long 0x11dccd87 /* vcmpnezw. v14,v28,v25 */ + .long 0x104237c1 /* bcdsr. v2,v2,v6,1 */ + .long 0x13202dcc /* vbpermd v25,v0,v5 */ + .long 0x1380ce02 /* vclzlsbb r28,v25 */ + .long 0x1041c602 /* vctzlsbb r2,v24 */ + .long 0x12a65e02 /* vnegw v21,v11 */ + .long 0x1227de02 /* vnegd v17,v27 */ + .long 0x13e8be02 /* vprtybw v31,v23 */ + .long 0x12a9be02 /* vprtybd v21,v23 */ + .long 0x12aa9602 /* vprtybq v21,v18 */ + .long 0x13d02602 /* vextsb2w v30,v4 */ + .long 0x1071d602 /* vextsh2w v3,v26 */ + .long 0x11788e02 /* vextsb2d v11,v17 */ + .long 0x10b95602 /* vextsh2d v5,v10 */ + .long 0x11bace02 /* vextsw2d v13,v25 */ + .long 0x133c1602 /* vctzb v25,v2 */ + .long 0x101d1e02 /* vctzh v0,v3 */ + .long 0x12de3602 /* vctzw v22,v6 */ + .long 0x135fc602 /* vctzd v26,v24 */ + .long 0x10df160d /* vextublx r6,r31,v2 */ + .long 0x11a0964d /* vextuhlx r13,r0,v18 */ + .long 0x11defe8d /* vextuwlx r14,r30,v31 */ + .long 0x11ec7704 /* vsrv v15,v12,v14 */ + .long 0x128af70d /* vextubrx r20,r10,v30 */ + .long 0x12b51744 /* vslv v21,v21,v2 */ + .long 0x11e90f4d /* vextuhrx r15,r9,v1 */ + .long 0x12b1878d /* vextuwrx r21,r17,v16 */ + .long 0x1295b5e3 /* vmsumudm v20,v21,v22,v23 */ diff --git a/gdb/testsuite/gdb.arch/powerpc-power.exp b/gdb/testsuite/gdb.arch/powerpc-power.exp deleted file mode 100644 index c1c56c5..0000000 --- a/gdb/testsuite/gdb.arch/powerpc-power.exp +++ /dev/null @@ -1,1429 +0,0 @@ -# Copyright 2014-2017 Free Software Foundation, Inc. - -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -# Test PowerPC instructions disassembly. - -standard_testfile .s -set objfile [standard_output_file ${testfile}.o] - -if {![istarget "powerpc*-*-*"]} then { - verbose "Skipping PowerPC instructions disassembly." - return -} - -if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${objfile}" object {debug}] != "" } { - untested "PowerPC instructions disassembly" - return -1 -} - -clean_restart ${objfile} - -# Disassemble the function. - -set test "disass func" -gdb_test_multiple $test $test { - -re "\r\nDump of assembler code for function func:(\r\n.*\r\n)End of assembler dump.\r\n$gdb_prompt $" { - set func $expect_out(1,string) - pass $test - } -} - -proc instr_to_patt {offset instr} { - # 0x0000000000000018 <+24>: stxvd2x vs43,r4,r5 - return ".*\r\n\[ \t\]*0x\[0-9a-f\]+ <\\$offset>:\[ \t\]*[string map [list { } "\[ \t\]+" . {\.}] $instr]\[ \t\]*\r\n.*" -} - -proc func_check {offset instr} { - global func - - set test "found $offset: $instr" - if [regexp -nocase -line [instr_to_patt $offset $instr] $func] { - pass $test - } else { - fail $test - } -} - - -## power7.d -func_check +0 "lxvd2x vs3,r4,r5" -func_check +4 "lxvd2x vs43,r4,r5" -func_check +8 "stxvd2x vs3,r4,r5" -func_check +12 "stxvd2x vs43,r4,r5" -func_check +16 "xxmrghd vs3,vs4,vs5" -func_check +20 "xxmrghd vs43,vs44,vs45" -func_check +24 "xxmrgld vs3,vs4,vs5" -func_check +28 "xxmrgld vs43,vs44,vs45" -func_check +32 "xxmrghd vs3,vs4,vs5" -func_check +36 "xxmrghd vs43,vs44,vs45" -func_check +40 "xxmrgld vs3,vs4,vs5" -func_check +44 "xxmrgld vs43,vs44,vs45" -func_check +48 "xxpermdi vs3,vs4,vs5,1" -func_check +52 "xxpermdi vs43,vs44,vs45,1" -func_check +56 "xxpermdi vs3,vs4,vs5,2" -func_check +60 "xxpermdi vs43,vs44,vs45,2" -func_check +64 "xvmovdp vs3,vs4" -func_check +68 "xvmovdp vs43,vs44" -func_check +72 "xvmovdp vs3,vs4" -func_check +76 "xvmovdp vs43,vs44" -func_check +80 "xvcpsgndp vs3,vs4,vs5" -func_check +84 "xvcpsgndp vs43,vs44,vs45" -func_check +88 "doze" -func_check +92 "nap" -func_check +96 "sleep" -func_check +100 "rvwinkle" -func_check +104 "prtyw r3,r4" -func_check +108 "prtyd r13,r14" -func_check +112 "mfcfar r10" -func_check +116 "mtcfar r11" -func_check +120 "cmpb r3,r4,r5" -func_check +124 "lwzcix r10,r11,r12" -func_check +128 "dadd f16,f17,f18" -func_check +132 "daddq f20,f22,f24" -func_check +136 "dss 3" -func_check +140 "dssall" -func_check +144 "dst r5,r4,1" -func_check +148 "dstt r8,r7,0" -func_check +152 "dstst r5,r6,3" -func_check +156 "dststt r4,r5,2" -func_check +160 "divwe r10,r11,r12" -func_check +164 "divwe\. r11,r12,r13" -func_check +168 "divweo r12,r13,r14" -func_check +172 "divweo\. r13,r14,r15" -func_check +176 "divweu r10,r11,r12" -func_check +180 "divweu\. r11,r12,r13" -func_check +184 "divweuo r12,r13,r14" -func_check +188 "divweuo\. r13,r14,r15" -func_check +192 "bpermd r7,r17,r27" -func_check +196 "popcntw r10,r20" -func_check +200 "popcntd r10,r20" -func_check +204 "ldbrx r20,r21,r22" -func_check +208 "stdbrx r20,r21,r22" -func_check +212 "lfiwzx f10,0,r10" -func_check +216 "lfiwzx f10,r9,r10" -func_check +220 "fcfids f4,f5" -func_check +224 "fcfids\. f4,f5" -func_check +228 "fcfidus f4,f5" -func_check +232 "fcfidus\. f4,f5" -func_check +236 "fctiwu f4,f5" -func_check +240 "fctiwu\. f4,f5" -func_check +244 "fctiwuz f4,f5" -func_check +248 "fctiwuz\. f4,f5" -func_check +252 "fctidu f4,f5" -func_check +256 "fctidu\. f4,f5" -func_check +260 "fctiduz f4,f5" -func_check +264 "fctiduz\. f4,f5" -func_check +268 "fcfidu f4,f5" -func_check +272 "fcfidu\. f4,f5" -func_check +276 "ftdiv cr0,f10,f11" -func_check +280 "ftdiv cr7,f10,f11" -func_check +284 "ftsqrt cr0,f10" -func_check +288 "ftsqrt cr7,f10" -func_check +292 "dcbtt r8,r9" -func_check +296 "dcbtstt r8,r9" -func_check +300 "dcffix f10,f12" -func_check +304 "dcffix\. f20,f22" -func_check +308 "fre f14,f15" -func_check +312 "fre\. f14,f15" -func_check +316 "fres f14,f15" -func_check +320 "fres\. f14,f15" -func_check +324 "frsqrte f14,f15" -func_check +328 "frsqrte\. f14,f15" -func_check +332 "frsqrtes f14,f15" -func_check +336 "frsqrtes\. f14,f15" -func_check +340 "isel r2,r3,r4,28" -func_check +344 "yield" -func_check +348 "yield" -func_check +352 "ori r2,r2,0" -func_check +356 "nop" -func_check +360 "nop" -func_check +364 "ori r2,r2,0" -func_check +368 "mdoio" -func_check +372 "mdoio" -func_check +376 "mdoom" -func_check +380 "mdoom" -func_check +384 "mfppr r10" -func_check +388 "mfppr32 r11" -func_check +392 "mtppr r12" -func_check +396 "mtppr32 r13" -func_check +400 "tlbie r10,r11" - -## altivec.d -func_check +404 "dss 3" -func_check +408 "dssall" -func_check +412 "dst r5,r4,1" -func_check +416 "dstt r8,r7,0" -func_check +420 "dstst r5,r6,3" -func_check +424 "dststt r4,r5,2" -func_check +428 "lvebx v30,r22,r24" -func_check +432 "lvebx v21,0,r24" -func_check +436 "lvehx v10,r16,r2" -func_check +440 "lvehx v20,0,r23" -func_check +444 "lvewx v17,r4,r18" -func_check +448 "lvewx v23,0,r8" -func_check +452 "lvsl v6,0,r25" -func_check +456 "lvsl v2,0,r6" -func_check +460 "lvsr v22,r16,r12" -func_check +464 "lvsr v0,0,r29" -func_check +468 "lvxl v15,r5,r13" -func_check +472 "lvxl v19,0,r23" -func_check +476 "lvx v22,r1,r2" -func_check +480 "lvx v18,0,r17" -func_check +484 "mfvrsave r31" -func_check +488 "mfvscr v24" -func_check +492 "mtvrsave r10" -func_check +496 "mtvscr v25" -func_check +500 "stvebx v18,r27,r10" -func_check +504 "stvebx v16,0,r6" -func_check +508 "stvehx v17,r13,r16" -func_check +512 "stvehx v23,0,r20" -func_check +516 "stvewx v11,r19,r31" -func_check +520 "stvewx v31,0,r1" -func_check +524 "stvxl v26,r21,r17" -func_check +528 "stvxl v13,0,r22" -func_check +532 "stvx v11,r31,r31" -func_check +536 "stvx v30,0,r16" -func_check +540 "vaddcuw v24,v7,v28" -func_check +544 "vaddfp v3,v30,v11" -func_check +548 "vaddsbs v8,v28,v9" -func_check +552 "vaddshs v7,v5,v4" -func_check +556 "vaddsws v22,v26,v27" -func_check +560 "vaddubm v16,v14,v28" -func_check +564 "vaddubs v6,v1,v25" -func_check +568 "vadduhm v2,v4,v6" -func_check +572 "vadduhs v26,v21,v8" -func_check +576 "vadduwm v29,v31,v1" -func_check +580 "vadduws v23,v13,v4" -func_check +584 "vandc v30,v16,v9" -func_check +588 "vand v3,v13,v27" -func_check +592 "vavgsb v4,v6,v17" -func_check +596 "vavgsh v23,v28,v19" -func_check +600 "vavgsw v8,v15,v31" -func_check +604 "vavgub v6,v7,v25" -func_check +608 "vavguh v25,v22,v10" -func_check +612 "vavguw v3,v23,v29" -func_check +616 "vctsxs v14,v2,6" -func_check +620 "vctuxs v9,v31,20" -func_check +624 "vcfsx v24,v30,3" -func_check +628 "vcfux v17,v21,29" -func_check +632 "vcmpbfp v18,v28,v0" -func_check +636 "vcmpbfp\. v19,v26,v3" -func_check +640 "vcmpeqfp v16,v2,v11" -func_check +644 "vcmpeqfp\. v23,v13,v13" -func_check +648 "vcmpequb v25,v19,v10" -func_check +652 "vcmpequb\. v18,v11,v2" -func_check +656 "vcmpequh v9,v25,v7" -func_check +660 "vcmpequh\. v14,v24,v21" -func_check +664 "vcmpequw v24,v12,v5" -func_check +668 "vcmpequw\. v19,v16,v1" -func_check +672 "vcmpgefp v23,v17,v16" -func_check +676 "vcmpgefp\. v19,v29,v17" -func_check +680 "vcmpgtfp v16,v28,v13" -func_check +684 "vcmpgtfp\. v14,v24,v7" -func_check +688 "vcmpgtsb v16,v22,v6" -func_check +692 "vcmpgtsb\. v2,v12,v14" -func_check +696 "vcmpgtsh v28,v3,v29" -func_check +700 "vcmpgtsh\. v16,v19,v13" -func_check +704 "vcmpgtsw v15,v0,v5" -func_check +708 "vcmpgtsw\. v21,v13,v0" -func_check +712 "vcmpgtub v5,v10,v30" -func_check +716 "vcmpgtub\. v7,v13,v10" -func_check +720 "vcmpgtuh v24,v15,v16" -func_check +724 "vcmpgtuh\. v25,v21,v27" -func_check +728 "vcmpgtuw v17,v27,v6" -func_check +732 "vcmpgtuw\. v8,v21,v27" -func_check +736 "vcfsx v1,v1,14" -func_check +740 "vctsxs v4,v15,25" -func_check +744 "vctuxs v28,v23,14" -func_check +748 "vcfux v6,v6,0" -func_check +752 "vexptefp v0,v8" -func_check +756 "vlogefp v22,v27" -func_check +760 "vmaddfp v23,v18,v5,v18" -func_check +764 "vmaxfp v13,v13,v27" -func_check +768 "vmaxsb v8,v23,v14" -func_check +772 "vmaxsh v19,v17,v0" -func_check +776 "vmaxsw v19,v3,v22" -func_check +780 "vmaxub v23,v30,v28" -func_check +784 "vmaxuh v9,v20,v23" -func_check +788 "vmaxuw v21,v19,v1" -func_check +792 "vmhaddshs v22,v13,v5,v22" -func_check +796 "vmhraddshs v31,v0,v3,v18" -func_check +800 "vminfp v2,v21,v24" -func_check +804 "vminsb v20,v6,v10" -func_check +808 "vminsh v18,v27,v26" -func_check +812 "vminsw v3,v4,v1" -func_check +816 "vminub v7,v0,v13" -func_check +820 "vminuh v0,v12,v6" -func_check +824 "vminuw v6,v3,v1" -func_check +828 "vmladduhm v3,v29,v3,v26" -func_check +832 "vmrghb v21,v5,v31" -func_check +836 "vmrghh v21,v24,v0" -func_check +840 "vmrghw v16,v0,v22" -func_check +844 "vmrglb v1,v17,v16" -func_check +848 "vmrglh v14,v8,v15" -func_check +852 "vmrglw v31,v21,v5" -func_check +856 "vmr v24,v9" -func_check +860 "vmr v24,v9" -func_check +864 "vmsummbm v0,v24,v15,v23" -func_check +868 "vmsumshm v1,v4,v7,v25" -func_check +872 "vmsumshs v9,v8,v13,v31" -func_check +876 "vmsumubm v23,v31,v12,v30" -func_check +880 "vmsumuhm v29,v0,v26,v21" -func_check +884 "vmsumuhs v27,v14,v25,v5" -func_check +888 "vmulesb v10,v25,v14" -func_check +892 "vmulesh v1,v18,v8" -func_check +896 "vmuleub v17,v14,v9" -func_check +900 "vmuleuh v5,v26,v9" -func_check +904 "vmulosb v21,v18,v6" -func_check +908 "vmulosh v4,v5,v8" -func_check +912 "vmuloub v2,v9,v19" -func_check +916 "vmulouh v29,v5,v4" -func_check +920 "vnmsubfp v8,v2,v6,v5" -func_check +924 "vnor v31,v9,v10" -func_check +928 "vnot v25,v31" -func_check +932 "vnot v25,v31" -func_check +936 "vor v23,v7,v2" -func_check +940 "vperm v0,v28,v22,v25" -func_check +944 "vpkpx v16,v25,v17" -func_check +948 "vpkshss v12,v16,v17" -func_check +952 "vpkshus v1,v19,v23" -func_check +956 "vpkswss v25,v7,v13" -func_check +960 "vpkswus v4,v24,v10" -func_check +964 "vpkuhum v9,v27,v12" -func_check +968 "vpkuhus v22,v10,v25" -func_check +972 "vpkuwum v30,v18,v0" -func_check +976 "vpkuwus v7,v3,v22" -func_check +980 "vrefp v24,v28" -func_check +984 "vrfim v17,v19" -func_check +988 "vrfin v24,v25" -func_check +992 "vrfip v3,v5" -func_check +996 "vrfiz v8,v10" -func_check +1000 "vrlb v26,v18,v30" -func_check +1004 "vrlh v16,v17,v25" -func_check +1008 "vrlw v23,v30,v9" -func_check +1012 "vrsqrtefp v2,v18" -func_check +1016 "vsel v20,v14,v18,v10" -func_check +1020 "vslb v25,v25,v12" -func_check +1024 "vsldoi v9,v9,v12,7" -func_check +1028 "vslh v14,v2,v11" -func_check +1032 "vslo v30,v5,v6" -func_check +1036 "vsl v22,v30,v9" -func_check +1040 "vslw v26,v26,v3" -func_check +1044 "vspltb v1,v20,6" -func_check +1048 "vsplth v16,v18,3" -func_check +1052 "vspltisb v25,-13" -func_check +1056 "vspltish v22,10" -func_check +1060 "vspltisw v13,13" -func_check +1064 "vspltw v9,v18,2" -func_check +1068 "vsrab v14,v22,v0" -func_check +1072 "vsrah v12,v12,v18" -func_check +1076 "vsraw v2,v2,v13" -func_check +1080 "vsrb v7,v27,v5" -func_check +1084 "vsrh v7,v11,v29" -func_check +1088 "vsro v18,v30,v31" -func_check +1092 "vsr v2,v9,v28" -func_check +1096 "vsrw v0,v25,v0" -func_check +1100 "vsubcuw v24,v2,v10" -func_check +1104 "vsubfp v22,v24,v20" -func_check +1108 "vsubsbs v10,v22,v13" -func_check +1112 "vsubshs v24,v17,v28" -func_check +1116 "vsubsws v10,v26,v0" -func_check +1120 "vsububm v16,v11,v24" -func_check +1124 "vsububs v11,v21,v1" -func_check +1128 "vsubuhm v6,v12,v24" -func_check +1132 "vsubuhs v30,v11,v9" -func_check +1136 "vsubuwm v19,v20,v13" -func_check +1140 "vsubuws v18,v25,v6" -func_check +1144 "vsum2sws v25,v10,v18" -func_check +1148 "vsum4sbs v13,v16,v21" -func_check +1152 "vsum4shs v23,v8,v4" -func_check +1156 "vsum4ubs v28,v13,v30" -func_check +1160 "vsumsws v22,v10,v8" -func_check +1164 "vupkhpx v24,v14" -func_check +1168 "vupkhsb v2,v22" -func_check +1172 "vupkhsh v16,v2" -func_check +1176 "vupklpx v10,v26" -func_check +1180 "vupklsb v15,v28" -func_check +1184 "vupklsh v8,v8" -func_check +1188 "vxor v25,v0,v3" - -## vsd.d -func_check +1192 "lxsdx vs40,r10,r20" -func_check +1196 "lxvd2x vs40,r10,r20" -func_check +1200 "lxvdsx vs40,r10,r20" -func_check +1204 "lxvw4x vs40,r10,r20" -func_check +1208 "stxsdx vs40,r10,r20" -func_check +1212 "stxvd2x vs40,r10,r20" -func_check +1216 "stxvw4x vs40,r10,r20" -func_check +1220 "xsabsdp vs40,vs60" -func_check +1224 "xsadddp vs40,vs50,vs60" -func_check +1228 "xscmpodp cr1,vs50,vs60" -func_check +1232 "xscmpudp cr1,vs50,vs60" -func_check +1236 "xscpsgndp vs40,vs50,vs60" -func_check +1240 "xscvdpsp vs40,vs60" -func_check +1244 "xscvdpsxds vs40,vs60" -func_check +1248 "xscvdpsxws vs40,vs60" -func_check +1252 "xscvdpuxds vs40,vs60" -func_check +1256 "xscvdpuxws vs40,vs60" -func_check +1260 "xscvspdp vs40,vs60" -func_check +1264 "xscvsxddp vs40,vs60" -func_check +1268 "xscvuxddp vs40,vs60" -func_check +1272 "xsdivdp vs40,vs50,vs60" -func_check +1276 "xsmaddadp vs40,vs50,vs60" -func_check +1280 "xsmaddmdp vs40,vs50,vs60" -func_check +1284 "xsmaxdp vs40,vs50,vs60" -func_check +1288 "xsmindp vs40,vs50,vs60" -func_check +1292 "xsmsubadp vs40,vs50,vs60" -func_check +1296 "xsmsubmdp vs40,vs50,vs60" -func_check +1300 "xsmuldp vs40,vs50,vs60" -func_check +1304 "xsnabsdp vs40,vs60" -func_check +1308 "xsnegdp vs40,vs60" -func_check +1312 "xsnmaddadp vs40,vs50,vs60" -func_check +1316 "xsnmaddmdp vs40,vs50,vs60" -func_check +1320 "xsnmsubadp vs40,vs50,vs60" -func_check +1324 "xsnmsubmdp vs40,vs50,vs60" -func_check +1328 "xsrdpi vs40,vs60" -func_check +1332 "xsrdpic vs40,vs60" -func_check +1336 "xsrdpim vs40,vs60" -func_check +1340 "xsrdpip vs40,vs60" -func_check +1344 "xsrdpiz vs40,vs60" -func_check +1348 "xsredp vs40,vs60" -func_check +1352 "xsrsqrtedp vs40,vs60" -func_check +1356 "xssqrtdp vs40,vs60" -func_check +1360 "xssubdp vs40,vs50,vs60" -func_check +1364 "xstdivdp cr1,vs50,vs60" -func_check +1368 "xstsqrtdp cr1,vs60" -func_check +1372 "xvabsdp vs40,vs60" -func_check +1376 "xvabssp vs40,vs60" -func_check +1380 "xvadddp vs40,vs50,vs60" -func_check +1384 "xvaddsp vs40,vs50,vs60" -func_check +1388 "xvcmpeqdp vs40,vs50,vs60" -func_check +1392 "xvcmpeqdp\. vs40,vs50,vs60" -func_check +1396 "xvcmpeqsp vs40,vs50,vs60" -func_check +1400 "xvcmpeqsp\. vs40,vs50,vs60" -func_check +1404 "xvcmpgedp vs40,vs50,vs60" -func_check +1408 "xvcmpgedp\. vs40,vs50,vs60" -func_check +1412 "xvcmpgesp vs40,vs50,vs60" -func_check +1416 "xvcmpgesp\. vs40,vs50,vs60" -func_check +1420 "xvcmpgtdp vs40,vs50,vs60" -func_check +1424 "xvcmpgtdp\. vs40,vs50,vs60" -func_check +1428 "xvcmpgtsp vs40,vs50,vs60" -func_check +1432 "xvcmpgtsp\. vs40,vs50,vs60" -func_check +1436 "xvcpsgndp vs40,vs50,vs60" -func_check +1440 "xvmovdp vs40,vs60" -func_check +1444 "xvmovdp vs40,vs60" -func_check +1448 "xvcpsgnsp vs40,vs50,vs60" -func_check +1452 "xvmovsp vs40,vs60" -func_check +1456 "xvmovsp vs40,vs60" -func_check +1460 "xvcvdpsp vs40,vs60" -func_check +1464 "xvcvdpsxds vs40,vs60" -func_check +1468 "xvcvdpsxws vs40,vs60" -func_check +1472 "xvcvdpuxds vs40,vs60" -func_check +1476 "xvcvdpuxws vs40,vs60" -func_check +1480 "xvcvspdp vs40,vs60" -func_check +1484 "xvcvspsxds vs40,vs60" -func_check +1488 "xvcvspsxws vs40,vs60" -func_check +1492 "xvcvspuxds vs40,vs60" -func_check +1496 "xvcvspuxws vs40,vs60" -func_check +1500 "xvcvsxddp vs40,vs60" -func_check +1504 "xvcvsxdsp vs40,vs60" -func_check +1508 "xvcvsxwdp vs40,vs60" -func_check +1512 "xvcvsxwsp vs40,vs60" -func_check +1516 "xvcvuxddp vs40,vs60" -func_check +1520 "xvcvuxdsp vs40,vs60" -func_check +1524 "xvcvuxwdp vs40,vs60" -func_check +1528 "xvcvuxwsp vs40,vs60" -func_check +1532 "xvdivdp vs40,vs50,vs60" -func_check +1536 "xvdivsp vs40,vs50,vs60" -func_check +1540 "xvmaddadp vs40,vs50,vs60" -func_check +1544 "xvmaddmdp vs40,vs50,vs60" -func_check +1548 "xvmaddasp vs40,vs50,vs60" -func_check +1552 "xvmaddmsp vs40,vs50,vs60" -func_check +1556 "xvmaxdp vs40,vs50,vs60" -func_check +1560 "xvmaxsp vs40,vs50,vs60" -func_check +1564 "xvmindp vs40,vs50,vs60" -func_check +1568 "xvminsp vs40,vs50,vs60" -func_check +1572 "xvmsubadp vs40,vs50,vs60" -func_check +1576 "xvmsubmdp vs40,vs50,vs60" -func_check +1580 "xvmsubasp vs40,vs50,vs60" -func_check +1584 "xvmsubmsp vs40,vs50,vs60" -func_check +1588 "xvmuldp vs40,vs50,vs60" -func_check +1592 "xvmulsp vs40,vs50,vs60" -func_check +1596 "xvnabsdp vs40,vs60" -func_check +1600 "xvnabssp vs40,vs60" -func_check +1604 "xvnegdp vs40,vs60" -func_check +1608 "xvnegsp vs40,vs60" -func_check +1612 "xvnmaddadp vs40,vs50,vs60" -func_check +1616 "xvnmaddmdp vs40,vs50,vs60" -func_check +1620 "xvnmaddasp vs40,vs50,vs60" -func_check +1624 "xvnmaddmsp vs40,vs50,vs60" -func_check +1628 "xvnmsubadp vs40,vs50,vs60" -func_check +1632 "xvnmsubmdp vs40,vs50,vs60" -func_check +1636 "xvnmsubasp vs40,vs50,vs60" -func_check +1640 "xvnmsubmsp vs40,vs50,vs60" -func_check +1644 "xvrdpi vs40,vs60" -func_check +1648 "xvrdpic vs40,vs60" -func_check +1652 "xvrdpim vs40,vs60" -func_check +1656 "xvrdpip vs40,vs60" -func_check +1660 "xvrdpiz vs40,vs60" -func_check +1664 "xvredp vs40,vs60" -func_check +1668 "xvresp vs40,vs60" -func_check +1672 "xvrspi vs40,vs60" -func_check +1676 "xvrspic vs40,vs60" -func_check +1680 "xvrspim vs40,vs60" -func_check +1684 "xvrspip vs40,vs60" -func_check +1688 "xvrspiz vs40,vs60" -func_check +1692 "xvrsqrtedp vs40,vs60" -func_check +1696 "xvrsqrtesp vs40,vs60" -func_check +1700 "xvsqrtdp vs40,vs60" -func_check +1704 "xvsqrtsp vs40,vs60" -func_check +1708 "xvsubdp vs40,vs50,vs60" -func_check +1712 "xvsubsp vs40,vs50,vs60" -func_check +1716 "xvtdivdp cr1,vs50,vs60" -func_check +1720 "xvtdivsp cr1,vs50,vs60" -func_check +1724 "xvtsqrtdp cr1,vs60" -func_check +1728 "xvtsqrtsp cr1,vs60" -func_check +1732 "xxland vs40,vs50,vs60" -func_check +1736 "xxlandc vs40,vs50,vs60" -func_check +1740 "xxlnor vs40,vs50,vs60" -func_check +1744 "xxlor vs40,vs50,vs60" -func_check +1748 "xxlxor vs40,vs50,vs60" -func_check +1752 "xxmrghw vs40,vs50,vs60" -func_check +1756 "xxmrglw vs40,vs50,vs60" -func_check +1760 "xxmrghd vs40,vs50,vs60" -func_check +1764 "xxpermdi vs40,vs50,vs60,1" -func_check +1768 "xxpermdi vs40,vs50,vs60,2" -func_check +1772 "xxmrgld vs40,vs50,vs60" -func_check +1776 "xxspltd vs40,vs50,0" -func_check +1780 "xxspltd vs40,vs50,0" -func_check +1784 "xxspltd vs40,vs50,1" -func_check +1788 "xxspltd vs40,vs50,1" -func_check +1792 "xxmrghd vs40,vs50,vs60" -func_check +1796 "xxmrghd vs40,vs50,vs60" -func_check +1800 "xxmrgld vs40,vs50,vs60" -func_check +1804 "xxswapd vs40,vs50" -func_check +1808 "xxswapd vs40,vs50" -func_check +1812 "xxsel vs40,vs50,vs60,vs62" -func_check +1816 "xxsldwi vs40,vs50,vs60,2" -func_check +1820 "xxspltw vs40,vs60,2" -func_check +1824 "lxvd2x vs40,0,r20" -func_check +1828 "lxvd2x vs40,r10,r20" -func_check +1832 "stxvd2x vs40,0,r20" -func_check +1836 "stxvd2x vs40,r10,r20" - -## power8.d -func_check +1840 "tabort\. r5" -func_check +1844 "tabortwc\. 7,r8,r16" -func_check +1848 "tabortdc\. 20,r11,r10" -func_check +1852 "tabortwci\. 17,r10,-13" -func_check +1856 "tabortdci\. 29,r3,-5" -func_check +1860 "tbegin\." -func_check +1864 "tcheck cr7" -func_check +1868 "tend\." -func_check +1872 "tend\." -func_check +1876 "tendall\." -func_check +1880 "tendall\." -func_check +1884 "treclaim\. r24" -func_check +1888 "trechkpt\." -func_check +1892 "tsuspend\." -func_check +1896 "tsuspend\." -func_check +1900 "tresume\." -func_check +1904 "tresume\." -func_check +1908 "ori r2,r2,0" -func_check +1912 "nop" -func_check +1916 "ori r2,r2,0" -func_check +1920 "rfebb 0" -func_check +1924 "rfebb" -func_check +1928 "rfebb" -func_check +1932 "bctar- 12,4\\*cr5\\+gt" -func_check +1936 "bctarl- 4,4\\*cr1\\+so" -func_check +1940 "bctar\\+ 12,4\\*cr3\\+lt" -func_check +1944 "bctarl\\+ 4,eq" -func_check +1948 "bctar 4,4\\*cr2\\+lt,1" -func_check +1952 "bctarl 4,4\\*cr1\\+so,2" -func_check +1956 "wait" -func_check +1960 "msgsndp r8" -func_check +1964 "mtsle 1" -func_check +1968 "msgclrp r27" -func_check +1972 "stqcx\. r10,r10,r12" -func_check +1976 "stqcx\. r28,0,r7" -func_check +1980 "lqarx r24,r19,r11" -func_check +1984 "lqarx r22,0,r11" -func_check +1988 "mfbhrbe r20,6" -func_check +1992 "pbt\. r29,r17,r16" -func_check +1996 "pbt\. r14,0,r7" -func_check +2000 "clrbhrb" -func_check +2004 "vpermxor v11,v10,v0,v23" -func_check +2008 "vaddeuqm v24,v2,v7,v4" -func_check +2012 "vaddecuq v10,v10,v8,v2" -func_check +2016 "vsubeuqm v5,v15,v8,v19" -func_check +2020 "vsubecuq v12,v31,v16,v29" -func_check +2024 "vmulouw v20,v29,v13" -func_check +2028 "vmuluwm v29,v0,v26" -func_check +2032 "vaddudm v8,v21,v28" -func_check +2036 "vmaxud v1,v26,v1" -func_check +2040 "vrld v20,v3,v1" -func_check +2044 "vcmpequd v4,v19,v11" -func_check +2048 "vadduqm v23,v14,v30" -func_check +2052 "vaddcuq v8,v8,v13" -func_check +2056 "vmulosw v28,v27,v4" -func_check +2060 "vmaxsd v3,v4,v4" -func_check +2064 "vmuleuw v0,v19,v21" -func_check +2068 "vminud v24,v20,v19" -func_check +2072 "vcmpgtud v0,v28,v15" -func_check +2076 "vmulesw v21,v0,v2" -func_check +2080 "vminsd v9,v26,v9" -func_check +2084 "vsrad v25,v29,v11" -func_check +2088 "vcmpgtsd v11,v28,v11" -func_check +2092 "bcdadd\. v5,v8,v26,1" -func_check +2096 "vpmsumb v4,v3,v12" -func_check +2100 "bcdsub\. v26,v31,v21,1" -func_check +2104 "vpmsumh v5,v17,v16" -func_check +2108 "vpkudum v23,v17,v20" -func_check +2112 "vpmsumw v24,v21,v29" -func_check +2116 "vpmsumd v9,v22,v13" -func_check +2120 "vpkudus v18,v19,v18" -func_check +2124 "vsubuqm v30,v16,v22" -func_check +2128 "vcipher v14,v11,v7" -func_check +2132 "vcipherlast v10,v2,v22" -func_check +2136 "vgbbd v23,v13" -func_check +2140 "vsubcuq v16,v25,v16" -func_check +2144 "vorc v31,v1,v5" -func_check +2148 "vncipher v4,v17,v31" -func_check +2152 "vncipherlast v24,v2,v27" -func_check +2156 "vbpermq v23,v21,v23" -func_check +2160 "vpksdus v27,v18,v9" -func_check +2164 "vnand v27,v29,v27" -func_check +2168 "vsld v19,v19,v24" -func_check +2172 "vsbox v5,v13" -func_check +2176 "vpksdss v25,v3,v7" -func_check +2180 "vcmpequd\. v28,v8,v0" -func_check +2184 "vupkhsw v26,v26" -func_check +2188 "vshasigmaw v5,v7,0,6" -func_check +2192 "veqv v28,v21,v14" -func_check +2196 "vmrgow v1,v8,v19" -func_check +2200 "vshasigmad v0,v10,0,10" -func_check +2204 "vsrd v5,v27,v14" -func_check +2208 "vupklsw v11,v13" -func_check +2212 "vclzb v14,v16" -func_check +2216 "vpopcntb v20,v27" -func_check +2220 "vclzh v28,v11" -func_check +2224 "vpopcnth v24,v9" -func_check +2228 "vclzw v27,v31" -func_check +2232 "vpopcntw v17,v19" -func_check +2236 "vclzd v12,v29" -func_check +2240 "vpopcntd v23,v22" -func_check +2244 "vcmpgtud\. v24,v20,v29" -func_check +2248 "vcmpgtsd\. v9,v6,v27" -func_check +2252 "lxsiwzx vs62,r14,r26" -func_check +2256 "lxsiwzx vs40,0,r25" -func_check +2260 "lxsiwax vs25,0,r26" -func_check +2264 "lxsiwax vs3,0,r3" -func_check +2268 "mfvsrd r12,vs62" -func_check +2272 "mffprwz r20,f12" -func_check +2276 "stxsiwx vs14,r9,r14" -func_check +2280 "stxsiwx vs21,0,r8" -func_check +2284 "mtvsrd vs48,r11" -func_check +2288 "mtvrwa v31,r23" -func_check +2292 "mtfprwz f16,r26" -func_check +2296 "lxsspx vs13,r19,r13" -func_check +2300 "lxsspx vs18,0,r13" -func_check +2304 "stxsspx vs43,r2,r4" -func_check +2308 "stxsspx vs55,0,r11" -func_check +2312 "xsaddsp vs54,vs48,vs25" -func_check +2316 "xsmaddasp vs14,vs50,vs1" -func_check +2320 "xssubsp vs26,vs22,vs42" -func_check +2324 "xsmaddmsp vs27,vs53,vs52" -func_check +2328 "xsrsqrtesp vs8,vs59" -func_check +2332 "xssqrtsp vs12,vs41" -func_check +2336 "xsmulsp vs57,vs11,vs32" -func_check +2340 "xsmsubasp vs38,vs20,vs26" -func_check +2344 "xsdivsp vs26,vs19,vs6" -func_check +2348 "xsmsubmsp vs35,vs37,vs55" -func_check +2352 "xsresp vs59,vs8" -func_check +2356 "xsnmaddasp vs44,vs33,vs33" -func_check +2360 "xsnmaddmsp vs17,vs62,vs30" -func_check +2364 "xsnmsubasp vs54,vs52,vs31" -func_check +2368 "xsnmsubmsp vs37,vs5,vs58" -func_check +2372 "xxlorc vs30,vs54,vs44" -func_check +2376 "xxlnand vs49,vs14,vs29" -func_check +2380 "xxleqv vs62,vs22,vs30" -func_check +2384 "xscvdpspn vs60,vs54" -func_check +2388 "xsrsp vs22,vs45" -func_check +2392 "xscvuxdsp vs26,vs59" -func_check +2396 "xscvsxdsp vs38,vs49" -func_check +2400 "xscvspdpn vs59,vs26" -func_check +2404 "fmrgow f24,f14,f2" -func_check +2408 "fmrgew f22,f7,f5" -func_check +2412 "msgsnd r14" -func_check +2416 "msgclr r23" -func_check +2420 "lxvd2x vs40,0,r5" -func_check +2424 "lxvd2x vs40,0,r5" -func_check +2428 "lxvd2x vs10,r20,r6" -func_check +2432 "lxvd2x vs10,r20,r6" -func_check +2436 "stxvd2x vs41,0,r7" -func_check +2440 "stxvd2x vs41,0,r7" -func_check +2444 "stxvd2x vs11,r21,r8" -func_check +2448 "stxvd2x vs11,r21,r8" - -## altivec2.d -func_check +2452 "lvepxl v3,0,r28" -func_check +2456 "lvepxl v19,r4,r18" -func_check +2460 "lvepx v27,0,r19" -func_check +2464 "lvepx v1,r25,r18" -func_check +2468 "lvexbx v31,0,r27" -func_check +2472 "lvexbx v28,r1,r12" -func_check +2476 "lvexhx v31,0,r14" -func_check +2480 "lvexhx v17,r16,r31" -func_check +2484 "lvexwx v22,0,r29" -func_check +2488 "lvexwx v23,r25,r5" -func_check +2492 "lvsm v3,0,r12" -func_check +2496 "lvsm v27,r29,r1" -func_check +2500 "lvswxl v7,0,r6" -func_check +2504 "lvswxl v7,r16,r8" -func_check +2508 "lvswx v14,0,r18" -func_check +2512 "lvswx v28,r28,r16" -func_check +2516 "lvtlxl v27,0,r12" -func_check +2520 "lvtlxl v27,r28,r0" -func_check +2524 "lvtlx v23,0,r25" -func_check +2528 "lvtlx v1,r25,r14" -func_check +2532 "lvtrxl v20,0,r24" -func_check +2536 "lvtrxl v22,r29,r24" -func_check +2540 "lvtrx v24,0,r8" -func_check +2544 "lvtrx v13,r23,r28" -func_check +2548 "mvidsplt v12,r28,r12" -func_check +2552 "mviwsplt v10,r27,r0" -func_check +2556 "stvepxl v27,0,r13" -func_check +2560 "stvepxl v2,r2,r31" -func_check +2564 "stvepx v3,0,r10" -func_check +2568 "stvepx v27,r28,r0" -func_check +2572 "stvexbx v13,0,r6" -func_check +2576 "stvexbx v13,r25,r3" -func_check +2580 "stvexhx v22,0,r1" -func_check +2584 "stvexhx v17,r14,r10" -func_check +2588 "stvexwx v21,0,r27" -func_check +2592 "stvexwx v31,r18,r1" -func_check +2596 "stvflxl v26,0,r13" -func_check +2600 "stvflxl v22,r13,r21" -func_check +2604 "stvflx v5,0,r9" -func_check +2608 "stvflx v21,r24,r1" -func_check +2612 "stvfrxl v13,0,r10" -func_check +2616 "stvfrxl v13,r17,r25" -func_check +2620 "stvfrx v17,0,r10" -func_check +2624 "stvfrx v8,r12,r31" -func_check +2628 "stvswxl v18,0,r29" -func_check +2632 "stvswxl v26,r14,r8" -func_check +2636 "stvswx v0,0,r15" -func_check +2640 "stvswx v13,r23,r7" -func_check +2644 "vabsdub v6,v17,v16" -func_check +2648 "vabsduh v21,v18,v4" -func_check +2652 "vabsduw v25,v20,v9" -func_check +2656 "vpermxor v6,v17,v20,v26" -func_check +2660 "vaddeuqm v29,v26,v15,v28" -func_check +2664 "vaddecuq v15,v8,v7,v24" -func_check +2668 "vsubeuqm v2,v6,v21,v1" -func_check +2672 "vsubecuq v29,v6,v0,v4" -func_check +2676 "vmulouw v14,v9,v3" -func_check +2680 "vmuluwm v24,v16,v18" -func_check +2684 "vaddudm v10,v17,v17" -func_check +2688 "vmaxud v30,v25,v4" -func_check +2692 "vrld v10,v6,v28" -func_check +2696 "vcmpequd v27,v7,v7" -func_check +2700 "vadduqm v22,v16,v25" -func_check +2704 "vaddcuq v1,v21,v29" -func_check +2708 "vmulosw v20,v11,v19" -func_check +2712 "vmaxsd v24,v19,v1" -func_check +2716 "vmuleuw v13,v27,v30" -func_check +2720 "vminud v9,v24,v17" -func_check +2724 "vcmpgtud v10,v18,v28" -func_check +2728 "vmulesw v0,v29,v22" -func_check +2732 "vminsd v13,v28,v1" -func_check +2736 "vsrad v10,v20,v5" -func_check +2740 "vcmpgtsd v27,v21,v5" -func_check +2744 "bcdadd\. v0,v23,v30,1" -func_check +2748 "vpmsumb v25,v24,v26" -func_check +2752 "bcdsub\. v8,v4,v4,1" -func_check +2756 "vpmsumh v16,v14,v26" -func_check +2760 "vpkudum v27,v2,v26" -func_check +2764 "vpmsumw v6,v23,v17" -func_check +2768 "vpmsumd v20,v6,v25" -func_check +2772 "vpkudus v27,v22,v16" -func_check +2776 "vsubudm v21,v20,v18" -func_check +2780 "vsubuqm v21,v20,v18" -func_check +2784 "vcipher v29,v29,v6" -func_check +2788 "vcipherlast v2,v13,v20" -func_check +2792 "vgbbd v20,v18" -func_check +2796 "vsubcuq v19,v8,v25" -func_check +2800 "vorc v9,v26,v29" -func_check +2804 "vncipher v20,v20,v13" -func_check +2808 "vncipherlast v15,v5,v27" -func_check +2812 "vbpermq v3,v19,v6" -func_check +2816 "vpksdus v30,v4,v28" -func_check +2820 "vnand v0,v4,v14" -func_check +2824 "vsld v17,v8,v29" -func_check +2828 "vsbox v29,v20" -func_check +2832 "vpksdss v11,v7,v11" -func_check +2836 "vcmpequd\. v3,v19,v16" -func_check +2840 "vupkhsw v18,v17" -func_check +2844 "vshasigmaw v29,v8,0,13" -func_check +2848 "veqv v23,v28,v26" -func_check +2852 "vmrgew v29,v0,v2" -func_check +2856 "vmrgow v29,v0,v2" -func_check +2860 "vshasigmad v27,v19,0,0" -func_check +2864 "vsrd v20,v28,v28" -func_check +2868 "vupklsw v18,v21" -func_check +2872 "vclzb v30,v7" -func_check +2876 "vpopcntb v29,v21" -func_check +2880 "vclzh v25,v21" -func_check +2884 "vpopcnth v16,v30" -func_check +2888 "vclzw v28,v3" -func_check +2892 "vpopcntw v10,v9" -func_check +2896 "vclzd v22,v9" -func_check +2900 "vpopcntd v15,v30" -func_check +2904 "vcmpgtud\. v2,v31,v6" -func_check +2908 "vcmpgtsd\. v20,v15,v2" - -## vsd2.d -func_check +2912 "lxsiwzx vs62,r14,r26" -func_check +2916 "lxsiwzx vs40,0,r25" -func_check +2920 "lxsiwax vs25,0,r26" -func_check +2924 "lxsiwax vs3,0,r3" -func_check +2928 "mfvsrd r12,vs30" -func_check +2932 "mfvsrd r12,vs30" -func_check +2936 "mfvsrd r12,vs62" -func_check +2940 "mfvsrd r12,vs62" -func_check +2944 "mffprwz r20,f12" -func_check +2948 "mffprwz r20,f12" -func_check +2952 "mfvrwz r21,v12" -func_check +2956 "mfvrwz r21,v12" -func_check +2960 "stxsiwx vs14,r9,r14" -func_check +2964 "stxsiwx vs21,0,r8" -func_check +2968 "mtvsrd vs11,r28" -func_check +2972 "mtvsrd vs11,r28" -func_check +2976 "mtvsrd vs43,r29" -func_check +2980 "mtvsrd vs43,r29" -func_check +2984 "mtfprwa f24,r22" -func_check +2988 "mtfprwa f24,r22" -func_check +2992 "mtvrwa v25,r23" -func_check +2996 "mtvrwa v25,r23" -func_check +3000 "mtfprwz f26,r27" -func_check +3004 "mtfprwz f26,r27" -func_check +3008 "mtvrwz v27,r28" -func_check +3012 "mtvrwz v27,r28" -func_check +3016 "lxsspx vs13,r19,r13" -func_check +3020 "lxsspx vs18,0,r13" -func_check +3024 "stxsspx vs43,r2,r4" -func_check +3028 "stxsspx vs55,0,r11" -func_check +3032 "xsaddsp vs54,vs48,vs25" -func_check +3036 "xsmaddasp vs14,vs50,vs1" -func_check +3040 "xssubsp vs26,vs22,vs42" -func_check +3044 "xsmaddmsp vs27,vs53,vs52" -func_check +3048 "xsrsqrtesp vs8,vs59" -func_check +3052 "xssqrtsp vs12,vs41" -func_check +3056 "xsmulsp vs57,vs11,vs32" -func_check +3060 "xsmsubasp vs38,vs20,vs26" -func_check +3064 "xsdivsp vs26,vs19,vs6" -func_check +3068 "xsmsubmsp vs35,vs37,vs55" -func_check +3072 "xsresp vs59,vs8" -func_check +3076 "xsnmaddasp vs44,vs33,vs33" -func_check +3080 "xsnmaddmsp vs17,vs62,vs30" -func_check +3084 "xsnmsubasp vs54,vs52,vs31" -func_check +3088 "xsnmsubmsp vs37,vs5,vs58" -func_check +3092 "xxlorc vs30,vs54,vs44" -func_check +3096 "xxlnand vs49,vs14,vs29" -func_check +3100 "xxleqv vs62,vs22,vs30" -func_check +3104 "xscvdpspn vs60,vs54" -func_check +3108 "xsrsp vs22,vs45" -func_check +3112 "xscvuxdsp vs26,vs59" -func_check +3116 "xscvsxdsp vs38,vs49" -func_check +3120 "xscvspdpn vs59,vs26" -func_check +3124 "fmrgow f24,f14,f2" -func_check +3128 "fmrgew f22,f7,f5" - -## power9.d -func_check +3132 "cnttzd r3,r13" -func_check +3136 "cnttzd\. r4,r14" -func_check +3140 "cnttzw r5,r15" -func_check +3144 "cnttzw\. r6,r16" -func_check +3148 "modsd r10,r20,r21" -func_check +3152 "modsw r11,r21,r22" -func_check +3156 "modud r12,r22,r23" -func_check +3160 "moduw r13,r23,r24" -func_check +3164 "bcdcfn\. v3,v4,0" -func_check +3168 "bcdcfn\. v3,v4,1" -func_check +3172 "bcdcfsq\. v4,v5,0" -func_check +3176 "bcdcfsq\. v4,v5,1" -func_check +3180 "bcdcfz\. v5,v6,0" -func_check +3184 "bcdcfz\. v5,v6,1" -func_check +3188 "bcdcpsgn\. v6,v7,v8" -func_check +3192 "bcdctn\. v7,v8" -func_check +3196 "bcdctsq\. v8,v9" -func_check +3200 "bcdctz\. v9,v10,0" -func_check +3204 "bcdctz\. v9,v10,1" -func_check +3208 "bcdsetsgn\. v10,v11,0" -func_check +3212 "bcdsetsgn\. v10,v11,1" -func_check +3216 "bcdsr\. v11,v12,v13,0" -func_check +3220 "bcdsr\. v11,v12,v13,1" -func_check +3224 "bcds\. v12,v13,v14,0" -func_check +3228 "bcds\. v12,v13,v14,1" -func_check +3232 "bcdtrunc\. v13,v14,v15,0" -func_check +3236 "bcdtrunc\. v13,v14,v15,1" -func_check +3240 "bcdus\. v14,v15,v16" -func_check +3244 "bcdutrunc\. v15,v16,v17" -func_check +3248 "lxvll vs20,0,r21" -func_check +3252 "lxvll vs20,r10,r21" -func_check +3256 "stxvll vs21,0,r11" -func_check +3260 "stxvll vs21,r10,r11" -func_check +3264 "vmul10cuq v22,v23" -func_check +3268 "vmul10ecuq v23,v24,v25" -func_check +3272 "vmul10euq v24,v25,v26" -func_check +3276 "vmul10uq v25,v26" -func_check +3280 "xsaddqp v10,v11,v12" -func_check +3284 "xsaddqpo v11,v12,v12" -func_check +3288 "xsrqpi 0,v20,v30,0" -func_check +3292 "xsrqpi 1,v20,v30,0" -func_check +3296 "xsrqpi 0,v20,v30,3" -func_check +3300 "xsrqpi 1,v20,v30,3" -func_check +3304 "xsrqpix 0,v21,v31,0" -func_check +3308 "xsrqpix 1,v21,v31,0" -func_check +3312 "xsrqpix 0,v21,v31,3" -func_check +3316 "xsrqpix 1,v21,v31,3" -func_check +3320 "xsmulqp v12,v13,v14" -func_check +3324 "xsmulqpo v13,v14,v15" -func_check +3328 "xsrqpxp 0,v22,v23,0" -func_check +3332 "xsrqpxp 1,v22,v23,0" -func_check +3336 "xsrqpxp 0,v22,v23,3" -func_check +3340 "xsrqpxp 1,v22,v23,3" -func_check +3344 "xscpsgnqp v14,v15,v16" -func_check +3348 "xscmpoqp cr0,v15,v16" -func_check +3352 "xscmpoqp cr7,v15,v16" -func_check +3356 "xscmpexpqp cr0,v16,v17" -func_check +3360 "xscmpexpqp cr7,v16,v17" -func_check +3364 "xsmaddqp v17,v18,v19" -func_check +3368 "xsmaddqpo v18,v19,v20" -func_check +3372 "xsmsubqp v19,v20,v21" -func_check +3376 "xsmsubqpo v20,v21,v22" -func_check +3380 "xsnmaddqp v21,v22,v23" -func_check +3384 "xsnmaddqpo v22,v23,v24" -func_check +3388 "xsnmsubqp v23,v24,v25" -func_check +3392 "xsnmsubqpo v24,v25,v26" -func_check +3396 "xssubqp v25,v26,v27" -func_check +3400 "xssubqpo v26,v27,v28" -func_check +3404 "xsdivqp v27,v28,v29" -func_check +3408 "xsdivqpo v28,v29,v30" -func_check +3412 "xscmpuqp cr0,v29,v30" -func_check +3416 "xscmpuqp cr7,v29,v30" -func_check +3420 "xststdcqp cr0,v30,0" -func_check +3424 "xststdcqp cr7,v30,0" -func_check +3428 "xststdcqp cr0,v31,127" -func_check +3432 "xststdcqp cr7,v31,127" -func_check +3436 "xsabsqp v10,v11" -func_check +3440 "xsxexpqp v11,v12" -func_check +3444 "xsnabsqp v12,v13" -func_check +3448 "xsnegqp v13,v14" -func_check +3452 "xsxsigqp v14,v15" -func_check +3456 "xssqrtqp v15,v16" -func_check +3460 "xssqrtqpo v16,v17" -func_check +3464 "xscvqpuwz v17,v18" -func_check +3468 "xscvudqp v18,v19" -func_check +3472 "xscvqpswz v19,v20" -func_check +3476 "xscvsdqp v20,v21" -func_check +3480 "xscvqpudz v21,v22" -func_check +3484 "xscvqpdp v22,v23" -func_check +3488 "xscvqpdpo v23,v24" -func_check +3492 "xscvdpqp v24,v25" -func_check +3496 "xscvqpsdz v25,v26" -func_check +3500 "xsiexpqp v26,v27,v28" -func_check +3504 "vpermr v4,v5,v6,v7" -func_check +3508 "vextractub v5,v6,0" -func_check +3512 "vextractub v5,v6,15" -func_check +3516 "vextractuh v6,v7,0" -func_check +3520 "vextractuh v6,v7,15" -func_check +3524 "vextractuw v7,v8,0" -func_check +3528 "vextractuw v7,v8,15" -func_check +3532 "vextractd v8,v9,0" -func_check +3536 "vextractd v8,v9,15" -func_check +3540 "vinsertb v9,v10,0" -func_check +3544 "vinsertb v9,v10,15" -func_check +3548 "vinserth v10,v11,0" -func_check +3552 "vinserth v10,v11,15" -func_check +3556 "vinsertw v11,v12,0" -func_check +3560 "vinsertw v11,v12,15" -func_check +3564 "vinsertd v12,v13,0" -func_check +3568 "vinsertd v12,v13,15" -func_check +3572 "mfvsrld r20,vs45" -func_check +3576 "mtvsrws vs46,r21" -func_check +3580 "mtvsrdd vs47,0,r23" -func_check +3584 "mtvsrdd vs47,r22,r23" -func_check +3588 "lxvx vs50,0,r11" -func_check +3592 "lxvx vs0,r10,r11" -func_check +3596 "lxvwsx vs51,0,r12" -func_check +3600 "lxvwsx vs1,r10,r12" -func_check +3604 "lxvh8x vs52,0,r13" -func_check +3608 "lxvh8x vs2,r10,r13" -func_check +3612 "lxvb16x vs53,0,r14" -func_check +3616 "lxvb16x vs3,r10,r14" -func_check +3620 "stxvx vs54,0,r15" -func_check +3624 "stxvx vs4,r20,r15" -func_check +3628 "stxvh8x vs55,0,r16" -func_check +3632 "stxvh8x vs5,r20,r16" -func_check +3636 "stxvb16x vs56,0,r17" -func_check +3640 "stxvb16x vs6,r20,r17" -func_check +3644 "xxextractuw vs4,vs5,0" -func_check +3648 "xxextractuw vs40,vs50,15" -func_check +3652 "xxspltib vs4,0" -func_check +3656 "xxspltib vs41,255" -func_check +3660 "xxinsertw vs5,vs6,0" -func_check +3664 "xxinsertw vs50,vs60,15" -func_check +3668 "xxbrh vs6,vs7" -func_check +3672 "xxbrh vs56,vs57" -func_check +3676 "xxbrw vs7,vs8" -func_check +3680 "xxbrw vs57,vs58" -func_check +3684 "xxbrd vs8,vs9" -func_check +3688 "xxbrd vs58,vs59" -func_check +3692 "xxbrq vs9,vs10" -func_check +3696 "xxbrq vs59,vs60" -func_check +3700 "lxsd v20,0\\(0\\)" -func_check +3704 "lxsd v20,0\\(r10\\)" -func_check +3708 "lxsd v20,8\\(0\\)" -func_check +3712 "lxsd v20,8\\(r10\\)" -func_check +3716 "lxsd v20,-8\\(0\\)" -func_check +3720 "lxsd v20,-8\\(r10\\)" -func_check +3724 "lxsd v20,32764\\(0\\)" -func_check +3728 "lxsd v20,32764\\(r10\\)" -func_check +3732 "lxsd v20,-32768\\(0\\)" -func_check +3736 "lxsd v20,-32768\\(r10\\)" -func_check +3740 "lxssp v30,0\\(0\\)" -func_check +3744 "lxssp v30,0\\(r11\\)" -func_check +3748 "lxssp v30,8\\(0\\)" -func_check +3752 "lxssp v30,8\\(r11\\)" -func_check +3756 "lxssp v30,-8\\(0\\)" -func_check +3760 "lxssp v30,-8\\(r11\\)" -func_check +3764 "lxssp v30,32764\\(0\\)" -func_check +3768 "lxssp v30,32764\\(r11\\)" -func_check +3772 "lxssp v30,-32768\\(0\\)" -func_check +3776 "lxssp v30,-32768\\(r11\\)" -func_check +3780 "lxv vs40,0\\(0\\)" -func_check +3784 "lxv vs40,0\\(r12\\)" -func_check +3788 "lxv vs40,16\\(0\\)" -func_check +3792 "lxv vs40,16\\(r12\\)" -func_check +3796 "lxv vs40,-16\\(0\\)" -func_check +3800 "lxv vs10,-16\\(r12\\)" -func_check +3804 "lxv vs10,32752\\(0\\)" -func_check +3808 "lxv vs10,32752\\(r12\\)" -func_check +3812 "lxv vs10,-32768\\(0\\)" -func_check +3816 "lxv vs10,-32768\\(r12\\)" -func_check +3820 "stxsd v21,0\\(0\\)" -func_check +3824 "stxsd v21,0\\(r10\\)" -func_check +3828 "stxsd v21,8\\(0\\)" -func_check +3832 "stxsd v21,8\\(r10\\)" -func_check +3836 "stxsd v21,-8\\(0\\)" -func_check +3840 "stxsd v21,-8\\(r10\\)" -func_check +3844 "stxsd v21,32764\\(0\\)" -func_check +3848 "stxsd v21,32764\\(r10\\)" -func_check +3852 "stxsd v21,-32768\\(0\\)" -func_check +3856 "stxsd v21,-32768\\(r10\\)" -func_check +3860 "stxssp v31,0\\(0\\)" -func_check +3864 "stxssp v31,0\\(r11\\)" -func_check +3868 "stxssp v31,8\\(0\\)" -func_check +3872 "stxssp v31,8\\(r11\\)" -func_check +3876 "stxssp v31,-8\\(0\\)" -func_check +3880 "stxssp v31,-8\\(r11\\)" -func_check +3884 "stxssp v31,32764\\(0\\)" -func_check +3888 "stxssp v31,32764\\(r11\\)" -func_check +3892 "stxssp v31,-32768\\(0\\)" -func_check +3896 "stxssp v31,-32768\\(r11\\)" -func_check +3900 "stxv vs41,0\\(0\\)" -func_check +3904 "stxv vs41,0\\(r12\\)" -func_check +3908 "stxv vs41,16\\(0\\)" -func_check +3912 "stxv vs41,16\\(r12\\)" -func_check +3916 "stxv vs41,-16\\(0\\)" -func_check +3920 "stxv vs11,-16\\(r12\\)" -func_check +3924 "stxv vs11,32752\\(0\\)" -func_check +3928 "stxv vs11,32752\\(r12\\)" -func_check +3932 "stxv vs11,-32768\\(0\\)" -func_check +3936 "stxv vs11,-32768\\(r12\\)" -func_check +3940 "xxperm vs20,vs22,vs24" -func_check +3944 "xxperm vs40,vs42,vs44" -func_check +3948 "xxpermr vs21,vs23,vs25" -func_check +3952 "xxpermr vs41,vs43,vs45" -func_check +3956 "extswsli r12,r20,0" -func_check +3960 "extswsli r12,r20,1" -func_check +3964 "extswsli r12,r20,63" -func_check +3968 "extswsli\. r13,r21,0" -func_check +3972 "extswsli\. r13,r21,1" -func_check +3976 "extswsli\. r13,r21,63" -func_check +3980 "vrlwmi v14,v22,v23" -func_check +3984 "vrldmi v15,v23,v24" -func_check +3988 "vrlwnm v16,v24,v25" -func_check +3992 "vrldnm v17,v25,v26" -func_check +3996 "vbpermd v18,v26,v27" -func_check +4000 "vnegw v19,v20" -func_check +4004 "vnegd v20,v21" -func_check +4008 "vprtybw v21,v22" -func_check +4012 "vprtybd v22,v23" -func_check +4016 "vprtybq v23,v24" -func_check +4020 "vextsb2w v24,v25" -func_check +4024 "vextsh2w v25,v26" -func_check +4028 "vextsb2d v26,v27" -func_check +4032 "vextsh2d v27,v28" -func_check +4036 "vextsw2d v28,v29" -func_check +4040 "vctzb v29,v30" -func_check +4044 "vctzh v30,v31" -func_check +4048 "vctzw v31,v30" -func_check +4052 "vctzd v30,v29" -func_check +4056 "lxsibzx vs10,0,r20" -func_check +4060 "lxsibzx vs50,r10,r20" -func_check +4064 "lxsihzx vs11,0,r21" -func_check +4068 "lxsihzx vs51,r11,r21" -func_check +4072 "stxsibx vs12,0,r22" -func_check +4076 "stxsibx vs52,r12,r22" -func_check +4080 "stxsihx vs13,0,r23" -func_check +4084 "stxsihx vs53,r13,r23" -func_check +4088 "maddhd r10,r11,r12,r13" -func_check +4092 "maddhdu r20,r21,r22,r23" -func_check +4096 "maddld r2,r3,r4,r5" -func_check +4100 "xscmpexpdp cr0,vs10,vs20" -func_check +4104 "xscmpexpdp cr7,vs40,vs50" -func_check +4108 "xsiexpdp vs41,r11,r21" -func_check +4112 "xststdcdp cr0,vs11,127" -func_check +4116 "xststdcdp cr7,vs41,127" -func_check +4120 "xststdcsp cr0,vs11,127" -func_check +4124 "xststdcsp cr7,vs41,127" -func_check +4128 "xsxexpdp r13,vs43" -func_check +4132 "xsxsigdp r14,vs44" -func_check +4136 "xviexpdp vs45,vs46,vs47" -func_check +4140 "xviexpsp vs46,vs47,vs48" -func_check +4144 "xvtstdcdp vs54,vs55,0" -func_check +4148 "xvtstdcdp vs54,vs55,127" -func_check +4152 "xvtstdcsp vs55,vs56,0" -func_check +4156 "xvtstdcsp vs55,vs56,127" -func_check +4160 "xvxexpdp vs57,vs58" -func_check +4164 "xvxexpsp vs58,vs59" -func_check +4168 "xvxsigdp vs59,vs60" -func_check +4172 "xvxsigsp vs60,vs61" -func_check +4176 "cmpeqb cr0,r6,r7" -func_check +4180 "cmpeqb cr7,r6,r7" -func_check +4184 "cmprb cr0,0,r8,r9" -func_check +4188 "cmprb cr7,0,r8,r9" -func_check +4192 "cmprb cr0,1,r8,r9" -func_check +4196 "cmprb cr7,1,r8,r9" -func_check +4200 "setb r15,cr0" -func_check +4204 "setb r15,cr7" -func_check +4208 "lxvl vs26,0,r10" -func_check +4212 "lxvl vs56,r20,r10" -func_check +4216 "stxvl vs27,0,r11" -func_check +4220 "stxvl vs57,r21,r11" -func_check +4224 "vclzlsbb r20,v30" -func_check +4228 "vctzlsbb r21,v31" -func_check +4232 "vcmpneb v10,v11,v12" -func_check +4236 "vcmpneb\. v20,v21,v22" -func_check +4240 "vcmpneh v11,v12,v13" -func_check +4244 "vcmpneh\. v21,v22,v23" -func_check +4248 "vcmpnew v12,v13,v14" -func_check +4252 "vcmpnew\. v22,v23,v24" -func_check +4256 "vcmpnezb v13,v14,v15" -func_check +4260 "vcmpnezb\. v23,v24,v25" -func_check +4264 "vcmpnezh v14,v15,v16" -func_check +4268 "vcmpnezh\. v24,v25,v26" -func_check +4272 "vcmpnezw v15,v16,v17" -func_check +4276 "vcmpnezw\. v25,v26,v27" -func_check +4280 "vextublx r16,r17,v10" -func_check +4284 "vextubrx r17,r18,v11" -func_check +4288 "vextuhlx r18,r19,v12" -func_check +4292 "vextuhrx r19,r20,v13" -func_check +4296 "vextuwlx r20,r21,v14" -func_check +4300 "vextuwrx r21,r22,v15" -func_check +4304 "dtstsfi cr0,0,f3" -func_check +4308 "dtstsfi cr7,63,f3" -func_check +4312 "dtstsfiq cr0,0,f4" -func_check +4316 "dtstsfiq cr7,63,f4" -func_check +4320 "xscvhpdp vs40,vs50" -func_check +4324 "xscvdphp vs41,vs51" -func_check +4328 "xvcvhpsp vs42,vs52" -func_check +4332 "xvcvsphp vs43,vs53" -func_check +4336 "addpcis r3,0" -func_check +4340 "addpcis r3,0" -func_check +4344 "addpcis r4,1" -func_check +4348 "addpcis r4,1" -func_check +4352 "addpcis r5,-2" -func_check +4356 "addpcis r5,-2" -func_check +4360 "addpcis r6,32767" -func_check +4364 "addpcis r6,32767" -func_check +4368 "addpcis r7,-32768" -func_check +4372 "addpcis r7,-32768" -func_check +4376 "slbsync" -func_check +4380 "slbieg r10,r11" -func_check +4384 "slbmfee r3,r4" -func_check +4388 "slbmfee r3,r4" -func_check +4392 "slbmfee r3,r4,1" -func_check +4396 "slbmfev r4,r5" -func_check +4400 "slbmfev r4,r5" -func_check +4404 "slbmfev r4,r5,1" -func_check +4408 "tlbie r3,r4" -func_check +4412 "tlbie r3,r4" -func_check +4416 "tlbie r3,r4,3,1,1" -func_check +4420 "tlbiel r3" -func_check +4424 "tlbiel r3" -func_check +4428 "tlbiel r3,r4,3,1,1" -func_check +4432 "copy r12,r13" -func_check +4436 "paste\. r10,r11" -func_check +4440 "cpabort" -func_check +4444 "hwsync" -func_check +4448 "hwsync" -func_check +4452 "hwsync" -func_check +4456 "lwsync" -func_check +4460 "lwsync" -func_check +4464 "ptesync" -func_check +4468 "ptesync" -func_check +4472 "ldat r20,0,0" -func_check +4476 "ldat r20,r10,28" -func_check +4480 "lwat r21,0,0" -func_check +4484 "lwat r21,r11,28" -func_check +4488 "stdat r22,0,0" -func_check +4492 "stdat r22,r12,28" -func_check +4496 "stwat r23,0,0" -func_check +4500 "stwat r23,r13,28" -func_check +4504 "urfid" -func_check +4508 "rmieg r30" -func_check +4512 "ldmx r10,0,r15" -func_check +4516 "ldmx r10,r3,r15" -func_check +4520 "stop" -func_check +4524 "wait" -func_check +4528 "wait" -func_check +4532 "darn r3,0" -func_check +4536 "darn r3,1" -func_check +4540 "darn r3,2" -func_check +4544 "mcrxrx cr0" -func_check +4548 "mcrxrx cr7" -func_check +4552 "vslv v20,v21,v22" -func_check +4556 "vsrv v23,v24,v25" -func_check +4560 "msgsync" -func_check +4564 "xscmpeqdp vs30,vs40,vs50" -func_check +4568 "xscmpgtdp vs31,vs41,vs51" -func_check +4572 "xscmpgedp vs32,vs42,vs52" -func_check +4576 "xsmincdp vs34,vs44,vs54" -func_check +4580 "xsmaxcdp vs35,vs45,vs55" -func_check +4584 "xsminjdp vs36,vs46,vs56" -func_check +4588 "xsmaxjdp vs37,vs47,vs57" -func_check +4592 "vmsumudm v20,v21,v22,v23" -func_check +4596 "addex r11,r12,r13,0" -func_check +4600 "addex r11,r12,r13,1" -func_check +4604 "addex r11,r12,r13,2" -func_check +4608 "mffs f25" -func_check +4612 "mffs\. f25" -func_check +4616 "mffsce f26" -func_check +4620 "mffscdrn f27,f20" -func_check +4624 "mffscdrni f28,0" -func_check +4628 "mffscdrni f28,7" -func_check +4632 "mffscrn f29,f21" -func_check +4636 "mffscrni f30,0" -func_check +4640 "mffscrni f30,3" -func_check +4644 "mffsl f31" -func_check +4648 "slbiag r10" - -## altivec3.d -func_check +4652 "vmul10cuq v11,v30" -func_check +4656 "vcmpneb v30,v1,v23" -func_check +4660 "vpermr v30,v19,v30,v29" -func_check +4664 "vmul10ecuq v20,v20,v17" -func_check +4668 "vcmpneh v27,v19,v31" -func_check +4672 "vrlwmi v6,v9,v23" -func_check +4676 "vcmpnew v22,v26,v1" -func_check +4680 "vrldmi v24,v30,v25" -func_check +4684 "vcmpnezb v19,v29,v22" -func_check +4688 "vcmpnezh v8,v23,v19" -func_check +4692 "vrlwnm v27,v24,v11" -func_check +4696 "vcmpnezw v21,v13,v10" -func_check +4700 "vrldnm v5,v20,v29" -func_check +4704 "vmul10uq v30,v19" -func_check +4708 "vextractub v24,v21,12" -func_check +4712 "vmul10euq v0,v19,v28" -func_check +4716 "vextractuh v10,v3,12" -func_check +4720 "vextractuw v28,v12,7" -func_check +4724 "vextractd v30,v27,1" -func_check +4728 "vinsertb v25,v31,4" -func_check +4732 "bcdcpsgn\. v21,v14,v30" -func_check +4736 "vinserth v22,v18,5" -func_check +4740 "vinsertw v29,v22,1" -func_check +4744 "vinsertd v29,v13,7" -func_check +4748 "vcmpneb\. v22,v25,v8" -func_check +4752 "vcmpneh\. v16,v15,v21" -func_check +4756 "bcdus\. v22,v21,v31" -func_check +4760 "vcmpnew\. v1,v12,v12" -func_check +4764 "bcds\. v5,v3,v8,1" -func_check +4768 "bcdtrunc\. v27,v22,v1,0" -func_check +4772 "vcmpnezb\. v2,v26,v0" -func_check +4776 "bcdutrunc\. v26,v14,v7" -func_check +4780 "vcmpnezh\. v16,v5,v12" -func_check +4784 "bcdctsq\. v24,v5" -func_check +4788 "bcdcfsq\. v7,v0,0" -func_check +4792 "bcdctz\. v30,v12,1" -func_check +4796 "bcdctn\. v17,v23" -func_check +4800 "bcdcfz\. v4,v15,1" -func_check +4804 "bcdcfn\. v29,v5,1" -func_check +4808 "bcdsetsgn\. v27,v12,0" -func_check +4812 "vcmpnezw\. v14,v28,v25" -func_check +4816 "bcdsr\. v2,v2,v6,1" -func_check +4820 "vbpermd v25,v0,v5" -func_check +4824 "vclzlsbb r28,v25" -func_check +4828 "vctzlsbb r2,v24" -func_check +4832 "vnegw v21,v11" -func_check +4836 "vnegd v17,v27" -func_check +4840 "vprtybw v31,v23" -func_check +4844 "vprtybd v21,v23" -func_check +4848 "vprtybq v21,v18" -func_check +4852 "vextsb2w v30,v4" -func_check +4856 "vextsh2w v3,v26" -func_check +4860 "vextsb2d v11,v17" -func_check +4864 "vextsh2d v5,v10" -func_check +4868 "vextsw2d v13,v25" -func_check +4872 "vctzb v25,v2" -func_check +4876 "vctzh v0,v3" -func_check +4880 "vctzw v22,v6" -func_check +4884 "vctzd v26,v24" -func_check +4888 "vextublx r6,r31,v2" -func_check +4892 "vextuhlx r13,r0,v18" -func_check +4896 "vextuwlx r14,r30,v31" -func_check +4900 "vsrv v15,v12,v14" -func_check +4904 "vextubrx r20,r10,v30" -func_check +4908 "vslv v21,v21,v2" -func_check +4912 "vextuhrx r15,r9,v1" -func_check +4916 "vextuwrx r21,r17,v16" -func_check +4920 "vmsumudm v20,v21,v22,v23" - -## vsx3.d -func_check +4924 "lxvx vs34,r6,r25" -func_check +4928 "lxvx vs20,0,r10" -func_check +4932 "lxvl vs20,r24,r10" -func_check +4936 "lxvl vs54,0,r29" -func_check +4940 "lxvll vs24,r20,r19" -func_check +4944 "lxvll vs34,0,r14" -func_check +4948 "mfvsrld r2,vs22" -func_check +4952 "lxvwsx vs58,r26,r25" -func_check +4956 "lxvwsx vs55,0,r29" -func_check +4960 "stxvx vs14,r21,r4" -func_check +4964 "stxvx vs30,0,r22" -func_check +4968 "stxvl vs0,r26,r4" -func_check +4972 "stxvl vs37,0,r22" -func_check +4976 "mtvsrws vs24,r10" -func_check +4980 "stxvll vs30,r21,r15" -func_check +4984 "stxvll vs39,0,r14" -func_check +4988 "mtvsrdd vs12,r6,r5" -func_check +4992 "mtvsrdd vs38,0,r21" -func_check +4996 "lxsibzx vs59,r28,r6" -func_check +5000 "lxsibzx vs30,0,r8" -func_check +5004 "lxvh8x vs42,r23,r17" -func_check +5008 "lxvh8x vs36,0,r5" -func_check +5012 "lxsihzx vs12,r9,r11" -func_check +5016 "lxsihzx vs49,0,r13" -func_check +5020 "lxvb16x vs37,r3,r19" -func_check +5024 "lxvb16x vs0,0,r30" -func_check +5028 "stxsibx vs2,r30,r6" -func_check +5032 "stxsibx vs12,0,r13" -func_check +5036 "stxvh8x vs16,r29,r8" -func_check +5040 "stxvh8x vs55,0,r10" -func_check +5044 "stxsihx vs34,r2,r23" -func_check +5048 "stxsihx vs60,0,r23" -func_check +5052 "stxvb16x vs23,r14,r12" -func_check +5056 "stxvb16x vs19,0,r5" -func_check +5060 "lxsd v24,0\\(0\\)" -func_check +5064 "lxsd v15,16\\(r21\\)" -func_check +5068 "lxssp v6,0\\(0\\)" -func_check +5072 "lxssp v23,16\\(r9\\)" -func_check +5076 "xscmpeqdp vs18,vs51,vs33" -func_check +5080 "xscmpgtdp vs2,vs26,vs34" -func_check +5084 "xscmpgedp vs5,vs26,vs20" -func_check +5088 "xxperm vs44,vs10,vs43" -func_check +5092 "xxpermr vs41,vs20,vs5" -func_check +5096 "xscmpexpdp cr4,vs18,vs55" -func_check +5100 "xxextractuw vs23,vs37,3" -func_check +5104 "xxspltib vs54,235" -func_check +5108 "xxinsertw vs15,vs30,4" -func_check +5112 "xsmaxcdp vs12,vs11,vs7" -func_check +5116 "xsmincdp vs32,vs25,vs24" -func_check +5120 "xsmaxjdp vs25,vs53,vs12" -func_check +5124 "xststdcsp cr2,vs36,127" -func_check +5128 "xsminjdp vs32,vs21,vs45" -func_check +5132 "xsxexpdp r17,vs50" -func_check +5136 "xsxsigdp r7,vs40" -func_check +5140 "xscvhpdp vs54,vs34" -func_check +5144 "xscvdphp vs58,vs54" -func_check +5148 "xststdcdp cr0,vs38,127" -func_check +5152 "xvtstdcsp vs56,vs53,127" -func_check +5156 "xviexpsp vs54,vs20,vs52" -func_check +5160 "xsiexpdp vs57,r28,r29" -func_check +5164 "xvxexpdp vs1,vs20" -func_check +5168 "xvxsigdp vs54,vs59" -func_check +5172 "xxbrh vs18,vs37" -func_check +5176 "xvxexpsp vs14,vs1" -func_check +5180 "xvxsigsp vs52,vs13" -func_check +5184 "xxbrw vs19,vs5" -func_check +5188 "xxbrd vs51,vs55" -func_check +5192 "xvcvhpsp vs35,vs17" -func_check +5196 "xvcvsphp vs15,vs45" -func_check +5200 "xxbrq vs17,vs31" -func_check +5204 "xvtstdcdp vs16,vs12,127" -func_check +5208 "xviexpdp vs27,vs9,vs8" -func_check +5212 "lxv vs4,0\\(0\\)" -func_check +5216 "lxv vs40,16\\(r20\\)" -func_check +5220 "stxv vs50,0\\(0\\)" -func_check +5224 "stxv vs8,16\\(r16\\)" -func_check +5228 "stxsd v3,0\\(0\\)" -func_check +5232 "stxsd v17,16\\(r2\\)" -func_check +5236 "stxssp v13,0\\(0\\)" -func_check +5240 "stxssp v17,16\\(r13\\)" -func_check +5244 "xsaddqp v8,v10,v18" -func_check +5248 "xsaddqpo v5,v1,v29" -func_check +5252 "xsrqpi 0,v12,v18,3" -func_check +5256 "xsrqpix 1,v31,v19,0" -func_check +5260 "xsmulqp v14,v1,v6" -func_check +5264 "xsmulqpo v17,v7,v27" -func_check +5268 "xsrqpxp 0,v4,v11,0" -func_check +5272 "xscpsgnqp v29,v23,v28" -func_check +5276 "xscmpoqp cr7,v13,v27" -func_check +5280 "xscmpexpqp cr5,v21,v6" -func_check +5284 "xsmaddqp v2,v19,v4" -func_check +5288 "xsmaddqpo v30,v7,v16" -func_check +5292 "xsmsubqp v21,v30,v15" -func_check +5296 "xsmsubqpo v12,v17,v30" -func_check +5300 "xsnmaddqp v6,v30,v12" -func_check +5304 "xsnmaddqpo v12,v22,v12" -func_check +5308 "xsnmsubqp v10,v29,v27" -func_check +5312 "xsnmsubqpo v29,v29,v13" -func_check +5316 "xssubqp v19,v27,v4" -func_check +5320 "xssubqpo v13,v8,v1" -func_check +5324 "xsdivqp v8,v3,v27" -func_check +5328 "xsdivqpo v24,v20,v27" -func_check +5332 "xscmpuqp cr7,v14,v4" -func_check +5336 "xststdcqp cr4,v2,127" -func_check +5340 "xsabsqp v31,v22" -func_check +5344 "xsxexpqp v25,v3" -func_check +5348 "xsnabsqp v10,v28" -func_check +5352 "xsnegqp v19,v31" -func_check +5356 "xsxsigqp v11,v13" -func_check +5360 "xssqrtqp v13,v14" -func_check +5364 "xssqrtqpo v1,v27" -func_check +5368 "xscvqpuwz v3,v7" -func_check +5372 "xscvudqp v20,v18" -func_check +5376 "xscvqpswz v29,v29" -func_check +5380 "xscvsdqp v2,v28" -func_check +5384 "xscvqpudz v23,v4" -func_check +5388 "xscvqpdp v3,v20" -func_check +5392 "xscvqpdpo v1,v3" -func_check +5396 "xscvdpqp v19,v12" -func_check +5400 "xscvqpsdz v13,v4" -func_check +5404 "xsiexpqp v7,v24,v7" diff --git a/gdb/testsuite/gdb.arch/powerpc-power.s b/gdb/testsuite/gdb.arch/powerpc-power.s deleted file mode 100644 index 91dbac7..0000000 --- a/gdb/testsuite/gdb.arch/powerpc-power.s +++ /dev/null @@ -1,1389 +0,0 @@ -/* This testcase is part of GDB, the GNU debugger. - - Copyright 2014-2017 Free Software Foundation, Inc. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - - .text - .globl func -func: - -## power7.d - .long 0x7c642e98 /* <+0>: lxvd2x vs3,r4,r5 */ - .long 0x7d642e99 /* <+4>: lxvd2x vs43,r4,r5 */ - .long 0x7c642f98 /* <+8>: stxvd2x vs3,r4,r5 */ - .long 0x7d642f99 /* <+12>: stxvd2x vs43,r4,r5 */ - .long 0xf0642850 /* <+16>: xxmrghd vs3,vs4,vs5 */ - .long 0xf16c6857 /* <+20>: xxmrghd vs43,vs44,vs45 */ - .long 0xf0642b50 /* <+24>: xxmrgld vs3,vs4,vs5 */ - .long 0xf16c6b57 /* <+28>: xxmrgld vs43,vs44,vs45 */ - .long 0xf0642850 /* <+32>: xxmrghd vs3,vs4,vs5 */ - .long 0xf16c6857 /* <+36>: xxmrghd vs43,vs44,vs45 */ - .long 0xf0642b50 /* <+40>: xxmrgld vs3,vs4,vs5 */ - .long 0xf16c6b57 /* <+44>: xxmrgld vs43,vs44,vs45 */ - .long 0xf0642950 /* <+48>: xxpermdi vs3,vs4,vs5,1 */ - .long 0xf16c6957 /* <+52>: xxpermdi vs43,vs44,vs45,1 */ - .long 0xf0642a50 /* <+56>: xxpermdi vs3,vs4,vs5,2 */ - .long 0xf16c6a57 /* <+60>: xxpermdi vs43,vs44,vs45,2 */ - .long 0xf0642780 /* <+64>: xvmovdp vs3,vs4 */ - .long 0xf16c6787 /* <+68>: xvmovdp vs43,vs44 */ - .long 0xf0642780 /* <+72>: xvmovdp vs3,vs4 */ - .long 0xf16c6787 /* <+76>: xvmovdp vs43,vs44 */ - .long 0xf0642f80 /* <+80>: xvcpsgndp vs3,vs4,vs5 */ - .long 0xf16c6f87 /* <+84>: xvcpsgndp vs43,vs44,vs45 */ - .long 0x4c000324 /* <+88>: doze */ - .long 0x4c000364 /* <+92>: nap */ - .long 0x4c0003a4 /* <+96>: sleep */ - .long 0x4c0003e4 /* <+100>: rvwinkle */ - .long 0x7c830134 /* <+104>: prtyw r3,r4 */ - .long 0x7dcd0174 /* <+108>: prtyd r13,r14 */ - .long 0x7d5c02a6 /* <+112>: mfcfar r10 */ - .long 0x7d7c03a6 /* <+116>: mtcfar r11 */ - .long 0x7c832bf8 /* <+120>: cmpb r3,r4,r5 */ - .long 0x7d4b662a /* <+124>: lwzcix r10,r11,r12 */ - .long 0xee119004 /* <+128>: dadd f16,f17,f18 */ - .long 0xfe96c004 /* <+132>: daddq f20,f22,f24 */ - .long 0x7c60066c /* <+136>: dss 3 */ - .long 0x7e00066c /* <+140>: dssall */ - .long 0x7c2522ac /* <+144>: dst r5,r4,1 */ - .long 0x7e083aac /* <+148>: dstt r8,r7,0 */ - .long 0x7c6532ec /* <+152>: dstst r5,r6,3 */ - .long 0x7e442aec /* <+156>: dststt r4,r5,2 */ - .long 0x7d4b6356 /* <+160>: divwe r10,r11,r12 */ - .long 0x7d6c6b57 /* <+164>: divwe. r11,r12,r13 */ - .long 0x7d8d7756 /* <+168>: divweo r12,r13,r14 */ - .long 0x7dae7f57 /* <+172>: divweo. r13,r14,r15 */ - .long 0x7d4b6316 /* <+176>: divweu r10,r11,r12 */ - .long 0x7d6c6b17 /* <+180>: divweu. r11,r12,r13 */ - .long 0x7d8d7716 /* <+184>: divweuo r12,r13,r14 */ - .long 0x7dae7f17 /* <+188>: divweuo. r13,r14,r15 */ - .long 0x7e27d9f8 /* <+192>: bpermd r7,r17,r27 */ - .long 0x7e8a02f4 /* <+196>: popcntw r10,r20 */ - .long 0x7e8a03f4 /* <+200>: popcntd r10,r20 */ - .long 0x7e95b428 /* <+204>: ldbrx r20,r21,r22 */ - .long 0x7e95b528 /* <+208>: stdbrx r20,r21,r22 */ - .long 0x7d4056ee /* <+212>: lfiwzx f10,0,r10 */ - .long 0x7d4956ee /* <+216>: lfiwzx f10,r9,r10 */ - .long 0xec802e9c /* <+220>: fcfids f4,f5 */ - .long 0xec802e9d /* <+224>: fcfids. f4,f5 */ - .long 0xec802f9c /* <+228>: fcfidus f4,f5 */ - .long 0xec802f9d /* <+232>: fcfidus. f4,f5 */ - .long 0xfc80291c /* <+236>: fctiwu f4,f5 */ - .long 0xfc80291d /* <+240>: fctiwu. f4,f5 */ - .long 0xfc80291e /* <+244>: fctiwuz f4,f5 */ - .long 0xfc80291f /* <+248>: fctiwuz. f4,f5 */ - .long 0xfc802f5c /* <+252>: fctidu f4,f5 */ - .long 0xfc802f5d /* <+256>: fctidu. f4,f5 */ - .long 0xfc802f5e /* <+260>: fctiduz f4,f5 */ - .long 0xfc802f5f /* <+264>: fctiduz. f4,f5 */ - .long 0xfc802f9c /* <+268>: fcfidu f4,f5 */ - .long 0xfc802f9d /* <+272>: fcfidu. f4,f5 */ - .long 0xfc0a5900 /* <+276>: ftdiv cr0,f10,f11 */ - .long 0xff8a5900 /* <+280>: ftdiv cr7,f10,f11 */ - .long 0xfc005140 /* <+284>: ftsqrt cr0,f10 */ - .long 0xff805140 /* <+288>: ftsqrt cr7,f10 */ - .long 0x7e084a2c /* <+292>: dcbtt r8,r9 */ - .long 0x7e0849ec /* <+296>: dcbtstt r8,r9 */ - .long 0xed406644 /* <+300>: dcffix f10,f12 */ - .long 0xee80b645 /* <+304>: dcffix. f20,f22 */ - .long 0xfdc07830 /* <+308>: fre f14,f15 */ - .long 0xfdc07831 /* <+312>: fre. f14,f15 */ - .long 0xedc07830 /* <+316>: fres f14,f15 */ - .long 0xedc07831 /* <+320>: fres. f14,f15 */ - .long 0xfdc07834 /* <+324>: frsqrte f14,f15 */ - .long 0xfdc07835 /* <+328>: frsqrte. f14,f15 */ - .long 0xedc07834 /* <+332>: frsqrtes f14,f15 */ - .long 0xedc07835 /* <+336>: frsqrtes. f14,f15 */ - .long 0x7c43271e /* <+340>: isel r2,r3,r4,28 */ - .long 0x7f7bdb78 /* <+344>: yield */ - .long 0x7f7bdb78 /* <+348>: yield */ - .long 0x60420000 /* <+352>: ori r2,r2,0 */ - .long 0x60000000 /* <+356>: nop */ - .long 0x60000000 /* <+360>: nop */ - .long 0x60420000 /* <+364>: ori r2,r2,0 */ - .long 0x7fbdeb78 /* <+368>: mdoio */ - .long 0x7fbdeb78 /* <+372>: mdoio */ - .long 0x7fdef378 /* <+376>: mdoom */ - .long 0x7fdef378 /* <+380>: mdoom */ - .long 0x7d40e2a6 /* <+384>: mfppr r10 */ - .long 0x7d62e2a6 /* <+388>: mfppr32 r11 */ - .long 0x7d80e3a6 /* <+392>: mtppr r12 */ - .long 0x7da2e3a6 /* <+396>: mtppr32 r13 */ - .long 0x7d605264 /* <+400>: tlbie r10,r11 */ - -## altivec.d - .long 0x7c60066c /* <+404>: dss 3 */ - .long 0x7e00066c /* <+408>: dssall */ - .long 0x7c2522ac /* <+412>: dst r5,r4,1 */ - .long 0x7e083aac /* <+416>: dstt r8,r7,0 */ - .long 0x7c6532ec /* <+420>: dstst r5,r6,3 */ - .long 0x7e442aec /* <+424>: dststt r4,r5,2 */ - .long 0x7fd6c00e /* <+428>: lvebx v30,r22,r24 */ - .long 0x7ea0c00e /* <+432>: lvebx v21,0,r24 */ - .long 0x7d50104e /* <+436>: lvehx v10,r16,r2 */ - .long 0x7e80b84e /* <+440>: lvehx v20,0,r23 */ - .long 0x7e24908e /* <+444>: lvewx v17,r4,r18 */ - .long 0x7ee0408e /* <+448>: lvewx v23,0,r8 */ - .long 0x7cc0c80c /* <+452>: lvsl v6,0,r25 */ - .long 0x7c40300c /* <+456>: lvsl v2,0,r6 */ - .long 0x7ed0604c /* <+460>: lvsr v22,r16,r12 */ - .long 0x7c00e84c /* <+464>: lvsr v0,0,r29 */ - .long 0x7de56ace /* <+468>: lvxl v15,r5,r13 */ - .long 0x7e60bace /* <+472>: lvxl v19,0,r23 */ - .long 0x7ec110ce /* <+476>: lvx v22,r1,r2 */ - .long 0x7e4088ce /* <+480>: lvx v18,0,r17 */ - .long 0x7fe042a6 /* <+484>: mfvrsave r31 */ - .long 0x13000604 /* <+488>: mfvscr v24 */ - .long 0x7d4043a6 /* <+492>: mtvrsave r10 */ - .long 0x1000ce44 /* <+496>: mtvscr v25 */ - .long 0x7e5b510e /* <+500>: stvebx v18,r27,r10 */ - .long 0x7e00310e /* <+504>: stvebx v16,0,r6 */ - .long 0x7e2d814e /* <+508>: stvehx v17,r13,r16 */ - .long 0x7ee0a14e /* <+512>: stvehx v23,0,r20 */ - .long 0x7d73f98e /* <+516>: stvewx v11,r19,r31 */ - .long 0x7fe0098e /* <+520>: stvewx v31,0,r1 */ - .long 0x7f558bce /* <+524>: stvxl v26,r21,r17 */ - .long 0x7da0b3ce /* <+528>: stvxl v13,0,r22 */ - .long 0x7d7ff9ce /* <+532>: stvx v11,r31,r31 */ - .long 0x7fc081ce /* <+536>: stvx v30,0,r16 */ - .long 0x1307e180 /* <+540>: vaddcuw v24,v7,v28 */ - .long 0x107e580a /* <+544>: vaddfp v3,v30,v11 */ - .long 0x111c4b00 /* <+548>: vaddsbs v8,v28,v9 */ - .long 0x10e52340 /* <+552>: vaddshs v7,v5,v4 */ - .long 0x12dadb80 /* <+556>: vaddsws v22,v26,v27 */ - .long 0x120ee000 /* <+560>: vaddubm v16,v14,v28 */ - .long 0x10c1ca00 /* <+564>: vaddubs v6,v1,v25 */ - .long 0x10443040 /* <+568>: vadduhm v2,v4,v6 */ - .long 0x13554240 /* <+572>: vadduhs v26,v21,v8 */ - .long 0x13bf0880 /* <+576>: vadduwm v29,v31,v1 */ - .long 0x12ed2280 /* <+580>: vadduws v23,v13,v4 */ - .long 0x13d04c44 /* <+584>: vandc v30,v16,v9 */ - .long 0x106ddc04 /* <+588>: vand v3,v13,v27 */ - .long 0x10868d02 /* <+592>: vavgsb v4,v6,v17 */ - .long 0x12fc9d42 /* <+596>: vavgsh v23,v28,v19 */ - .long 0x110ffd82 /* <+600>: vavgsw v8,v15,v31 */ - .long 0x10c7cc02 /* <+604>: vavgub v6,v7,v25 */ - .long 0x13365442 /* <+608>: vavguh v25,v22,v10 */ - .long 0x1077ec82 /* <+612>: vavguw v3,v23,v29 */ - .long 0x11c613ca /* <+616>: vctsxs v14,v2,6 */ - .long 0x1134fb8a /* <+620>: vctuxs v9,v31,20 */ - .long 0x1303f34a /* <+624>: vcfsx v24,v30,3 */ - .long 0x123dab0a /* <+628>: vcfux v17,v21,29 */ - .long 0x125c03c6 /* <+632>: vcmpbfp v18,v28,v0 */ - .long 0x127a1fc6 /* <+636>: vcmpbfp. v19,v26,v3 */ - .long 0x120258c6 /* <+640>: vcmpeqfp v16,v2,v11 */ - .long 0x12ed6cc6 /* <+644>: vcmpeqfp. v23,v13,v13 */ - .long 0x13335006 /* <+648>: vcmpequb v25,v19,v10 */ - .long 0x124b1406 /* <+652>: vcmpequb. v18,v11,v2 */ - .long 0x11393846 /* <+656>: vcmpequh v9,v25,v7 */ - .long 0x11d8ac46 /* <+660>: vcmpequh. v14,v24,v21 */ - .long 0x130c2886 /* <+664>: vcmpequw v24,v12,v5 */ - .long 0x12700c86 /* <+668>: vcmpequw. v19,v16,v1 */ - .long 0x12f181c6 /* <+672>: vcmpgefp v23,v17,v16 */ - .long 0x127d8dc6 /* <+676>: vcmpgefp. v19,v29,v17 */ - .long 0x121c6ac6 /* <+680>: vcmpgtfp v16,v28,v13 */ - .long 0x11d83ec6 /* <+684>: vcmpgtfp. v14,v24,v7 */ - .long 0x12163306 /* <+688>: vcmpgtsb v16,v22,v6 */ - .long 0x104c7706 /* <+692>: vcmpgtsb. v2,v12,v14 */ - .long 0x1383eb46 /* <+696>: vcmpgtsh v28,v3,v29 */ - .long 0x12136f46 /* <+700>: vcmpgtsh. v16,v19,v13 */ - .long 0x11e02b86 /* <+704>: vcmpgtsw v15,v0,v5 */ - .long 0x12ad0786 /* <+708>: vcmpgtsw. v21,v13,v0 */ - .long 0x10aaf206 /* <+712>: vcmpgtub v5,v10,v30 */ - .long 0x10ed5606 /* <+716>: vcmpgtub. v7,v13,v10 */ - .long 0x130f8246 /* <+720>: vcmpgtuh v24,v15,v16 */ - .long 0x1335de46 /* <+724>: vcmpgtuh. v25,v21,v27 */ - .long 0x123b3286 /* <+728>: vcmpgtuw v17,v27,v6 */ - .long 0x1115de86 /* <+732>: vcmpgtuw. v8,v21,v27 */ - .long 0x102e0b4a /* <+736>: vcfsx v1,v1,14 */ - .long 0x10997bca /* <+740>: vctsxs v4,v15,25 */ - .long 0x138ebb8a /* <+744>: vctuxs v28,v23,14 */ - .long 0x10c0330a /* <+748>: vcfux v6,v6,0 */ - .long 0x1000418a /* <+752>: vexptefp v0,v8 */ - .long 0x12c0d9ca /* <+756>: vlogefp v22,v27 */ - .long 0x12f2916e /* <+760>: vmaddfp v23,v18,v5,v18 */ - .long 0x11addc0a /* <+764>: vmaxfp v13,v13,v27 */ - .long 0x11177102 /* <+768>: vmaxsb v8,v23,v14 */ - .long 0x12710142 /* <+772>: vmaxsh v19,v17,v0 */ - .long 0x1263b182 /* <+776>: vmaxsw v19,v3,v22 */ - .long 0x12fee002 /* <+780>: vmaxub v23,v30,v28 */ - .long 0x1134b842 /* <+784>: vmaxuh v9,v20,v23 */ - .long 0x12b30882 /* <+788>: vmaxuw v21,v19,v1 */ - .long 0x12cd2da0 /* <+792>: vmhaddshs v22,v13,v5,v22 */ - .long 0x13e01ca1 /* <+796>: vmhraddshs v31,v0,v3,v18 */ - .long 0x1055c44a /* <+800>: vminfp v2,v21,v24 */ - .long 0x12865302 /* <+804>: vminsb v20,v6,v10 */ - .long 0x125bd342 /* <+808>: vminsh v18,v27,v26 */ - .long 0x10640b82 /* <+812>: vminsw v3,v4,v1 */ - .long 0x10e06a02 /* <+816>: vminub v7,v0,v13 */ - .long 0x100c3242 /* <+820>: vminuh v0,v12,v6 */ - .long 0x10c30a82 /* <+824>: vminuw v6,v3,v1 */ - .long 0x107d1ea2 /* <+828>: vmladduhm v3,v29,v3,v26 */ - .long 0x12a5f80c /* <+832>: vmrghb v21,v5,v31 */ - .long 0x12b8004c /* <+836>: vmrghh v21,v24,v0 */ - .long 0x1200b08c /* <+840>: vmrghw v16,v0,v22 */ - .long 0x1031810c /* <+844>: vmrglb v1,v17,v16 */ - .long 0x11c8794c /* <+848>: vmrglh v14,v8,v15 */ - .long 0x13f5298c /* <+852>: vmrglw v31,v21,v5 */ - .long 0x13094c84 /* <+856>: vmr v24,v9 */ - .long 0x13094c84 /* <+860>: vmr v24,v9 */ - .long 0x10187de5 /* <+864>: vmsummbm v0,v24,v15,v23 */ - .long 0x10243e68 /* <+868>: vmsumshm v1,v4,v7,v25 */ - .long 0x11286fe9 /* <+872>: vmsumshs v9,v8,v13,v31 */ - .long 0x12ff67a4 /* <+876>: vmsumubm v23,v31,v12,v30 */ - .long 0x13a0d566 /* <+880>: vmsumuhm v29,v0,v26,v21 */ - .long 0x136ec967 /* <+884>: vmsumuhs v27,v14,v25,v5 */ - .long 0x11597308 /* <+888>: vmulesb v10,v25,v14 */ - .long 0x10324348 /* <+892>: vmulesh v1,v18,v8 */ - .long 0x122e4a08 /* <+896>: vmuleub v17,v14,v9 */ - .long 0x10ba4a48 /* <+900>: vmuleuh v5,v26,v9 */ - .long 0x12b23108 /* <+904>: vmulosb v21,v18,v6 */ - .long 0x10854148 /* <+908>: vmulosh v4,v5,v8 */ - .long 0x10499808 /* <+912>: vmuloub v2,v9,v19 */ - .long 0x13a52048 /* <+916>: vmulouh v29,v5,v4 */ - .long 0x110229af /* <+920>: vnmsubfp v8,v2,v6,v5 */ - .long 0x13e95504 /* <+924>: vnor v31,v9,v10 */ - .long 0x133ffd04 /* <+928>: vnot v25,v31 */ - .long 0x133ffd04 /* <+932>: vnot v25,v31 */ - .long 0x12e71484 /* <+936>: vor v23,v7,v2 */ - .long 0x101cb66b /* <+940>: vperm v0,v28,v22,v25 */ - .long 0x12198b0e /* <+944>: vpkpx v16,v25,v17 */ - .long 0x1190898e /* <+948>: vpkshss v12,v16,v17 */ - .long 0x1033b90e /* <+952>: vpkshus v1,v19,v23 */ - .long 0x132769ce /* <+956>: vpkswss v25,v7,v13 */ - .long 0x1098514e /* <+960>: vpkswus v4,v24,v10 */ - .long 0x113b600e /* <+964>: vpkuhum v9,v27,v12 */ - .long 0x12cac88e /* <+968>: vpkuhus v22,v10,v25 */ - .long 0x13d2004e /* <+972>: vpkuwum v30,v18,v0 */ - .long 0x10e3b0ce /* <+976>: vpkuwus v7,v3,v22 */ - .long 0x1300e10a /* <+980>: vrefp v24,v28 */ - .long 0x12209aca /* <+984>: vrfim v17,v19 */ - .long 0x1300ca0a /* <+988>: vrfin v24,v25 */ - .long 0x10602a8a /* <+992>: vrfip v3,v5 */ - .long 0x1100524a /* <+996>: vrfiz v8,v10 */ - .long 0x1352f004 /* <+1000>: vrlb v26,v18,v30 */ - .long 0x1211c844 /* <+1004>: vrlh v16,v17,v25 */ - .long 0x12fe4884 /* <+1008>: vrlw v23,v30,v9 */ - .long 0x1040914a /* <+1012>: vrsqrtefp v2,v18 */ - .long 0x128e92aa /* <+1016>: vsel v20,v14,v18,v10 */ - .long 0x13396104 /* <+1020>: vslb v25,v25,v12 */ - .long 0x112961ec /* <+1024>: vsldoi v9,v9,v12,7 */ - .long 0x11c25944 /* <+1028>: vslh v14,v2,v11 */ - .long 0x13c5340c /* <+1032>: vslo v30,v5,v6 */ - .long 0x12de49c4 /* <+1036>: vsl v22,v30,v9 */ - .long 0x135a1984 /* <+1040>: vslw v26,v26,v3 */ - .long 0x1026a20c /* <+1044>: vspltb v1,v20,6 */ - .long 0x1203924c /* <+1048>: vsplth v16,v18,3 */ - .long 0x1333030c /* <+1052>: vspltisb v25,-13 */ - .long 0x12ca034c /* <+1056>: vspltish v22,10 */ - .long 0x11ad038c /* <+1060>: vspltisw v13,13 */ - .long 0x1122928c /* <+1064>: vspltw v9,v18,2 */ - .long 0x11d60304 /* <+1068>: vsrab v14,v22,v0 */ - .long 0x118c9344 /* <+1072>: vsrah v12,v12,v18 */ - .long 0x10426b84 /* <+1076>: vsraw v2,v2,v13 */ - .long 0x10fb2a04 /* <+1080>: vsrb v7,v27,v5 */ - .long 0x10ebea44 /* <+1084>: vsrh v7,v11,v29 */ - .long 0x125efc4c /* <+1088>: vsro v18,v30,v31 */ - .long 0x1049e2c4 /* <+1092>: vsr v2,v9,v28 */ - .long 0x10190284 /* <+1096>: vsrw v0,v25,v0 */ - .long 0x13025580 /* <+1100>: vsubcuw v24,v2,v10 */ - .long 0x12d8a04a /* <+1104>: vsubfp v22,v24,v20 */ - .long 0x11566f00 /* <+1108>: vsubsbs v10,v22,v13 */ - .long 0x1311e740 /* <+1112>: vsubshs v24,v17,v28 */ - .long 0x115a0780 /* <+1116>: vsubsws v10,v26,v0 */ - .long 0x120bc400 /* <+1120>: vsububm v16,v11,v24 */ - .long 0x11750e00 /* <+1124>: vsububs v11,v21,v1 */ - .long 0x10ccc440 /* <+1128>: vsubuhm v6,v12,v24 */ - .long 0x13cb4e40 /* <+1132>: vsubuhs v30,v11,v9 */ - .long 0x12746c80 /* <+1136>: vsubuwm v19,v20,v13 */ - .long 0x12593680 /* <+1140>: vsubuws v18,v25,v6 */ - .long 0x132a9688 /* <+1144>: vsum2sws v25,v10,v18 */ - .long 0x11b0af08 /* <+1148>: vsum4sbs v13,v16,v21 */ - .long 0x12e82648 /* <+1152>: vsum4shs v23,v8,v4 */ - .long 0x138df608 /* <+1156>: vsum4ubs v28,v13,v30 */ - .long 0x12ca4788 /* <+1160>: vsumsws v22,v10,v8 */ - .long 0x1300734e /* <+1164>: vupkhpx v24,v14 */ - .long 0x1040b20e /* <+1168>: vupkhsb v2,v22 */ - .long 0x1200124e /* <+1172>: vupkhsh v16,v2 */ - .long 0x1140d3ce /* <+1176>: vupklpx v10,v26 */ - .long 0x11e0e28e /* <+1180>: vupklsb v15,v28 */ - .long 0x110042ce /* <+1184>: vupklsh v8,v8 */ - .long 0x13201cc4 /* <+1188>: vxor v25,v0,v3 */ - -## vsd.d - .long 0x7d0aa499 /* <+1192>: lxsdx vs40,r10,r20 */ - .long 0x7d0aa699 /* <+1196>: lxvd2x vs40,r10,r20 */ - .long 0x7d0aa299 /* <+1200>: lxvdsx vs40,r10,r20 */ - .long 0x7d0aa619 /* <+1204>: lxvw4x vs40,r10,r20 */ - .long 0x7d0aa599 /* <+1208>: stxsdx vs40,r10,r20 */ - .long 0x7d0aa799 /* <+1212>: stxvd2x vs40,r10,r20 */ - .long 0x7d0aa719 /* <+1216>: stxvw4x vs40,r10,r20 */ - .long 0xf100e567 /* <+1220>: xsabsdp vs40,vs60 */ - .long 0xf112e107 /* <+1224>: xsadddp vs40,vs50,vs60 */ - .long 0xf092e15e /* <+1228>: xscmpodp cr1,vs50,vs60 */ - .long 0xf092e11e /* <+1232>: xscmpudp cr1,vs50,vs60 */ - .long 0xf112e587 /* <+1236>: xscpsgndp vs40,vs50,vs60 */ - .long 0xf100e427 /* <+1240>: xscvdpsp vs40,vs60 */ - .long 0xf100e563 /* <+1244>: xscvdpsxds vs40,vs60 */ - .long 0xf100e163 /* <+1248>: xscvdpsxws vs40,vs60 */ - .long 0xf100e523 /* <+1252>: xscvdpuxds vs40,vs60 */ - .long 0xf100e123 /* <+1256>: xscvdpuxws vs40,vs60 */ - .long 0xf100e527 /* <+1260>: xscvspdp vs40,vs60 */ - .long 0xf100e5e3 /* <+1264>: xscvsxddp vs40,vs60 */ - .long 0xf100e5a3 /* <+1268>: xscvuxddp vs40,vs60 */ - .long 0xf112e1c7 /* <+1272>: xsdivdp vs40,vs50,vs60 */ - .long 0xf112e10f /* <+1276>: xsmaddadp vs40,vs50,vs60 */ - .long 0xf112e14f /* <+1280>: xsmaddmdp vs40,vs50,vs60 */ - .long 0xf112e507 /* <+1284>: xsmaxdp vs40,vs50,vs60 */ - .long 0xf112e547 /* <+1288>: xsmindp vs40,vs50,vs60 */ - .long 0xf112e18f /* <+1292>: xsmsubadp vs40,vs50,vs60 */ - .long 0xf112e1cf /* <+1296>: xsmsubmdp vs40,vs50,vs60 */ - .long 0xf112e187 /* <+1300>: xsmuldp vs40,vs50,vs60 */ - .long 0xf100e5a7 /* <+1304>: xsnabsdp vs40,vs60 */ - .long 0xf100e5e7 /* <+1308>: xsnegdp vs40,vs60 */ - .long 0xf112e50f /* <+1312>: xsnmaddadp vs40,vs50,vs60 */ - .long 0xf112e54f /* <+1316>: xsnmaddmdp vs40,vs50,vs60 */ - .long 0xf112e58f /* <+1320>: xsnmsubadp vs40,vs50,vs60 */ - .long 0xf112e5cf /* <+1324>: xsnmsubmdp vs40,vs50,vs60 */ - .long 0xf100e127 /* <+1328>: xsrdpi vs40,vs60 */ - .long 0xf100e1af /* <+1332>: xsrdpic vs40,vs60 */ - .long 0xf100e1e7 /* <+1336>: xsrdpim vs40,vs60 */ - .long 0xf100e1a7 /* <+1340>: xsrdpip vs40,vs60 */ - .long 0xf100e167 /* <+1344>: xsrdpiz vs40,vs60 */ - .long 0xf100e16b /* <+1348>: xsredp vs40,vs60 */ - .long 0xf100e12b /* <+1352>: xsrsqrtedp vs40,vs60 */ - .long 0xf100e12f /* <+1356>: xssqrtdp vs40,vs60 */ - .long 0xf112e147 /* <+1360>: xssubdp vs40,vs50,vs60 */ - .long 0xf092e1ee /* <+1364>: xstdivdp cr1,vs50,vs60 */ - .long 0xf080e1aa /* <+1368>: xstsqrtdp cr1,vs60 */ - .long 0xf100e767 /* <+1372>: xvabsdp vs40,vs60 */ - .long 0xf100e667 /* <+1376>: xvabssp vs40,vs60 */ - .long 0xf112e307 /* <+1380>: xvadddp vs40,vs50,vs60 */ - .long 0xf112e207 /* <+1384>: xvaddsp vs40,vs50,vs60 */ - .long 0xf112e31f /* <+1388>: xvcmpeqdp vs40,vs50,vs60 */ - .long 0xf112e71f /* <+1392>: xvcmpeqdp. vs40,vs50,vs60 */ - .long 0xf112e21f /* <+1396>: xvcmpeqsp vs40,vs50,vs60 */ - .long 0xf112e61f /* <+1400>: xvcmpeqsp. vs40,vs50,vs60 */ - .long 0xf112e39f /* <+1404>: xvcmpgedp vs40,vs50,vs60 */ - .long 0xf112e79f /* <+1408>: xvcmpgedp. vs40,vs50,vs60 */ - .long 0xf112e29f /* <+1412>: xvcmpgesp vs40,vs50,vs60 */ - .long 0xf112e69f /* <+1416>: xvcmpgesp. vs40,vs50,vs60 */ - .long 0xf112e35f /* <+1420>: xvcmpgtdp vs40,vs50,vs60 */ - .long 0xf112e75f /* <+1424>: xvcmpgtdp. vs40,vs50,vs60 */ - .long 0xf112e25f /* <+1428>: xvcmpgtsp vs40,vs50,vs60 */ - .long 0xf112e65f /* <+1432>: xvcmpgtsp. vs40,vs50,vs60 */ - .long 0xf112e787 /* <+1436>: xvcpsgndp vs40,vs50,vs60 */ - .long 0xf11ce787 /* <+1440>: xvmovdp vs40,vs60 */ - .long 0xf11ce787 /* <+1444>: xvmovdp vs40,vs60 */ - .long 0xf112e687 /* <+1448>: xvcpsgnsp vs40,vs50,vs60 */ - .long 0xf11ce687 /* <+1452>: xvmovsp vs40,vs60 */ - .long 0xf11ce687 /* <+1456>: xvmovsp vs40,vs60 */ - .long 0xf100e627 /* <+1460>: xvcvdpsp vs40,vs60 */ - .long 0xf100e763 /* <+1464>: xvcvdpsxds vs40,vs60 */ - .long 0xf100e363 /* <+1468>: xvcvdpsxws vs40,vs60 */ - .long 0xf100e723 /* <+1472>: xvcvdpuxds vs40,vs60 */ - .long 0xf100e323 /* <+1476>: xvcvdpuxws vs40,vs60 */ - .long 0xf100e727 /* <+1480>: xvcvspdp vs40,vs60 */ - .long 0xf100e663 /* <+1484>: xvcvspsxds vs40,vs60 */ - .long 0xf100e263 /* <+1488>: xvcvspsxws vs40,vs60 */ - .long 0xf100e623 /* <+1492>: xvcvspuxds vs40,vs60 */ - .long 0xf100e223 /* <+1496>: xvcvspuxws vs40,vs60 */ - .long 0xf100e7e3 /* <+1500>: xvcvsxddp vs40,vs60 */ - .long 0xf100e6e3 /* <+1504>: xvcvsxdsp vs40,vs60 */ - .long 0xf100e3e3 /* <+1508>: xvcvsxwdp vs40,vs60 */ - .long 0xf100e2e3 /* <+1512>: xvcvsxwsp vs40,vs60 */ - .long 0xf100e7a3 /* <+1516>: xvcvuxddp vs40,vs60 */ - .long 0xf100e6a3 /* <+1520>: xvcvuxdsp vs40,vs60 */ - .long 0xf100e3a3 /* <+1524>: xvcvuxwdp vs40,vs60 */ - .long 0xf100e2a3 /* <+1528>: xvcvuxwsp vs40,vs60 */ - .long 0xf112e3c7 /* <+1532>: xvdivdp vs40,vs50,vs60 */ - .long 0xf112e2c7 /* <+1536>: xvdivsp vs40,vs50,vs60 */ - .long 0xf112e30f /* <+1540>: xvmaddadp vs40,vs50,vs60 */ - .long 0xf112e34f /* <+1544>: xvmaddmdp vs40,vs50,vs60 */ - .long 0xf112e20f /* <+1548>: xvmaddasp vs40,vs50,vs60 */ - .long 0xf112e24f /* <+1552>: xvmaddmsp vs40,vs50,vs60 */ - .long 0xf112e707 /* <+1556>: xvmaxdp vs40,vs50,vs60 */ - .long 0xf112e607 /* <+1560>: xvmaxsp vs40,vs50,vs60 */ - .long 0xf112e747 /* <+1564>: xvmindp vs40,vs50,vs60 */ - .long 0xf112e647 /* <+1568>: xvminsp vs40,vs50,vs60 */ - .long 0xf112e38f /* <+1572>: xvmsubadp vs40,vs50,vs60 */ - .long 0xf112e3cf /* <+1576>: xvmsubmdp vs40,vs50,vs60 */ - .long 0xf112e28f /* <+1580>: xvmsubasp vs40,vs50,vs60 */ - .long 0xf112e2cf /* <+1584>: xvmsubmsp vs40,vs50,vs60 */ - .long 0xf112e387 /* <+1588>: xvmuldp vs40,vs50,vs60 */ - .long 0xf112e287 /* <+1592>: xvmulsp vs40,vs50,vs60 */ - .long 0xf100e7a7 /* <+1596>: xvnabsdp vs40,vs60 */ - .long 0xf100e6a7 /* <+1600>: xvnabssp vs40,vs60 */ - .long 0xf100e7e7 /* <+1604>: xvnegdp vs40,vs60 */ - .long 0xf100e6e7 /* <+1608>: xvnegsp vs40,vs60 */ - .long 0xf112e70f /* <+1612>: xvnmaddadp vs40,vs50,vs60 */ - .long 0xf112e74f /* <+1616>: xvnmaddmdp vs40,vs50,vs60 */ - .long 0xf112e60f /* <+1620>: xvnmaddasp vs40,vs50,vs60 */ - .long 0xf112e64f /* <+1624>: xvnmaddmsp vs40,vs50,vs60 */ - .long 0xf112e78f /* <+1628>: xvnmsubadp vs40,vs50,vs60 */ - .long 0xf112e7cf /* <+1632>: xvnmsubmdp vs40,vs50,vs60 */ - .long 0xf112e68f /* <+1636>: xvnmsubasp vs40,vs50,vs60 */ - .long 0xf112e6cf /* <+1640>: xvnmsubmsp vs40,vs50,vs60 */ - .long 0xf100e327 /* <+1644>: xvrdpi vs40,vs60 */ - .long 0xf100e3af /* <+1648>: xvrdpic vs40,vs60 */ - .long 0xf100e3e7 /* <+1652>: xvrdpim vs40,vs60 */ - .long 0xf100e3a7 /* <+1656>: xvrdpip vs40,vs60 */ - .long 0xf100e367 /* <+1660>: xvrdpiz vs40,vs60 */ - .long 0xf100e36b /* <+1664>: xvredp vs40,vs60 */ - .long 0xf100e26b /* <+1668>: xvresp vs40,vs60 */ - .long 0xf100e227 /* <+1672>: xvrspi vs40,vs60 */ - .long 0xf100e2af /* <+1676>: xvrspic vs40,vs60 */ - .long 0xf100e2e7 /* <+1680>: xvrspim vs40,vs60 */ - .long 0xf100e2a7 /* <+1684>: xvrspip vs40,vs60 */ - .long 0xf100e267 /* <+1688>: xvrspiz vs40,vs60 */ - .long 0xf100e32b /* <+1692>: xvrsqrtedp vs40,vs60 */ - .long 0xf100e22b /* <+1696>: xvrsqrtesp vs40,vs60 */ - .long 0xf100e32f /* <+1700>: xvsqrtdp vs40,vs60 */ - .long 0xf100e22f /* <+1704>: xvsqrtsp vs40,vs60 */ - .long 0xf112e347 /* <+1708>: xvsubdp vs40,vs50,vs60 */ - .long 0xf112e247 /* <+1712>: xvsubsp vs40,vs50,vs60 */ - .long 0xf092e3ee /* <+1716>: xvtdivdp cr1,vs50,vs60 */ - .long 0xf092e2ee /* <+1720>: xvtdivsp cr1,vs50,vs60 */ - .long 0xf080e3aa /* <+1724>: xvtsqrtdp cr1,vs60 */ - .long 0xf080e2aa /* <+1728>: xvtsqrtsp cr1,vs60 */ - .long 0xf112e417 /* <+1732>: xxland vs40,vs50,vs60 */ - .long 0xf112e457 /* <+1736>: xxlandc vs40,vs50,vs60 */ - .long 0xf112e517 /* <+1740>: xxlnor vs40,vs50,vs60 */ - .long 0xf112e497 /* <+1744>: xxlor vs40,vs50,vs60 */ - .long 0xf112e4d7 /* <+1748>: xxlxor vs40,vs50,vs60 */ - .long 0xf112e097 /* <+1752>: xxmrghw vs40,vs50,vs60 */ - .long 0xf112e197 /* <+1756>: xxmrglw vs40,vs50,vs60 */ - .long 0xf112e057 /* <+1760>: xxmrghd vs40,vs50,vs60 */ - .long 0xf112e157 /* <+1764>: xxpermdi vs40,vs50,vs60,1 */ - .long 0xf112e257 /* <+1768>: xxpermdi vs40,vs50,vs60,2 */ - .long 0xf112e357 /* <+1772>: xxmrgld vs40,vs50,vs60 */ - .long 0xf1129057 /* <+1776>: xxspltd vs40,vs50,0 */ - .long 0xf1129057 /* <+1780>: xxspltd vs40,vs50,0 */ - .long 0xf1129357 /* <+1784>: xxspltd vs40,vs50,1 */ - .long 0xf1129357 /* <+1788>: xxspltd vs40,vs50,1 */ - .long 0xf112e057 /* <+1792>: xxmrghd vs40,vs50,vs60 */ - .long 0xf112e057 /* <+1796>: xxmrghd vs40,vs50,vs60 */ - .long 0xf112e357 /* <+1800>: xxmrgld vs40,vs50,vs60 */ - .long 0xf1129257 /* <+1804>: xxswapd vs40,vs50 */ - .long 0xf1129257 /* <+1808>: xxswapd vs40,vs50 */ - .long 0xf112e7bf /* <+1812>: xxsel vs40,vs50,vs60,vs62*/ - .long 0xf112e217 /* <+1816>: xxsldwi vs40,vs50,vs60,2 */ - .long 0xf102e293 /* <+1820>: xxspltw vs40,vs60,2 */ - .long 0x7d00a699 /* <+1824>: lxvd2x vs40,0,r20 */ - .long 0x7d0aa699 /* <+1828>: lxvd2x vs40,r10,r20 */ - .long 0x7d00a799 /* <+1832>: stxvd2x vs40,0,r20 */ - .long 0x7d0aa799 /* <+1836>: stxvd2x vs40,r10,r20 */ - -## power8.d - .long 0x7c05071d /* <+1840>: tabort. r5 */ - .long 0x7ce8861d /* <+1844>: tabortwc. 7,r8,r16 */ - .long 0x7e8b565d /* <+1848>: tabortdc. 20,r11,r10 */ - .long 0x7e2a9e9d /* <+1852>: tabortwci. 17,r10,-13 */ - .long 0x7fa3dedd /* <+1856>: tabortdci. 29,r3,-5 */ - .long 0x7c00051d /* <+1860>: tbegin. */ - .long 0x7f80059c /* <+1864>: tcheck cr7 */ - .long 0x7c00055d /* <+1868>: tend. */ - .long 0x7c00055d /* <+1872>: tend. */ - .long 0x7e00055d /* <+1876>: tendall. */ - .long 0x7e00055d /* <+1880>: tendall. */ - .long 0x7c18075d /* <+1884>: treclaim. r24 */ - .long 0x7c0007dd /* <+1888>: trechkpt. */ - .long 0x7c0005dd /* <+1892>: tsuspend. */ - .long 0x7c0005dd /* <+1896>: tsuspend. */ - .long 0x7c2005dd /* <+1900>: tresume. */ - .long 0x7c2005dd /* <+1904>: tresume. */ - .long 0x60420000 /* <+1908>: ori r2,r2,0 */ - .long 0x60000000 /* <+1912>: nop */ - .long 0x60420000 /* <+1916>: ori r2,r2,0 */ - .long 0x4c000124 /* <+1920>: rfebb 0 */ - .long 0x4c000924 /* <+1924>: rfebb */ - .long 0x4c000924 /* <+1928>: rfebb */ - .long 0x4d950460 /* <+1932>: bctar- 12,4*cr5+gt */ - .long 0x4c870461 /* <+1936>: bctarl- 4,4*cr1+so */ - .long 0x4dac0460 /* <+1940>: bctar+ 12,4*cr3+lt */ - .long 0x4ca20461 /* <+1944>: bctarl+ 4,eq */ - .long 0x4c880c60 /* <+1948>: bctar 4,4*cr2+lt,1 */ - .long 0x4c871461 /* <+1952>: bctarl 4,4*cr1+so,2 */ - .long 0x7c00003c /* <+1956>: waitasec */ - .long 0x7c00411c /* <+1960>: msgsndp r8 */ - .long 0x7c200126 /* <+1964>: mtsle 1 */ - .long 0x7c00d95c /* <+1968>: msgclrp r27 */ - .long 0x7d4a616d /* <+1972>: stqcx. r10,r10,r12 */ - .long 0x7f80396d /* <+1976>: stqcx. r28,0,r7 */ - .long 0x7f135a28 /* <+1980>: lqarx r24,r19,r11 */ - .long 0x7ec05a28 /* <+1984>: lqarx r22,0,r11 */ - .long 0x7e80325c /* <+1988>: mfbhrbe r20,6 */ - .long 0x7fb18329 /* <+1992>: pbt. r29,r17,r16 */ - .long 0x7dc03b29 /* <+1996>: pbt. r14,0,r7 */ - .long 0x7c00035c /* <+2000>: clrbhrb */ - .long 0x116a05ed /* <+2004>: vpermxor v11,v10,v0,v23 */ - .long 0x1302393c /* <+2008>: vaddeuqm v24,v2,v7,v4 */ - .long 0x114a40bd /* <+2012>: vaddecuq v10,v10,v8,v2 */ - .long 0x10af44fe /* <+2016>: vsubeuqm v5,v15,v8,v19 */ - .long 0x119f877f /* <+2020>: vsubecuq v12,v31,v16,v29 */ - .long 0x129d6888 /* <+2024>: vmulouw v20,v29,v13 */ - .long 0x13a0d089 /* <+2028>: vmuluwm v29,v0,v26 */ - .long 0x1115e0c0 /* <+2032>: vaddudm v8,v21,v28 */ - .long 0x103a08c2 /* <+2036>: vmaxud v1,v26,v1 */ - .long 0x128308c4 /* <+2040>: vrld v20,v3,v1 */ - .long 0x109358c7 /* <+2044>: vcmpequd v4,v19,v11 */ - .long 0x12eef100 /* <+2048>: vadduqm v23,v14,v30 */ - .long 0x11086940 /* <+2052>: vaddcuq v8,v8,v13 */ - .long 0x139b2188 /* <+2056>: vmulosw v28,v27,v4 */ - .long 0x106421c2 /* <+2060>: vmaxsd v3,v4,v4 */ - .long 0x1013aa88 /* <+2064>: vmuleuw v0,v19,v21 */ - .long 0x13149ac2 /* <+2068>: vminud v24,v20,v19 */ - .long 0x101c7ac7 /* <+2072>: vcmpgtud v0,v28,v15 */ - .long 0x12a01388 /* <+2076>: vmulesw v21,v0,v2 */ - .long 0x113a4bc2 /* <+2080>: vminsd v9,v26,v9 */ - .long 0x133d5bc4 /* <+2084>: vsrad v25,v29,v11 */ - .long 0x117c5bc7 /* <+2088>: vcmpgtsd v11,v28,v11 */ - .long 0x10a8d601 /* <+2092>: bcdadd. v5,v8,v26,1 */ - .long 0x10836408 /* <+2096>: vpmsumb v4,v3,v12 */ - .long 0x135fae41 /* <+2100>: bcdsub. v26,v31,v21,1 */ - .long 0x10b18448 /* <+2104>: vpmsumh v5,v17,v16 */ - .long 0x12f1a44e /* <+2108>: vpkudum v23,v17,v20 */ - .long 0x1315ec88 /* <+2112>: vpmsumw v24,v21,v29 */ - .long 0x11366cc8 /* <+2116>: vpmsumd v9,v22,v13 */ - .long 0x125394ce /* <+2120>: vpkudus v18,v19,v18 */ - .long 0x13d0b500 /* <+2124>: vsubuqm v30,v16,v22 */ - .long 0x11cb3d08 /* <+2128>: vcipher v14,v11,v7 */ - .long 0x1142b509 /* <+2132>: vcipherlast v10,v2,v22 */ - .long 0x12e06d0c /* <+2136>: vgbbd v23,v13 */ - .long 0x12198540 /* <+2140>: vsubcuq v16,v25,v16 */ - .long 0x13e12d44 /* <+2144>: vorc v31,v1,v5 */ - .long 0x1091fd48 /* <+2148>: vncipher v4,v17,v31 */ - .long 0x1302dd49 /* <+2152>: vncipherlast v24,v2,v27 */ - .long 0x12f5bd4c /* <+2156>: vbpermq v23,v21,v23 */ - .long 0x13724d4e /* <+2160>: vpksdus v27,v18,v9 */ - .long 0x137ddd84 /* <+2164>: vnand v27,v29,v27 */ - .long 0x1273c5c4 /* <+2168>: vsld v19,v19,v24 */ - .long 0x10ad05c8 /* <+2172>: vsbox v5,v13 */ - .long 0x13233dce /* <+2176>: vpksdss v25,v3,v7 */ - .long 0x138804c7 /* <+2180>: vcmpequd. v28,v8,v0 */ - .long 0x1340d64e /* <+2184>: vupkhsw v26,v26 */ - .long 0x10a73682 /* <+2188>: vshasigmaw v5,v7,0,6 */ - .long 0x13957684 /* <+2192>: veqv v28,v21,v14 */ - .long 0x10289e8c /* <+2196>: vmrgow v1,v8,v19 */ - .long 0x100a56c2 /* <+2200>: vshasigmad v0,v10,0,10 */ - .long 0x10bb76c4 /* <+2204>: vsrd v5,v27,v14 */ - .long 0x11606ece /* <+2208>: vupklsw v11,v13 */ - .long 0x11c08702 /* <+2212>: vclzb v14,v16 */ - .long 0x1280df03 /* <+2216>: vpopcntb v20,v27 */ - .long 0x13805f42 /* <+2220>: vclzh v28,v11 */ - .long 0x13004f43 /* <+2224>: vpopcnth v24,v9 */ - .long 0x1360ff82 /* <+2228>: vclzw v27,v31 */ - .long 0x12209f83 /* <+2232>: vpopcntw v17,v19 */ - .long 0x1180efc2 /* <+2236>: vclzd v12,v29 */ - .long 0x12e0b7c3 /* <+2240>: vpopcntd v23,v22 */ - .long 0x1314eec7 /* <+2244>: vcmpgtud. v24,v20,v29 */ - .long 0x1126dfc7 /* <+2248>: vcmpgtsd. v9,v6,v27 */ - .long 0x7fced019 /* <+2252>: lxsiwzx vs62,r14,r26 */ - .long 0x7d00c819 /* <+2256>: lxsiwzx vs40,0,r25 */ - .long 0x7f20d098 /* <+2260>: lxsiwax vs25,0,r26 */ - .long 0x7c601898 /* <+2264>: lxsiwax vs3,0,r3 */ - .long 0x7fcc0067 /* <+2268>: mfvsrd r12,vs62 */ - .long 0x7d9400e6 /* <+2272>: mffprwz r20,f12 */ - .long 0x7dc97118 /* <+2276>: stxsiwx vs14,r9,r14 */ - .long 0x7ea04118 /* <+2280>: stxsiwx vs21,0,r8 */ - .long 0x7e0b0167 /* <+2284>: mtvsrd vs48,r11 */ - .long 0x7ff701a7 /* <+2288>: mtvrwa v31,r23 */ - .long 0x7e1a01e6 /* <+2292>: mtfprwz f16,r26 */ - .long 0x7db36c18 /* <+2296>: lxsspx vs13,r19,r13 */ - .long 0x7e406c18 /* <+2300>: lxsspx vs18,0,r13 */ - .long 0x7d622519 /* <+2304>: stxsspx vs43,r2,r4 */ - .long 0x7ee05d19 /* <+2308>: stxsspx vs55,0,r11 */ - .long 0xf2d0c805 /* <+2312>: xsaddsp vs54,vs48,vs25 */ - .long 0xf1d2080c /* <+2316>: xsmaddasp vs14,vs50,vs1 */ - .long 0xf3565042 /* <+2320>: xssubsp vs26,vs22,vs42 */ - .long 0xf375a04e /* <+2324>: xsmaddmsp vs27,vs53,vs52 */ - .long 0xf100d82a /* <+2328>: xsrsqrtesp vs8,vs59 */ - .long 0xf180482e /* <+2332>: xssqrtsp vs12,vs41 */ - .long 0xf32b0083 /* <+2336>: xsmulsp vs57,vs11,vs32 */ - .long 0xf0d4d089 /* <+2340>: xsmsubasp vs38,vs20,vs26 */ - .long 0xf35330c0 /* <+2344>: xsdivsp vs26,vs19,vs6 */ - .long 0xf065b8cf /* <+2348>: xsmsubmsp vs35,vs37,vs55 */ - .long 0xf3604069 /* <+2352>: xsresp vs59,vs8 */ - .long 0xf1810c0f /* <+2356>: xsnmaddasp vs44,vs33,vs33 */ - .long 0xf23ef44c /* <+2360>: xsnmaddmsp vs17,vs62,vs30 */ - .long 0xf2d4fc8d /* <+2364>: xsnmsubasp vs54,vs52,vs31 */ - .long 0xf0a5d4cb /* <+2368>: xsnmsubmsp vs37,vs5,vs58 */ - .long 0xf3d66556 /* <+2372>: xxlorc vs30,vs54,vs44 */ - .long 0xf22eed91 /* <+2376>: xxlnand vs49,vs14,vs29 */ - .long 0xf3d6f5d1 /* <+2380>: xxleqv vs62,vs22,vs30 */ - .long 0xf380b42f /* <+2384>: xscvdpspn vs60,vs54 */ - .long 0xf2c06c66 /* <+2388>: xsrsp vs22,vs45 */ - .long 0xf340dca2 /* <+2392>: xscvuxdsp vs26,vs59 */ - .long 0xf0c08ce3 /* <+2396>: xscvsxdsp vs38,vs49 */ - .long 0xf360d52d /* <+2400>: xscvspdpn vs59,vs26 */ - .long 0xff0e168c /* <+2404>: fmrgow f24,f14,f2 */ - .long 0xfec72f8c /* <+2408>: fmrgew f22,f7,f5 */ - .long 0x7c00719c /* <+2412>: msgsnd r14 */ - .long 0x7c00b9dc /* <+2416>: msgclr r23 */ - .long 0x7d002e99 /* <+2420>: lxvd2x vs40,0,r5 */ - .long 0x7d002e99 /* <+2424>: lxvd2x vs40,0,r5 */ - .long 0x7d543698 /* <+2428>: lxvd2x vs10,r20,r6 */ - .long 0x7d543698 /* <+2432>: lxvd2x vs10,r20,r6 */ - .long 0x7d203f99 /* <+2436>: stxvd2x vs41,0,r7 */ - .long 0x7d203f99 /* <+2440>: stxvd2x vs41,0,r7 */ - .long 0x7d754798 /* <+2444>: stxvd2x vs11,r21,r8 */ - .long 0x7d754798 /* <+2448>: stxvd2x vs11,r21,r8 */ - -## altivec2.d - .long 0x7c60e20e /* <+2452>: lvepxl v3,0,r28 */ - .long 0x7e64920e /* <+2456>: lvepxl v19,r4,r18 */ - .long 0x7f609a4e /* <+2460>: lvepx v27,0,r19 */ - .long 0x7c39924e /* <+2464>: lvepx v1,r25,r18 */ - .long 0x7fe0da0a /* <+2468>: lvexbx v31,0,r27 */ - .long 0x7f81620a /* <+2472>: lvexbx v28,r1,r12 */ - .long 0x7fe0724a /* <+2476>: lvexhx v31,0,r14 */ - .long 0x7e30fa4a /* <+2480>: lvexhx v17,r16,r31 */ - .long 0x7ec0ea8a /* <+2484>: lvexwx v22,0,r29 */ - .long 0x7ef92a8a /* <+2488>: lvexwx v23,r25,r5 */ - .long 0x7c60660a /* <+2492>: lvsm v3,0,r12 */ - .long 0x7f7d0e0a /* <+2496>: lvsm v27,r29,r1 */ - .long 0x7ce036ca /* <+2500>: lvswxl v7,0,r6 */ - .long 0x7cf046ca /* <+2504>: lvswxl v7,r16,r8 */ - .long 0x7dc094ca /* <+2508>: lvswx v14,0,r18 */ - .long 0x7f9c84ca /* <+2512>: lvswx v28,r28,r16 */ - .long 0x7f60668a /* <+2516>: lvtlxl v27,0,r12 */ - .long 0x7f7c068a /* <+2520>: lvtlxl v27,r28,r0 */ - .long 0x7ee0cc8a /* <+2524>: lvtlx v23,0,r25 */ - .long 0x7c39748a /* <+2528>: lvtlx v1,r25,r14 */ - .long 0x7e80c64a /* <+2532>: lvtrxl v20,0,r24 */ - .long 0x7eddc64a /* <+2536>: lvtrxl v22,r29,r24 */ - .long 0x7f00444a /* <+2540>: lvtrx v24,0,r8 */ - .long 0x7db7e44a /* <+2544>: lvtrx v13,r23,r28 */ - .long 0x7d9c60dc /* <+2548>: mvidsplt v12,r28,r12 */ - .long 0x7d5b005c /* <+2552>: mviwsplt v10,r27,r0 */ - .long 0x7f606e0e /* <+2556>: stvepxl v27,0,r13 */ - .long 0x7c42fe0e /* <+2560>: stvepxl v2,r2,r31 */ - .long 0x7c60564e /* <+2564>: stvepx v3,0,r10 */ - .long 0x7f7c064e /* <+2568>: stvepx v27,r28,r0 */ - .long 0x7da0330a /* <+2572>: stvexbx v13,0,r6 */ - .long 0x7db91b0a /* <+2576>: stvexbx v13,r25,r3 */ - .long 0x7ec00b4a /* <+2580>: stvexhx v22,0,r1 */ - .long 0x7e2e534a /* <+2584>: stvexhx v17,r14,r10 */ - .long 0x7ea0db8a /* <+2588>: stvexwx v21,0,r27 */ - .long 0x7ff20b8a /* <+2592>: stvexwx v31,r18,r1 */ - .long 0x7f406f8a /* <+2596>: stvflxl v26,0,r13 */ - .long 0x7ecdaf8a /* <+2600>: stvflxl v22,r13,r21 */ - .long 0x7ca04d8a /* <+2604>: stvflx v5,0,r9 */ - .long 0x7eb80d8a /* <+2608>: stvflx v21,r24,r1 */ - .long 0x7da0574a /* <+2612>: stvfrxl v13,0,r10 */ - .long 0x7db1cf4a /* <+2616>: stvfrxl v13,r17,r25 */ - .long 0x7e20554a /* <+2620>: stvfrx v17,0,r10 */ - .long 0x7d0cfd4a /* <+2624>: stvfrx v8,r12,r31 */ - .long 0x7e40efca /* <+2628>: stvswxl v18,0,r29 */ - .long 0x7f4e47ca /* <+2632>: stvswxl v26,r14,r8 */ - .long 0x7c007dca /* <+2636>: stvswx v0,0,r15 */ - .long 0x7db73dca /* <+2640>: stvswx v13,r23,r7 */ - .long 0x10d18403 /* <+2644>: vabsdub v6,v17,v16 */ - .long 0x12b22443 /* <+2648>: vabsduh v21,v18,v4 */ - .long 0x13344c83 /* <+2652>: vabsduw v25,v20,v9 */ - .long 0x10d1a6ad /* <+2656>: vpermxor v6,v17,v20,v26 */ - .long 0x13ba7f3c /* <+2660>: vaddeuqm v29,v26,v15,v28 */ - .long 0x11e83e3d /* <+2664>: vaddecuq v15,v8,v7,v24 */ - .long 0x1046a87e /* <+2668>: vsubeuqm v2,v6,v21,v1 */ - .long 0x13a6013f /* <+2672>: vsubecuq v29,v6,v0,v4 */ - .long 0x11c91888 /* <+2676>: vmulouw v14,v9,v3 */ - .long 0x13109089 /* <+2680>: vmuluwm v24,v16,v18 */ - .long 0x115188c0 /* <+2684>: vaddudm v10,v17,v17 */ - .long 0x13d920c2 /* <+2688>: vmaxud v30,v25,v4 */ - .long 0x1146e0c4 /* <+2692>: vrld v10,v6,v28 */ - .long 0x136738c7 /* <+2696>: vcmpequd v27,v7,v7 */ - .long 0x12d0c900 /* <+2700>: vadduqm v22,v16,v25 */ - .long 0x1035e940 /* <+2704>: vaddcuq v1,v21,v29 */ - .long 0x128b9988 /* <+2708>: vmulosw v20,v11,v19 */ - .long 0x131309c2 /* <+2712>: vmaxsd v24,v19,v1 */ - .long 0x11bbf288 /* <+2716>: vmuleuw v13,v27,v30 */ - .long 0x11388ac2 /* <+2720>: vminud v9,v24,v17 */ - .long 0x1152e2c7 /* <+2724>: vcmpgtud v10,v18,v28 */ - .long 0x101db388 /* <+2728>: vmulesw v0,v29,v22 */ - .long 0x11bc0bc2 /* <+2732>: vminsd v13,v28,v1 */ - .long 0x11542bc4 /* <+2736>: vsrad v10,v20,v5 */ - .long 0x13752bc7 /* <+2740>: vcmpgtsd v27,v21,v5 */ - .long 0x1017f601 /* <+2744>: bcdadd. v0,v23,v30,1 */ - .long 0x1338d408 /* <+2748>: vpmsumb v25,v24,v26 */ - .long 0x11042641 /* <+2752>: bcdsub. v8,v4,v4,1 */ - .long 0x120ed448 /* <+2756>: vpmsumh v16,v14,v26 */ - .long 0x1362d44e /* <+2760>: vpkudum v27,v2,v26 */ - .long 0x10d78c88 /* <+2764>: vpmsumw v6,v23,v17 */ - .long 0x1286ccc8 /* <+2768>: vpmsumd v20,v6,v25 */ - .long 0x137684ce /* <+2772>: vpkudus v27,v22,v16 */ - .long 0x12b494c0 /* <+2776>: vsubudm v21,v20,v18 */ - .long 0x12b49500 /* <+2780>: vsubuqm v21,v20,v18 */ - .long 0x13bd3508 /* <+2784>: vcipher v29,v29,v6 */ - .long 0x104da509 /* <+2788>: vcipherlast v2,v13,v20 */ - .long 0x1280950c /* <+2792>: vgbbd v20,v18 */ - .long 0x1268cd40 /* <+2796>: vsubcuq v19,v8,v25 */ - .long 0x113aed44 /* <+2800>: vorc v9,v26,v29 */ - .long 0x12946d48 /* <+2804>: vncipher v20,v20,v13 */ - .long 0x11e5dd49 /* <+2808>: vncipherlast v15,v5,v27 */ - .long 0x1073354c /* <+2812>: vbpermq v3,v19,v6 */ - .long 0x13c4e54e /* <+2816>: vpksdus v30,v4,v28 */ - .long 0x10047584 /* <+2820>: vnand v0,v4,v14 */ - .long 0x1228edc4 /* <+2824>: vsld v17,v8,v29 */ - .long 0x13b405c8 /* <+2828>: vsbox v29,v20 */ - .long 0x11675dce /* <+2832>: vpksdss v11,v7,v11 */ - .long 0x107384c7 /* <+2836>: vcmpequd. v3,v19,v16 */ - .long 0x12408e4e /* <+2840>: vupkhsw v18,v17 */ - .long 0x13a86e82 /* <+2844>: vshasigmaw v29,v8,0,13 */ - .long 0x12fcd684 /* <+2848>: veqv v23,v28,v26 */ - .long 0x13a0178c /* <+2852>: vmrgew v29,v0,v2 */ - .long 0x13a0168c /* <+2856>: vmrgow v29,v0,v2 */ - .long 0x137306c2 /* <+2860>: vshasigmad v27,v19,0,0 */ - .long 0x129ce6c4 /* <+2864>: vsrd v20,v28,v28 */ - .long 0x1240aece /* <+2868>: vupklsw v18,v21 */ - .long 0x13c03f02 /* <+2872>: vclzb v30,v7 */ - .long 0x13a0af03 /* <+2876>: vpopcntb v29,v21 */ - .long 0x1320af42 /* <+2880>: vclzh v25,v21 */ - .long 0x1200f743 /* <+2884>: vpopcnth v16,v30 */ - .long 0x13801f82 /* <+2888>: vclzw v28,v3 */ - .long 0x11404f83 /* <+2892>: vpopcntw v10,v9 */ - .long 0x12c04fc2 /* <+2896>: vclzd v22,v9 */ - .long 0x11e0f7c3 /* <+2900>: vpopcntd v15,v30 */ - .long 0x105f36c7 /* <+2904>: vcmpgtud. v2,v31,v6 */ - .long 0x128f17c7 /* <+2908>: vcmpgtsd. v20,v15,v2 */ - -## vsd2.d - .long 0x7fced019 /* <+2912>: lxsiwzx vs62,r14,r26 */ - .long 0x7d00c819 /* <+2916>: lxsiwzx vs40,0,r25 */ - .long 0x7f20d098 /* <+2920>: lxsiwax vs25,0,r26 */ - .long 0x7c601898 /* <+2924>: lxsiwax vs3,0,r3 */ - .long 0x7fcc0066 /* <+2928>: mfvsrd r12,vs30 */ - .long 0x7fcc0066 /* <+2932>: mfvsrd r12,vs30 */ - .long 0x7fcc0067 /* <+2936>: mfvsrd r12,vs62 */ - .long 0x7fcc0067 /* <+2940>: mfvsrd r12,vs62 */ - .long 0x7d9400e6 /* <+2944>: mffprwz r20,f12 */ - .long 0x7d9400e6 /* <+2948>: mffprwz r20,f12 */ - .long 0x7d9500e7 /* <+2952>: mfvrwz r21,v12 */ - .long 0x7d9500e7 /* <+2956>: mfvrwz r21,v12 */ - .long 0x7dc97118 /* <+2960>: stxsiwx vs14,r9,r14 */ - .long 0x7ea04118 /* <+2964>: stxsiwx vs21,0,r8 */ - .long 0x7d7c0166 /* <+2968>: mtvsrd vs11,r28 */ - .long 0x7d7c0166 /* <+2972>: mtvsrd vs11,r28 */ - .long 0x7d7d0167 /* <+2976>: mtvsrd vs43,r29 */ - .long 0x7d7d0167 /* <+2980>: mtvsrd vs43,r29 */ - .long 0x7f1601a6 /* <+2984>: mtfprwa f24,r22 */ - .long 0x7f1601a6 /* <+2988>: mtfprwa f24,r22 */ - .long 0x7f3701a7 /* <+2992>: mtvrwa v25,r23 */ - .long 0x7f3701a7 /* <+2996>: mtvrwa v25,r23 */ - .long 0x7f5b01e6 /* <+3000>: mtfprwz f26,r27 */ - .long 0x7f5b01e6 /* <+3004>: mtfprwz f26,r27 */ - .long 0x7f7c01e7 /* <+3008>: mtvrwz v27,r28 */ - .long 0x7f7c01e7 /* <+3012>: mtvrwz v27,r28 */ - .long 0x7db36c18 /* <+3016>: lxsspx vs13,r19,r13 */ - .long 0x7e406c18 /* <+3020>: lxsspx vs18,0,r13 */ - .long 0x7d622519 /* <+3024>: stxsspx vs43,r2,r4 */ - .long 0x7ee05d19 /* <+3028>: stxsspx vs55,0,r11 */ - .long 0xf2d0c805 /* <+3032>: xsaddsp vs54,vs48,vs25 */ - .long 0xf1d2080c /* <+3036>: xsmaddasp vs14,vs50,vs1 */ - .long 0xf3565042 /* <+3040>: xssubsp vs26,vs22,vs42 */ - .long 0xf375a04e /* <+3044>: xsmaddmsp vs27,vs53,vs52 */ - .long 0xf100d82a /* <+3048>: xsrsqrtesp vs8,vs59 */ - .long 0xf180482e /* <+3052>: xssqrtsp vs12,vs41 */ - .long 0xf32b0083 /* <+3056>: xsmulsp vs57,vs11,vs32 */ - .long 0xf0d4d089 /* <+3060>: xsmsubasp vs38,vs20,vs26 */ - .long 0xf35330c0 /* <+3064>: xsdivsp vs26,vs19,vs6 */ - .long 0xf065b8cf /* <+3068>: xsmsubmsp vs35,vs37,vs55 */ - .long 0xf3604069 /* <+3072>: xsresp vs59,vs8 */ - .long 0xf1810c0f /* <+3076>: xsnmaddasp vs44,vs33,vs33 */ - .long 0xf23ef44c /* <+3080>: xsnmaddmsp vs17,vs62,vs30 */ - .long 0xf2d4fc8d /* <+3084>: xsnmsubasp vs54,vs52,vs31 */ - .long 0xf0a5d4cb /* <+3088>: xsnmsubmsp vs37,vs5,vs58 */ - .long 0xf3d66556 /* <+3092>: xxlorc vs30,vs54,vs44 */ - .long 0xf22eed91 /* <+3096>: xxlnand vs49,vs14,vs29 */ - .long 0xf3d6f5d1 /* <+3100>: xxleqv vs62,vs22,vs30 */ - .long 0xf380b42f /* <+3104>: xscvdpspn vs60,vs54 */ - .long 0xf2c06c66 /* <+3108>: xsrsp vs22,vs45 */ - .long 0xf340dca2 /* <+3112>: xscvuxdsp vs26,vs59 */ - .long 0xf0c08ce3 /* <+3116>: xscvsxdsp vs38,vs49 */ - .long 0xf360d52d /* <+3120>: xscvspdpn vs59,vs26 */ - .long 0xff0e168c /* <+3124>: fmrgow f24,f14,f2 */ - .long 0xfec72f8c /* <+3128>: fmrgew f22,f7,f5 */ - -## power9.d - .long 0x7da30474 /* <+3132>: cnttzd r3,r13 */ - .long 0x7dc40475 /* <+3136>: cnttzd. r4,r14 */ - .long 0x7de50434 /* <+3140>: cnttzw r5,r15 */ - .long 0x7e060435 /* <+3144>: cnttzw. r6,r16 */ - .long 0x7d54ae12 /* <+3148>: modsd r10,r20,r21 */ - .long 0x7d75b616 /* <+3152>: modsw r11,r21,r22 */ - .long 0x7d96ba12 /* <+3156>: modud r12,r22,r23 */ - .long 0x7db7c216 /* <+3160>: moduw r13,r23,r24 */ - .long 0x10672581 /* <+3164>: bcdcfn. v3,v4,0 */ - .long 0x10672781 /* <+3168>: bcdcfn. v3,v4,1 */ - .long 0x10822d81 /* <+3172>: bcdcfsq. v4,v5,0 */ - .long 0x10822f81 /* <+3176>: bcdcfsq. v4,v5,1 */ - .long 0x10a63581 /* <+3180>: bcdcfz. v5,v6,0 */ - .long 0x10a63781 /* <+3184>: bcdcfz. v5,v6,1 */ - .long 0x10c74341 /* <+3188>: bcdcpsgn. v6,v7,v8 */ - .long 0x10e54581 /* <+3192>: bcdctn. v7,v8 */ - .long 0x11004d81 /* <+3196>: bcdctsq. v8,v9 */ - .long 0x11245581 /* <+3200>: bcdctz. v9,v10,0 */ - .long 0x11245781 /* <+3204>: bcdctz. v9,v10,1 */ - .long 0x115f5d81 /* <+3208>: bcdsetsgn. v10,v11,0 */ - .long 0x115f5f81 /* <+3212>: bcdsetsgn. v10,v11,1 */ - .long 0x116c6dc1 /* <+3216>: bcdsr. v11,v12,v13,0 */ - .long 0x116c6fc1 /* <+3220>: bcdsr. v11,v12,v13,1 */ - .long 0x118d74c1 /* <+3224>: bcds. v12,v13,v14,0 */ - .long 0x118d76c1 /* <+3228>: bcds. v12,v13,v14,1 */ - .long 0x11ae7d01 /* <+3232>: bcdtrunc. v13,v14,v15,0 */ - .long 0x11ae7f01 /* <+3236>: bcdtrunc. v13,v14,v15,1 */ - .long 0x11cf8481 /* <+3240>: bcdus. v14,v15,v16 */ - .long 0x11f08d41 /* <+3244>: bcdutrunc. v15,v16,v17 */ - .long 0x7e80aa5a /* <+3248>: lxvll vs20,0,r21 */ - .long 0x7e8aaa5a /* <+3252>: lxvll vs20,r10,r21 */ - .long 0x7ea05b5a /* <+3256>: stxvll vs21,0,r11 */ - .long 0x7eaa5b5a /* <+3260>: stxvll vs21,r10,r11 */ - .long 0x12d70001 /* <+3264>: vmul10cuq v22,v23 */ - .long 0x12f8c841 /* <+3268>: vmul10ecuq v23,v24,v25 */ - .long 0x1319d241 /* <+3272>: vmul10euq v24,v25,v26 */ - .long 0x133a0201 /* <+3276>: vmul10uq v25,v26 */ - .long 0xfd4b6008 /* <+3280>: xsaddqp v10,v11,v12 */ - .long 0xfd6c6009 /* <+3284>: xsaddqpo v11,v12,v12 */ - .long 0xfe80f00a /* <+3288>: xsrqpi 0,v20,v30,0 */ - .long 0xfe81f00a /* <+3292>: xsrqpi 1,v20,v30,0 */ - .long 0xfe80f60a /* <+3296>: xsrqpi 0,v20,v30,3 */ - .long 0xfe81f60a /* <+3300>: xsrqpi 1,v20,v30,3 */ - .long 0xfea0f80b /* <+3304>: xsrqpix 0,v21,v31,0 */ - .long 0xfea1f80b /* <+3308>: xsrqpix 1,v21,v31,0 */ - .long 0xfea0fe0b /* <+3312>: xsrqpix 0,v21,v31,3 */ - .long 0xfea1fe0b /* <+3316>: xsrqpix 1,v21,v31,3 */ - .long 0xfd8d7048 /* <+3320>: xsmulqp v12,v13,v14 */ - .long 0xfdae7849 /* <+3324>: xsmulqpo v13,v14,v15 */ - .long 0xfec0b84a /* <+3328>: xsrqpxp 0,v22,v23,0 */ - .long 0xfec1b84a /* <+3332>: xsrqpxp 1,v22,v23,0 */ - .long 0xfec0be4a /* <+3336>: xsrqpxp 0,v22,v23,3 */ - .long 0xfec1be4a /* <+3340>: xsrqpxp 1,v22,v23,3 */ - .long 0xfdcf80c8 /* <+3344>: xscpsgnqp v14,v15,v16 */ - .long 0xfc0f8108 /* <+3348>: xscmpoqp cr0,v15,v16 */ - .long 0xff8f8108 /* <+3352>: xscmpoqp cr7,v15,v16 */ - .long 0xfc108948 /* <+3356>: xscmpexpqp cr0,v16,v17 */ - .long 0xff908948 /* <+3360>: xscmpexpqp cr7,v16,v17 */ - .long 0xfe329b08 /* <+3364>: xsmaddqp v17,v18,v19 */ - .long 0xfe53a309 /* <+3368>: xsmaddqpo v18,v19,v20 */ - .long 0xfe74ab48 /* <+3372>: xsmsubqp v19,v20,v21 */ - .long 0xfe95b349 /* <+3376>: xsmsubqpo v20,v21,v22 */ - .long 0xfeb6bb88 /* <+3380>: xsnmaddqp v21,v22,v23 */ - .long 0xfed7c389 /* <+3384>: xsnmaddqpo v22,v23,v24 */ - .long 0xfef8cbc8 /* <+3388>: xsnmsubqp v23,v24,v25 */ - .long 0xff19d3c9 /* <+3392>: xsnmsubqpo v24,v25,v26 */ - .long 0xff3adc08 /* <+3396>: xssubqp v25,v26,v27 */ - .long 0xff5be409 /* <+3400>: xssubqpo v26,v27,v28 */ - .long 0xff7cec48 /* <+3404>: xsdivqp v27,v28,v29 */ - .long 0xff9df449 /* <+3408>: xsdivqpo v28,v29,v30 */ - .long 0xfc1df508 /* <+3412>: xscmpuqp cr0,v29,v30 */ - .long 0xff9df508 /* <+3416>: xscmpuqp cr7,v29,v30 */ - .long 0xfc00f588 /* <+3420>: xststdcqp cr0,v30,0 */ - .long 0xff80f588 /* <+3424>: xststdcqp cr7,v30,0 */ - .long 0xfc7ffd88 /* <+3428>: xststdcqp cr0,v31,127 */ - .long 0xfffffd88 /* <+3432>: xststdcqp cr7,v31,127 */ - .long 0xfd405e48 /* <+3436>: xsabsqp v10,v11 */ - .long 0xfd626648 /* <+3440>: xsxexpqp v11,v12 */ - .long 0xfd886e48 /* <+3444>: xsnabsqp v12,v13 */ - .long 0xfdb07648 /* <+3448>: xsnegqp v13,v14 */ - .long 0xfdd27e48 /* <+3452>: xsxsigqp v14,v15 */ - .long 0xfdfb8648 /* <+3456>: xssqrtqp v15,v16 */ - .long 0xfe1b8e49 /* <+3460>: xssqrtqpo v16,v17 */ - .long 0xfe219688 /* <+3464>: xscvqpuwz v17,v18 */ - .long 0xfe429e88 /* <+3468>: xscvudqp v18,v19 */ - .long 0xfe69a688 /* <+3472>: xscvqpswz v19,v20 */ - .long 0xfe8aae88 /* <+3476>: xscvsdqp v20,v21 */ - .long 0xfeb1b688 /* <+3480>: xscvqpudz v21,v22 */ - .long 0xfed4be88 /* <+3484>: xscvqpdp v22,v23 */ - .long 0xfef4c689 /* <+3488>: xscvqpdpo v23,v24 */ - .long 0xff16ce88 /* <+3492>: xscvdpqp v24,v25 */ - .long 0xff39d688 /* <+3496>: xscvqpsdz v25,v26 */ - .long 0xff5be6c8 /* <+3500>: xsiexpqp v26,v27,v28 */ - .long 0x108531fb /* <+3504>: vpermr v4,v5,v6,v7 */ - .long 0x10a0320d /* <+3508>: vextractub v5,v6,0 */ - .long 0x10af320d /* <+3512>: vextractub v5,v6,15 */ - .long 0x10c03a4d /* <+3516>: vextractuh v6,v7,0 */ - .long 0x10cf3a4d /* <+3520>: vextractuh v6,v7,15 */ - .long 0x10e0428d /* <+3524>: vextractuw v7,v8,0 */ - .long 0x10ef428d /* <+3528>: vextractuw v7,v8,15 */ - .long 0x11004acd /* <+3532>: vextractd v8,v9,0 */ - .long 0x110f4acd /* <+3536>: vextractd v8,v9,15 */ - .long 0x1120530d /* <+3540>: vinsertb v9,v10,0 */ - .long 0x112f530d /* <+3544>: vinsertb v9,v10,15 */ - .long 0x11405b4d /* <+3548>: vinserth v10,v11,0 */ - .long 0x114f5b4d /* <+3552>: vinserth v10,v11,15 */ - .long 0x1160638d /* <+3556>: vinsertw v11,v12,0 */ - .long 0x116f638d /* <+3560>: vinsertw v11,v12,15 */ - .long 0x11806bcd /* <+3564>: vinsertd v12,v13,0 */ - .long 0x118f6bcd /* <+3568>: vinsertd v12,v13,15 */ - .long 0x7db40267 /* <+3572>: mfvsrld r20,vs45 */ - .long 0x7dd50327 /* <+3576>: mtvsrws vs46,r21 */ - .long 0x7de0bb67 /* <+3580>: mtvsrdd vs47,0,r23 */ - .long 0x7df6bb67 /* <+3584>: mtvsrdd vs47,r22,r23 */ - .long 0x7e405a19 /* <+3588>: lxvx vs50,0,r11 */ - .long 0x7c0a5a18 /* <+3592>: lxvx vs0,r10,r11 */ - .long 0x7e6062d9 /* <+3596>: lxvwsx vs51,0,r12 */ - .long 0x7c2a62d8 /* <+3600>: lxvwsx vs1,r10,r12 */ - .long 0x7e806e59 /* <+3604>: lxvh8x vs52,0,r13 */ - .long 0x7c4a6e58 /* <+3608>: lxvh8x vs2,r10,r13 */ - .long 0x7ea076d9 /* <+3612>: lxvb16x vs53,0,r14 */ - .long 0x7c6a76d8 /* <+3616>: lxvb16x vs3,r10,r14 */ - .long 0x7ec07b19 /* <+3620>: stxvx vs54,0,r15 */ - .long 0x7c947b18 /* <+3624>: stxvx vs4,r20,r15 */ - .long 0x7ee08759 /* <+3628>: stxvh8x vs55,0,r16 */ - .long 0x7cb48758 /* <+3632>: stxvh8x vs5,r20,r16 */ - .long 0x7f008fd9 /* <+3636>: stxvb16x vs56,0,r17 */ - .long 0x7cd48fd8 /* <+3640>: stxvb16x vs6,r20,r17 */ - .long 0xf0802a94 /* <+3644>: xxextractuw vs4,vs5,0 */ - .long 0xf10f9297 /* <+3648>: xxextractuw vs40,vs50,15 */ - .long 0xf08002d0 /* <+3652>: xxspltib vs4,0 */ - .long 0xf127fad1 /* <+3656>: xxspltib vs41,255 */ - .long 0xf0a032d4 /* <+3660>: xxinsertw vs5,vs6,0 */ - .long 0xf24fe2d7 /* <+3664>: xxinsertw vs50,vs60,15 */ - .long 0xf0c73f6c /* <+3668>: xxbrh vs6,vs7 */ - .long 0xf307cf6f /* <+3672>: xxbrh vs56,vs57 */ - .long 0xf0ef476c /* <+3676>: xxbrw vs7,vs8 */ - .long 0xf32fd76f /* <+3680>: xxbrw vs57,vs58 */ - .long 0xf1174f6c /* <+3684>: xxbrd vs8,vs9 */ - .long 0xf357df6f /* <+3688>: xxbrd vs58,vs59 */ - .long 0xf13f576c /* <+3692>: xxbrq vs9,vs10 */ - .long 0xf37fe76f /* <+3696>: xxbrq vs59,vs60 */ - .long 0xe6800002 /* <+3700>: lxsd v20,0(0) */ - .long 0xe68a0002 /* <+3704>: lxsd v20,0(r10) */ - .long 0xe680000a /* <+3708>: lxsd v20,8(0) */ - .long 0xe68a000a /* <+3712>: lxsd v20,8(r10) */ - .long 0xe680fffa /* <+3716>: lxsd v20,-8(0) */ - .long 0xe68afffa /* <+3720>: lxsd v20,-8(r10) */ - .long 0xe6807ffe /* <+3724>: lxsd v20,32764(0) */ - .long 0xe68a7ffe /* <+3728>: lxsd v20,32764(r10) */ - .long 0xe6808002 /* <+3732>: lxsd v20,-32768(0) */ - .long 0xe68a8002 /* <+3736>: lxsd v20,-32768(r10) */ - .long 0xe7c00003 /* <+3740>: lxssp v30,0(0) */ - .long 0xe7cb0003 /* <+3744>: lxssp v30,0(r11) */ - .long 0xe7c0000b /* <+3748>: lxssp v30,8(0) */ - .long 0xe7cb000b /* <+3752>: lxssp v30,8(r11) */ - .long 0xe7c0fffb /* <+3756>: lxssp v30,-8(0) */ - .long 0xe7cbfffb /* <+3760>: lxssp v30,-8(r11) */ - .long 0xe7c07fff /* <+3764>: lxssp v30,32764(0) */ - .long 0xe7cb7fff /* <+3768>: lxssp v30,32764(r11) */ - .long 0xe7c08003 /* <+3772>: lxssp v30,-32768(0) */ - .long 0xe7cb8003 /* <+3776>: lxssp v30,-32768(r11) */ - .long 0xf5000009 /* <+3780>: lxv vs40,0(0) */ - .long 0xf50c0009 /* <+3784>: lxv vs40,0(r12) */ - .long 0xf5000019 /* <+3788>: lxv vs40,16(0) */ - .long 0xf50c0019 /* <+3792>: lxv vs40,16(r12) */ - .long 0xf500fff9 /* <+3796>: lxv vs40,-16(0) */ - .long 0xf54cfff1 /* <+3800>: lxv vs10,-16(r12) */ - .long 0xf5407ff1 /* <+3804>: lxv vs10,32752(0) */ - .long 0xf54c7ff1 /* <+3808>: lxv vs10,32752(r12) */ - .long 0xf5408001 /* <+3812>: lxv vs10,-32768(0) */ - .long 0xf54c8001 /* <+3816>: lxv vs10,-32768(r12) */ - .long 0xf6a00002 /* <+3820>: stxsd v21,0(0) */ - .long 0xf6aa0002 /* <+3824>: stxsd v21,0(r10) */ - .long 0xf6a0000a /* <+3828>: stxsd v21,8(0) */ - .long 0xf6aa000a /* <+3832>: stxsd v21,8(r10) */ - .long 0xf6a0fffa /* <+3836>: stxsd v21,-8(0) */ - .long 0xf6aafffa /* <+3840>: stxsd v21,-8(r10) */ - .long 0xf6a07ffe /* <+3844>: stxsd v21,32764(0) */ - .long 0xf6aa7ffe /* <+3848>: stxsd v21,32764(r10) */ - .long 0xf6a08002 /* <+3852>: stxsd v21,-32768(0) */ - .long 0xf6aa8002 /* <+3856>: stxsd v21,-32768(r10) */ - .long 0xf7e00003 /* <+3860>: stxssp v31,0(0) */ - .long 0xf7eb0003 /* <+3864>: stxssp v31,0(r11) */ - .long 0xf7e0000b /* <+3868>: stxssp v31,8(0) */ - .long 0xf7eb000b /* <+3872>: stxssp v31,8(r11) */ - .long 0xf7e0fffb /* <+3876>: stxssp v31,-8(0) */ - .long 0xf7ebfffb /* <+3880>: stxssp v31,-8(r11) */ - .long 0xf7e07fff /* <+3884>: stxssp v31,32764(0) */ - .long 0xf7eb7fff /* <+3888>: stxssp v31,32764(r11) */ - .long 0xf7e08003 /* <+3892>: stxssp v31,-32768(0) */ - .long 0xf7eb8003 /* <+3896>: stxssp v31,-32768(r11) */ - .long 0xf520000d /* <+3900>: stxv vs41,0(0) */ - .long 0xf52c000d /* <+3904>: stxv vs41,0(r12) */ - .long 0xf520001d /* <+3908>: stxv vs41,16(0) */ - .long 0xf52c001d /* <+3912>: stxv vs41,16(r12) */ - .long 0xf520fffd /* <+3916>: stxv vs41,-16(0) */ - .long 0xf56cfff5 /* <+3920>: stxv vs11,-16(r12) */ - .long 0xf5607ff5 /* <+3924>: stxv vs11,32752(0) */ - .long 0xf56c7ff5 /* <+3928>: stxv vs11,32752(r12) */ - .long 0xf5608005 /* <+3932>: stxv vs11,-32768(0) */ - .long 0xf56c8005 /* <+3936>: stxv vs11,-32768(r12) */ - .long 0xf296c0d0 /* <+3940>: xxperm vs20,vs22,vs24 */ - .long 0xf10a60d7 /* <+3944>: xxperm vs40,vs42,vs44 */ - .long 0xf2b7c9d0 /* <+3948>: xxpermr vs21,vs23,vs25 */ - .long 0xf12b69d7 /* <+3952>: xxpermr vs41,vs43,vs45 */ - .long 0x7e8c06f4 /* <+3956>: extswsli r12,r20,0 */ - .long 0x7e8c0ef4 /* <+3960>: extswsli r12,r20,1 */ - .long 0x7e8cfef6 /* <+3964>: extswsli r12,r20,63 */ - .long 0x7ead06f5 /* <+3968>: extswsli. r13,r21,0 */ - .long 0x7ead0ef5 /* <+3972>: extswsli. r13,r21,1 */ - .long 0x7eadfef7 /* <+3976>: extswsli. r13,r21,63 */ - .long 0x11d6b885 /* <+3980>: vrlwmi v14,v22,v23 */ - .long 0x11f7c0c5 /* <+3984>: vrldmi v15,v23,v24 */ - .long 0x1218c985 /* <+3988>: vrlwnm v16,v24,v25 */ - .long 0x1239d1c5 /* <+3992>: vrldnm v17,v25,v26 */ - .long 0x125addcc /* <+3996>: vbpermd v18,v26,v27 */ - .long 0x1266a602 /* <+4000>: vnegw v19,v20 */ - .long 0x1287ae02 /* <+4004>: vnegd v20,v21 */ - .long 0x12a8b602 /* <+4008>: vprtybw v21,v22 */ - .long 0x12c9be02 /* <+4012>: vprtybd v22,v23 */ - .long 0x12eac602 /* <+4016>: vprtybq v23,v24 */ - .long 0x1310ce02 /* <+4020>: vextsb2w v24,v25 */ - .long 0x1331d602 /* <+4024>: vextsh2w v25,v26 */ - .long 0x1358de02 /* <+4028>: vextsb2d v26,v27 */ - .long 0x1379e602 /* <+4032>: vextsh2d v27,v28 */ - .long 0x139aee02 /* <+4036>: vextsw2d v28,v29 */ - .long 0x13bcf602 /* <+4040>: vctzb v29,v30 */ - .long 0x13ddfe02 /* <+4044>: vctzh v30,v31 */ - .long 0x13fef602 /* <+4048>: vctzw v31,v30 */ - .long 0x13dfee02 /* <+4052>: vctzd v30,v29 */ - .long 0x7d40a61a /* <+4056>: lxsibzx vs10,0,r20 */ - .long 0x7e4aa61b /* <+4060>: lxsibzx vs50,r10,r20 */ - .long 0x7d60ae5a /* <+4064>: lxsihzx vs11,0,r21 */ - .long 0x7e6bae5b /* <+4068>: lxsihzx vs51,r11,r21 */ - .long 0x7d80b71a /* <+4072>: stxsibx vs12,0,r22 */ - .long 0x7e8cb71b /* <+4076>: stxsibx vs52,r12,r22 */ - .long 0x7da0bf5a /* <+4080>: stxsihx vs13,0,r23 */ - .long 0x7eadbf5b /* <+4084>: stxsihx vs53,r13,r23 */ - .long 0x114b6370 /* <+4088>: maddhd r10,r11,r12,r13 */ - .long 0x1295b5f1 /* <+4092>: maddhdu r20,r21,r22,r23 */ - .long 0x10432173 /* <+4096>: maddld r2,r3,r4,r5 */ - .long 0xf00aa1d8 /* <+4100>: xscmpexpdp cr0,vs10,vs20 */ - .long 0xf38891de /* <+4104>: xscmpexpdp cr7,vs40,vs50 */ - .long 0xf12baf2d /* <+4108>: xsiexpdp vs41,r11,r21 */ - .long 0xf07f5da8 /* <+4112>: xststdcdp cr0,vs11,127 */ - .long 0xf3ff4daa /* <+4116>: xststdcdp cr7,vs41,127 */ - .long 0xf07f5ca8 /* <+4120>: xststdcsp cr0,vs11,127 */ - .long 0xf3ff4caa /* <+4124>: xststdcsp cr7,vs41,127 */ - .long 0xf1a05d6e /* <+4128>: xsxexpdp r13,vs43 */ - .long 0xf1c1656e /* <+4132>: xsxsigdp r14,vs44 */ - .long 0xf1ae7fc7 /* <+4136>: xviexpdp vs45,vs46,vs47 */ - .long 0xf1cf86c7 /* <+4140>: xviexpsp vs46,vs47,vs48 */ - .long 0xf2c0bfab /* <+4144>: xvtstdcdp vs54,vs55,0 */ - .long 0xf2dfbfef /* <+4148>: xvtstdcdp vs54,vs55,127 */ - .long 0xf2e0c6ab /* <+4152>: xvtstdcsp vs55,vs56,0 */ - .long 0xf2ffc6ef /* <+4156>: xvtstdcsp vs55,vs56,127 */ - .long 0xf320d76f /* <+4160>: xvxexpdp vs57,vs58 */ - .long 0xf348df6f /* <+4164>: xvxexpsp vs58,vs59 */ - .long 0xf361e76f /* <+4168>: xvxsigdp vs59,vs60 */ - .long 0xf389ef6f /* <+4172>: xvxsigsp vs60,vs61 */ - .long 0x7c0639c0 /* <+4176>: cmpeqb cr0,r6,r7 */ - .long 0x7f8639c0 /* <+4180>: cmpeqb cr7,r6,r7 */ - .long 0x7c084980 /* <+4184>: cmprb cr0,0,r8,r9 */ - .long 0x7f884980 /* <+4188>: cmprb cr7,0,r8,r9 */ - .long 0x7c284980 /* <+4192>: cmprb cr0,1,r8,r9 */ - .long 0x7fa84980 /* <+4196>: cmprb cr7,1,r8,r9 */ - .long 0x7de00100 /* <+4200>: setb r15,cr0 */ - .long 0x7dfc0100 /* <+4204>: setb r15,cr7 */ - .long 0x7f40521a /* <+4208>: lxvl vs26,0,r10 */ - .long 0x7f14521b /* <+4212>: lxvl vs56,r20,r10 */ - .long 0x7f605b1a /* <+4216>: stxvl vs27,0,r11 */ - .long 0x7f355b1b /* <+4220>: stxvl vs57,r21,r11 */ - .long 0x1280f602 /* <+4224>: vclzlsbb r20,v30 */ - .long 0x12a1fe02 /* <+4228>: vctzlsbb r21,v31 */ - .long 0x114b6007 /* <+4232>: vcmpneb v10,v11,v12 */ - .long 0x1295b407 /* <+4236>: vcmpneb. v20,v21,v22 */ - .long 0x116c6847 /* <+4240>: vcmpneh v11,v12,v13 */ - .long 0x12b6bc47 /* <+4244>: vcmpneh. v21,v22,v23 */ - .long 0x118d7087 /* <+4248>: vcmpnew v12,v13,v14 */ - .long 0x12d7c487 /* <+4252>: vcmpnew. v22,v23,v24 */ - .long 0x11ae7907 /* <+4256>: vcmpnezb v13,v14,v15 */ - .long 0x12f8cd07 /* <+4260>: vcmpnezb. v23,v24,v25 */ - .long 0x11cf8147 /* <+4264>: vcmpnezh v14,v15,v16 */ - .long 0x1319d547 /* <+4268>: vcmpnezh. v24,v25,v26 */ - .long 0x11f08987 /* <+4272>: vcmpnezw v15,v16,v17 */ - .long 0x133add87 /* <+4276>: vcmpnezw. v25,v26,v27 */ - .long 0x1211560d /* <+4280>: vextublx r16,r17,v10 */ - .long 0x12325f0d /* <+4284>: vextubrx r17,r18,v11 */ - .long 0x1253664d /* <+4288>: vextuhlx r18,r19,v12 */ - .long 0x12746f4d /* <+4292>: vextuhrx r19,r20,v13 */ - .long 0x1295768d /* <+4296>: vextuwlx r20,r21,v14 */ - .long 0x12b67f8d /* <+4300>: vextuwrx r21,r22,v15 */ - .long 0xec001d46 /* <+4304>: dtstsfi cr0,0,f3 */ - .long 0xefbf1d46 /* <+4308>: dtstsfi cr7,63,f3 */ - .long 0xfc002546 /* <+4312>: dtstsfiq cr0,0,f4 */ - .long 0xffbf2546 /* <+4316>: dtstsfiq cr7,63,f4 */ - .long 0xf110956f /* <+4320>: xscvhpdp vs40,vs50 */ - .long 0xf1319d6f /* <+4324>: xscvdphp vs41,vs51 */ - .long 0xf158a76f /* <+4328>: xvcvhpsp vs42,vs52 */ - .long 0xf179af6f /* <+4332>: xvcvsphp vs43,vs53 */ - .long 0x4c600004 /* <+4336>: addpcis r3,0 */ - .long 0x4c600004 /* <+4340>: addpcis r3,0 */ - .long 0x4c800005 /* <+4344>: addpcis r4,1 */ - .long 0x4c800005 /* <+4348>: addpcis r4,1 */ - .long 0x4cbfffc4 /* <+4352>: addpcis r5,-2 */ - .long 0x4cbfffc4 /* <+4356>: addpcis r5,-2 */ - .long 0x4cdf7fc5 /* <+4360>: addpcis r6,32767 */ - .long 0x4cdf7fc5 /* <+4364>: addpcis r6,32767 */ - .long 0x4ce08004 /* <+4368>: addpcis r7,-32768 */ - .long 0x4ce08004 /* <+4372>: addpcis r7,-32768 */ - .long 0x7c0002a4 /* <+4376>: slbsync */ - .long 0x7d405ba4 /* <+4380>: slbieg r10,r11 */ - .long 0x7c602726 /* <+4384>: slbmfee r3,r4 */ - .long 0x7c602726 /* <+4388>: slbmfee r3,r4 */ - .long 0x7c612726 /* <+4392>: slbmfee r3,r4,1 */ - .long 0x7c802ea6 /* <+4396>: slbmfev r4,r5 */ - .long 0x7c802ea6 /* <+4400>: slbmfev r4,r5 */ - .long 0x7c812ea6 /* <+4404>: slbmfev r4,r5,1 */ - .long 0x7c801a64 /* <+4408>: tlbie r3,r4 */ - .long 0x7c801a64 /* <+4412>: tlbie r3,r4 */ - .long 0x7c8f1a64 /* <+4416>: tlbie r3,r4,3,1,1 */ - .long 0x7c001a24 /* <+4420>: tlbiel r3 */ - .long 0x7c001a24 /* <+4424>: tlbiel r3 */ - .long 0x7c8f1a24 /* <+4428>: tlbiel r3,r4,3,1,1 */ - .long 0x7c2c6e0c /* <+4432>: copy r12,r13 */ - .long 0x7c2a5f0d /* <+4436>: paste. r10,r11 */ - .long 0x7c00068c /* <+4440>: cpabort */ - .long 0x7c0004ac /* <+4444>: hwsync */ - .long 0x7c0004ac /* <+4448>: hwsync */ - .long 0x7c0004ac /* <+4452>: hwsync */ - .long 0x7c2004ac /* <+4456>: lwsync */ - .long 0x7c2004ac /* <+4460>: lwsync */ - .long 0x7c4004ac /* <+4464>: ptesync */ - .long 0x7c4004ac /* <+4468>: ptesync */ - .long 0x7e8004cc /* <+4472>: ldat r20,0,0 */ - .long 0x7e8ae4cc /* <+4476>: ldat r20,r10,28 */ - .long 0x7ea0048c /* <+4480>: lwat r21,0,0 */ - .long 0x7eabe48c /* <+4484>: lwat r21,r11,28 */ - .long 0x7ec005cc /* <+4488>: stdat r22,0,0 */ - .long 0x7ecce5cc /* <+4492>: stdat r22,r12,28 */ - .long 0x7ee0058c /* <+4496>: stwat r23,0,0 */ - .long 0x7eede58c /* <+4500>: stwat r23,r13,28 */ - .long 0x4c000264 /* <+4504>: urfid */ - .long 0x7c00f6e4 /* <+4508>: rmieg r30 */ - .long 0x7d407a6a /* <+4512>: ldmx r10,0,r15 */ - .long 0x7d437a6a /* <+4516>: ldmx r10,r3,r15 */ - .long 0x4c0002e4 /* <+4520>: stop */ - .long 0x7c00003c /* <+4524>: wait */ - .long 0x7c00003c /* <+4528>: wait */ - .long 0x7c6005e6 /* <+4532>: darn r3,0 */ - .long 0x7c6105e6 /* <+4536>: darn r3,1 */ - .long 0x7c6205e6 /* <+4540>: darn r3,2 */ - .long 0x7c000480 /* <+4544>: mcrxrx cr0 */ - .long 0x7f800480 /* <+4548>: mcrxrx cr7 */ - .long 0x1295b744 /* <+4552>: vslv v20,v21,v22 */ - .long 0x12f8cf04 /* <+4556>: vsrv v23,v24,v25 */ - .long 0x7c0006ec /* <+4560>: msgsync */ - .long 0xf3c8901e /* <+4564>: xscmpeqdp vs30,vs40,vs50 */ - .long 0xf3e9985e /* <+4568>: xscmpgtdp vs31,vs41,vs51 */ - .long 0xf00aa09f /* <+4572>: xscmpgedp vs32,vs42,vs52 */ - .long 0xf04cb447 /* <+4576>: xsmincdp vs34,vs44,vs54 */ - .long 0xf06dbc07 /* <+4580>: xsmaxcdp vs35,vs45,vs55 */ - .long 0xf08ec4c7 /* <+4584>: xsminjdp vs36,vs46,vs56 */ - .long 0xf0afcc87 /* <+4588>: xsmaxjdp vs37,vs47,vs57 */ - .long 0x1295b5e3 /* <+4592>: vmsumudm v20,v21,v22,v23 */ - .long 0x7d6c6954 /* <+4596>: addex r11,r12,r13,0 */ - .long 0x7d6c6b54 /* <+4600>: addex r11,r12,r13,1 */ - .long 0x7d6c6d54 /* <+4604>: addex r11,r12,r13,2 */ - .long 0xff20048e /* <+4608>: mffs f25 */ - .long 0xff20048f /* <+4612>: mffs. f25 */ - .long 0xff41048e /* <+4616>: mffsce f26 */ - .long 0xff74a48e /* <+4620>: mffscdrn f27,f20 */ - .long 0xff95048e /* <+4624>: mffscdrni f28,0 */ - .long 0xff953c8e /* <+4628>: mffscdrni f28,7 */ - .long 0xffb6ac8e /* <+4632>: mffscrn f29,f21 */ - .long 0xffd7048e /* <+4636>: mffscrni f30,0 */ - .long 0xffd71c8e /* <+4640>: mffscrni f30,3 */ - .long 0xfff8048e /* <+4644>: mffsl f31 */ - .long 0x7d4006a4 /* <+4648>: slbiag r10 */ - -## altivec3.d - .long 0x117e0001 /* <+4652>: vmul10cuq v11,v30 */ - .long 0x13c1b807 /* <+4656>: vcmpneb v30,v1,v23 */ - .long 0x13d3f77b /* <+4660>: vpermr v30,v19,v30,v29 */ - .long 0x12948841 /* <+4664>: vmul10ecuq v20,v20,v17 */ - .long 0x1373f847 /* <+4668>: vcmpneh v27,v19,v31 */ - .long 0x10c9b885 /* <+4672>: vrlwmi v6,v9,v23 */ - .long 0x12da0887 /* <+4676>: vcmpnew v22,v26,v1 */ - .long 0x131ec8c5 /* <+4680>: vrldmi v24,v30,v25 */ - .long 0x127db107 /* <+4684>: vcmpnezb v19,v29,v22 */ - .long 0x11179947 /* <+4688>: vcmpnezh v8,v23,v19 */ - .long 0x13785985 /* <+4692>: vrlwnm v27,v24,v11 */ - .long 0x12ad5187 /* <+4696>: vcmpnezw v21,v13,v10 */ - .long 0x10b4e9c5 /* <+4700>: vrldnm v5,v20,v29 */ - .long 0x13d30201 /* <+4704>: vmul10uq v30,v19 */ - .long 0x130caa0d /* <+4708>: vextractub v24,v21,12 */ - .long 0x1013e241 /* <+4712>: vmul10euq v0,v19,v28 */ - .long 0x114c1a4d /* <+4716>: vextractuh v10,v3,12 */ - .long 0x1387628d /* <+4720>: vextractuw v28,v12,7 */ - .long 0x13c1dacd /* <+4724>: vextractd v30,v27,1 */ - .long 0x1324fb0d /* <+4728>: vinsertb v25,v31,4 */ - .long 0x12aef341 /* <+4732>: bcdcpsgn. v21,v14,v30 */ - .long 0x12c5934d /* <+4736>: vinserth v22,v18,5 */ - .long 0x13a1b38d /* <+4740>: vinsertw v29,v22,1 */ - .long 0x13a76bcd /* <+4744>: vinsertd v29,v13,7 */ - .long 0x12d94407 /* <+4748>: vcmpneb. v22,v25,v8 */ - .long 0x120fac47 /* <+4752>: vcmpneh. v16,v15,v21 */ - .long 0x12d5fc81 /* <+4756>: bcdus. v22,v21,v31 */ - .long 0x102c6487 /* <+4760>: vcmpnew. v1,v12,v12 */ - .long 0x10a346c1 /* <+4764>: bcds. v5,v3,v8,1 */ - .long 0x13760d01 /* <+4768>: bcdtrunc. v27,v22,v1,0 */ - .long 0x105a0507 /* <+4772>: vcmpnezb. v2,v26,v0 */ - .long 0x134e3d41 /* <+4776>: bcdutrunc. v26,v14,v7 */ - .long 0x12056547 /* <+4780>: vcmpnezh. v16,v5,v12 */ - .long 0x13002d81 /* <+4784>: bcdctsq. v24,v5 */ - .long 0x10e20581 /* <+4788>: bcdcfsq. v7,v0,0 */ - .long 0x13c46781 /* <+4792>: bcdctz. v30,v12,1 */ - .long 0x1225bd81 /* <+4796>: bcdctn. v17,v23 */ - .long 0x10867f81 /* <+4800>: bcdcfz. v4,v15,1 */ - .long 0x13a72f81 /* <+4804>: bcdcfn. v29,v5,1 */ - .long 0x137f6581 /* <+4808>: bcdsetsgn. v27,v12,0 */ - .long 0x11dccd87 /* <+4812>: vcmpnezw. v14,v28,v25 */ - .long 0x104237c1 /* <+4816>: bcdsr. v2,v2,v6,1 */ - .long 0x13202dcc /* <+4820>: vbpermd v25,v0,v5 */ - .long 0x1380ce02 /* <+4824>: vclzlsbb r28,v25 */ - .long 0x1041c602 /* <+4828>: vctzlsbb r2,v24 */ - .long 0x12a65e02 /* <+4832>: vnegw v21,v11 */ - .long 0x1227de02 /* <+4836>: vnegd v17,v27 */ - .long 0x13e8be02 /* <+4840>: vprtybw v31,v23 */ - .long 0x12a9be02 /* <+4844>: vprtybd v21,v23 */ - .long 0x12aa9602 /* <+4848>: vprtybq v21,v18 */ - .long 0x13d02602 /* <+4852>: vextsb2w v30,v4 */ - .long 0x1071d602 /* <+4856>: vextsh2w v3,v26 */ - .long 0x11788e02 /* <+4860>: vextsb2d v11,v17 */ - .long 0x10b95602 /* <+4864>: vextsh2d v5,v10 */ - .long 0x11bace02 /* <+4868>: vextsw2d v13,v25 */ - .long 0x133c1602 /* <+4872>: vctzb v25,v2 */ - .long 0x101d1e02 /* <+4876>: vctzh v0,v3 */ - .long 0x12de3602 /* <+4880>: vctzw v22,v6 */ - .long 0x135fc602 /* <+4884>: vctzd v26,v24 */ - .long 0x10df160d /* <+4888>: vextublx r6,r31,v2 */ - .long 0x11a0964d /* <+4892>: vextuhlx r13,r0,v18 */ - .long 0x11defe8d /* <+4896>: vextuwlx r14,r30,v31 */ - .long 0x11ec7704 /* <+4900>: vsrv v15,v12,v14 */ - .long 0x128af70d /* <+4904>: vextubrx r20,r10,v30 */ - .long 0x12b51744 /* <+4908>: vslv v21,v21,v2 */ - .long 0x11e90f4d /* <+4912>: vextuhrx r15,r9,v1 */ - .long 0x12b1878d /* <+4916>: vextuwrx r21,r17,v16 */ - .long 0x1295b5e3 /* <+4920>: vmsumudm v20,v21,v22,v23 */ -## vsx3.d - .long 0x7c46ca19 /* <+4924>: lxvx vs34,r6,r25 */ - .long 0x7e805218 /* <+4928>: lxvx vs20,0,r10 */ - .long 0x7e98521a /* <+4932>: lxvl vs20,r24,r10 */ - .long 0x7ec0ea1b /* <+4936>: lxvl vs54,0,r29 */ - .long 0x7f149a5a /* <+4940>: lxvll vs24,r20,r19 */ - .long 0x7c40725b /* <+4944>: lxvll vs34,0,r14 */ - .long 0x7ec20266 /* <+4948>: mfvsrld r2,vs22 */ - .long 0x7f5acad9 /* <+4952>: lxvwsx vs58,r26,r25 */ - .long 0x7ee0ead9 /* <+4956>: lxvwsx vs55,0,r29 */ - .long 0x7dd52318 /* <+4960>: stxvx vs14,r21,r4 */ - .long 0x7fc0b318 /* <+4964>: stxvx vs30,0,r22 */ - .long 0x7c1a231a /* <+4968>: stxvl vs0,r26,r4 */ - .long 0x7ca0b31b /* <+4972>: stxvl vs37,0,r22 */ - .long 0x7f0a0326 /* <+4976>: mtvsrws vs24,r10 */ - .long 0x7fd57b5a /* <+4980>: stxvll vs30,r21,r15 */ - .long 0x7ce0735b /* <+4984>: stxvll vs39,0,r14 */ - .long 0x7d862b66 /* <+4988>: mtvsrdd vs12,r6,r5 */ - .long 0x7cc0ab67 /* <+4992>: mtvsrdd vs38,0,r21 */ - .long 0x7f7c361b /* <+4996>: lxsibzx vs59,r28,r6 */ - .long 0x7fc0461a /* <+5000>: lxsibzx vs30,0,r8 */ - .long 0x7d578e59 /* <+5004>: lxvh8x vs42,r23,r17 */ - .long 0x7c802e59 /* <+5008>: lxvh8x vs36,0,r5 */ - .long 0x7d895e5a /* <+5012>: lxsihzx vs12,r9,r11 */ - .long 0x7e206e5b /* <+5016>: lxsihzx vs49,0,r13 */ - .long 0x7ca39ed9 /* <+5020>: lxvb16x vs37,r3,r19 */ - .long 0x7c00f6d8 /* <+5024>: lxvb16x vs0,0,r30 */ - .long 0x7c5e371a /* <+5028>: stxsibx vs2,r30,r6 */ - .long 0x7d806f1a /* <+5032>: stxsibx vs12,0,r13 */ - .long 0x7e1d4758 /* <+5036>: stxvh8x vs16,r29,r8 */ - .long 0x7ee05759 /* <+5040>: stxvh8x vs55,0,r10 */ - .long 0x7c42bf5b /* <+5044>: stxsihx vs34,r2,r23 */ - .long 0x7f80bf5b /* <+5048>: stxsihx vs60,0,r23 */ - .long 0x7eee67d8 /* <+5052>: stxvb16x vs23,r14,r12 */ - .long 0x7e602fd8 /* <+5056>: stxvb16x vs19,0,r5 */ - .long 0xe7000002 /* <+5060>: lxsd v24,0(0) */ - .long 0xe5f50012 /* <+5064>: lxsd v15,16(r21) */ - .long 0xe4c00003 /* <+5068>: lxssp v6,0(0) */ - .long 0xe6e90013 /* <+5072>: lxssp v23,16(r9) */ - .long 0xf253081e /* <+5076>: xscmpeqdp vs18,vs51,vs33 */ - .long 0xf05a105a /* <+5080>: xscmpgtdp vs2,vs26,vs34 */ - .long 0xf0baa098 /* <+5084>: xscmpgedp vs5,vs26,vs20 */ - .long 0xf18a58d3 /* <+5088>: xxperm vs44,vs10,vs43 */ - .long 0xf13429d1 /* <+5092>: xxpermr vs41,vs20,vs5 */ - .long 0xf212b9da /* <+5096>: xscmpexpdp cr4,vs18,vs55 */ - .long 0xf2e32a96 /* <+5100>: xxextractuw vs23,vs37,3 */ - .long 0xf2c75ad1 /* <+5104>: xxspltib vs54,235 */ - .long 0xf1e4f2d4 /* <+5108>: xxinsertw vs15,vs30,4 */ - .long 0xf18b3c00 /* <+5112>: xsmaxcdp vs12,vs11,vs7 */ - .long 0xf019c441 /* <+5116>: xsmincdp vs32,vs25,vs24 */ - .long 0xf3356484 /* <+5120>: xsmaxjdp vs25,vs53,vs12 */ - .long 0xf17f24aa /* <+5124>: xststdcsp cr2,vs36,127 */ - .long 0xf0156cc3 /* <+5128>: xsminjdp vs32,vs21,vs45 */ - .long 0xf220956e /* <+5132>: xsxexpdp r17,vs50 */ - .long 0xf0e1456e /* <+5136>: xsxsigdp r7,vs40 */ - .long 0xf2d0156f /* <+5140>: xscvhpdp vs54,vs34 */ - .long 0xf351b56f /* <+5144>: xscvdphp vs58,vs54 */ - .long 0xf07f35aa /* <+5148>: xststdcdp cr0,vs38,127 */ - .long 0xf31faeef /* <+5152>: xvtstdcsp vs56,vs53,127 */ - .long 0xf2d4a6c3 /* <+5156>: xviexpsp vs54,vs20,vs52 */ - .long 0xf33cef2d /* <+5160>: xsiexpdp vs57,r28,r29 */ - .long 0xf020a76c /* <+5164>: xvxexpdp vs1,vs20 */ - .long 0xf2c1df6f /* <+5168>: xvxsigdp vs54,vs59 */ - .long 0xf2472f6e /* <+5172>: xxbrh vs18,vs37 */ - .long 0xf1c80f6c /* <+5176>: xvxexpsp vs14,vs1 */ - .long 0xf2896f6d /* <+5180>: xvxsigsp vs52,vs13 */ - .long 0xf26f2f6c /* <+5184>: xxbrw vs19,vs5 */ - .long 0xf277bf6f /* <+5188>: xxbrd vs51,vs55 */ - .long 0xf0788f6d /* <+5192>: xvcvhpsp vs35,vs17 */ - .long 0xf1f96f6e /* <+5196>: xvcvsphp vs15,vs45 */ - .long 0xf23fff6c /* <+5200>: xxbrq vs17,vs31 */ - .long 0xf21f67ec /* <+5204>: xvtstdcdp vs16,vs12,127 */ - .long 0xf36947c0 /* <+5208>: xviexpdp vs27,vs9,vs8 */ - .long 0xf4800001 /* <+5212>: lxv vs4,0(0) */ - .long 0xf5140019 /* <+5216>: lxv vs40,16(r20) */ - .long 0xf640000d /* <+5220>: stxv vs50,0(0) */ - .long 0xf5100015 /* <+5224>: stxv vs8,16(r16) */ - .long 0xf4600002 /* <+5228>: stxsd v3,0(0) */ - .long 0xf6220012 /* <+5232>: stxsd v17,16(r2) */ - .long 0xf5a00003 /* <+5236>: stxssp v13,0(0) */ - .long 0xf62d0013 /* <+5240>: stxssp v17,16(r13) */ - .long 0xfd0a9008 /* <+5244>: xsaddqp v8,v10,v18 */ - .long 0xfca1e809 /* <+5248>: xsaddqpo v5,v1,v29 */ - .long 0xfd80960a /* <+5252>: xsrqpi 0,v12,v18,3 */ - .long 0xffe1980b /* <+5256>: xsrqpix 1,v31,v19,0 */ - .long 0xfdc13048 /* <+5260>: xsmulqp v14,v1,v6 */ - .long 0xfe27d849 /* <+5264>: xsmulqpo v17,v7,v27 */ - .long 0xfc80584a /* <+5268>: xsrqpxp 0,v4,v11,0 */ - .long 0xffb7e0c8 /* <+5272>: xscpsgnqp v29,v23,v28 */ - .long 0xff8dd908 /* <+5276>: xscmpoqp cr7,v13,v27 */ - .long 0xfe953148 /* <+5280>: xscmpexpqp cr5,v21,v6 */ - .long 0xfc532308 /* <+5284>: xsmaddqp v2,v19,v4 */ - .long 0xffc78309 /* <+5288>: xsmaddqpo v30,v7,v16 */ - .long 0xfebe7b48 /* <+5292>: xsmsubqp v21,v30,v15 */ - .long 0xfd91f349 /* <+5296>: xsmsubqpo v12,v17,v30 */ - .long 0xfcde6388 /* <+5300>: xsnmaddqp v6,v30,v12 */ - .long 0xfd966389 /* <+5304>: xsnmaddqpo v12,v22,v12 */ - .long 0xfd5ddbc8 /* <+5308>: xsnmsubqp v10,v29,v27 */ - .long 0xffbd6bc9 /* <+5312>: xsnmsubqpo v29,v29,v13 */ - .long 0xfe7b2408 /* <+5316>: xssubqp v19,v27,v4 */ - .long 0xfda80c09 /* <+5320>: xssubqpo v13,v8,v1 */ - .long 0xfd03dc48 /* <+5324>: xsdivqp v8,v3,v27 */ - .long 0xff14dc49 /* <+5328>: xsdivqpo v24,v20,v27 */ - .long 0xff8e2508 /* <+5332>: xscmpuqp cr7,v14,v4 */ - .long 0xfe7f1588 /* <+5336>: xststdcqp cr4,v2,127 */ - .long 0xffe0b648 /* <+5340>: xsabsqp v31,v22 */ - .long 0xff221e48 /* <+5344>: xsxexpqp v25,v3 */ - .long 0xfd48e648 /* <+5348>: xsnabsqp v10,v28 */ - .long 0xfe70fe48 /* <+5352>: xsnegqp v19,v31 */ - .long 0xfd726e48 /* <+5356>: xsxsigqp v11,v13 */ - .long 0xfdbb7648 /* <+5360>: xssqrtqp v13,v14 */ - .long 0xfc3bde49 /* <+5364>: xssqrtqpo v1,v27 */ - .long 0xfc613e88 /* <+5368>: xscvqpuwz v3,v7 */ - .long 0xfe829688 /* <+5372>: xscvudqp v20,v18 */ - .long 0xffa9ee88 /* <+5376>: xscvqpswz v29,v29 */ - .long 0xfc4ae688 /* <+5380>: xscvsdqp v2,v28 */ - .long 0xfef12688 /* <+5384>: xscvqpudz v23,v4 */ - .long 0xfc74a688 /* <+5388>: xscvqpdp v3,v20 */ - .long 0xfc341e89 /* <+5392>: xscvqpdpo v1,v3 */ - .long 0xfe766688 /* <+5396>: xscvdpqp v19,v12 */ - .long 0xfdb92688 /* <+5400>: xscvqpsdz v13,v4 */ - .long 0xfcf83ec8 /* <+5404>: xsiexpqp v7,v24,v7 */ diff --git a/gdb/testsuite/gdb.arch/powerpc-power7.exp b/gdb/testsuite/gdb.arch/powerpc-power7.exp new file mode 100644 index 0000000..f6b1a40 --- /dev/null +++ b/gdb/testsuite/gdb.arch/powerpc-power7.exp @@ -0,0 +1,161 @@ +# Copyright 2016 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +# Test PowerPC instructions disassembly. + +standard_testfile .s +set objfile [standard_output_file ${testfile}.o] + +if {![istarget "powerpc*-*-*"]} then { + verbose "Skipping PowerPC instructions disassembly." + return +} + +if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${objfile}" object {debug}] != "" } { + untested "PowerPC instructions disassembly" + return -1 +} + +clean_restart ${objfile} + +# Disassemble the function. + +gdb_test "set disassembler-options power7" +set test "disass func" +gdb_test_multiple $test $test { + -re "\r\nDump of assembler code for function func:(\r\n.*\r\n)End of assembler dump.\r\n$gdb_prompt $" { + set func $expect_out(1,string) + pass $test + } +} + +proc instr_to_patt {instr} { + # 0x0000000000000018 <+24>: stxvd2x vs43,r4,r5 + return ".*\r\n\[ \t\]*0x\[0-9a-f\]+ <\\+\[0-9a-f\]*>:\[ \t\]*[string map [list { } "\[ \t\]+" . {\.}] $instr]\[ \t\]*\r\n.*" +} + +proc func_check {instr} { + global func + + set test "Found: $instr" + if [regexp -nocase -line [instr_to_patt $instr] $func] { + pass $test + } else { + fail $test + } +} + +func_check "lxvd2x vs3,r4,r5" +func_check "lxvd2x vs43,r4,r5" +func_check "stxvd2x vs3,r4,r5" +func_check "stxvd2x vs43,r4,r5" +func_check "xxmrghd vs3,vs4,vs5" +func_check "xxmrghd vs43,vs44,vs45" +func_check "xxmrgld vs3,vs4,vs5" +func_check "xxmrgld vs43,vs44,vs45" +func_check "xxmrghd vs3,vs4,vs5" +func_check "xxmrghd vs43,vs44,vs45" +func_check "xxmrgld vs3,vs4,vs5" +func_check "xxmrgld vs43,vs44,vs45" +func_check "xxpermdi vs3,vs4,vs5,1" +func_check "xxpermdi vs43,vs44,vs45,1" +func_check "xxpermdi vs3,vs4,vs5,2" +func_check "xxpermdi vs43,vs44,vs45,2" +func_check "xvmovdp vs3,vs4" +func_check "xvmovdp vs43,vs44" +func_check "xvmovdp vs3,vs4" +func_check "xvmovdp vs43,vs44" +func_check "xvcpsgndp vs3,vs4,vs5" +func_check "xvcpsgndp vs43,vs44,vs45" +func_check "doze" +func_check "nap" +func_check "sleep" +func_check "rvwinkle" +func_check "prtyw r3,r4" +func_check "prtyd r13,r14" +func_check "mfcfar r10" +func_check "mtcfar r11" +func_check "cmpb r3,r4,r5" +func_check "lwzcix r10,r11,r12" +func_check "dadd f16,f17,f18" +func_check "daddq f20,f22,f24" +func_check "dss 3" +func_check "dssall" +func_check "dst r5,r4,1" +func_check "dstt r8,r7,0" +func_check "dstst r5,r6,3" +func_check "dststt r4,r5,2" +func_check "divwe r10,r11,r12" +func_check "divwe\. r11,r12,r13" +func_check "divweo r12,r13,r14" +func_check "divweo\. r13,r14,r15" +func_check "divweu r10,r11,r12" +func_check "divweu\. r11,r12,r13" +func_check "divweuo r12,r13,r14" +func_check "divweuo\. r13,r14,r15" +func_check "bpermd r7,r17,r27" +func_check "popcntw r10,r20" +func_check "popcntd r10,r20" +func_check "ldbrx r20,r21,r22" +func_check "stdbrx r20,r21,r22" +func_check "lfiwzx f10,0,r10" +func_check "lfiwzx f10,r9,r10" +func_check "fcfids f4,f5" +func_check "fcfids\. f4,f5" +func_check "fcfidus f4,f5" +func_check "fcfidus\. f4,f5" +func_check "fctiwu f4,f5" +func_check "fctiwu\. f4,f5" +func_check "fctiwuz f4,f5" +func_check "fctiwuz\. f4,f5" +func_check "fctidu f4,f5" +func_check "fctidu\. f4,f5" +func_check "fctiduz f4,f5" +func_check "fctiduz\. f4,f5" +func_check "fcfidu f4,f5" +func_check "fcfidu\. f4,f5" +func_check "ftdiv cr0,f10,f11" +func_check "ftdiv cr7,f10,f11" +func_check "ftsqrt cr0,f10" +func_check "ftsqrt cr7,f10" +func_check "dcbtt r8,r9" +func_check "dcbtstt r8,r9" +func_check "dcffix f10,f12" +func_check "dcffix\. f20,f22" +func_check "fre f14,f15" +func_check "fre\. f14,f15" +func_check "fres f14,f15" +func_check "fres\. f14,f15" +func_check "frsqrte f14,f15" +func_check "frsqrte\. f14,f15" +func_check "frsqrtes f14,f15" +func_check "frsqrtes\. f14,f15" +func_check "isel r2,r3,r4,28" +func_check "yield" +func_check "yield" +func_check "ori r2,r2,0" +func_check "nop" +func_check "nop" +func_check "ori r2,r2,0" +func_check "mdoio" +func_check "mdoio" +func_check "mdoom" +func_check "mdoom" +func_check "mfppr r10" +func_check "mfppr32 r11" +func_check "mtppr r12" +func_check "mtppr32 r13" +func_check "tlbie r10,r11" diff --git a/gdb/testsuite/gdb.arch/powerpc-power7.s b/gdb/testsuite/gdb.arch/powerpc-power7.s new file mode 100644 index 0000000..cadb4a2 --- /dev/null +++ b/gdb/testsuite/gdb.arch/powerpc-power7.s @@ -0,0 +1,121 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2016 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + + .text + .globl func +func: + .long 0x7c642e98 /* lxvd2x vs3,r4,r5 */ + .long 0x7d642e99 /* lxvd2x vs43,r4,r5 */ + .long 0x7c642f98 /* stxvd2x vs3,r4,r5 */ + .long 0x7d642f99 /* stxvd2x vs43,r4,r5 */ + .long 0xf0642850 /* xxmrghd vs3,vs4,vs5 */ + .long 0xf16c6857 /* xxmrghd vs43,vs44,vs45 */ + .long 0xf0642b50 /* xxmrgld vs3,vs4,vs5 */ + .long 0xf16c6b57 /* xxmrgld vs43,vs44,vs45 */ + .long 0xf0642850 /* xxmrghd vs3,vs4,vs5 */ + .long 0xf16c6857 /* xxmrghd vs43,vs44,vs45 */ + .long 0xf0642b50 /* xxmrgld vs3,vs4,vs5 */ + .long 0xf16c6b57 /* xxmrgld vs43,vs44,vs45 */ + .long 0xf0642950 /* xxpermdi vs3,vs4,vs5,1 */ + .long 0xf16c6957 /* xxpermdi vs43,vs44,vs45,1 */ + .long 0xf0642a50 /* xxpermdi vs3,vs4,vs5,2 */ + .long 0xf16c6a57 /* xxpermdi vs43,vs44,vs45,2 */ + .long 0xf0642780 /* xvmovdp vs3,vs4 */ + .long 0xf16c6787 /* xvmovdp vs43,vs44 */ + .long 0xf0642780 /* xvmovdp vs3,vs4 */ + .long 0xf16c6787 /* xvmovdp vs43,vs44 */ + .long 0xf0642f80 /* xvcpsgndp vs3,vs4,vs5 */ + .long 0xf16c6f87 /* xvcpsgndp vs43,vs44,vs45 */ + .long 0x4c000324 /* doze */ + .long 0x4c000364 /* nap */ + .long 0x4c0003a4 /* sleep */ + .long 0x4c0003e4 /* rvwinkle */ + .long 0x7c830134 /* prtyw r3,r4 */ + .long 0x7dcd0174 /* prtyd r13,r14 */ + .long 0x7d5c02a6 /* mfcfar r10 */ + .long 0x7d7c03a6 /* mtcfar r11 */ + .long 0x7c832bf8 /* cmpb r3,r4,r5 */ + .long 0x7d4b662a /* lwzcix r10,r11,r12 */ + .long 0xee119004 /* dadd f16,f17,f18 */ + .long 0xfe96c004 /* daddq f20,f22,f24 */ + .long 0x7c60066c /* dss 3 */ + .long 0x7e00066c /* dssall */ + .long 0x7c2522ac /* dst r5,r4,1 */ + .long 0x7e083aac /* dstt r8,r7,0 */ + .long 0x7c6532ec /* dstst r5,r6,3 */ + .long 0x7e442aec /* dststt r4,r5,2 */ + .long 0x7d4b6356 /* divwe r10,r11,r12 */ + .long 0x7d6c6b57 /* divwe. r11,r12,r13 */ + .long 0x7d8d7756 /* divweo r12,r13,r14 */ + .long 0x7dae7f57 /* divweo. r13,r14,r15 */ + .long 0x7d4b6316 /* divweu r10,r11,r12 */ + .long 0x7d6c6b17 /* divweu. r11,r12,r13 */ + .long 0x7d8d7716 /* divweuo r12,r13,r14 */ + .long 0x7dae7f17 /* divweuo. r13,r14,r15 */ + .long 0x7e27d9f8 /* bpermd r7,r17,r27 */ + .long 0x7e8a02f4 /* popcntw r10,r20 */ + .long 0x7e8a03f4 /* popcntd r10,r20 */ + .long 0x7e95b428 /* ldbrx r20,r21,r22 */ + .long 0x7e95b528 /* stdbrx r20,r21,r22 */ + .long 0x7d4056ee /* lfiwzx f10,0,r10 */ + .long 0x7d4956ee /* lfiwzx f10,r9,r10 */ + .long 0xec802e9c /* fcfids f4,f5 */ + .long 0xec802e9d /* fcfids. f4,f5 */ + .long 0xec802f9c /* fcfidus f4,f5 */ + .long 0xec802f9d /* fcfidus. f4,f5 */ + .long 0xfc80291c /* fctiwu f4,f5 */ + .long 0xfc80291d /* fctiwu. f4,f5 */ + .long 0xfc80291e /* fctiwuz f4,f5 */ + .long 0xfc80291f /* fctiwuz. f4,f5 */ + .long 0xfc802f5c /* fctidu f4,f5 */ + .long 0xfc802f5d /* fctidu. f4,f5 */ + .long 0xfc802f5e /* fctiduz f4,f5 */ + .long 0xfc802f5f /* fctiduz. f4,f5 */ + .long 0xfc802f9c /* fcfidu f4,f5 */ + .long 0xfc802f9d /* fcfidu. f4,f5 */ + .long 0xfc0a5900 /* ftdiv cr0,f10,f11 */ + .long 0xff8a5900 /* ftdiv cr7,f10,f11 */ + .long 0xfc005140 /* ftsqrt cr0,f10 */ + .long 0xff805140 /* ftsqrt cr7,f10 */ + .long 0x7e084a2c /* dcbtt r8,r9 */ + .long 0x7e0849ec /* dcbtstt r8,r9 */ + .long 0xed406644 /* dcffix f10,f12 */ + .long 0xee80b645 /* dcffix. f20,f22 */ + .long 0xfdc07830 /* fre f14,f15 */ + .long 0xfdc07831 /* fre. f14,f15 */ + .long 0xedc07830 /* fres f14,f15 */ + .long 0xedc07831 /* fres. f14,f15 */ + .long 0xfdc07834 /* frsqrte f14,f15 */ + .long 0xfdc07835 /* frsqrte. f14,f15 */ + .long 0xedc07834 /* frsqrtes f14,f15 */ + .long 0xedc07835 /* frsqrtes. f14,f15 */ + .long 0x7c43271e /* isel r2,r3,r4,28 */ + .long 0x7f7bdb78 /* yield */ + .long 0x7f7bdb78 /* yield */ + .long 0x60420000 /* ori r2,r2,0 */ + .long 0x60000000 /* nop */ + .long 0x60000000 /* nop */ + .long 0x60420000 /* ori r2,r2,0 */ + .long 0x7fbdeb78 /* mdoio */ + .long 0x7fbdeb78 /* mdoio */ + .long 0x7fdef378 /* mdoom */ + .long 0x7fdef378 /* mdoom */ + .long 0x7d40e2a6 /* mfppr r10 */ + .long 0x7d62e2a6 /* mfppr32 r11 */ + .long 0x7d80e3a6 /* mtppr r12 */ + .long 0x7da2e3a6 /* mtppr32 r13 */ + .long 0x7d605264 /* tlbie r10,r11 */ diff --git a/gdb/testsuite/gdb.arch/powerpc-power8.exp b/gdb/testsuite/gdb.arch/powerpc-power8.exp new file mode 100644 index 0000000..68bfaef --- /dev/null +++ b/gdb/testsuite/gdb.arch/powerpc-power8.exp @@ -0,0 +1,245 @@ +# Copyright 2016 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +# Test PowerPC instructions disassembly. + +standard_testfile .s +set objfile [standard_output_file ${testfile}.o] + +if {![istarget "powerpc*-*-*"]} then { + verbose "Skipping PowerPC instructions disassembly." + return +} + +if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${objfile}" object {debug}] != "" } { + untested "PowerPC instructions disassembly" + return -1 +} + +clean_restart ${objfile} + +# Disassemble the function. + +gdb_test "set disassembler-options power8" +set test "disass func" +gdb_test_multiple $test $test { + -re "\r\nDump of assembler code for function func:(\r\n.*\r\n)End of assembler dump.\r\n$gdb_prompt $" { + set func $expect_out(1,string) + pass $test + } +} + +proc instr_to_patt {instr} { + # 0x0000000000000018 <+24>: stxvd2x vs43,r4,r5 + return ".*\r\n\[ \t\]*0x\[0-9a-f\]+ <\\+\[0-9a-f\]*>:\[ \t\]*[string map [list { } "\[ \t\]+" . {\.}] $instr]\[ \t\]*\r\n.*" +} + +proc func_check {instr} { + global func + + set test "Found: $instr" + if [regexp -nocase -line [instr_to_patt $instr] $func] { + pass $test + } else { + fail $test + } +} + +func_check "tabort\. r5" +func_check "tabortwc\. 7,r8,r16" +func_check "tabortdc\. 20,r11,r10" +func_check "tabortwci\. 17,r10,-13" +func_check "tabortdci\. 29,r3,-5" +func_check "tbegin\. " +func_check "tcheck cr7" +func_check "tend\. " +func_check "tend\. " +func_check "tendall\." +func_check "tendall\." +func_check "treclaim\. r24" +func_check "trechkpt\." +func_check "tsuspend\." +func_check "tsuspend\." +func_check "tresume\." +func_check "tresume\." +func_check "ori r2,r2,0" +func_check "nop" +func_check "ori r2,r2,0" +func_check "rfebb 0" +func_check "rfebb " +func_check "rfebb " +func_check "bctar- 12,4\\*cr5\\+gt" +func_check "bctarl- 4,4\\*cr1\\+so" +func_check "bctar\\+ 12,4\\*cr3\\+lt" +func_check "bctarl\\+ 4,eq" +func_check "bctar 4,4\\*cr2\\+lt,1" +func_check "bctarl 4,4\\*cr1\\+so,2" +func_check "waitasec" +func_check "msgsndp r8" +func_check "mtsle 1" +func_check "msgclrp r27" +func_check "stqcx\. r10,r10,r12" +func_check "stqcx\. r28,0,r7" +func_check "lqarx r24,r19,r11" +func_check "lqarx r22,0,r11" +func_check "mfbhrbe r20,6" +func_check "pbt\. r29,r17,r16" +func_check "pbt\. r14,0,r7" +func_check "clrbhrb" +func_check "vpermxor v11,v10,v0,v23" +func_check "vaddeuqm v24,v2,v7,v4" +func_check "vaddecuq v10,v10,v8,v2" +func_check "vsubeuqm v5,v15,v8,v19" +func_check "vsubecuq v12,v31,v16,v29" +func_check "vmulouw v20,v29,v13" +func_check "vmuluwm v29,v0,v26" +func_check "vaddudm v8,v21,v28" +func_check "vmaxud v1,v26,v1" +func_check "vrld v20,v3,v1" +func_check "vcmpequd v4,v19,v11" +func_check "vadduqm v23,v14,v30" +func_check "vaddcuq v8,v8,v13" +func_check "vmulosw v28,v27,v4" +func_check "vmaxsd v3,v4,v4" +func_check "vmuleuw v0,v19,v21" +func_check "vminud v24,v20,v19" +func_check "vcmpgtud v0,v28,v15" +func_check "vmulesw v21,v0,v2" +func_check "vminsd v9,v26,v9" +func_check "vsrad v25,v29,v11" +func_check "vcmpgtsd v11,v28,v11" +func_check "bcdadd\. v5,v8,v26,1" +func_check "vpmsumb v4,v3,v12" +func_check "bcdsub\. v26,v31,v21,1" +func_check "vpmsumh v5,v17,v16" +func_check "vpkudum v23,v17,v20" +func_check "vpmsumw v24,v21,v29" +func_check "vpmsumd v9,v22,v13" +func_check "vpkudus v18,v19,v18" +func_check "vsubuqm v30,v16,v22" +func_check "vcipher v14,v11,v7" +func_check "vcipherlast v10,v2,v22" +func_check "vgbbd v23,v13" +func_check "vsubcuq v16,v25,v16" +func_check "vorc v31,v1,v5" +func_check "vncipher v4,v17,v31" +func_check "vncipherlast v24,v2,v27" +func_check "vbpermq v23,v21,v23" +func_check "vpksdus v27,v18,v9" +func_check "vnand v27,v29,v27" +func_check "vsld v19,v19,v24" +func_check "vsbox v5,v13" +func_check "vpksdss v25,v3,v7" +func_check "vcmpequd\. v28,v8,v0" +func_check "vupkhsw v26,v26" +func_check "vshasigmaw v5,v7,0,6" +func_check "veqv v28,v21,v14" +func_check "vmrgow v1,v8,v19" +func_check "vshasigmad v0,v10,0,10" +func_check "vsrd v5,v27,v14" +func_check "vupklsw v11,v13" +func_check "vclzb v14,v16" +func_check "vpopcntb v20,v27" +func_check "vclzh v28,v11" +func_check "vpopcnth v24,v9" +func_check "vclzw v27,v31" +func_check "vpopcntw v17,v19" +func_check "vclzd v12,v29" +func_check "vpopcntd v23,v22" +func_check "vcmpgtud\. v24,v20,v29" +func_check "vcmpgtsd\. v9,v6,v27" +func_check "lxsiwzx vs62,r14,r26" +func_check "lxsiwzx vs40,0,r25" +func_check "lxsiwax vs25,0,r26" +func_check "lxsiwax vs3,0,r3" +func_check "mfvsrd r12,vs62" +func_check "mffprwz r20,f12" +func_check "stxsiwx vs14,r9,r14" +func_check "stxsiwx vs21,0,r8" +func_check "mtvsrd vs48,r11" +func_check "mtvrwa v31,r23" +func_check "mtfprwz f16,r26" +func_check "lxsspx vs13,r19,r13" +func_check "lxsspx vs18,0,r13" +func_check "stxsspx vs43,r2,r4" +func_check "stxsspx vs55,0,r11" +func_check "xsaddsp vs54,vs48,vs25" +func_check "xsmaddasp vs14,vs50,vs1" +func_check "xssubsp vs26,vs22,vs42" +func_check "xsmaddmsp vs27,vs53,vs52" +func_check "xsrsqrtesp vs8,vs59" +func_check "xssqrtsp vs12,vs41" +func_check "xsmulsp vs57,vs11,vs32" +func_check "xsmsubasp vs38,vs20,vs26" +func_check "xsdivsp vs26,vs19,vs6" +func_check "xsmsubmsp vs35,vs37,vs55" +func_check "xsresp vs59,vs8" +func_check "xsnmaddasp vs44,vs33,vs33" +func_check "xsnmaddmsp vs17,vs62,vs30" +func_check "xsnmsubasp vs54,vs52,vs31" +func_check "xsnmsubmsp vs37,vs5,vs58" +func_check "xxlorc vs30,vs54,vs44" +func_check "xxlnand vs49,vs14,vs29" +func_check "xxleqv vs62,vs22,vs30" +func_check "xscvdpspn vs60,vs54" +func_check "xsrsp vs22,vs45" +func_check "xscvuxdsp vs26,vs59" +func_check "xscvsxdsp vs38,vs49" +func_check "xscvspdpn vs59,vs26" +func_check "fmrgow f24,f14,f2" +func_check "fmrgew f22,f7,f5" +func_check "msgsnd r14" +func_check "msgclr r23" +func_check "lxvd2x vs40,0,r5" +func_check "lxvd2x vs40,0,r5" +func_check "lxvd2x vs10,r20,r6" +func_check "lxvd2x vs10,r20,r6" +func_check "stxvd2x vs41,0,r7" +func_check "stxvd2x vs41,0,r7" +func_check "stxvd2x vs11,r21,r8" +func_check "stxvd2x vs11,r21,r8" +func_check "lbarx r20,0,r7" +func_check "lbarx r20,0,r7" +func_check "lbarx r20,0,r7,1" +func_check "lbarx r20,r1,r7" +func_check "lbarx r20,r1,r7" +func_check "lbarx r20,r1,r7,1" +func_check "ldarx r21,0,r8" +func_check "ldarx r21,0,r8" +func_check "ldarx r21,0,r8,1" +func_check "ldarx r21,r1,r8" +func_check "ldarx r21,r1,r8" +func_check "ldarx r21,r1,r8,1" +func_check "lharx r22,0,r9" +func_check "lharx r22,0,r9" +func_check "lharx r22,0,r9,1" +func_check "lharx r22,r1,r9" +func_check "lharx r22,r1,r9" +func_check "lharx r22,r1,r9,1" +func_check "lwarx r23,0,r10" +func_check "lwarx r23,0,r10" +func_check "lwarx r23,0,r10,1" +func_check "lwarx r23,r1,r10" +func_check "lwarx r23,r1,r10" +func_check "lwarx r23,r1,r10,1" +func_check "stbcx\. r10,0,r7" +func_check "stbcx\. r10,r1,r7" +func_check "sthcx\. r11,0,r8" +func_check "sthcx\. r11,r1,r8" +func_check "stwcx\. r12,0,r9" +func_check "stwcx\. r12,r1,r9" +func_check "stdcx\. r13,0,r10" +func_check "stdcx\. r13,r1,r10" diff --git a/gdb/testsuite/gdb.arch/powerpc-power8.s b/gdb/testsuite/gdb.arch/powerpc-power8.s new file mode 100644 index 0000000..1f528a9 --- /dev/null +++ b/gdb/testsuite/gdb.arch/powerpc-power8.s @@ -0,0 +1,205 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2016 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + + .text + .globl func +func: + .long 0x7c05071d /* tabort. r5 */ + .long 0x7ce8861d /* tabortwc. 7,r8,r16 */ + .long 0x7e8b565d /* tabortdc. 20,r11,r10 */ + .long 0x7e2a9e9d /* tabortwci. 17,r10,-13 */ + .long 0x7fa3dedd /* tabortdci. 29,r3,-5 */ + .long 0x7c00051d /* tbegin. */ + .long 0x7f80059c /* tcheck cr7 */ + .long 0x7c00055d /* tend. */ + .long 0x7c00055d /* tend. */ + .long 0x7e00055d /* tendall. */ + .long 0x7e00055d /* tendall. */ + .long 0x7c18075d /* treclaim. r24 */ + .long 0x7c0007dd /* trechkpt. */ + .long 0x7c0005dd /* tsuspend. */ + .long 0x7c0005dd /* tsuspend. */ + .long 0x7c2005dd /* tresume. */ + .long 0x7c2005dd /* tresume. */ + .long 0x60420000 /* ori r2,r2,0 */ + .long 0x60000000 /* nop */ + .long 0x60420000 /* ori r2,r2,0 */ + .long 0x4c000124 /* rfebb 0 */ + .long 0x4c000924 /* rfebb */ + .long 0x4c000924 /* rfebb */ + .long 0x4d950460 /* bctar- 12,4*cr5+gt */ + .long 0x4c870461 /* bctarl- 4,4*cr1+so */ + .long 0x4dac0460 /* bctar+ 12,4*cr3+lt */ + .long 0x4ca20461 /* bctarl+ 4,eq */ + .long 0x4c880c60 /* bctar 4,4*cr2+lt,1 */ + .long 0x4c871461 /* bctarl 4,4*cr1+so,2 */ + .long 0x7c00003c /* waitasec */ + .long 0x7c00411c /* msgsndp r8 */ + .long 0x7c200126 /* mtsle 1 */ + .long 0x7c00d95c /* msgclrp r27 */ + .long 0x7d4a616d /* stqcx. r10,r10,r12 */ + .long 0x7f80396d /* stqcx. r28,0,r7 */ + .long 0x7f135a28 /* lqarx r24,r19,r11 */ + .long 0x7ec05a28 /* lqarx r22,0,r11 */ + .long 0x7e80325c /* mfbhrbe r20,6 */ + .long 0x7fb18329 /* pbt. r29,r17,r16 */ + .long 0x7dc03b29 /* pbt. r14,0,r7 */ + .long 0x7c00035c /* clrbhrb */ + .long 0x116a05ed /* vpermxor v11,v10,v0,v23 */ + .long 0x1302393c /* vaddeuqm v24,v2,v7,v4 */ + .long 0x114a40bd /* vaddecuq v10,v10,v8,v2 */ + .long 0x10af44fe /* vsubeuqm v5,v15,v8,v19 */ + .long 0x119f877f /* vsubecuq v12,v31,v16,v29 */ + .long 0x129d6888 /* vmulouw v20,v29,v13 */ + .long 0x13a0d089 /* vmuluwm v29,v0,v26 */ + .long 0x1115e0c0 /* vaddudm v8,v21,v28 */ + .long 0x103a08c2 /* vmaxud v1,v26,v1 */ + .long 0x128308c4 /* vrld v20,v3,v1 */ + .long 0x109358c7 /* vcmpequd v4,v19,v11 */ + .long 0x12eef100 /* vadduqm v23,v14,v30 */ + .long 0x11086940 /* vaddcuq v8,v8,v13 */ + .long 0x139b2188 /* vmulosw v28,v27,v4 */ + .long 0x106421c2 /* vmaxsd v3,v4,v4 */ + .long 0x1013aa88 /* vmuleuw v0,v19,v21 */ + .long 0x13149ac2 /* vminud v24,v20,v19 */ + .long 0x101c7ac7 /* vcmpgtud v0,v28,v15 */ + .long 0x12a01388 /* vmulesw v21,v0,v2 */ + .long 0x113a4bc2 /* vminsd v9,v26,v9 */ + .long 0x133d5bc4 /* vsrad v25,v29,v11 */ + .long 0x117c5bc7 /* vcmpgtsd v11,v28,v11 */ + .long 0x10a8d601 /* bcdadd. v5,v8,v26,1 */ + .long 0x10836408 /* vpmsumb v4,v3,v12 */ + .long 0x135fae41 /* bcdsub. v26,v31,v21,1 */ + .long 0x10b18448 /* vpmsumh v5,v17,v16 */ + .long 0x12f1a44e /* vpkudum v23,v17,v20 */ + .long 0x1315ec88 /* vpmsumw v24,v21,v29 */ + .long 0x11366cc8 /* vpmsumd v9,v22,v13 */ + .long 0x125394ce /* vpkudus v18,v19,v18 */ + .long 0x13d0b500 /* vsubuqm v30,v16,v22 */ + .long 0x11cb3d08 /* vcipher v14,v11,v7 */ + .long 0x1142b509 /* vcipherlast v10,v2,v22 */ + .long 0x12e06d0c /* vgbbd v23,v13 */ + .long 0x12198540 /* vsubcuq v16,v25,v16 */ + .long 0x13e12d44 /* vorc v31,v1,v5 */ + .long 0x1091fd48 /* vncipher v4,v17,v31 */ + .long 0x1302dd49 /* vncipherlast v24,v2,v27 */ + .long 0x12f5bd4c /* vbpermq v23,v21,v23 */ + .long 0x13724d4e /* vpksdus v27,v18,v9 */ + .long 0x137ddd84 /* vnand v27,v29,v27 */ + .long 0x1273c5c4 /* vsld v19,v19,v24 */ + .long 0x10ad05c8 /* vsbox v5,v13 */ + .long 0x13233dce /* vpksdss v25,v3,v7 */ + .long 0x138804c7 /* vcmpequd. v28,v8,v0 */ + .long 0x1340d64e /* vupkhsw v26,v26 */ + .long 0x10a73682 /* vshasigmaw v5,v7,0,6 */ + .long 0x13957684 /* veqv v28,v21,v14 */ + .long 0x10289e8c /* vmrgow v1,v8,v19 */ + .long 0x100a56c2 /* vshasigmad v0,v10,0,10 */ + .long 0x10bb76c4 /* vsrd v5,v27,v14 */ + .long 0x11606ece /* vupklsw v11,v13 */ + .long 0x11c08702 /* vclzb v14,v16 */ + .long 0x1280df03 /* vpopcntb v20,v27 */ + .long 0x13805f42 /* vclzh v28,v11 */ + .long 0x13004f43 /* vpopcnth v24,v9 */ + .long 0x1360ff82 /* vclzw v27,v31 */ + .long 0x12209f83 /* vpopcntw v17,v19 */ + .long 0x1180efc2 /* vclzd v12,v29 */ + .long 0x12e0b7c3 /* vpopcntd v23,v22 */ + .long 0x1314eec7 /* vcmpgtud. v24,v20,v29 */ + .long 0x1126dfc7 /* vcmpgtsd. v9,v6,v27 */ + .long 0x7fced019 /* lxsiwzx vs62,r14,r26 */ + .long 0x7d00c819 /* lxsiwzx vs40,0,r25 */ + .long 0x7f20d098 /* lxsiwax vs25,0,r26 */ + .long 0x7c601898 /* lxsiwax vs3,0,r3 */ + .long 0x7fcc0067 /* mfvsrd r12,vs62 */ + .long 0x7d9400e6 /* mffprwz r20,f12 */ + .long 0x7dc97118 /* stxsiwx vs14,r9,r14 */ + .long 0x7ea04118 /* stxsiwx vs21,0,r8 */ + .long 0x7e0b0167 /* mtvsrd vs48,r11 */ + .long 0x7ff701a7 /* mtvrwa v31,r23 */ + .long 0x7e1a01e6 /* mtfprwz f16,r26 */ + .long 0x7db36c18 /* lxsspx vs13,r19,r13 */ + .long 0x7e406c18 /* lxsspx vs18,0,r13 */ + .long 0x7d622519 /* stxsspx vs43,r2,r4 */ + .long 0x7ee05d19 /* stxsspx vs55,0,r11 */ + .long 0xf2d0c805 /* xsaddsp vs54,vs48,vs25 */ + .long 0xf1d2080c /* xsmaddasp vs14,vs50,vs1 */ + .long 0xf3565042 /* xssubsp vs26,vs22,vs42 */ + .long 0xf375a04e /* xsmaddmsp vs27,vs53,vs52 */ + .long 0xf100d82a /* xsrsqrtesp vs8,vs59 */ + .long 0xf180482e /* xssqrtsp vs12,vs41 */ + .long 0xf32b0083 /* xsmulsp vs57,vs11,vs32 */ + .long 0xf0d4d089 /* xsmsubasp vs38,vs20,vs26 */ + .long 0xf35330c0 /* xsdivsp vs26,vs19,vs6 */ + .long 0xf065b8cf /* xsmsubmsp vs35,vs37,vs55 */ + .long 0xf3604069 /* xsresp vs59,vs8 */ + .long 0xf1810c0f /* xsnmaddasp vs44,vs33,vs33 */ + .long 0xf23ef44c /* xsnmaddmsp vs17,vs62,vs30 */ + .long 0xf2d4fc8d /* xsnmsubasp vs54,vs52,vs31 */ + .long 0xf0a5d4cb /* xsnmsubmsp vs37,vs5,vs58 */ + .long 0xf3d66556 /* xxlorc vs30,vs54,vs44 */ + .long 0xf22eed91 /* xxlnand vs49,vs14,vs29 */ + .long 0xf3d6f5d1 /* xxleqv vs62,vs22,vs30 */ + .long 0xf380b42f /* xscvdpspn vs60,vs54 */ + .long 0xf2c06c66 /* xsrsp vs22,vs45 */ + .long 0xf340dca2 /* xscvuxdsp vs26,vs59 */ + .long 0xf0c08ce3 /* xscvsxdsp vs38,vs49 */ + .long 0xf360d52d /* xscvspdpn vs59,vs26 */ + .long 0xff0e168c /* fmrgow f24,f14,f2 */ + .long 0xfec72f8c /* fmrgew f22,f7,f5 */ + .long 0x7c00719c /* msgsnd r14 */ + .long 0x7c00b9dc /* msgclr r23 */ + .long 0x7d002e99 /* lxvd2x vs40,0,r5 */ + .long 0x7d002e99 /* lxvd2x vs40,0,r5 */ + .long 0x7d543698 /* lxvd2x vs10,r20,r6 */ + .long 0x7d543698 /* lxvd2x vs10,r20,r6 */ + .long 0x7d203f99 /* stxvd2x vs41,0,r7 */ + .long 0x7d203f99 /* stxvd2x vs41,0,r7 */ + .long 0x7d754798 /* stxvd2x vs11,r21,r8 */ + .long 0x7d754798 /* stxvd2x vs11,r21,r8 */ + .long 0x7e803868 /* lbarx r20,0,r7 */ + .long 0x7e803868 /* lbarx r20,0,r7 */ + .long 0x7e803869 /* lbarx r20,0,r7,1 */ + .long 0x7e813868 /* lbarx r20,r1,r7 */ + .long 0x7e813868 /* lbarx r20,r1,r7 */ + .long 0x7e813869 /* lbarx r20,r1,r7,1 */ + .long 0x7ea040a8 /* ldarx r21,0,r8 */ + .long 0x7ea040a8 /* ldarx r21,0,r8 */ + .long 0x7ea040a9 /* ldarx r21,0,r8,1 */ + .long 0x7ea140a8 /* ldarx r21,r1,r8 */ + .long 0x7ea140a8 /* ldarx r21,r1,r8 */ + .long 0x7ea140a9 /* ldarx r21,r1,r8,1 */ + .long 0x7ec048e8 /* lharx r22,0,r9 */ + .long 0x7ec048e8 /* lharx r22,0,r9 */ + .long 0x7ec048e9 /* lharx r22,0,r9,1 */ + .long 0x7ec148e8 /* lharx r22,r1,r9 */ + .long 0x7ec148e8 /* lharx r22,r1,r9 */ + .long 0x7ec148e9 /* lharx r22,r1,r9,1 */ + .long 0x7ee05028 /* lwarx r23,0,r10 */ + .long 0x7ee05028 /* lwarx r23,0,r10 */ + .long 0x7ee05029 /* lwarx r23,0,r10,1 */ + .long 0x7ee15028 /* lwarx r23,r1,r10 */ + .long 0x7ee15028 /* lwarx r23,r1,r10 */ + .long 0x7ee15029 /* lwarx r23,r1,r10,1 */ + .long 0x7d403d6d /* stbcx. r10,0,r7 */ + .long 0x7d413d6d /* stbcx. r10,r1,r7 */ + .long 0x7d6045ad /* sthcx. r11,0,r8 */ + .long 0x7d6145ad /* sthcx. r11,r1,r8 */ + .long 0x7d80492d /* stwcx. r12,0,r9 */ + .long 0x7d81492d /* stwcx. r12,r1,r9 */ + .long 0x7da051ad /* stdcx. r13,0,r10 */ + .long 0x7da151ad /* stdcx. r13,r1,r10 */ diff --git a/gdb/testsuite/gdb.arch/powerpc-power9.exp b/gdb/testsuite/gdb.arch/powerpc-power9.exp new file mode 100644 index 0000000..7ea9ac7 --- /dev/null +++ b/gdb/testsuite/gdb.arch/powerpc-power9.exp @@ -0,0 +1,442 @@ +# Copyright 2016 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +# Test PowerPC instructions disassembly. + +standard_testfile .s +set objfile [standard_output_file ${testfile}.o] + +if {![istarget "powerpc*-*-*"]} then { + verbose "Skipping PowerPC instructions disassembly." + return +} + +if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${objfile}" object {debug}] != "" } { + untested "PowerPC instructions disassembly" + return -1 +} + +clean_restart ${objfile} + +# Disassemble the function. + +gdb_test "set disassembler-options power9" +set test "disass func" +gdb_test_multiple $test $test { + -re "\r\nDump of assembler code for function func:(\r\n.*\r\n)End of assembler dump.\r\n$gdb_prompt $" { + set func $expect_out(1,string) + pass $test + } +} + +proc instr_to_patt {instr} { + # 0x0000000000000018 <+24>: stxvd2x vs43,r4,r5 + return ".*\r\n\[ \t\]*0x\[0-9a-f\]+ <\\+\[0-9a-f\]*>:\[ \t\]*[string map [list { } "\[ \t\]+" . {\.}] $instr]\[ \t\]*\r\n.*" +} + +proc func_check {instr} { + global func + + set test "Found: $instr" + if [regexp -nocase -line [instr_to_patt $instr] $func] { + pass $test + } else { + fail $test + } +} + +func_check "cnttzd r3,r13" +func_check "cnttzd\. r4,r14" +func_check "cnttzw r5,r15" +func_check "cnttzw\. r6,r16" +func_check "modsd r10,r20,r21" +func_check "modsw r11,r21,r22" +func_check "modud r12,r22,r23" +func_check "moduw r13,r23,r24" +func_check "bcdcfn\. v3,v4,0" +func_check "bcdcfn\. v3,v4,1" +func_check "bcdcfsq\. v4,v5,0" +func_check "bcdcfsq\. v4,v5,1" +func_check "bcdcfz\. v5,v6,0" +func_check "bcdcfz\. v5,v6,1" +func_check "bcdcpsgn\. v6,v7,v8" +func_check "bcdctn\. v7,v8" +func_check "bcdctsq\. v8,v9" +func_check "bcdctz\. v9,v10,0" +func_check "bcdctz\. v9,v10,1" +func_check "bcdsetsgn\. v10,v11,0" +func_check "bcdsetsgn\. v10,v11,1" +func_check "bcdsr\. v11,v12,v13,0" +func_check "bcdsr\. v11,v12,v13,1" +func_check "bcds\. v12,v13,v14,0" +func_check "bcds\. v12,v13,v14,1" +func_check "bcdtrunc\. v13,v14,v15,0" +func_check "bcdtrunc\. v13,v14,v15,1" +func_check "bcdus\. v14,v15,v16" +func_check "bcdutrunc\. v15,v16,v17" +func_check "lxvll vs20,0,r21" +func_check "lxvll vs20,r10,r21" +func_check "stxvll vs21,0,r11" +func_check "stxvll vs21,r10,r11" +func_check "vmul10cuq v22,v23" +func_check "vmul10ecuq v23,v24,v25" +func_check "vmul10euq v24,v25,v26" +func_check "vmul10uq v25,v26" +func_check "xsaddqp v10,v11,v12" +func_check "xsaddqpo v11,v12,v12" +func_check "xsrqpi 0,v20,v30,0" +func_check "xsrqpi 1,v20,v30,0" +func_check "xsrqpi 0,v20,v30,3" +func_check "xsrqpi 1,v20,v30,3" +func_check "xsrqpix 0,v21,v31,0" +func_check "xsrqpix 1,v21,v31,0" +func_check "xsrqpix 0,v21,v31,3" +func_check "xsrqpix 1,v21,v31,3" +func_check "xsmulqp v12,v13,v14" +func_check "xsmulqpo v13,v14,v15" +func_check "xsrqpxp 0,v22,v23,0" +func_check "xsrqpxp 1,v22,v23,0" +func_check "xsrqpxp 0,v22,v23,3" +func_check "xsrqpxp 1,v22,v23,3" +func_check "xscpsgnqp v14,v15,v16" +func_check "xscmpoqp cr0,v15,v16" +func_check "xscmpoqp cr7,v15,v16" +func_check "xscmpexpqp cr0,v16,v17" +func_check "xscmpexpqp cr7,v16,v17" +func_check "xsmaddqp v17,v18,v19" +func_check "xsmaddqpo v18,v19,v20" +func_check "xsmsubqp v19,v20,v21" +func_check "xsmsubqpo v20,v21,v22" +func_check "xsnmaddqp v21,v22,v23" +func_check "xsnmaddqpo v22,v23,v24" +func_check "xsnmsubqp v23,v24,v25" +func_check "xsnmsubqpo v24,v25,v26" +func_check "xssubqp v25,v26,v27" +func_check "xssubqpo v26,v27,v28" +func_check "xsdivqp v27,v28,v29" +func_check "xsdivqpo v28,v29,v30" +func_check "xscmpuqp cr0,v29,v30" +func_check "xscmpuqp cr7,v29,v30" +func_check "xststdcqp cr0,v30,0" +func_check "xststdcqp cr7,v30,0" +func_check "xststdcqp cr0,v31,127" +func_check "xststdcqp cr7,v31,127" +func_check "xsabsqp v10,v11" +func_check "xsxexpqp v11,v12" +func_check "xsnabsqp v12,v13" +func_check "xsnegqp v13,v14" +func_check "xsxsigqp v14,v15" +func_check "xssqrtqp v15,v16" +func_check "xssqrtqpo v16,v17" +func_check "xscvqpuwz v17,v18" +func_check "xscvudqp v18,v19" +func_check "xscvqpswz v19,v20" +func_check "xscvsdqp v20,v21" +func_check "xscvqpudz v21,v22" +func_check "xscvqpdp v22,v23" +func_check "xscvqpdpo v23,v24" +func_check "xscvdpqp v24,v25" +func_check "xscvqpsdz v25,v26" +func_check "xsiexpqp v26,v27,v28" +func_check "vpermr v4,v5,v6,v7" +func_check "vextractub v5,v6,0" +func_check "vextractub v5,v6,15" +func_check "vextractuh v6,v7,0" +func_check "vextractuh v6,v7,15" +func_check "vextractuw v7,v8,0" +func_check "vextractuw v7,v8,15" +func_check "vextractd v8,v9,0" +func_check "vextractd v8,v9,15" +func_check "vinsertb v9,v10,0" +func_check "vinsertb v9,v10,15" +func_check "vinserth v10,v11,0" +func_check "vinserth v10,v11,15" +func_check "vinsertw v11,v12,0" +func_check "vinsertw v11,v12,15" +func_check "vinsertd v12,v13,0" +func_check "vinsertd v12,v13,15" +func_check "mfvsrld r20,vs45" +func_check "mtvsrws vs46,r21" +func_check "mtvsrdd vs47,0,r23" +func_check "mtvsrdd vs47,r22,r23" +func_check "lxvx vs50,0,r11" +func_check "lxvx vs0,r10,r11" +func_check "lxvwsx vs51,0,r12" +func_check "lxvwsx vs1,r10,r12" +func_check "lxvh8x vs52,0,r13" +func_check "lxvh8x vs2,r10,r13" +func_check "lxvb16x vs53,0,r14" +func_check "lxvb16x vs3,r10,r14" +func_check "stxvx vs54,0,r15" +func_check "stxvx vs4,r20,r15" +func_check "stxvh8x vs55,0,r16" +func_check "stxvh8x vs5,r20,r16" +func_check "stxvb16x vs56,0,r17" +func_check "stxvb16x vs6,r20,r17" +func_check "xxextractuw vs4,vs5,0" +func_check "xxextractuw vs40,vs50,15" +func_check "xxspltib vs4,0" +func_check "xxspltib vs4,128" +func_check "xxspltib vs41,255" +func_check "xxspltib vs41,255" +func_check "xxinsertw vs5,vs6,0" +func_check "xxinsertw vs50,vs60,15" +func_check "xxbrh vs6,vs7" +func_check "xxbrh vs56,vs57" +func_check "xxbrw vs7,vs8" +func_check "xxbrw vs57,vs58" +func_check "xxbrd vs8,vs9" +func_check "xxbrd vs58,vs59" +func_check "xxbrq vs9,vs10" +func_check "xxbrq vs59,vs60" +func_check "lxsd v20,0\\(0\\)" +func_check "lxsd v20,0\\(r10\\)" +func_check "lxsd v20,8\\(0\\)" +func_check "lxsd v20,8\\(r10\\)" +func_check "lxsd v20,-8\\(0\\)" +func_check "lxsd v20,-8\\(r10\\)" +func_check "lxsd v20,32764\\(0\\)" +func_check "lxsd v20,32764\\(r10\\)" +func_check "lxsd v20,-32768\\(0\\)" +func_check "lxsd v20,-32768\\(r10\\)" +func_check "lxssp v30,0\\(0\\)" +func_check "lxssp v30,0\\(r11\\)" +func_check "lxssp v30,8\\(0\\)" +func_check "lxssp v30,8\\(r11\\)" +func_check "lxssp v30,-8\\(0\\)" +func_check "lxssp v30,-8\\(r11\\)" +func_check "lxssp v30,32764\\(0\\)" +func_check "lxssp v30,32764\\(r11\\)" +func_check "lxssp v30,-32768\\(0\\)" +func_check "lxssp v30,-32768\\(r11\\)" +func_check "lxv vs40,0\\(0\\)" +func_check "lxv vs40,0\\(r12\\)" +func_check "lxv vs40,16\\(0\\)" +func_check "lxv vs40,16\\(r12\\)" +func_check "lxv vs40,-16\\(0\\)" +func_check "lxv vs10,-16\\(r12\\)" +func_check "lxv vs10,32752\\(0\\)" +func_check "lxv vs10,32752\\(r12\\)" +func_check "lxv vs10,-32768\\(0\\)" +func_check "lxv vs10,-32768\\(r12\\)" +func_check "stxsd v21,0\\(0\\)" +func_check "stxsd v21,0\\(r10\\)" +func_check "stxsd v21,8\\(0\\)" +func_check "stxsd v21,8\\(r10\\)" +func_check "stxsd v21,-8\\(0\\)" +func_check "stxsd v21,-8\\(r10\\)" +func_check "stxsd v21,32764\\(0\\)" +func_check "stxsd v21,32764\\(r10\\)" +func_check "stxsd v21,-32768\\(0\\)" +func_check "stxsd v21,-32768\\(r10\\)" +func_check "stxssp v31,0\\(0\\)" +func_check "stxssp v31,0\\(r11\\)" +func_check "stxssp v31,8\\(0\\)" +func_check "stxssp v31,8\\(r11\\)" +func_check "stxssp v31,-8\\(0\\)" +func_check "stxssp v31,-8\\(r11\\)" +func_check "stxssp v31,32764\\(0\\)" +func_check "stxssp v31,32764\\(r11\\)" +func_check "stxssp v31,-32768\\(0\\)" +func_check "stxssp v31,-32768\\(r11\\)" +func_check "stxv vs41,0\\(0\\)" +func_check "stxv vs41,0\\(r12\\)" +func_check "stxv vs41,16\\(0\\)" +func_check "stxv vs41,16\\(r12\\)" +func_check "stxv vs41,-16\\(0\\)" +func_check "stxv vs11,-16\\(r12\\)" +func_check "stxv vs11,32752\\(0\\)" +func_check "stxv vs11,32752\\(r12\\)" +func_check "stxv vs11,-32768\\(0\\)" +func_check "stxv vs11,-32768\\(r12\\)" +func_check "xxperm vs20,vs22,vs24" +func_check "xxperm vs40,vs42,vs44" +func_check "xxpermr vs21,vs23,vs25" +func_check "xxpermr vs41,vs43,vs45" +func_check "extswsli r12,r20,0" +func_check "extswsli r12,r20,1" +func_check "extswsli r12,r20,63" +func_check "extswsli\. r13,r21,0" +func_check "extswsli\. r13,r21,1" +func_check "extswsli\. r13,r21,63" +func_check "vrlwmi v14,v22,v23" +func_check "vrldmi v15,v23,v24" +func_check "vrlwnm v16,v24,v25" +func_check "vrldnm v17,v25,v26" +func_check "vbpermd v18,v26,v27" +func_check "vnegw v19,v20" +func_check "vnegd v20,v21" +func_check "vprtybw v21,v22" +func_check "vprtybd v22,v23" +func_check "vprtybq v23,v24" +func_check "vextsb2w v24,v25" +func_check "vextsh2w v25,v26" +func_check "vextsb2d v26,v27" +func_check "vextsh2d v27,v28" +func_check "vextsw2d v28,v29" +func_check "vctzb v29,v30" +func_check "vctzh v30,v31" +func_check "vctzw v31,v30" +func_check "vctzd v30,v29" +func_check "lxsibzx vs10,0,r20" +func_check "lxsibzx vs50,r10,r20" +func_check "lxsihzx vs11,0,r21" +func_check "lxsihzx vs51,r11,r21" +func_check "stxsibx vs12,0,r22" +func_check "stxsibx vs52,r12,r22" +func_check "stxsihx vs13,0,r23" +func_check "stxsihx vs53,r13,r23" +func_check "maddhd r10,r11,r12,r13" +func_check "maddhdu r20,r21,r22,r23" +func_check "maddld r2,r3,r4,r5" +func_check "xscmpexpdp cr0,vs10,vs20" +func_check "xscmpexpdp cr7,vs40,vs50" +func_check "xsiexpdp vs41,r11,r21" +func_check "xststdcdp cr0,vs11,127" +func_check "xststdcdp cr7,vs41,127" +func_check "xststdcsp cr0,vs11,127" +func_check "xststdcsp cr7,vs41,127" +func_check "xsxexpdp r13,vs43" +func_check "xsxsigdp r14,vs44" +func_check "xviexpdp vs45,vs46,vs47" +func_check "xviexpsp vs46,vs47,vs48" +func_check "xvtstdcdp vs54,vs55,0" +func_check "xvtstdcdp vs54,vs55,127" +func_check "xvtstdcsp vs55,vs56,0" +func_check "xvtstdcsp vs55,vs56,127" +func_check "xvxexpdp vs57,vs58" +func_check "xvxexpsp vs58,vs59" +func_check "xvxsigdp vs59,vs60" +func_check "xvxsigsp vs60,vs61" +func_check "cmpeqb cr0,r6,r7" +func_check "cmpeqb cr7,r6,r7" +func_check "cmprb cr0,0,r8,r9" +func_check "cmprb cr7,0,r8,r9" +func_check "cmprb cr0,1,r8,r9" +func_check "cmprb cr7,1,r8,r9" +func_check "setb r15,cr0" +func_check "setb r15,cr7" +func_check "lxvl vs26,0,r10" +func_check "lxvl vs56,r20,r10" +func_check "stxvl vs27,0,r11" +func_check "stxvl vs57,r21,r11" +func_check "vclzlsbb r20,v30" +func_check "vctzlsbb r21,v31" +func_check "vcmpneb v10,v11,v12" +func_check "vcmpneb\. v20,v21,v22" +func_check "vcmpneh v11,v12,v13" +func_check "vcmpneh\. v21,v22,v23" +func_check "vcmpnew v12,v13,v14" +func_check "vcmpnew\. v22,v23,v24" +func_check "vcmpnezb v13,v14,v15" +func_check "vcmpnezb\. v23,v24,v25" +func_check "vcmpnezh v14,v15,v16" +func_check "vcmpnezh\. v24,v25,v26" +func_check "vcmpnezw v15,v16,v17" +func_check "vcmpnezw\. v25,v26,v27" +func_check "vextublx r16,r17,v10" +func_check "vextubrx r17,r18,v11" +func_check "vextuhlx r18,r19,v12" +func_check "vextuhrx r19,r20,v13" +func_check "vextuwlx r20,r21,v14" +func_check "vextuwrx r21,r22,v15" +func_check "dtstsfi cr0,0,f3" +func_check "dtstsfi cr7,63,f3" +func_check "dtstsfiq cr0,0,f4" +func_check "dtstsfiq cr7,63,f4" +func_check "xscvhpdp vs40,vs50" +func_check "xscvdphp vs41,vs51" +func_check "xvcvhpsp vs42,vs52" +func_check "xvcvsphp vs43,vs53" +func_check "addpcis r3,0" +func_check "addpcis r3,0" +func_check "addpcis r4,1" +func_check "addpcis r4,1" +func_check "addpcis r5,-2" +func_check "addpcis r5,-2" +func_check "addpcis r6,32767" +func_check "addpcis r6,32767" +func_check "addpcis r7,-32768" +func_check "addpcis r7,-32768" +func_check "slbsync" +func_check "slbiag r10" +func_check "slbieg r10,r11" +func_check "slbmfee r3,r4" +func_check "slbmfee r3,r4" +func_check "slbmfee r3,r4,1" +func_check "slbmfev r4,r5" +func_check "slbmfev r4,r5" +func_check "slbmfev r4,r5,1" +func_check "tlbie r3,r4" +func_check "tlbie r3,r4" +func_check "tlbie r3,r4,3,1,1" +func_check "tlbiel r3" +func_check "tlbiel r3" +func_check "tlbiel r3,r4,3,1,1" +func_check "copy r12,r13" +func_check "paste\. r10,r11" +func_check "cpabort" +func_check "hwsync" +func_check "hwsync" +func_check "hwsync" +func_check "lwsync" +func_check "lwsync" +func_check "ptesync" +func_check "ptesync" +func_check "ldat r20,0,0" +func_check "ldat r20,r10,28" +func_check "lwat r21,0,0" +func_check "lwat r21,r11,28" +func_check "stdat r22,0,0" +func_check "stdat r22,r12,28" +func_check "stwat r23,0,0" +func_check "stwat r23,r13,28" +func_check "urfid" +func_check "rmieg r30" +func_check "ldmx r10,0,r15" +func_check "ldmx r10,r3,r15" +func_check "stop" +func_check "wait " +func_check "wait " +func_check "darn r3,0" +func_check "darn r3,1" +func_check "darn r3,2" +func_check "mcrxrx cr0" +func_check "mcrxrx cr7" +func_check "vslv v20,v21,v22" +func_check "vsrv v23,v24,v25" +func_check "msgsync" +func_check "xscmpeqdp vs30,vs40,vs50" +func_check "xscmpgtdp vs31,vs41,vs51" +func_check "xscmpgedp vs32,vs42,vs52" +func_check "xsmincdp vs34,vs44,vs54" +func_check "xsmaxcdp vs35,vs45,vs55" +func_check "xsminjdp vs36,vs46,vs56" +func_check "xsmaxjdp vs37,vs47,vs57" +func_check "vmsumudm v20,v21,v22,v23" +func_check "addex r11,r12,r13,0" +func_check "addex r11,r12,r13,1" +func_check "addex r11,r12,r13,2" +func_check "mffs f25" +func_check "mffs\. f25" +func_check "mffsce f26" +func_check "mffscdrn f27,f20" +func_check "mffscdrni f28,0" +func_check "mffscdrni f28,7" +func_check "mffscrn f29,f21" +func_check "mffscrni f30,0" +func_check "mffscrni f30,3" +func_check "mffsl f31" diff --git a/gdb/testsuite/gdb.arch/powerpc-power9.s b/gdb/testsuite/gdb.arch/powerpc-power9.s new file mode 100644 index 0000000..8018202 --- /dev/null +++ b/gdb/testsuite/gdb.arch/powerpc-power9.s @@ -0,0 +1,402 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2016 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + + .text + .globl func +func: + .long 0x7da30474 /* cnttzd r3,r13 */ + .long 0x7dc40475 /* cnttzd. r4,r14 */ + .long 0x7de50434 /* cnttzw r5,r15 */ + .long 0x7e060435 /* cnttzw. r6,r16 */ + .long 0x7d54ae12 /* modsd r10,r20,r21 */ + .long 0x7d75b616 /* modsw r11,r21,r22 */ + .long 0x7d96ba12 /* modud r12,r22,r23 */ + .long 0x7db7c216 /* moduw r13,r23,r24 */ + .long 0x10672581 /* bcdcfn. v3,v4,0 */ + .long 0x10672781 /* bcdcfn. v3,v4,1 */ + .long 0x10822d81 /* bcdcfsq. v4,v5,0 */ + .long 0x10822f81 /* bcdcfsq. v4,v5,1 */ + .long 0x10a63581 /* bcdcfz. v5,v6,0 */ + .long 0x10a63781 /* bcdcfz. v5,v6,1 */ + .long 0x10c74341 /* bcdcpsgn. v6,v7,v8 */ + .long 0x10e54581 /* bcdctn. v7,v8 */ + .long 0x11004d81 /* bcdctsq. v8,v9 */ + .long 0x11245581 /* bcdctz. v9,v10,0 */ + .long 0x11245781 /* bcdctz. v9,v10,1 */ + .long 0x115f5d81 /* bcdsetsgn. v10,v11,0 */ + .long 0x115f5f81 /* bcdsetsgn. v10,v11,1 */ + .long 0x116c6dc1 /* bcdsr. v11,v12,v13,0 */ + .long 0x116c6fc1 /* bcdsr. v11,v12,v13,1 */ + .long 0x118d74c1 /* bcds. v12,v13,v14,0 */ + .long 0x118d76c1 /* bcds. v12,v13,v14,1 */ + .long 0x11ae7d01 /* bcdtrunc. v13,v14,v15,0 */ + .long 0x11ae7f01 /* bcdtrunc. v13,v14,v15,1 */ + .long 0x11cf8481 /* bcdus. v14,v15,v16 */ + .long 0x11f08d41 /* bcdutrunc. v15,v16,v17 */ + .long 0x7e80aa5a /* lxvll vs20,0,r21 */ + .long 0x7e8aaa5a /* lxvll vs20,r10,r21 */ + .long 0x7ea05b5a /* stxvll vs21,0,r11 */ + .long 0x7eaa5b5a /* stxvll vs21,r10,r11 */ + .long 0x12d70001 /* vmul10cuq v22,v23 */ + .long 0x12f8c841 /* vmul10ecuq v23,v24,v25 */ + .long 0x1319d241 /* vmul10euq v24,v25,v26 */ + .long 0x133a0201 /* vmul10uq v25,v26 */ + .long 0xfd4b6008 /* xsaddqp v10,v11,v12 */ + .long 0xfd6c6009 /* xsaddqpo v11,v12,v12 */ + .long 0xfe80f00a /* xsrqpi 0,v20,v30,0 */ + .long 0xfe81f00a /* xsrqpi 1,v20,v30,0 */ + .long 0xfe80f60a /* xsrqpi 0,v20,v30,3 */ + .long 0xfe81f60a /* xsrqpi 1,v20,v30,3 */ + .long 0xfea0f80b /* xsrqpix 0,v21,v31,0 */ + .long 0xfea1f80b /* xsrqpix 1,v21,v31,0 */ + .long 0xfea0fe0b /* xsrqpix 0,v21,v31,3 */ + .long 0xfea1fe0b /* xsrqpix 1,v21,v31,3 */ + .long 0xfd8d7048 /* xsmulqp v12,v13,v14 */ + .long 0xfdae7849 /* xsmulqpo v13,v14,v15 */ + .long 0xfec0b84a /* xsrqpxp 0,v22,v23,0 */ + .long 0xfec1b84a /* xsrqpxp 1,v22,v23,0 */ + .long 0xfec0be4a /* xsrqpxp 0,v22,v23,3 */ + .long 0xfec1be4a /* xsrqpxp 1,v22,v23,3 */ + .long 0xfdcf80c8 /* xscpsgnqp v14,v15,v16 */ + .long 0xfc0f8108 /* xscmpoqp cr0,v15,v16 */ + .long 0xff8f8108 /* xscmpoqp cr7,v15,v16 */ + .long 0xfc108948 /* xscmpexpqp cr0,v16,v17 */ + .long 0xff908948 /* xscmpexpqp cr7,v16,v17 */ + .long 0xfe329b08 /* xsmaddqp v17,v18,v19 */ + .long 0xfe53a309 /* xsmaddqpo v18,v19,v20 */ + .long 0xfe74ab48 /* xsmsubqp v19,v20,v21 */ + .long 0xfe95b349 /* xsmsubqpo v20,v21,v22 */ + .long 0xfeb6bb88 /* xsnmaddqp v21,v22,v23 */ + .long 0xfed7c389 /* xsnmaddqpo v22,v23,v24 */ + .long 0xfef8cbc8 /* xsnmsubqp v23,v24,v25 */ + .long 0xff19d3c9 /* xsnmsubqpo v24,v25,v26 */ + .long 0xff3adc08 /* xssubqp v25,v26,v27 */ + .long 0xff5be409 /* xssubqpo v26,v27,v28 */ + .long 0xff7cec48 /* xsdivqp v27,v28,v29 */ + .long 0xff9df449 /* xsdivqpo v28,v29,v30 */ + .long 0xfc1df508 /* xscmpuqp cr0,v29,v30 */ + .long 0xff9df508 /* xscmpuqp cr7,v29,v30 */ + .long 0xfc00f588 /* xststdcqp cr0,v30,0 */ + .long 0xff80f588 /* xststdcqp cr7,v30,0 */ + .long 0xfc7ffd88 /* xststdcqp cr0,v31,127 */ + .long 0xfffffd88 /* xststdcqp cr7,v31,127 */ + .long 0xfd405e48 /* xsabsqp v10,v11 */ + .long 0xfd626648 /* xsxexpqp v11,v12 */ + .long 0xfd886e48 /* xsnabsqp v12,v13 */ + .long 0xfdb07648 /* xsnegqp v13,v14 */ + .long 0xfdd27e48 /* xsxsigqp v14,v15 */ + .long 0xfdfb8648 /* xssqrtqp v15,v16 */ + .long 0xfe1b8e49 /* xssqrtqpo v16,v17 */ + .long 0xfe219688 /* xscvqpuwz v17,v18 */ + .long 0xfe429e88 /* xscvudqp v18,v19 */ + .long 0xfe69a688 /* xscvqpswz v19,v20 */ + .long 0xfe8aae88 /* xscvsdqp v20,v21 */ + .long 0xfeb1b688 /* xscvqpudz v21,v22 */ + .long 0xfed4be88 /* xscvqpdp v22,v23 */ + .long 0xfef4c689 /* xscvqpdpo v23,v24 */ + .long 0xff16ce88 /* xscvdpqp v24,v25 */ + .long 0xff39d688 /* xscvqpsdz v25,v26 */ + .long 0xff5be6c8 /* xsiexpqp v26,v27,v28 */ + .long 0x108531fb /* vpermr v4,v5,v6,v7 */ + .long 0x10a0320d /* vextractub v5,v6,0 */ + .long 0x10af320d /* vextractub v5,v6,15 */ + .long 0x10c03a4d /* vextractuh v6,v7,0 */ + .long 0x10cf3a4d /* vextractuh v6,v7,15 */ + .long 0x10e0428d /* vextractuw v7,v8,0 */ + .long 0x10ef428d /* vextractuw v7,v8,15 */ + .long 0x11004acd /* vextractd v8,v9,0 */ + .long 0x110f4acd /* vextractd v8,v9,15 */ + .long 0x1120530d /* vinsertb v9,v10,0 */ + .long 0x112f530d /* vinsertb v9,v10,15 */ + .long 0x11405b4d /* vinserth v10,v11,0 */ + .long 0x114f5b4d /* vinserth v10,v11,15 */ + .long 0x1160638d /* vinsertw v11,v12,0 */ + .long 0x116f638d /* vinsertw v11,v12,15 */ + .long 0x11806bcd /* vinsertd v12,v13,0 */ + .long 0x118f6bcd /* vinsertd v12,v13,15 */ + .long 0x7db40267 /* mfvsrld r20,vs45 */ + .long 0x7dd50327 /* mtvsrws vs46,r21 */ + .long 0x7de0bb67 /* mtvsrdd vs47,0,r23 */ + .long 0x7df6bb67 /* mtvsrdd vs47,r22,r23 */ + .long 0x7e405a19 /* lxvx vs50,0,r11 */ + .long 0x7c0a5a18 /* lxvx vs0,r10,r11 */ + .long 0x7e6062d9 /* lxvwsx vs51,0,r12 */ + .long 0x7c2a62d8 /* lxvwsx vs1,r10,r12 */ + .long 0x7e806e59 /* lxvh8x vs52,0,r13 */ + .long 0x7c4a6e58 /* lxvh8x vs2,r10,r13 */ + .long 0x7ea076d9 /* lxvb16x vs53,0,r14 */ + .long 0x7c6a76d8 /* lxvb16x vs3,r10,r14 */ + .long 0x7ec07b19 /* stxvx vs54,0,r15 */ + .long 0x7c947b18 /* stxvx vs4,r20,r15 */ + .long 0x7ee08759 /* stxvh8x vs55,0,r16 */ + .long 0x7cb48758 /* stxvh8x vs5,r20,r16 */ + .long 0x7f008fd9 /* stxvb16x vs56,0,r17 */ + .long 0x7cd48fd8 /* stxvb16x vs6,r20,r17 */ + .long 0xf0802a94 /* xxextractuw vs4,vs5,0 */ + .long 0xf10f9297 /* xxextractuw vs40,vs50,15 */ + .long 0xf08002d0 /* xxspltib vs4,0 */ + .long 0xf08402d0 /* xxspltib vs4,128 */ + .long 0xf127fad1 /* xxspltib vs41,255 */ + .long 0xf127fad1 /* xxspltib vs41,255 */ + .long 0xf0a032d4 /* xxinsertw vs5,vs6,0 */ + .long 0xf24fe2d7 /* xxinsertw vs50,vs60,15 */ + .long 0xf0c73f6c /* xxbrh vs6,vs7 */ + .long 0xf307cf6f /* xxbrh vs56,vs57 */ + .long 0xf0ef476c /* xxbrw vs7,vs8 */ + .long 0xf32fd76f /* xxbrw vs57,vs58 */ + .long 0xf1174f6c /* xxbrd vs8,vs9 */ + .long 0xf357df6f /* xxbrd vs58,vs59 */ + .long 0xf13f576c /* xxbrq vs9,vs10 */ + .long 0xf37fe76f /* xxbrq vs59,vs60 */ + .long 0xe6800002 /* lxsd v20,0(0) */ + .long 0xe68a0002 /* lxsd v20,0(r10) */ + .long 0xe680000a /* lxsd v20,8(0) */ + .long 0xe68a000a /* lxsd v20,8(r10) */ + .long 0xe680fffa /* lxsd v20,-8(0) */ + .long 0xe68afffa /* lxsd v20,-8(r10) */ + .long 0xe6807ffe /* lxsd v20,32764(0) */ + .long 0xe68a7ffe /* lxsd v20,32764(r10) */ + .long 0xe6808002 /* lxsd v20,-32768(0) */ + .long 0xe68a8002 /* lxsd v20,-32768(r10) */ + .long 0xe7c00003 /* lxssp v30,0(0) */ + .long 0xe7cb0003 /* lxssp v30,0(r11) */ + .long 0xe7c0000b /* lxssp v30,8(0) */ + .long 0xe7cb000b /* lxssp v30,8(r11) */ + .long 0xe7c0fffb /* lxssp v30,-8(0) */ + .long 0xe7cbfffb /* lxssp v30,-8(r11) */ + .long 0xe7c07fff /* lxssp v30,32764(0) */ + .long 0xe7cb7fff /* lxssp v30,32764(r11) */ + .long 0xe7c08003 /* lxssp v30,-32768(0) */ + .long 0xe7cb8003 /* lxssp v30,-32768(r11) */ + .long 0xf5000009 /* lxv vs40,0(0) */ + .long 0xf50c0009 /* lxv vs40,0(r12) */ + .long 0xf5000019 /* lxv vs40,16(0) */ + .long 0xf50c0019 /* lxv vs40,16(r12) */ + .long 0xf500fff9 /* lxv vs40,-16(0) */ + .long 0xf54cfff1 /* lxv vs10,-16(r12) */ + .long 0xf5407ff1 /* lxv vs10,32752(0) */ + .long 0xf54c7ff1 /* lxv vs10,32752(r12) */ + .long 0xf5408001 /* lxv vs10,-32768(0) */ + .long 0xf54c8001 /* lxv vs10,-32768(r12) */ + .long 0xf6a00002 /* stxsd v21,0(0) */ + .long 0xf6aa0002 /* stxsd v21,0(r10) */ + .long 0xf6a0000a /* stxsd v21,8(0) */ + .long 0xf6aa000a /* stxsd v21,8(r10) */ + .long 0xf6a0fffa /* stxsd v21,-8(0) */ + .long 0xf6aafffa /* stxsd v21,-8(r10) */ + .long 0xf6a07ffe /* stxsd v21,32764(0) */ + .long 0xf6aa7ffe /* stxsd v21,32764(r10) */ + .long 0xf6a08002 /* stxsd v21,-32768(0) */ + .long 0xf6aa8002 /* stxsd v21,-32768(r10) */ + .long 0xf7e00003 /* stxssp v31,0(0) */ + .long 0xf7eb0003 /* stxssp v31,0(r11) */ + .long 0xf7e0000b /* stxssp v31,8(0) */ + .long 0xf7eb000b /* stxssp v31,8(r11) */ + .long 0xf7e0fffb /* stxssp v31,-8(0) */ + .long 0xf7ebfffb /* stxssp v31,-8(r11) */ + .long 0xf7e07fff /* stxssp v31,32764(0) */ + .long 0xf7eb7fff /* stxssp v31,32764(r11) */ + .long 0xf7e08003 /* stxssp v31,-32768(0) */ + .long 0xf7eb8003 /* stxssp v31,-32768(r11) */ + .long 0xf520000d /* stxv vs41,0(0) */ + .long 0xf52c000d /* stxv vs41,0(r12) */ + .long 0xf520001d /* stxv vs41,16(0) */ + .long 0xf52c001d /* stxv vs41,16(r12) */ + .long 0xf520fffd /* stxv vs41,-16(0) */ + .long 0xf56cfff5 /* stxv vs11,-16(r12) */ + .long 0xf5607ff5 /* stxv vs11,32752(0) */ + .long 0xf56c7ff5 /* stxv vs11,32752(r12) */ + .long 0xf5608005 /* stxv vs11,-32768(0) */ + .long 0xf56c8005 /* stxv vs11,-32768(r12) */ + .long 0xf296c0d0 /* xxperm vs20,vs22,vs24 */ + .long 0xf10a60d7 /* xxperm vs40,vs42,vs44 */ + .long 0xf2b7c9d0 /* xxpermr vs21,vs23,vs25 */ + .long 0xf12b69d7 /* xxpermr vs41,vs43,vs45 */ + .long 0x7e8c06f4 /* extswsli r12,r20,0 */ + .long 0x7e8c0ef4 /* extswsli r12,r20,1 */ + .long 0x7e8cfef6 /* extswsli r12,r20,63 */ + .long 0x7ead06f5 /* extswsli. r13,r21,0 */ + .long 0x7ead0ef5 /* extswsli. r13,r21,1 */ + .long 0x7eadfef7 /* extswsli. r13,r21,63 */ + .long 0x11d6b885 /* vrlwmi v14,v22,v23 */ + .long 0x11f7c0c5 /* vrldmi v15,v23,v24 */ + .long 0x1218c985 /* vrlwnm v16,v24,v25 */ + .long 0x1239d1c5 /* vrldnm v17,v25,v26 */ + .long 0x125addcc /* vbpermd v18,v26,v27 */ + .long 0x1266a602 /* vnegw v19,v20 */ + .long 0x1287ae02 /* vnegd v20,v21 */ + .long 0x12a8b602 /* vprtybw v21,v22 */ + .long 0x12c9be02 /* vprtybd v22,v23 */ + .long 0x12eac602 /* vprtybq v23,v24 */ + .long 0x1310ce02 /* vextsb2w v24,v25 */ + .long 0x1331d602 /* vextsh2w v25,v26 */ + .long 0x1358de02 /* vextsb2d v26,v27 */ + .long 0x1379e602 /* vextsh2d v27,v28 */ + .long 0x139aee02 /* vextsw2d v28,v29 */ + .long 0x13bcf602 /* vctzb v29,v30 */ + .long 0x13ddfe02 /* vctzh v30,v31 */ + .long 0x13fef602 /* vctzw v31,v30 */ + .long 0x13dfee02 /* vctzd v30,v29 */ + .long 0x7d40a61a /* lxsibzx vs10,0,r20 */ + .long 0x7e4aa61b /* lxsibzx vs50,r10,r20 */ + .long 0x7d60ae5a /* lxsihzx vs11,0,r21 */ + .long 0x7e6bae5b /* lxsihzx vs51,r11,r21 */ + .long 0x7d80b71a /* stxsibx vs12,0,r22 */ + .long 0x7e8cb71b /* stxsibx vs52,r12,r22 */ + .long 0x7da0bf5a /* stxsihx vs13,0,r23 */ + .long 0x7eadbf5b /* stxsihx vs53,r13,r23 */ + .long 0x114b6370 /* maddhd r10,r11,r12,r13 */ + .long 0x1295b5f1 /* maddhdu r20,r21,r22,r23 */ + .long 0x10432173 /* maddld r2,r3,r4,r5 */ + .long 0xf00aa1d8 /* xscmpexpdp cr0,vs10,vs20 */ + .long 0xf38891de /* xscmpexpdp cr7,vs40,vs50 */ + .long 0xf12baf2d /* xsiexpdp vs41,r11,r21 */ + .long 0xf07f5da8 /* xststdcdp cr0,vs11,127 */ + .long 0xf3ff4daa /* xststdcdp cr7,vs41,127 */ + .long 0xf07f5ca8 /* xststdcsp cr0,vs11,127 */ + .long 0xf3ff4caa /* xststdcsp cr7,vs41,127 */ + .long 0xf1a05d6e /* xsxexpdp r13,vs43 */ + .long 0xf1c1656e /* xsxsigdp r14,vs44 */ + .long 0xf1ae7fc7 /* xviexpdp vs45,vs46,vs47 */ + .long 0xf1cf86c7 /* xviexpsp vs46,vs47,vs48 */ + .long 0xf2c0bfab /* xvtstdcdp vs54,vs55,0 */ + .long 0xf2dfbfef /* xvtstdcdp vs54,vs55,127 */ + .long 0xf2e0c6ab /* xvtstdcsp vs55,vs56,0 */ + .long 0xf2ffc6ef /* xvtstdcsp vs55,vs56,127 */ + .long 0xf320d76f /* xvxexpdp vs57,vs58 */ + .long 0xf348df6f /* xvxexpsp vs58,vs59 */ + .long 0xf361e76f /* xvxsigdp vs59,vs60 */ + .long 0xf389ef6f /* xvxsigsp vs60,vs61 */ + .long 0x7c0639c0 /* cmpeqb cr0,r6,r7 */ + .long 0x7f8639c0 /* cmpeqb cr7,r6,r7 */ + .long 0x7c084980 /* cmprb cr0,0,r8,r9 */ + .long 0x7f884980 /* cmprb cr7,0,r8,r9 */ + .long 0x7c284980 /* cmprb cr0,1,r8,r9 */ + .long 0x7fa84980 /* cmprb cr7,1,r8,r9 */ + .long 0x7de00100 /* setb r15,cr0 */ + .long 0x7dfc0100 /* setb r15,cr7 */ + .long 0x7f40521a /* lxvl vs26,0,r10 */ + .long 0x7f14521b /* lxvl vs56,r20,r10 */ + .long 0x7f605b1a /* stxvl vs27,0,r11 */ + .long 0x7f355b1b /* stxvl vs57,r21,r11 */ + .long 0x1280f602 /* vclzlsbb r20,v30 */ + .long 0x12a1fe02 /* vctzlsbb r21,v31 */ + .long 0x114b6007 /* vcmpneb v10,v11,v12 */ + .long 0x1295b407 /* vcmpneb. v20,v21,v22 */ + .long 0x116c6847 /* vcmpneh v11,v12,v13 */ + .long 0x12b6bc47 /* vcmpneh. v21,v22,v23 */ + .long 0x118d7087 /* vcmpnew v12,v13,v14 */ + .long 0x12d7c487 /* vcmpnew. v22,v23,v24 */ + .long 0x11ae7907 /* vcmpnezb v13,v14,v15 */ + .long 0x12f8cd07 /* vcmpnezb. v23,v24,v25 */ + .long 0x11cf8147 /* vcmpnezh v14,v15,v16 */ + .long 0x1319d547 /* vcmpnezh. v24,v25,v26 */ + .long 0x11f08987 /* vcmpnezw v15,v16,v17 */ + .long 0x133add87 /* vcmpnezw. v25,v26,v27 */ + .long 0x1211560d /* vextublx r16,r17,v10 */ + .long 0x12325f0d /* vextubrx r17,r18,v11 */ + .long 0x1253664d /* vextuhlx r18,r19,v12 */ + .long 0x12746f4d /* vextuhrx r19,r20,v13 */ + .long 0x1295768d /* vextuwlx r20,r21,v14 */ + .long 0x12b67f8d /* vextuwrx r21,r22,v15 */ + .long 0xec001d46 /* dtstsfi cr0,0,f3 */ + .long 0xefbf1d46 /* dtstsfi cr7,63,f3 */ + .long 0xfc002546 /* dtstsfiq cr0,0,f4 */ + .long 0xffbf2546 /* dtstsfiq cr7,63,f4 */ + .long 0xf110956f /* xscvhpdp vs40,vs50 */ + .long 0xf1319d6f /* xscvdphp vs41,vs51 */ + .long 0xf158a76f /* xvcvhpsp vs42,vs52 */ + .long 0xf179af6f /* xvcvsphp vs43,vs53 */ + .long 0x4c600004 /* addpcis r3,0 */ + .long 0x4c600004 /* addpcis r3,0 */ + .long 0x4c800005 /* addpcis r4,1 */ + .long 0x4c800005 /* addpcis r4,1 */ + .long 0x4cbfffc4 /* addpcis r5,-2 */ + .long 0x4cbfffc4 /* addpcis r5,-2 */ + .long 0x4cdf7fc5 /* addpcis r6,32767 */ + .long 0x4cdf7fc5 /* addpcis r6,32767 */ + .long 0x4ce08004 /* addpcis r7,-32768 */ + .long 0x4ce08004 /* addpcis r7,-32768 */ + .long 0x7c0002a4 /* slbsync */ + .long 0x7d4006a4 /* slbiag r10 */ + .long 0x7d405ba4 /* slbieg r10,r11 */ + .long 0x7c602726 /* slbmfee r3,r4 */ + .long 0x7c602726 /* slbmfee r3,r4 */ + .long 0x7c612726 /* slbmfee r3,r4,1 */ + .long 0x7c802ea6 /* slbmfev r4,r5 */ + .long 0x7c802ea6 /* slbmfev r4,r5 */ + .long 0x7c812ea6 /* slbmfev r4,r5,1 */ + .long 0x7c801a64 /* tlbie r3,r4 */ + .long 0x7c801a64 /* tlbie r3,r4 */ + .long 0x7c8f1a64 /* tlbie r3,r4,3,1,1 */ + .long 0x7c001a24 /* tlbiel r3 */ + .long 0x7c001a24 /* tlbiel r3 */ + .long 0x7c8f1a24 /* tlbiel r3,r4,3,1,1 */ + .long 0x7c2c6e0c /* copy r12,r13 */ + .long 0x7c2a5f0d /* paste. r10,r11 */ + .long 0x7c00068c /* cpabort */ + .long 0x7c0004ac /* hwsync */ + .long 0x7c0004ac /* hwsync */ + .long 0x7c0004ac /* hwsync */ + .long 0x7c2004ac /* lwsync */ + .long 0x7c2004ac /* lwsync */ + .long 0x7c4004ac /* ptesync */ + .long 0x7c4004ac /* ptesync */ + .long 0x7e8004cc /* ldat r20,0,0 */ + .long 0x7e8ae4cc /* ldat r20,r10,28 */ + .long 0x7ea0048c /* lwat r21,0,0 */ + .long 0x7eabe48c /* lwat r21,r11,28 */ + .long 0x7ec005cc /* stdat r22,0,0 */ + .long 0x7ecce5cc /* stdat r22,r12,28 */ + .long 0x7ee0058c /* stwat r23,0,0 */ + .long 0x7eede58c /* stwat r23,r13,28 */ + .long 0x4c000264 /* urfid */ + .long 0x7c00f6e4 /* rmieg r30 */ + .long 0x7d407a6a /* ldmx r10,0,r15 */ + .long 0x7d437a6a /* ldmx r10,r3,r15 */ + .long 0x4c0002e4 /* stop */ + .long 0x7c00003c /* wait */ + .long 0x7c00003c /* wait */ + .long 0x7c6005e6 /* darn r3,0 */ + .long 0x7c6105e6 /* darn r3,1 */ + .long 0x7c6205e6 /* darn r3,2 */ + .long 0x7c000480 /* mcrxrx cr0 */ + .long 0x7f800480 /* mcrxrx cr7 */ + .long 0x1295b744 /* vslv v20,v21,v22 */ + .long 0x12f8cf04 /* vsrv v23,v24,v25 */ + .long 0x7c0006ec /* msgsync */ + .long 0xf3c8901e /* xscmpeqdp vs30,vs40,vs50 */ + .long 0xf3e9985e /* xscmpgtdp vs31,vs41,vs51 */ + .long 0xf00aa09f /* xscmpgedp vs32,vs42,vs52 */ + .long 0xf04cb447 /* xsmincdp vs34,vs44,vs54 */ + .long 0xf06dbc07 /* xsmaxcdp vs35,vs45,vs55 */ + .long 0xf08ec4c7 /* xsminjdp vs36,vs46,vs56 */ + .long 0xf0afcc87 /* xsmaxjdp vs37,vs47,vs57 */ + .long 0x1295b5e3 /* vmsumudm v20,v21,v22,v23 */ + .long 0x7d6c6954 /* addex r11,r12,r13,0 */ + .long 0x7d6c6b54 /* addex r11,r12,r13,1 */ + .long 0x7d6c6d54 /* addex r11,r12,r13,2 */ + .long 0xff20048e /* mffs f25 */ + .long 0xff20048f /* mffs. f25 */ + .long 0xff41048e /* mffsce f26 */ + .long 0xff74a48e /* mffscdrn f27,f20 */ + .long 0xff95048e /* mffscdrni f28,0 */ + .long 0xff953c8e /* mffscdrni f28,7 */ + .long 0xffb6ac8e /* mffscrn f29,f21 */ + .long 0xffd7048e /* mffscrni f30,0 */ + .long 0xffd71c8e /* mffscrni f30,3 */ + .long 0xfff8048e /* mffsl f31 */ diff --git a/gdb/testsuite/gdb.arch/powerpc-vsx.exp b/gdb/testsuite/gdb.arch/powerpc-vsx.exp new file mode 100644 index 0000000..e597155 --- /dev/null +++ b/gdb/testsuite/gdb.arch/powerpc-vsx.exp @@ -0,0 +1,222 @@ +# Copyright 2016 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +# Test PowerPC instructions disassembly. + +standard_testfile .s +set objfile [standard_output_file ${testfile}.o] + +if {![istarget "powerpc*-*-*"]} then { + verbose "Skipping PowerPC instructions disassembly." + return +} + +if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${objfile}" object {debug}] != "" } { + untested "PowerPC instructions disassembly" + return -1 +} + +clean_restart ${objfile} + +# Disassemble the function. + +gdb_test "set disassembler-options vsx" +set test "disass func" +gdb_test_multiple $test $test { + -re "\r\nDump of assembler code for function func:(\r\n.*\r\n)End of assembler dump.\r\n$gdb_prompt $" { + set func $expect_out(1,string) + pass $test + } +} + +proc instr_to_patt {instr} { + # 0x0000000000000018 <+24>: stxvd2x vs43,r4,r5 + return ".*\r\n\[ \t\]*0x\[0-9a-f\]+ <\\+\[0-9a-f\]*>:\[ \t\]*[string map [list { } "\[ \t\]+" . {\.}] $instr]\[ \t\]*\r\n.*" +} + +proc func_check {instr} { + global func + + set test "Found: $instr" + if [regexp -nocase -line [instr_to_patt $instr] $func] { + pass $test + } else { + fail $test + } +} + +func_check "lxsdx vs40,r10,r20" +func_check "lxvd2x vs40,r10,r20" +func_check "lxvdsx vs40,r10,r20" +func_check "lxvw4x vs40,r10,r20" +func_check "stxsdx vs40,r10,r20" +func_check "stxvd2x vs40,r10,r20" +func_check "stxvw4x vs40,r10,r20" +func_check "xsabsdp vs40,vs60" +func_check "xsadddp vs40,vs50,vs60" +func_check "xscmpodp cr1,vs50,vs60" +func_check "xscmpudp cr1,vs50,vs60" +func_check "xscpsgndp vs40,vs50,vs60" +func_check "xscvdpsp vs40,vs60" +func_check "xscvdpsxds vs40,vs60" +func_check "xscvdpsxws vs40,vs60" +func_check "xscvdpuxds vs40,vs60" +func_check "xscvdpuxws vs40,vs60" +func_check "xscvspdp vs40,vs60" +func_check "xscvsxddp vs40,vs60" +func_check "xscvuxddp vs40,vs60" +func_check "xsdivdp vs40,vs50,vs60" +func_check "xsmaddadp vs40,vs50,vs60" +func_check "xsmaddmdp vs40,vs50,vs60" +func_check "xsmaxdp vs40,vs50,vs60" +func_check "xsmindp vs40,vs50,vs60" +func_check "xsmsubadp vs40,vs50,vs60" +func_check "xsmsubmdp vs40,vs50,vs60" +func_check "xsmuldp vs40,vs50,vs60" +func_check "xsnabsdp vs40,vs60" +func_check "xsnegdp vs40,vs60" +func_check "xsnmaddadp vs40,vs50,vs60" +func_check "xsnmaddmdp vs40,vs50,vs60" +func_check "xsnmsubadp vs40,vs50,vs60" +func_check "xsnmsubmdp vs40,vs50,vs60" +func_check "xsrdpi vs40,vs60" +func_check "xsrdpic vs40,vs60" +func_check "xsrdpim vs40,vs60" +func_check "xsrdpip vs40,vs60" +func_check "xsrdpiz vs40,vs60" +func_check "xsredp vs40,vs60" +func_check "xsrsqrtedp vs40,vs60" +func_check "xssqrtdp vs40,vs60" +func_check "xssubdp vs40,vs50,vs60" +func_check "xstdivdp cr1,vs50,vs60" +func_check "xstsqrtdp cr1,vs60" +func_check "xvabsdp vs40,vs60" +func_check "xvabssp vs40,vs60" +func_check "xvadddp vs40,vs50,vs60" +func_check "xvaddsp vs40,vs50,vs60" +func_check "xvcmpeqdp vs40,vs50,vs60" +func_check "xvcmpeqdp\. vs40,vs50,vs60" +func_check "xvcmpeqsp vs40,vs50,vs60" +func_check "xvcmpeqsp\. vs40,vs50,vs60" +func_check "xvcmpgedp vs40,vs50,vs60" +func_check "xvcmpgedp\. vs40,vs50,vs60" +func_check "xvcmpgesp vs40,vs50,vs60" +func_check "xvcmpgesp\. vs40,vs50,vs60" +func_check "xvcmpgtdp vs40,vs50,vs60" +func_check "xvcmpgtdp\. vs40,vs50,vs60" +func_check "xvcmpgtsp vs40,vs50,vs60" +func_check "xvcmpgtsp\. vs40,vs50,vs60" +func_check "xvcpsgndp vs40,vs50,vs60" +func_check "xvmovdp vs40,vs60" +func_check "xvmovdp vs40,vs60" +func_check "xvcpsgnsp vs40,vs50,vs60" +func_check "xvmovsp vs40,vs60" +func_check "xvmovsp vs40,vs60" +func_check "xvcvdpsp vs40,vs60" +func_check "xvcvdpsxds vs40,vs60" +func_check "xvcvdpsxws vs40,vs60" +func_check "xvcvdpuxds vs40,vs60" +func_check "xvcvdpuxws vs40,vs60" +func_check "xvcvspdp vs40,vs60" +func_check "xvcvspsxds vs40,vs60" +func_check "xvcvspsxws vs40,vs60" +func_check "xvcvspuxds vs40,vs60" +func_check "xvcvspuxws vs40,vs60" +func_check "xvcvsxddp vs40,vs60" +func_check "xvcvsxdsp vs40,vs60" +func_check "xvcvsxwdp vs40,vs60" +func_check "xvcvsxwsp vs40,vs60" +func_check "xvcvuxddp vs40,vs60" +func_check "xvcvuxdsp vs40,vs60" +func_check "xvcvuxwdp vs40,vs60" +func_check "xvcvuxwsp vs40,vs60" +func_check "xvdivdp vs40,vs50,vs60" +func_check "xvdivsp vs40,vs50,vs60" +func_check "xvmaddadp vs40,vs50,vs60" +func_check "xvmaddmdp vs40,vs50,vs60" +func_check "xvmaddasp vs40,vs50,vs60" +func_check "xvmaddmsp vs40,vs50,vs60" +func_check "xvmaxdp vs40,vs50,vs60" +func_check "xvmaxsp vs40,vs50,vs60" +func_check "xvmindp vs40,vs50,vs60" +func_check "xvminsp vs40,vs50,vs60" +func_check "xvmsubadp vs40,vs50,vs60" +func_check "xvmsubmdp vs40,vs50,vs60" +func_check "xvmsubasp vs40,vs50,vs60" +func_check "xvmsubmsp vs40,vs50,vs60" +func_check "xvmuldp vs40,vs50,vs60" +func_check "xvmulsp vs40,vs50,vs60" +func_check "xvnabsdp vs40,vs60" +func_check "xvnabssp vs40,vs60" +func_check "xvnegdp vs40,vs60" +func_check "xvnegsp vs40,vs60" +func_check "xvnmaddadp vs40,vs50,vs60" +func_check "xvnmaddmdp vs40,vs50,vs60" +func_check "xvnmaddasp vs40,vs50,vs60" +func_check "xvnmaddmsp vs40,vs50,vs60" +func_check "xvnmsubadp vs40,vs50,vs60" +func_check "xvnmsubmdp vs40,vs50,vs60" +func_check "xvnmsubasp vs40,vs50,vs60" +func_check "xvnmsubmsp vs40,vs50,vs60" +func_check "xvrdpi vs40,vs60" +func_check "xvrdpic vs40,vs60" +func_check "xvrdpim vs40,vs60" +func_check "xvrdpip vs40,vs60" +func_check "xvrdpiz vs40,vs60" +func_check "xvredp vs40,vs60" +func_check "xvresp vs40,vs60" +func_check "xvrspi vs40,vs60" +func_check "xvrspic vs40,vs60" +func_check "xvrspim vs40,vs60" +func_check "xvrspip vs40,vs60" +func_check "xvrspiz vs40,vs60" +func_check "xvrsqrtedp vs40,vs60" +func_check "xvrsqrtesp vs40,vs60" +func_check "xvsqrtdp vs40,vs60" +func_check "xvsqrtsp vs40,vs60" +func_check "xvsubdp vs40,vs50,vs60" +func_check "xvsubsp vs40,vs50,vs60" +func_check "xvtdivdp cr1,vs50,vs60" +func_check "xvtdivsp cr1,vs50,vs60" +func_check "xvtsqrtdp cr1,vs60" +func_check "xvtsqrtsp cr1,vs60" +func_check "xxland vs40,vs50,vs60" +func_check "xxlandc vs40,vs50,vs60" +func_check "xxlnor vs40,vs50,vs60" +func_check "xxlor vs40,vs50,vs60" +func_check "xxlxor vs40,vs50,vs60" +func_check "xxmrghw vs40,vs50,vs60" +func_check "xxmrglw vs40,vs50,vs60" +func_check "xxmrghd vs40,vs50,vs60" +func_check "xxpermdi vs40,vs50,vs60,1" +func_check "xxpermdi vs40,vs50,vs60,2" +func_check "xxmrgld vs40,vs50,vs60" +func_check "xxspltd vs40,vs50,0" +func_check "xxspltd vs40,vs50,0" +func_check "xxspltd vs40,vs50,1" +func_check "xxspltd vs40,vs50,1" +func_check "xxmrghd vs40,vs50,vs60" +func_check "xxmrghd vs40,vs50,vs60" +func_check "xxmrgld vs40,vs50,vs60" +func_check "xxswapd vs40,vs50" +func_check "xxswapd vs40,vs50" +func_check "xxsel vs40,vs50,vs60,vs62" +func_check "xxsldwi vs40,vs50,vs60,2" +func_check "xxspltw vs40,vs60,2" +func_check "lxvd2x vs40,0,r20" +func_check "lxvd2x vs40,r10,r20" +func_check "stxvd2x vs40,0,r20" +func_check "stxvd2x vs40,r10,r20" diff --git a/gdb/testsuite/gdb.arch/powerpc-vsx.s b/gdb/testsuite/gdb.arch/powerpc-vsx.s new file mode 100644 index 0000000..c7e85c1 --- /dev/null +++ b/gdb/testsuite/gdb.arch/powerpc-vsx.s @@ -0,0 +1,182 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2016 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + + .text + .globl func +func: + .long 0x7d0aa499 /* lxsdx vs40,r10,r20 */ + .long 0x7d0aa699 /* lxvd2x vs40,r10,r20 */ + .long 0x7d0aa299 /* lxvdsx vs40,r10,r20 */ + .long 0x7d0aa619 /* lxvw4x vs40,r10,r20 */ + .long 0x7d0aa599 /* stxsdx vs40,r10,r20 */ + .long 0x7d0aa799 /* stxvd2x vs40,r10,r20 */ + .long 0x7d0aa719 /* stxvw4x vs40,r10,r20 */ + .long 0xf100e567 /* xsabsdp vs40,vs60 */ + .long 0xf112e107 /* xsadddp vs40,vs50,vs60 */ + .long 0xf092e15e /* xscmpodp cr1,vs50,vs60 */ + .long 0xf092e11e /* xscmpudp cr1,vs50,vs60 */ + .long 0xf112e587 /* xscpsgndp vs40,vs50,vs60 */ + .long 0xf100e427 /* xscvdpsp vs40,vs60 */ + .long 0xf100e563 /* xscvdpsxds vs40,vs60 */ + .long 0xf100e163 /* xscvdpsxws vs40,vs60 */ + .long 0xf100e523 /* xscvdpuxds vs40,vs60 */ + .long 0xf100e123 /* xscvdpuxws vs40,vs60 */ + .long 0xf100e527 /* xscvspdp vs40,vs60 */ + .long 0xf100e5e3 /* xscvsxddp vs40,vs60 */ + .long 0xf100e5a3 /* xscvuxddp vs40,vs60 */ + .long 0xf112e1c7 /* xsdivdp vs40,vs50,vs60 */ + .long 0xf112e10f /* xsmaddadp vs40,vs50,vs60 */ + .long 0xf112e14f /* xsmaddmdp vs40,vs50,vs60 */ + .long 0xf112e507 /* xsmaxdp vs40,vs50,vs60 */ + .long 0xf112e547 /* xsmindp vs40,vs50,vs60 */ + .long 0xf112e18f /* xsmsubadp vs40,vs50,vs60 */ + .long 0xf112e1cf /* xsmsubmdp vs40,vs50,vs60 */ + .long 0xf112e187 /* xsmuldp vs40,vs50,vs60 */ + .long 0xf100e5a7 /* xsnabsdp vs40,vs60 */ + .long 0xf100e5e7 /* xsnegdp vs40,vs60 */ + .long 0xf112e50f /* xsnmaddadp vs40,vs50,vs60 */ + .long 0xf112e54f /* xsnmaddmdp vs40,vs50,vs60 */ + .long 0xf112e58f /* xsnmsubadp vs40,vs50,vs60 */ + .long 0xf112e5cf /* xsnmsubmdp vs40,vs50,vs60 */ + .long 0xf100e127 /* xsrdpi vs40,vs60 */ + .long 0xf100e1af /* xsrdpic vs40,vs60 */ + .long 0xf100e1e7 /* xsrdpim vs40,vs60 */ + .long 0xf100e1a7 /* xsrdpip vs40,vs60 */ + .long 0xf100e167 /* xsrdpiz vs40,vs60 */ + .long 0xf100e16b /* xsredp vs40,vs60 */ + .long 0xf100e12b /* xsrsqrtedp vs40,vs60 */ + .long 0xf100e12f /* xssqrtdp vs40,vs60 */ + .long 0xf112e147 /* xssubdp vs40,vs50,vs60 */ + .long 0xf092e1ee /* xstdivdp cr1,vs50,vs60 */ + .long 0xf080e1aa /* xstsqrtdp cr1,vs60 */ + .long 0xf100e767 /* xvabsdp vs40,vs60 */ + .long 0xf100e667 /* xvabssp vs40,vs60 */ + .long 0xf112e307 /* xvadddp vs40,vs50,vs60 */ + .long 0xf112e207 /* xvaddsp vs40,vs50,vs60 */ + .long 0xf112e31f /* xvcmpeqdp vs40,vs50,vs60 */ + .long 0xf112e71f /* xvcmpeqdp. vs40,vs50,vs60 */ + .long 0xf112e21f /* xvcmpeqsp vs40,vs50,vs60 */ + .long 0xf112e61f /* xvcmpeqsp. vs40,vs50,vs60 */ + .long 0xf112e39f /* xvcmpgedp vs40,vs50,vs60 */ + .long 0xf112e79f /* xvcmpgedp. vs40,vs50,vs60 */ + .long 0xf112e29f /* xvcmpgesp vs40,vs50,vs60 */ + .long 0xf112e69f /* xvcmpgesp. vs40,vs50,vs60 */ + .long 0xf112e35f /* xvcmpgtdp vs40,vs50,vs60 */ + .long 0xf112e75f /* xvcmpgtdp. vs40,vs50,vs60 */ + .long 0xf112e25f /* xvcmpgtsp vs40,vs50,vs60 */ + .long 0xf112e65f /* xvcmpgtsp. vs40,vs50,vs60 */ + .long 0xf112e787 /* xvcpsgndp vs40,vs50,vs60 */ + .long 0xf11ce787 /* xvmovdp vs40,vs60 */ + .long 0xf11ce787 /* xvmovdp vs40,vs60 */ + .long 0xf112e687 /* xvcpsgnsp vs40,vs50,vs60 */ + .long 0xf11ce687 /* xvmovsp vs40,vs60 */ + .long 0xf11ce687 /* xvmovsp vs40,vs60 */ + .long 0xf100e627 /* xvcvdpsp vs40,vs60 */ + .long 0xf100e763 /* xvcvdpsxds vs40,vs60 */ + .long 0xf100e363 /* xvcvdpsxws vs40,vs60 */ + .long 0xf100e723 /* xvcvdpuxds vs40,vs60 */ + .long 0xf100e323 /* xvcvdpuxws vs40,vs60 */ + .long 0xf100e727 /* xvcvspdp vs40,vs60 */ + .long 0xf100e663 /* xvcvspsxds vs40,vs60 */ + .long 0xf100e263 /* xvcvspsxws vs40,vs60 */ + .long 0xf100e623 /* xvcvspuxds vs40,vs60 */ + .long 0xf100e223 /* xvcvspuxws vs40,vs60 */ + .long 0xf100e7e3 /* xvcvsxddp vs40,vs60 */ + .long 0xf100e6e3 /* xvcvsxdsp vs40,vs60 */ + .long 0xf100e3e3 /* xvcvsxwdp vs40,vs60 */ + .long 0xf100e2e3 /* xvcvsxwsp vs40,vs60 */ + .long 0xf100e7a3 /* xvcvuxddp vs40,vs60 */ + .long 0xf100e6a3 /* xvcvuxdsp vs40,vs60 */ + .long 0xf100e3a3 /* xvcvuxwdp vs40,vs60 */ + .long 0xf100e2a3 /* xvcvuxwsp vs40,vs60 */ + .long 0xf112e3c7 /* xvdivdp vs40,vs50,vs60 */ + .long 0xf112e2c7 /* xvdivsp vs40,vs50,vs60 */ + .long 0xf112e30f /* xvmaddadp vs40,vs50,vs60 */ + .long 0xf112e34f /* xvmaddmdp vs40,vs50,vs60 */ + .long 0xf112e20f /* xvmaddasp vs40,vs50,vs60 */ + .long 0xf112e24f /* xvmaddmsp vs40,vs50,vs60 */ + .long 0xf112e707 /* xvmaxdp vs40,vs50,vs60 */ + .long 0xf112e607 /* xvmaxsp vs40,vs50,vs60 */ + .long 0xf112e747 /* xvmindp vs40,vs50,vs60 */ + .long 0xf112e647 /* xvminsp vs40,vs50,vs60 */ + .long 0xf112e38f /* xvmsubadp vs40,vs50,vs60 */ + .long 0xf112e3cf /* xvmsubmdp vs40,vs50,vs60 */ + .long 0xf112e28f /* xvmsubasp vs40,vs50,vs60 */ + .long 0xf112e2cf /* xvmsubmsp vs40,vs50,vs60 */ + .long 0xf112e387 /* xvmuldp vs40,vs50,vs60 */ + .long 0xf112e287 /* xvmulsp vs40,vs50,vs60 */ + .long 0xf100e7a7 /* xvnabsdp vs40,vs60 */ + .long 0xf100e6a7 /* xvnabssp vs40,vs60 */ + .long 0xf100e7e7 /* xvnegdp vs40,vs60 */ + .long 0xf100e6e7 /* xvnegsp vs40,vs60 */ + .long 0xf112e70f /* xvnmaddadp vs40,vs50,vs60 */ + .long 0xf112e74f /* xvnmaddmdp vs40,vs50,vs60 */ + .long 0xf112e60f /* xvnmaddasp vs40,vs50,vs60 */ + .long 0xf112e64f /* xvnmaddmsp vs40,vs50,vs60 */ + .long 0xf112e78f /* xvnmsubadp vs40,vs50,vs60 */ + .long 0xf112e7cf /* xvnmsubmdp vs40,vs50,vs60 */ + .long 0xf112e68f /* xvnmsubasp vs40,vs50,vs60 */ + .long 0xf112e6cf /* xvnmsubmsp vs40,vs50,vs60 */ + .long 0xf100e327 /* xvrdpi vs40,vs60 */ + .long 0xf100e3af /* xvrdpic vs40,vs60 */ + .long 0xf100e3e7 /* xvrdpim vs40,vs60 */ + .long 0xf100e3a7 /* xvrdpip vs40,vs60 */ + .long 0xf100e367 /* xvrdpiz vs40,vs60 */ + .long 0xf100e36b /* xvredp vs40,vs60 */ + .long 0xf100e26b /* xvresp vs40,vs60 */ + .long 0xf100e227 /* xvrspi vs40,vs60 */ + .long 0xf100e2af /* xvrspic vs40,vs60 */ + .long 0xf100e2e7 /* xvrspim vs40,vs60 */ + .long 0xf100e2a7 /* xvrspip vs40,vs60 */ + .long 0xf100e267 /* xvrspiz vs40,vs60 */ + .long 0xf100e32b /* xvrsqrtedp vs40,vs60 */ + .long 0xf100e22b /* xvrsqrtesp vs40,vs60 */ + .long 0xf100e32f /* xvsqrtdp vs40,vs60 */ + .long 0xf100e22f /* xvsqrtsp vs40,vs60 */ + .long 0xf112e347 /* xvsubdp vs40,vs50,vs60 */ + .long 0xf112e247 /* xvsubsp vs40,vs50,vs60 */ + .long 0xf092e3ee /* xvtdivdp cr1,vs50,vs60 */ + .long 0xf092e2ee /* xvtdivsp cr1,vs50,vs60 */ + .long 0xf080e3aa /* xvtsqrtdp cr1,vs60 */ + .long 0xf080e2aa /* xvtsqrtsp cr1,vs60 */ + .long 0xf112e417 /* xxland vs40,vs50,vs60 */ + .long 0xf112e457 /* xxlandc vs40,vs50,vs60 */ + .long 0xf112e517 /* xxlnor vs40,vs50,vs60 */ + .long 0xf112e497 /* xxlor vs40,vs50,vs60 */ + .long 0xf112e4d7 /* xxlxor vs40,vs50,vs60 */ + .long 0xf112e097 /* xxmrghw vs40,vs50,vs60 */ + .long 0xf112e197 /* xxmrglw vs40,vs50,vs60 */ + .long 0xf112e057 /* xxmrghd vs40,vs50,vs60 */ + .long 0xf112e157 /* xxpermdi vs40,vs50,vs60,1 */ + .long 0xf112e257 /* xxpermdi vs40,vs50,vs60,2 */ + .long 0xf112e357 /* xxmrgld vs40,vs50,vs60 */ + .long 0xf1129057 /* xxspltd vs40,vs50,0 */ + .long 0xf1129057 /* xxspltd vs40,vs50,0 */ + .long 0xf1129357 /* xxspltd vs40,vs50,1 */ + .long 0xf1129357 /* xxspltd vs40,vs50,1 */ + .long 0xf112e057 /* xxmrghd vs40,vs50,vs60 */ + .long 0xf112e057 /* xxmrghd vs40,vs50,vs60 */ + .long 0xf112e357 /* xxmrgld vs40,vs50,vs60 */ + .long 0xf1129257 /* xxswapd vs40,vs50 */ + .long 0xf1129257 /* xxswapd vs40,vs50 */ + .long 0xf112e7bf /* xxsel vs40,vs50,vs60,vs62 */ + .long 0xf112e217 /* xxsldwi vs40,vs50,vs60,2 */ + .long 0xf102e293 /* xxspltw vs40,vs60,2 */ + .long 0x7d00a699 /* lxvd2x vs40,0,r20 */ + .long 0x7d0aa699 /* lxvd2x vs40,r10,r20 */ + .long 0x7d00a799 /* stxvd2x vs40,0,r20 */ + .long 0x7d0aa799 /* stxvd2x vs40,r10,r20 */ diff --git a/gdb/testsuite/gdb.arch/powerpc-vsx2.exp b/gdb/testsuite/gdb.arch/powerpc-vsx2.exp new file mode 100644 index 0000000..4daebd9 --- /dev/null +++ b/gdb/testsuite/gdb.arch/powerpc-vsx2.exp @@ -0,0 +1,115 @@ +# Copyright 2016 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +# Test PowerPC instructions disassembly. + +standard_testfile .s +set objfile [standard_output_file ${testfile}.o] + +if {![istarget "powerpc*-*-*"]} then { + verbose "Skipping PowerPC instructions disassembly." + return +} + +if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${objfile}" object {debug}] != "" } { + untested "PowerPC instructions disassembly" + return -1 +} + +clean_restart ${objfile} + +# Disassemble the function. + +gdb_test "set disassembler-options vsx" +set test "disass func" +gdb_test_multiple $test $test { + -re "\r\nDump of assembler code for function func:(\r\n.*\r\n)End of assembler dump.\r\n$gdb_prompt $" { + set func $expect_out(1,string) + pass $test + } +} + +proc instr_to_patt {instr} { + # 0x0000000000000018 <+24>: stxvd2x vs43,r4,r5 + return ".*\r\n\[ \t\]*0x\[0-9a-f\]+ <\\+\[0-9a-f\]*>:\[ \t\]*[string map [list { } "\[ \t\]+" . {\.}] $instr]\[ \t\]*\r\n.*" +} + +proc func_check {instr} { + global func + + set test "Found: $instr" + if [regexp -nocase -line [instr_to_patt $instr] $func] { + pass $test + } else { + fail $test + } +} + +func_check "lxsiwzx vs62,r14,r26" +func_check "lxsiwzx vs40,0,r25" +func_check "lxsiwax vs25,0,r26" +func_check "lxsiwax vs3,0,r3" +func_check "mfvsrd r12,vs30" +func_check "mfvsrd r12,vs30" +func_check "mfvsrd r12,vs62" +func_check "mfvsrd r12,vs62" +func_check "mffprwz r20,f12" +func_check "mffprwz r20,f12" +func_check "mfvrwz r21,v12" +func_check "mfvrwz r21,v12" +func_check "stxsiwx vs14,r9,r14" +func_check "stxsiwx vs21,0,r8" +func_check "mtvsrd vs11,r28" +func_check "mtvsrd vs11,r28" +func_check "mtvsrd vs43,r29" +func_check "mtvsrd vs43,r29" +func_check "mtfprwa f24,r22" +func_check "mtfprwa f24,r22" +func_check "mtvrwa v25,r23" +func_check "mtvrwa v25,r23" +func_check "mtfprwz f26,r27" +func_check "mtfprwz f26,r27" +func_check "mtvrwz v27,r28" +func_check "mtvrwz v27,r28" +func_check "lxsspx vs13,r19,r13" +func_check "lxsspx vs18,0,r13" +func_check "stxsspx vs43,r2,r4" +func_check "stxsspx vs55,0,r11" +func_check "xsaddsp vs54,vs48,vs25" +func_check "xsmaddasp vs14,vs50,vs1" +func_check "xssubsp vs26,vs22,vs42" +func_check "xsmaddmsp vs27,vs53,vs52" +func_check "xsrsqrtesp vs8,vs59" +func_check "xssqrtsp vs12,vs41" +func_check "xsmulsp vs57,vs11,vs32" +func_check "xsmsubasp vs38,vs20,vs26" +func_check "xsdivsp vs26,vs19,vs6" +func_check "xsmsubmsp vs35,vs37,vs55" +func_check "xsresp vs59,vs8" +func_check "xsnmaddasp vs44,vs33,vs33" +func_check "xsnmaddmsp vs17,vs62,vs30" +func_check "xsnmsubasp vs54,vs52,vs31" +func_check "xsnmsubmsp vs37,vs5,vs58" +func_check "xxlorc vs30,vs54,vs44" +func_check "xxlnand vs49,vs14,vs29" +func_check "xxleqv vs62,vs22,vs30" +func_check "xscvdpspn vs60,vs54" +func_check "xsrsp vs22,vs45" +func_check "xscvuxdsp vs26,vs59" +func_check "xscvsxdsp vs38,vs49" +func_check "xscvspdpn vs59,vs26" +func_check "fmrgow f24,f14,f2" +func_check "fmrgew f22,f7,f5" diff --git a/gdb/testsuite/gdb.arch/powerpc-vsx2.s b/gdb/testsuite/gdb.arch/powerpc-vsx2.s new file mode 100644 index 0000000..c21759f --- /dev/null +++ b/gdb/testsuite/gdb.arch/powerpc-vsx2.s @@ -0,0 +1,75 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2016 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + + .text + .globl func +func: + .long 0x7fced019 /* lxsiwzx vs62,r14,r26 */ + .long 0x7d00c819 /* lxsiwzx vs40,0,r25 */ + .long 0x7f20d098 /* lxsiwax vs25,0,r26 */ + .long 0x7c601898 /* lxsiwax vs3,0,r3 */ + .long 0x7fcc0066 /* mfvsrd r12,vs30 */ + .long 0x7fcc0066 /* mfvsrd r12,vs30 */ + .long 0x7fcc0067 /* mfvsrd r12,vs62 */ + .long 0x7fcc0067 /* mfvsrd r12,vs62 */ + .long 0x7d9400e6 /* mffprwz r20,f12 */ + .long 0x7d9400e6 /* mffprwz r20,f12 */ + .long 0x7d9500e7 /* mfvrwz r21,v12 */ + .long 0x7d9500e7 /* mfvrwz r21,v12 */ + .long 0x7dc97118 /* stxsiwx vs14,r9,r14 */ + .long 0x7ea04118 /* stxsiwx vs21,0,r8 */ + .long 0x7d7c0166 /* mtvsrd vs11,r28 */ + .long 0x7d7c0166 /* mtvsrd vs11,r28 */ + .long 0x7d7d0167 /* mtvsrd vs43,r29 */ + .long 0x7d7d0167 /* mtvsrd vs43,r29 */ + .long 0x7f1601a6 /* mtfprwa f24,r22 */ + .long 0x7f1601a6 /* mtfprwa f24,r22 */ + .long 0x7f3701a7 /* mtvrwa v25,r23 */ + .long 0x7f3701a7 /* mtvrwa v25,r23 */ + .long 0x7f5b01e6 /* mtfprwz f26,r27 */ + .long 0x7f5b01e6 /* mtfprwz f26,r27 */ + .long 0x7f7c01e7 /* mtvrwz v27,r28 */ + .long 0x7f7c01e7 /* mtvrwz v27,r28 */ + .long 0x7db36c18 /* lxsspx vs13,r19,r13 */ + .long 0x7e406c18 /* lxsspx vs18,0,r13 */ + .long 0x7d622519 /* stxsspx vs43,r2,r4 */ + .long 0x7ee05d19 /* stxsspx vs55,0,r11 */ + .long 0xf2d0c805 /* xsaddsp vs54,vs48,vs25 */ + .long 0xf1d2080c /* xsmaddasp vs14,vs50,vs1 */ + .long 0xf3565042 /* xssubsp vs26,vs22,vs42 */ + .long 0xf375a04e /* xsmaddmsp vs27,vs53,vs52 */ + .long 0xf100d82a /* xsrsqrtesp vs8,vs59 */ + .long 0xf180482e /* xssqrtsp vs12,vs41 */ + .long 0xf32b0083 /* xsmulsp vs57,vs11,vs32 */ + .long 0xf0d4d089 /* xsmsubasp vs38,vs20,vs26 */ + .long 0xf35330c0 /* xsdivsp vs26,vs19,vs6 */ + .long 0xf065b8cf /* xsmsubmsp vs35,vs37,vs55 */ + .long 0xf3604069 /* xsresp vs59,vs8 */ + .long 0xf1810c0f /* xsnmaddasp vs44,vs33,vs33 */ + .long 0xf23ef44c /* xsnmaddmsp vs17,vs62,vs30 */ + .long 0xf2d4fc8d /* xsnmsubasp vs54,vs52,vs31 */ + .long 0xf0a5d4cb /* xsnmsubmsp vs37,vs5,vs58 */ + .long 0xf3d66556 /* xxlorc vs30,vs54,vs44 */ + .long 0xf22eed91 /* xxlnand vs49,vs14,vs29 */ + .long 0xf3d6f5d1 /* xxleqv vs62,vs22,vs30 */ + .long 0xf380b42f /* xscvdpspn vs60,vs54 */ + .long 0xf2c06c66 /* xsrsp vs22,vs45 */ + .long 0xf340dca2 /* xscvuxdsp vs26,vs59 */ + .long 0xf0c08ce3 /* xscvsxdsp vs38,vs49 */ + .long 0xf360d52d /* xscvspdpn vs59,vs26 */ + .long 0xff0e168c /* fmrgow f24,f14,f2 */ + .long 0xfec72f8c /* fmrgew f22,f7,f5 */ diff --git a/gdb/testsuite/gdb.arch/powerpc-vsx3.exp b/gdb/testsuite/gdb.arch/powerpc-vsx3.exp new file mode 100644 index 0000000..a20a636 --- /dev/null +++ b/gdb/testsuite/gdb.arch/powerpc-vsx3.exp @@ -0,0 +1,181 @@ +# Copyright 2016 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +# Test PowerPC instructions disassembly. + +standard_testfile .s +set objfile [standard_output_file ${testfile}.o] + +if {![istarget "powerpc*-*-*"]} then { + verbose "Skipping PowerPC instructions disassembly." + return +} + +if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${objfile}" object {debug}] != "" } { + untested "PowerPC instructions disassembly" + return -1 +} + +clean_restart ${objfile} + +# Disassemble the function. + +gdb_test "set disassembler-options vsx" +set test "disass func" +gdb_test_multiple $test $test { + -re "\r\nDump of assembler code for function func:(\r\n.*\r\n)End of assembler dump.\r\n$gdb_prompt $" { + set func $expect_out(1,string) + pass $test + } +} + +proc instr_to_patt {instr} { + # 0x0000000000000018 <+24>: stxvd2x vs43,r4,r5 + return ".*\r\n\[ \t\]*0x\[0-9a-f\]+ <\\+\[0-9a-f\]*>:\[ \t\]*[string map [list { } "\[ \t\]+" . {\.}] $instr]\[ \t\]*\r\n.*" +} + +proc func_check {instr} { + global func + + set test "Found: $instr" + if [regexp -nocase -line [instr_to_patt $instr] $func] { + pass $test + } else { + fail $test + } +} + +func_check "lxvx vs34,r6,r25" +func_check "lxvx vs20,0,r10" +func_check "lxvl vs20,r24,r10" +func_check "lxvl vs54,0,r29" +func_check "lxvll vs24,r20,r19" +func_check "lxvll vs34,0,r14" +func_check "mfvsrld r2,vs22" +func_check "lxvwsx vs58,r26,r25" +func_check "lxvwsx vs55,0,r29" +func_check "stxvx vs14,r21,r4" +func_check "stxvx vs30,0,r22" +func_check "stxvl vs0,r26,r4" +func_check "stxvl vs37,0,r22" +func_check "mtvsrws vs24,r10" +func_check "stxvll vs30,r21,r15" +func_check "stxvll vs39,0,r14" +func_check "mtvsrdd vs12,r6,r5" +func_check "mtvsrdd vs38,0,r21" +func_check "lxsibzx vs59,r28,r6" +func_check "lxsibzx vs30,0,r8" +func_check "lxvh8x vs42,r23,r17" +func_check "lxvh8x vs36,0,r5" +func_check "lxsihzx vs12,r9,r11" +func_check "lxsihzx vs49,0,r13" +func_check "lxvb16x vs37,r3,r19" +func_check "lxvb16x vs0,0,r30" +func_check "stxsibx vs2,r30,r6" +func_check "stxsibx vs12,0,r13" +func_check "stxvh8x vs16,r29,r8" +func_check "stxvh8x vs55,0,r10" +func_check "stxsihx vs34,r2,r23" +func_check "stxsihx vs60,0,r23" +func_check "stxvb16x vs23,r14,r12" +func_check "stxvb16x vs19,0,r5" +func_check "lxsd v24,0\\(0\\)" +func_check "lxsd v15,16\\(r21\\)" +func_check "lxssp v6,0\\(0\\)" +func_check "lxssp v23,16\\(r9\\)" +func_check "xscmpeqdp vs18,vs51,vs33" +func_check "xscmpgtdp vs2,vs26,vs34" +func_check "xscmpgedp vs5,vs26,vs20" +func_check "xxperm vs44,vs10,vs43" +func_check "xxpermr vs41,vs20,vs5" +func_check "xscmpexpdp cr4,vs18,vs55" +func_check "xxextractuw vs23,vs37,3" +func_check "xxspltib vs54,235" +func_check "xxinsertw vs15,vs30,4" +func_check "xsmaxcdp vs12,vs11,vs7" +func_check "xsmincdp vs32,vs25,vs24" +func_check "xsmaxjdp vs25,vs53,vs12" +func_check "xststdcsp cr2,vs36,127" +func_check "xsminjdp vs32,vs21,vs45" +func_check "xsxexpdp r17,vs50" +func_check "xsxsigdp r7,vs40" +func_check "xscvhpdp vs54,vs34" +func_check "xscvdphp vs58,vs54" +func_check "xststdcdp cr0,vs38,127" +func_check "xvtstdcsp vs56,vs53,127" +func_check "xviexpsp vs54,vs20,vs52" +func_check "xsiexpdp vs57,r28,r29" +func_check "xvxexpdp vs1,vs20" +func_check "xvxsigdp vs54,vs59" +func_check "xxbrh vs18,vs37" +func_check "xvxexpsp vs14,vs1" +func_check "xvxsigsp vs52,vs13" +func_check "xxbrw vs19,vs5" +func_check "xxbrd vs51,vs55" +func_check "xvcvhpsp vs35,vs17" +func_check "xvcvsphp vs15,vs45" +func_check "xxbrq vs17,vs31" +func_check "xvtstdcdp vs16,vs12,127" +func_check "xviexpdp vs27,vs9,vs8" +func_check "lxv vs4,0\\(0\\)" +func_check "lxv vs40,16\\(r20\\)" +func_check "stxv vs50,0\\(0\\)" +func_check "stxv vs8,16\\(r16\\)" +func_check "stxsd v3,0\\(0\\)" +func_check "stxsd v17,16\\(r2\\)" +func_check "stxssp v13,0\\(0\\)" +func_check "stxssp v17,16\\(r13\\)" +func_check "xsaddqp v8,v10,v18" +func_check "xsaddqpo v5,v1,v29" +func_check "xsrqpi 0,v12,v18,3" +func_check "xsrqpix 1,v31,v19,0" +func_check "xsmulqp v14,v1,v6" +func_check "xsmulqpo v17,v7,v27" +func_check "xsrqpxp 0,v4,v11,0" +func_check "xscpsgnqp v29,v23,v28" +func_check "xscmpoqp cr7,v13,v27" +func_check "xscmpexpqp cr5,v21,v6" +func_check "xsmaddqp v2,v19,v4" +func_check "xsmaddqpo v30,v7,v16" +func_check "xsmsubqp v21,v30,v15" +func_check "xsmsubqpo v12,v17,v30" +func_check "xsnmaddqp v6,v30,v12" +func_check "xsnmaddqpo v12,v22,v12" +func_check "xsnmsubqp v10,v29,v27" +func_check "xsnmsubqpo v29,v29,v13" +func_check "xssubqp v19,v27,v4" +func_check "xssubqpo v13,v8,v1" +func_check "xsdivqp v8,v3,v27" +func_check "xsdivqpo v24,v20,v27" +func_check "xscmpuqp cr7,v14,v4" +func_check "xststdcqp cr4,v2,127" +func_check "xsabsqp v31,v22" +func_check "xsxexpqp v25,v3" +func_check "xsnabsqp v10,v28" +func_check "xsnegqp v19,v31" +func_check "xsxsigqp v11,v13" +func_check "xssqrtqp v13,v14" +func_check "xssqrtqpo v1,v27" +func_check "xscvqpuwz v3,v7" +func_check "xscvudqp v20,v18" +func_check "xscvqpswz v29,v29" +func_check "xscvsdqp v2,v28" +func_check "xscvqpudz v23,v4" +func_check "xscvqpdp v3,v20" +func_check "xscvqpdpo v1,v3" +func_check "xscvdpqp v19,v12" +func_check "xscvqpsdz v13,v4" +func_check "xsiexpqp v7,v24,v7" diff --git a/gdb/testsuite/gdb.arch/powerpc-vsx3.s b/gdb/testsuite/gdb.arch/powerpc-vsx3.s new file mode 100644 index 0000000..1ada3cc --- /dev/null +++ b/gdb/testsuite/gdb.arch/powerpc-vsx3.s @@ -0,0 +1,141 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2016 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + + .text + .globl func +func: + .long 0x7c46ca19 /* lxvx vs34,r6,r25 */ + .long 0x7e805218 /* lxvx vs20,0,r10 */ + .long 0x7e98521a /* lxvl vs20,r24,r10 */ + .long 0x7ec0ea1b /* lxvl vs54,0,r29 */ + .long 0x7f149a5a /* lxvll vs24,r20,r19 */ + .long 0x7c40725b /* lxvll vs34,0,r14 */ + .long 0x7ec20266 /* mfvsrld r2,vs22 */ + .long 0x7f5acad9 /* lxvwsx vs58,r26,r25 */ + .long 0x7ee0ead9 /* lxvwsx vs55,0,r29 */ + .long 0x7dd52318 /* stxvx vs14,r21,r4 */ + .long 0x7fc0b318 /* stxvx vs30,0,r22 */ + .long 0x7c1a231a /* stxvl vs0,r26,r4 */ + .long 0x7ca0b31b /* stxvl vs37,0,r22 */ + .long 0x7f0a0326 /* mtvsrws vs24,r10 */ + .long 0x7fd57b5a /* stxvll vs30,r21,r15 */ + .long 0x7ce0735b /* stxvll vs39,0,r14 */ + .long 0x7d862b66 /* mtvsrdd vs12,r6,r5 */ + .long 0x7cc0ab67 /* mtvsrdd vs38,0,r21 */ + .long 0x7f7c361b /* lxsibzx vs59,r28,r6 */ + .long 0x7fc0461a /* lxsibzx vs30,0,r8 */ + .long 0x7d578e59 /* lxvh8x vs42,r23,r17 */ + .long 0x7c802e59 /* lxvh8x vs36,0,r5 */ + .long 0x7d895e5a /* lxsihzx vs12,r9,r11 */ + .long 0x7e206e5b /* lxsihzx vs49,0,r13 */ + .long 0x7ca39ed9 /* lxvb16x vs37,r3,r19 */ + .long 0x7c00f6d8 /* lxvb16x vs0,0,r30 */ + .long 0x7c5e371a /* stxsibx vs2,r30,r6 */ + .long 0x7d806f1a /* stxsibx vs12,0,r13 */ + .long 0x7e1d4758 /* stxvh8x vs16,r29,r8 */ + .long 0x7ee05759 /* stxvh8x vs55,0,r10 */ + .long 0x7c42bf5b /* stxsihx vs34,r2,r23 */ + .long 0x7f80bf5b /* stxsihx vs60,0,r23 */ + .long 0x7eee67d8 /* stxvb16x vs23,r14,r12 */ + .long 0x7e602fd8 /* stxvb16x vs19,0,r5 */ + .long 0xe7000002 /* lxsd v24,0(0) */ + .long 0xe5f50012 /* lxsd v15,16(r21) */ + .long 0xe4c00003 /* lxssp v6,0(0) */ + .long 0xe6e90013 /* lxssp v23,16(r9) */ + .long 0xf253081e /* xscmpeqdp vs18,vs51,vs33 */ + .long 0xf05a105a /* xscmpgtdp vs2,vs26,vs34 */ + .long 0xf0baa098 /* xscmpgedp vs5,vs26,vs20 */ + .long 0xf18a58d3 /* xxperm vs44,vs10,vs43 */ + .long 0xf13429d1 /* xxpermr vs41,vs20,vs5 */ + .long 0xf212b9da /* xscmpexpdp cr4,vs18,vs55 */ + .long 0xf2e32a96 /* xxextractuw vs23,vs37,3 */ + .long 0xf2c75ad1 /* xxspltib vs54,235 */ + .long 0xf1e4f2d4 /* xxinsertw vs15,vs30,4 */ + .long 0xf18b3c00 /* xsmaxcdp vs12,vs11,vs7 */ + .long 0xf019c441 /* xsmincdp vs32,vs25,vs24 */ + .long 0xf3356484 /* xsmaxjdp vs25,vs53,vs12 */ + .long 0xf17f24aa /* xststdcsp cr2,vs36,127 */ + .long 0xf0156cc3 /* xsminjdp vs32,vs21,vs45 */ + .long 0xf220956e /* xsxexpdp r17,vs50 */ + .long 0xf0e1456e /* xsxsigdp r7,vs40 */ + .long 0xf2d0156f /* xscvhpdp vs54,vs34 */ + .long 0xf351b56f /* xscvdphp vs58,vs54 */ + .long 0xf07f35aa /* xststdcdp cr0,vs38,127 */ + .long 0xf31faeef /* xvtstdcsp vs56,vs53,127 */ + .long 0xf2d4a6c3 /* xviexpsp vs54,vs20,vs52 */ + .long 0xf33cef2d /* xsiexpdp vs57,r28,r29 */ + .long 0xf020a76c /* xvxexpdp vs1,vs20 */ + .long 0xf2c1df6f /* xvxsigdp vs54,vs59 */ + .long 0xf2472f6e /* xxbrh vs18,vs37 */ + .long 0xf1c80f6c /* xvxexpsp vs14,vs1 */ + .long 0xf2896f6d /* xvxsigsp vs52,vs13 */ + .long 0xf26f2f6c /* xxbrw vs19,vs5 */ + .long 0xf277bf6f /* xxbrd vs51,vs55 */ + .long 0xf0788f6d /* xvcvhpsp vs35,vs17 */ + .long 0xf1f96f6e /* xvcvsphp vs15,vs45 */ + .long 0xf23fff6c /* xxbrq vs17,vs31 */ + .long 0xf21f67ec /* xvtstdcdp vs16,vs12,127 */ + .long 0xf36947c0 /* xviexpdp vs27,vs9,vs8 */ + .long 0xf4800001 /* lxv vs4,0(0) */ + .long 0xf5140019 /* lxv vs40,16(r20) */ + .long 0xf640000d /* stxv vs50,0(0) */ + .long 0xf5100015 /* stxv vs8,16(r16) */ + .long 0xf4600002 /* stxsd v3,0(0) */ + .long 0xf6220012 /* stxsd v17,16(r2) */ + .long 0xf5a00003 /* stxssp v13,0(0) */ + .long 0xf62d0013 /* stxssp v17,16(r13) */ + .long 0xfd0a9008 /* xsaddqp v8,v10,v18 */ + .long 0xfca1e809 /* xsaddqpo v5,v1,v29 */ + .long 0xfd80960a /* xsrqpi 0,v12,v18,3 */ + .long 0xffe1980b /* xsrqpix 1,v31,v19,0 */ + .long 0xfdc13048 /* xsmulqp v14,v1,v6 */ + .long 0xfe27d849 /* xsmulqpo v17,v7,v27 */ + .long 0xfc80584a /* xsrqpxp 0,v4,v11,0 */ + .long 0xffb7e0c8 /* xscpsgnqp v29,v23,v28 */ + .long 0xff8dd908 /* xscmpoqp cr7,v13,v27 */ + .long 0xfe953148 /* xscmpexpqp cr5,v21,v6 */ + .long 0xfc532308 /* xsmaddqp v2,v19,v4 */ + .long 0xffc78309 /* xsmaddqpo v30,v7,v16 */ + .long 0xfebe7b48 /* xsmsubqp v21,v30,v15 */ + .long 0xfd91f349 /* xsmsubqpo v12,v17,v30 */ + .long 0xfcde6388 /* xsnmaddqp v6,v30,v12 */ + .long 0xfd966389 /* xsnmaddqpo v12,v22,v12 */ + .long 0xfd5ddbc8 /* xsnmsubqp v10,v29,v27 */ + .long 0xffbd6bc9 /* xsnmsubqpo v29,v29,v13 */ + .long 0xfe7b2408 /* xssubqp v19,v27,v4 */ + .long 0xfda80c09 /* xssubqpo v13,v8,v1 */ + .long 0xfd03dc48 /* xsdivqp v8,v3,v27 */ + .long 0xff14dc49 /* xsdivqpo v24,v20,v27 */ + .long 0xff8e2508 /* xscmpuqp cr7,v14,v4 */ + .long 0xfe7f1588 /* xststdcqp cr4,v2,127 */ + .long 0xffe0b648 /* xsabsqp v31,v22 */ + .long 0xff221e48 /* xsxexpqp v25,v3 */ + .long 0xfd48e648 /* xsnabsqp v10,v28 */ + .long 0xfe70fe48 /* xsnegqp v19,v31 */ + .long 0xfd726e48 /* xsxsigqp v11,v13 */ + .long 0xfdbb7648 /* xssqrtqp v13,v14 */ + .long 0xfc3bde49 /* xssqrtqpo v1,v27 */ + .long 0xfc613e88 /* xscvqpuwz v3,v7 */ + .long 0xfe829688 /* xscvudqp v20,v18 */ + .long 0xffa9ee88 /* xscvqpswz v29,v29 */ + .long 0xfc4ae688 /* xscvsdqp v2,v28 */ + .long 0xfef12688 /* xscvqpudz v23,v4 */ + .long 0xfc74a688 /* xscvqpdp v3,v20 */ + .long 0xfc341e89 /* xscvqpdpo v1,v3 */ + .long 0xfe766688 /* xscvdpqp v19,v12 */ + .long 0xfdb92688 /* xscvqpsdz v13,v4 */ + .long 0xfcf83ec8 /* xsiexpqp v7,v24,v7 */ diff --git a/gdb/testsuite/gdb.disasm/disassembler-options.exp b/gdb/testsuite/gdb.disasm/disassembler-options.exp new file mode 100644 index 0000000..eb2f52c --- /dev/null +++ b/gdb/testsuite/gdb.disasm/disassembler-options.exp @@ -0,0 +1,34 @@ +# Copyright (C) 2017 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# This test exercises set/show disassembler-options + +gdb_exit +gdb_start + +gdb_test_no_output "set disassembler-options" +gdb_test "show disassembler-options" \ + "The current disassembler options are ''.*" \ + "show NULL disassembler-options" + +gdb_test_multiple "set disassembler-options invalid_option_value" \ + "set disassembler-options to invalid option value" { + -re "Invalid disassembler option value: 'invalid_option_value'\." { + pass "set disassembler-options invalid_option_value" + } + -re "'set disassembler-options \.\.\.' is not supported on this architecture\." { + pass "set disassembler-options invalid_option_value" + } +} ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH, updated] Add support for setting disassembler-options in GDB for POWER, ARM and S390 2017-02-08 21:03 [PATCH, updated] Add support for setting disassembler-options in GDB for POWER, ARM and S390 Peter Bergner @ 2017-02-13 15:53 ` Yao Qi 2017-02-13 16:31 ` Peter Bergner ` (3 more replies) 2017-02-13 18:52 ` Peter Bergner 1 sibling, 4 replies; 16+ messages in thread From: Yao Qi @ 2017-02-13 15:53 UTC (permalink / raw) To: Peter Bergner Cc: gdb-patches, Alan Modra, Pedro Alves, Ulrich Weigand, Eli Zaretskii, Nick Clifton, binutils Peter Bergner <bergner@vnet.ibm.com> writes: Hi Peter, > @@ -3257,27 +3262,26 @@ static bfd_vma ifthen_address; > int > get_arm_regname_num_options (void) > { > - return NUM_ARM_REGNAMES; > -} > + static int num_opts = 0; > > -int > -set_arm_regname_option (int option) > -{ > - int old = regname_selected; > - regname_selected = option; > - return old; > + if (num_opts == 0) > + { > + unsigned int i; > + for (i = 0; i < NUM_ARM_OPTIONS; i++) > + if (CONST_STRNEQ (regnames[i].name, "reg-names-")) > + num_opts++; > + } > + > + return num_opts; > } Function get_arm_regname_num_options is only used in gdb. Since we've have disassembler_options_arm, we can use it in gdb and remove get_arm_regname_num_options. We use get_arm_regname_num_options in arm-tdep.c, /* Get the number of possible sets of register names defined in opcodes. */ num_disassembly_options = get_arm_regname_num_options (); We can get 'num_disassembly_options' by iterating options from disassembler_options_arm. > > -int > +void > get_arm_regnames (int option, > const char **setname, > - const char **setdescription, > - const char *const **register_names) > + const char **setdescription) > { > - *setname = regnames[option].name; > - *setdescription = regnames[option].description; > - *register_names = regnames[option].reg_names; > - return 16; > + *setname = regnames[option].name + strlen ("reg-names-"); > + *setdescription = _(regnames[option].description); > } > Likewise, we can use disassembler_options_arm in gdb and remove get_arm_regnames. We use get_arm_regnames like this in arm-tdep.c, for (i = 0; i < num_disassembly_options; i++) { get_arm_regnames (i, &setname, &setdesc); valid_disassembly_styles[i] = setname; length = snprintf (rdptr, rest, "%s - %s\n", setname, setdesc); rdptr += length; rest -= length; } but we can replace it by disassembler_options_arm instead. > diff --git a/gdb/gdbarch.sh b/gdb/gdbarch.sh > index 54549b6..c607853 100755 > --- a/gdb/gdbarch.sh > +++ b/gdb/gdbarch.sh > @@ -1163,6 +1163,10 @@ m:const char *:gnu_triplet_regexp:void:::default_gnu_triplet_regexp::0 > # each address in memory. > m:int:addressable_memory_unit_size:void:::default_addressable_memory_unit_size::0 > > +# Functions for allowing a target to modify its disassembler options. > +v:char *:disassembler_options:::0:0::0:pstring (gdbarch->disassembler_options) These options should be modeled as per-architecture data. We need to define a key to access that data dynamically. grep "static struct gdbarch_data *" in *.c. > +v:const disasm_options_t *:disassembler_options_arch:::0:0::0:host_address_to_string (gdbarch->disassembler_options_arch->name) disassembler_options_arch is not clear to me, and I feel gdbarch_disassembler_options_arch is even worse. How about renaming it to "disassembler_options_supported" or "valid_disassembler_options"? -- Yao (齐尧) ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH, updated] Add support for setting disassembler-options in GDB for POWER, ARM and S390 2017-02-13 15:53 ` Yao Qi @ 2017-02-13 16:31 ` Peter Bergner 2017-02-13 16:58 ` Pedro Alves ` (2 subsequent siblings) 3 siblings, 0 replies; 16+ messages in thread From: Peter Bergner @ 2017-02-13 16:31 UTC (permalink / raw) To: Yao Qi Cc: gdb-patches, Alan Modra, Pedro Alves, Ulrich Weigand, Eli Zaretskii, Nick Clifton, binutils On 2/13/17 9:52 AM, Yao Qi wrote: > Peter Bergner <bergner@vnet.ibm.com> writes: > Function get_arm_regname_num_options is only used in gdb. Since we've > have disassembler_options_arm, we can use it in gdb and remove > get_arm_regname_num_options. > > We use get_arm_regname_num_options in arm-tdep.c, > > /* Get the number of possible sets of register names defined in opcodes. */ > num_disassembly_options = get_arm_regname_num_options (); > > We can get 'num_disassembly_options' by iterating options from > disassembler_options_arm. > [snip] > > Likewise, we can use disassembler_options_arm in gdb and remove [snip] > but we can replace it by disassembler_options_arm instead. Sure, that should be doable. >> +# Functions for allowing a target to modify its disassembler options. >> +v:char *:disassembler_options:::0:0::0:pstring (gdbarch->disassembler_options) > > These options should be modeled as per-architecture data. We need to > define a key to access that data dynamically. grep > "static struct gdbarch_data *" in *.c. This is new to me, so can you give me an explicit example? Can you also explain how its behavior will change but doing it your way? >> +v:const disasm_options_t *:disassembler_options_arch:::0:0::0:host_address_to_string (gdbarch->disassembler_options_arch->name) > > disassembler_options_arch is not clear to me, and I feel > gdbarch_disassembler_options_arch is even worse. How about renaming it > to "disassembler_options_supported" or "valid_disassembler_options"? Heh, looking back on it, yeah, I don't like the name either. :-) Yours are much better. I'll probably go with valid_disassembler_options. Thanks. Peter ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH, updated] Add support for setting disassembler-options in GDB for POWER, ARM and S390 2017-02-13 15:53 ` Yao Qi 2017-02-13 16:31 ` Peter Bergner @ 2017-02-13 16:58 ` Pedro Alves 2017-02-13 17:32 ` Peter Bergner 2017-02-14 17:21 ` Yao Qi 2017-02-13 17:08 ` Peter Bergner 2017-02-13 18:48 ` Peter Bergner 3 siblings, 2 replies; 16+ messages in thread From: Pedro Alves @ 2017-02-13 16:58 UTC (permalink / raw) To: Yao Qi, Peter Bergner Cc: gdb-patches, Alan Modra, Ulrich Weigand, Eli Zaretskii, Nick Clifton, binutils On 02/13/2017 03:52 PM, Yao Qi wrote: > These options should be modeled as per-architecture data. We need to > define a key to access that data dynamically. grep > "static struct gdbarch_data *" in *.c. If I understand the suggestion correctly, that would make all the different POWER (etc.) gdbarch instances have their own instance of the option string. I.e., the POWER gdbarch instance determined for the objfile before the program is run or GDB connects to a target would have a different set of options than the gdbarch instance created based on the POWER-based XML target description returned by the (e.g.), remote server, because those are different gdbarch object instances. As a result "set disassembler-options" would show different options before and after run/connection (and in other situations that use different gdbarch objects). What Alan's implementation achieves instead is that there's only one option value string for the whole family of gdbarchs of a given architecture, like POWER vs MIPS, vs x86, etc, so that the disassembler options active persist across internal uses of all the different gdbarch instances that model variants of the same CPU architecture. Thanks, Pedro Alves ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH, updated] Add support for setting disassembler-options in GDB for POWER, ARM and S390 2017-02-13 16:58 ` Pedro Alves @ 2017-02-13 17:32 ` Peter Bergner 2017-02-14 17:21 ` Yao Qi 1 sibling, 0 replies; 16+ messages in thread From: Peter Bergner @ 2017-02-13 17:32 UTC (permalink / raw) To: Pedro Alves, Yao Qi Cc: gdb-patches, Alan Modra, Ulrich Weigand, Eli Zaretskii, Nick Clifton, binutils On 2/13/17 10:58 AM, Pedro Alves wrote: > On 02/13/2017 03:52 PM, Yao Qi wrote: >> These options should be modeled as per-architecture data. We need to >> define a key to access that data dynamically. grep >> "static struct gdbarch_data *" in *.c. > > If I understand the suggestion correctly, that would make all the different > POWER (etc.) gdbarch instances have their own instance of the option string. > I.e., the POWER gdbarch instance determined for the objfile before the program > is run or GDB connects to a target would have a different set of options than > the gdbarch instance created based on the POWER-based XML target description > returned by the (e.g.), remote server, because those are different > gdbarch object instances. As a result "set disassembler-options" would > show different options before and after run/connection (and in other > situations that use different gdbarch objects). > > What Alan's implementation achieves instead is that there's only one option > value string for the whole family of gdbarchs of a given architecture, like > POWER vs MIPS, vs x86, etc, so that the disassembler options active persist > across internal uses of all the different gdbarch instances that > model variants of the same CPU architecture. s/Alan's/Peter's/. :-) Thank you for explaining what Yao's suggestion would do. As a user, I'd much prefer setting a disassembler option (per arch) and having that be used for all of my disassemble commands, versus to having to set it for each gdbarch instance. I think that would also fall under the principle of least surprise rule too. Peter ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH, updated] Add support for setting disassembler-options in GDB for POWER, ARM and S390 2017-02-13 16:58 ` Pedro Alves 2017-02-13 17:32 ` Peter Bergner @ 2017-02-14 17:21 ` Yao Qi 2017-02-14 17:35 ` Pedro Alves 1 sibling, 1 reply; 16+ messages in thread From: Yao Qi @ 2017-02-14 17:21 UTC (permalink / raw) To: Pedro Alves Cc: Peter Bergner, gdb-patches, Alan Modra, Ulrich Weigand, Eli Zaretskii, Nick Clifton, binutils On Mon, Feb 13, 2017 at 4:58 PM, Pedro Alves <palves@redhat.com> wrote: > On 02/13/2017 03:52 PM, Yao Qi wrote: >> These options should be modeled as per-architecture data. We need to >> define a key to access that data dynamically. grep >> "static struct gdbarch_data *" in *.c. > > If I understand the suggestion correctly, that would make all the different > POWER (etc.) gdbarch instances have their own instance of the option string. Hi Pedro, Peter's patch makes each gdbarch instance has its own instance of option string set by GDB. Peter's patch adds two things in gdbarch, +# Functions for allowing a target to modify its disassembler options. +v:char *:disassembler_options:::0:0::0:pstring (gdbarch->disassembler_options) +v:const disasm_options_t *:disassembler_options_arch:::0:0::0:host_address_to_string (gdbarch->disassembler_options_arch->name The former one is a string, and it is per-gdbarch-instance. The latter is a function, which provides all valid options for an arch. Different gdbarch instances for powerpc, for example, have the same valid options, but each gdbarch instance will have its own setting (set by GDB command). With Peter's patch applied, (gdb) set architecture powerpc:403 The target architecture is assumed to be powerpc:403 (gdb) set disassembler-options ppc32 (gdb) show disassembler-options The current disassembler options are 'ppc32' The following disassembler options are supported for use with the 'set disassembler-options <option>[,<option>...]' command: 403, 405, 440, 464, 476, 601, 603, 604, 620, 7400, 7410, 7450, 7455, 750cl 821, 850, 860, a2, altivec, any, booke, booke32, cell, com, e200z4, e300, e500 e500mc, e500mc64, e5500, e6500, e500x2, efs, power4, power5, power6, power7 power8, power9, ppc, ppc32, 32, ppc64, 64, ppc64bridge, ppcps, pwr, pwr2, pwr4 pwr5, pwr5x, pwr6, pwr7, pwr8, pwr9, pwrx, spe, titan, vle, vsx, htm /* I changed disassembler options to 'ppc32' for one gdbarch */ /* Then, I switch to a different gdbarch */ (gdb) set architecture powerpc:603 The target architecture is assumed to be powerpc:603 (gdb) show disassembler-options The current disassembler options are '' The following disassembler options are supported for use with the 'set disassembler-options <option>[,<option>...]' command: 403, 405, 440, 464, 476, 601, 603, 604, 620, 7400, 7410, 7450, 7455, 750cl 821, 850, 860, a2, altivec, any, booke, booke32, cell, com, e200z4, e300, e500 e500mc, e500mc64, e5500, e6500, e500x2, efs, power4, power5, power6, power7 power8, power9, ppc, ppc32, 32, ppc64, 64, ppc64bridge, ppcps, pwr, pwr2, pwr4 pwr5, pwr5x, pwr6, pwr7, pwr8, pwr9, pwrx, spe, titan, vle, vsx, htm (gdb) set disassembler-options ppc64 (gdb) show disassembler-options The current disassembler options are 'ppc64' The following disassembler options are supported for use with the 'set disassembler-options <option>[,<option>...]' command: 403, 405, 440, 464, 476, 601, 603, 604, 620, 7400, 7410, 7450, 7455, 750cl 821, 850, 860, a2, altivec, any, booke, booke32, cell, com, e200z4, e300, e500 e500mc, e500mc64, e5500, e6500, e500x2, efs, power4, power5, power6, power7 power8, power9, ppc, ppc32, 32, ppc64, 64, ppc64bridge, ppcps, pwr, pwr2, pwr4 pwr5, pwr5x, pwr6, pwr7, pwr8, pwr9, pwrx, spe, titan, vle, vsx, htm > I.e., the POWER gdbarch instance determined for the objfile before the program > is run or GDB connects to a target would have a different set of options than > the gdbarch instance created based on the POWER-based XML target description > returned by the (e.g.), remote server, because those are different > gdbarch object instances. As a result "set disassembler-options" would > show different options before and after run/connection (and in other > situations that use different gdbarch objects). > > What Alan's implementation achieves instead is that there's only one option > value string for the whole family of gdbarchs of a given architecture, like > POWER vs MIPS, vs x86, etc, so that the disassembler options active persist > across internal uses of all the different gdbarch instances that > model variants of the same CPU architecture. > My suggestion about using "struct gdbarch_data *" doesn't change the the behaviour. -- Yao (齐尧) ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH, updated] Add support for setting disassembler-options in GDB for POWER, ARM and S390 2017-02-14 17:21 ` Yao Qi @ 2017-02-14 17:35 ` Pedro Alves 0 siblings, 0 replies; 16+ messages in thread From: Pedro Alves @ 2017-02-14 17:35 UTC (permalink / raw) To: Yao Qi Cc: Peter Bergner, gdb-patches, Alan Modra, Ulrich Weigand, Eli Zaretskii, Nick Clifton, binutils On 02/14/2017 05:21 PM, Yao Qi wrote: > On Mon, Feb 13, 2017 at 4:58 PM, Pedro Alves <palves@redhat.com> wrote: >> On 02/13/2017 03:52 PM, Yao Qi wrote: >>> These options should be modeled as per-architecture data. We need to >>> define a key to access that data dynamically. grep >>> "static struct gdbarch_data *" in *.c. >> >> If I understand the suggestion correctly, that would make all the different >> POWER (etc.) gdbarch instances have their own instance of the option string. > > Hi Pedro, > Peter's patch makes each gdbarch instance has its own instance of > option string set by GDB. Peter's patch adds two things in gdbarch, > > +# Functions for allowing a target to modify its disassembler options. > +v:char *:disassembler_options:::0:0::0:pstring (gdbarch->disassembler_options) > +v:const disasm_options_t > *:disassembler_options_arch:::0:0::0:host_address_to_string > (gdbarch->disassembler_options_arch->name > > The former one is a string, and it is per-gdbarch-instance. The latter is a > function, which provides all valid options for an arch. Different gdbarch > instances for powerpc, for example, have the same valid options, but each > gdbarch instance will have its own setting (set by GDB command). Then I'm a bit surprised, since that was not what was discussed earlier, here <https://sourceware.org/ml/gdb-patches/2016-11/msg00043.html>: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ > I didn't realize we could have multiple gdbarchs for the same > arch live at the same time. Do you have a suggestion on how > to fix this? Maybe each arch will have its own *-tdep.c global > var to hold it and maybe store a pointer to that in the gdbarch? Yeah, that sounds like the simplest way to handle it. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In order to implement the above, the gdbarch should be storing a "char **", but it is storing a "char *" instead: +v:char *:disassembler_options:::0:0::0:pstring (gdbarch->disassembler_options) So I don't know why the current patch is doing it differently, and I was going by that earlier discussion. > My suggestion about using "struct gdbarch_data *" doesn't change the > the behaviour. Thanks for checking. So the question now is why does the current patch want to behave like that. :-) Thanks, Pedro Alves ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH, updated] Add support for setting disassembler-options in GDB for POWER, ARM and S390 2017-02-13 15:53 ` Yao Qi 2017-02-13 16:31 ` Peter Bergner 2017-02-13 16:58 ` Pedro Alves @ 2017-02-13 17:08 ` Peter Bergner 2017-02-13 18:48 ` Peter Bergner 3 siblings, 0 replies; 16+ messages in thread From: Peter Bergner @ 2017-02-13 17:08 UTC (permalink / raw) To: Yao Qi Cc: gdb-patches, Alan Modra, Pedro Alves, Ulrich Weigand, Eli Zaretskii, Nick Clifton, binutils One additional question for you. In the unpatched sources, opcodes/arm-dis.c seems to prefer GCC register set names via: /* Default to GCC register name set. */ static unsigned int regname_selected = 1; ...while gdb/arm-tdep.c seems to want STD register set names via: /* Disassembly style to use. Default to "std" register names. */ static const char *disassembly_style; ...and... /* Sync the opcode insn printer with our register viewer. */ parse_arm_disassembler_option ("reg-names-std"); ...and... /* When we find the default names, tell the disassembler to use them. */ if (!strcmp (setname, "std")) { disassembly_style = setname; set_arm_regname_option (i); } The way this is coded, reg-names-gcc will be used as the default when we disassemble arm instructions using objdump, while GDB will default to using reg-names-std. Is this intentional? Peter ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH, updated] Add support for setting disassembler-options in GDB for POWER, ARM and S390 2017-02-13 15:53 ` Yao Qi ` (2 preceding siblings ...) 2017-02-13 17:08 ` Peter Bergner @ 2017-02-13 18:48 ` Peter Bergner 2017-02-14 20:01 ` Pedro Alves 3 siblings, 1 reply; 16+ messages in thread From: Peter Bergner @ 2017-02-13 18:48 UTC (permalink / raw) To: Yao Qi Cc: gdb-patches, Alan Modra, Pedro Alves, Ulrich Weigand, Eli Zaretskii, Nick Clifton, binutils On 2/13/17 9:52 AM, Yao Qi wrote: > Peter Bergner <bergner@vnet.ibm.com> writes: > Function get_arm_regname_num_options is only used in gdb. Since we've > have disassembler_options_arm, we can use it in gdb and remove > get_arm_regname_num_options. > > We use get_arm_regname_num_options in arm-tdep.c, > > /* Get the number of possible sets of register names defined in opcodes. */ > num_disassembly_options = get_arm_regname_num_options (); > > We can get 'num_disassembly_options' by iterating options from > disassembler_options_arm. Done. > Likewise, we can use disassembler_options_arm in gdb and remove > get_arm_regnames. We use get_arm_regnames like this in arm-tdep.c, > > for (i = 0; i < num_disassembly_options; i++) > { > get_arm_regnames (i, &setname, &setdesc); > valid_disassembly_styles[i] = setname; > length = snprintf (rdptr, rest, "%s - %s\n", setname, setdesc); > rdptr += length; > rest -= length; > } > > but we can replace it by disassembler_options_arm instead. Done. >> +# Functions for allowing a target to modify its disassembler options. >> +v:char *:disassembler_options:::0:0::0:pstring (gdbarch->disassembler_options) > > These options should be modeled as per-architecture data. We need to > define a key to access that data dynamically. grep > "static struct gdbarch_data *" in *.c. Not done, as from Pedro's note, it sounded like he was arguing against this review suggestion. I agree with that, since I think users would expect 9I know I would) that setting the disassembler_options would be persistent across their debug session. >> +v:const disasm_options_t *:disassembler_options_arch:::0:0::0:host_address_to_string (gdbarch->disassembler_options_arch->name) > > disassembler_options_arch is not clear to me, and I feel > gdbarch_disassembler_options_arch is even worse. How about renaming it > to "disassembler_options_supported" or "valid_disassembler_options"? Changed to valid_disassembler_options. Here is an updated patch with the above changes. I'll note that I did not change the existing behavior of ARM defaulting to reg-names-gcc when disassembling with objdump, while gdb defaults to reg-names-std. Peter include/ * dis-asm.h (disasm_options_t): New typedef. (parse_arm_disassembler_option): Remove prototype. (set_arm_regname_option): Likewise. (get_arm_regnames): Likewise. (get_arm_regname_num_options): Likewise. (disassemble_init_s390): New prototype. (disassembler_options_powerpc): Likewise. (disassembler_options_arm): Likewise. (disassembler_options_s390): Likewise. (remove_whitespace_and_extra_commas): Likewise. (parse_one_disassembler_option): Likewise. (FOR_EACH_DISASSEMBLER_OPTION): New macro. opcodes/ * disassemble.c Include "safe-ctype.h". (disassemble_init_for_target): Handle s390 init. (remove_whitespace_and_extra_commas): New function. (parse_one_disassembler_option): Likewise. * arm-dis.c: Include "libiberty.h". (regnames): Use long disassembler style names. Add force-thumb and no-force-thumb options. (NUM_ARM_REGNAMES): Rename to NUM_ARM_OPTIONS. (get_arm_regname_num_options): Delete. (set_arm_regname_option): Likewise. (get_arm_regnames): Likewise. (parse_disassembler_options): Likewise. (parse_arm_disassembler_option): Rename from this... (parse_arm_disassembler_options): ...to this. Make static. Use new FOR_EACH_DISASSEMBLER_OPTION macro to scan over options. (print_insn): Call parse_arm_disassembler_options. (disassembler_options_arm): New function. (print_arm_disassembler_options): Handle updated regnames. * ppc-dis.c: Include "libiberty.h". (ppc_opts): Add "32" and "64" entries. (powerpc_init_dialect): Add break to switch statement. Use new FOR_EACH_DISASSEMBLER_OPTION macro. (disassembler_options_powerpc): New function. (print_ppc_disassembler_options): Remove printing of "32" and "64". * s390-dis.c: Include "libiberty.h". (init_flag): Remove unneeded variable. (struct s390_options_t): New structure type. (options): New structure. (init_disasm): Rename from this... (disassemble_init_s390): ...to this. Add initializations for current_arch_mask and option_use_insn_len_bits_p. Remove init_flag. (print_insn_s390): Delete call to init_disasm. (disassembler_options_s390): New function. (print_s390_disassembler_options): Print using information from struct 'options'. * po/opcodes.pot: Regenerate. binutils/ * objdump.c (main): Call remove_whitespace_and_extra_commas to cleanup disassembler_options. gdb/ * NEWS: Mention new set/show disassembler-options commands. * doc/gdb.texinfo: Document new set/show disassembler-options commands. * disasm.c: Include "arch-utils.h", "gdbcmd.h" and "safe-ctype.h". (prospective_options): New static variable. (gdb_disassembler::gdb_disassembler): Initialize m_di.disassembler_options. (gdb_buffered_insn_length_init_dis): Initilize di->application_data and di->disassembler_options. (set_disassembler_options): New function. (set_disassembler_options_sfunc): Likewise. (show_disassembler_options_sfunc): Likewise. (disassembler_options_completer): Likewise. (_initialize_disasm): Likewise. * disasm.h (set_disassembler_options): New prototype. * gdbarch.sh (gdbarch_disassembler_options): New variable. (gdbarch_verify_disassembler_options): Likewise. * gdbarch.c: Regenerate. * gdbarch.h: Likewise. * arm-tdep.c (num_disassembly_options): Delete. (set_disassembly_style): Likewise. (set_disassembly_style_sfunc): Call set_disassembler_options. (show_disassembly_style_sfunc): New function. (arm_gdbarch_init): Call set_gdbarch_disassembler_options, set_gdbarch_verify_disassembler_options. (_initialize_arm_tdep): Delete unused regnames variable and update callers. (num_disassembly_options): Rename from this... (num_disassembly_styles): ...to this. Compute by scanning through disassembler_options_arm. Remove calls to parse_arm_disassembler_option, get_arm_regnames and set_arm_regname_option. Pass show_disassembly_style_sfunc to the "disassembler" setshow command. * rs6000-tdep.c (rs6000_gdbarch_init): Call set_gdbarch_verify_disassembler_options. * s390-tdep.c (s390_gdbarch_init): Likewise. gdb/testsuite/ * gdb.arch/powerpc-power.exp: Delete test. * gdb.arch/powerpc-power.s: Likewise. * gdb.disasm/disassembler-options.exp: New test. * gdb.arch/powerpc-altivec.exp: Likewise. * gdb.arch/powerpc-altivec.s: Likewise. * gdb.arch/powerpc-altivec2.exp: Likewise. * gdb.arch/powerpc-altivec2.s: Likewise. * gdb.arch/powerpc-altivec3.exp: Likewise. * gdb.arch/powerpc-altivec3.s: Likewise. * gdb.arch/powerpc-power7.exp: Likewise. * gdb.arch/powerpc-power7.s: Likewise. * gdb.arch/powerpc-power8.exp: Likewise. * gdb.arch/powerpc-power8.s: Likewise. * gdb.arch/powerpc-power9.exp: Likewise. * gdb.arch/powerpc-power9.s: Likewise. * gdb.arch/powerpc-vsx.exp: Likewise. * gdb.arch/powerpc-vsx.s: Likewise. * gdb.arch/powerpc-vsx2.exp: Likewise. * gdb.arch/powerpc-vsx2.s: Likewise. * gdb.arch/powerpc-vsx3.exp: Likewise. * gdb.arch/powerpc-vsx3.s: Likewise. diff --git a/include/dis-asm.h b/include/dis-asm.h index 4872920..bb0ea97 100644 --- a/include/dis-asm.h +++ b/include/dis-asm.h @@ -222,6 +222,16 @@ typedef struct disassemble_info } disassemble_info; +/* This struct is used to pass information about valid disassembler options + and their descriptions from the target to the generic GDB functions that + set and display them. */ + +typedef struct +{ + const char **name; + const char **description; +} disasm_options_t; + \f /* Standard disassemblers. Disassemble one instruction at the given target address. Return number of octets processed. */ @@ -332,14 +342,14 @@ extern void print_ppc_disassembler_options (FILE *); extern void print_riscv_disassembler_options (FILE *); extern void print_arm_disassembler_options (FILE *); extern void print_arc_disassembler_options (FILE *); -extern void parse_arm_disassembler_option (char *); extern void print_s390_disassembler_options (FILE *); -extern int get_arm_regname_num_options (void); -extern int set_arm_regname_option (int); -extern int get_arm_regnames (int, const char **, const char **, const char *const **); extern bfd_boolean aarch64_symbol_is_valid (asymbol *, struct disassemble_info *); extern bfd_boolean arm_symbol_is_valid (asymbol *, struct disassemble_info *); extern void disassemble_init_powerpc (struct disassemble_info *); +extern void disassemble_init_s390 (struct disassemble_info *); +extern const disasm_options_t *disassembler_options_powerpc (void); +extern const disasm_options_t *disassembler_options_arm (void); +extern const disasm_options_t *disassembler_options_s390 (void); /* Fetch the disassembler for a given BFD, if that support is available. */ extern disassembler_ftype disassembler (bfd *); @@ -351,6 +361,21 @@ extern void disassemble_init_for_target (struct disassemble_info * dinfo); /* Document any target specific options available from the disassembler. */ extern void disassembler_usage (FILE *); +/* Remove whitespace and consecutive commas. */ +extern char *remove_whitespace_and_extra_commas (char *); + +/* Parse the disassembler options, looking for ',' separated options. */ +extern char *parse_one_disassembler_option (char *, const char *); + +/* A macro for iterating over each comma separated option in OPTIONS. */ +#define FOR_EACH_DISASSEMBLER_OPTION(OPT, ITER, OPTIONS) \ + for ((ITER) = parse_one_disassembler_option (OPT, OPTIONS); \ + (OPT)[0] != 0; \ + (ITER) = parse_one_disassembler_option (OPT, ITER)) + \f /* This block of definitions is for particular callers who read instructions into a buffer before calling the instruction decoder. */ diff --git a/opcodes/disassemble.c b/opcodes/disassemble.c index 1b15242..c31255e 100644 --- a/opcodes/disassemble.c +++ b/opcodes/disassemble.c @@ -20,6 +20,7 @@ #include "sysdep.h" #include "dis-asm.h" +#include "safe-ctype.h" #ifdef ARCH_all #define ARCH_aarch64 @@ -649,7 +650,78 @@ disassemble_init_for_target (struct disassemble_info * info) disassemble_init_powerpc (info); break; #endif +#ifdef ARCH_s390 + case bfd_arch_s390: + disassemble_init_s390 (info); + break; +#endif default: break; } } + +/* Remove whitespace and consecutive commas from OPTIONS. */ + +char * +remove_whitespace_and_extra_commas (char *options) +{ + char *str; + size_t i, len; + + if (options == NULL) + return NULL; + + /* Strip off all trailing whitespace and commas. */ + for (len = strlen (options); len > 0; len--) + { + if (!ISSPACE (options[len - 1]) && options[len - 1] != ',') + break; + options[len - 1] = '\0'; + } + + /* Convert all remaining whitespace to commas. */ + for (i = 0; options[i] != '\0'; i++) + if (ISSPACE (options[i])) + options[i] = ','; + + /* Remove consecutive commas. */ + for (str = options; *str != '\0'; str++) + if (*str == ',' && (*(str + 1) == ',' || str == options)) + { + char *next = str + 1; + while (*next == ',') + next++; + len = strlen (next); + if (str != options) + str++; + memmove (str, next, len); + next[len - (size_t)(next - str)] = '\0'; + } + return (strlen (options) != 0) ? options : NULL; +} + +/* Parse the OPTIONS argument looking for ',' seperated options. + Copy the current disassembler option into OPT. It is up to the + caller to ensure OPT contains enough space to hold the option. */ + +char * +parse_one_disassembler_option (char *opt, const char *options) +{ + if (options == NULL || options[0] == 0) + { + opt[0] = 0; + return NULL; + } + + char *next = strchr (options, ','); + if (next != NULL) + { + strncpy (opt, options, (size_t) (next - options)); + opt[(size_t) (next - options)] = 0; + next++; + } + else + strcpy (opt, options); + + return next; +} diff --git a/opcodes/arm-dis.c b/opcodes/arm-dis.c index 2987403..93f51b0 100644 --- a/opcodes/arm-dis.c +++ b/opcodes/arm-dis.c @@ -26,6 +26,7 @@ #include "opcode/arm.h" #include "opintl.h" #include "safe-ctype.h" +#include "libiberty.h" #include "floatformat.h" /* FIXME: This shouldn't be done here. */ @@ -3198,18 +3199,20 @@ arm_regname; static const arm_regname regnames[] = { - { "raw" , "Select raw register names", + { "reg-names-raw", N_("Select raw register names"), { "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15"}}, - { "gcc", "Select register names used by GCC", + { "reg-names-gcc", N_("Select register names used by GCC"), { "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "sl", "fp", "ip", "sp", "lr", "pc" }}, - { "std", "Select register names used in ARM's ISA documentation", + { "reg-names-std", N_("Select register names used in ARM's ISA documentation"), { "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12", "sp", "lr", "pc" }}, - { "apcs", "Select register names used in the APCS", + { "force-thumb", N_("Assume all insns are Thumb insns"), {NULL} }, + { "no-force-thumb", N_("Examine preceding label to determine an insn's type"), {NULL} }, + { "reg-names-apcs", N_("Select register names used in the APCS"), { "a1", "a2", "a3", "a4", "v1", "v2", "v3", "v4", "v5", "v6", "sl", "fp", "ip", "sp", "lr", "pc" }}, - { "atpcs", "Select register names used in the ATPCS", + { "reg-names-atpcs", N_("Select register names used in the ATPCS"), { "a1", "a2", "a3", "a4", "v1", "v2", "v3", "v4", "v5", "v6", "v7", "v8", "IP", "SP", "LR", "PC" }}, - { "special-atpcs", "Select special register names used in the ATPCS", - { "a1", "a2", "a3", "a4", "v1", "v2", "v3", "WR", "v5", "SB", "SL", "FP", "IP", "SP", "LR", "PC" }}, + { "reg-names-special-atpcs", N_("Select special register names used in the ATPCS"), + { "a1", "a2", "a3", "a4", "v1", "v2", "v3", "WR", "v5", "SB", "SL", "FP", "IP", "SP", "LR", "PC" }} }; static const char *const iwmmxt_wwnames[] = @@ -3235,7 +3238,7 @@ static const char *const iwmmxt_cregnames[] = /* Default to GCC register name set. */ static unsigned int regname_selected = 1; -#define NUM_ARM_REGNAMES NUM_ELEM (regnames) +#define NUM_ARM_OPTIONS NUM_ELEM (regnames) #define arm_regnames regnames[regname_selected].reg_names static bfd_boolean force_thumb = FALSE; @@ -3254,31 +3257,6 @@ static bfd_vma ifthen_address; \f /* Functions. */ -int -get_arm_regname_num_options (void) -{ - return NUM_ARM_REGNAMES; -} - -int -set_arm_regname_option (int option) -{ - int old = regname_selected; - regname_selected = option; - return old; -} - -int -get_arm_regnames (int option, - const char **setname, - const char **setdescription, - const char *const **register_names) -{ - *setname = regnames[option].name; - *setdescription = regnames[option].description; - *register_names = regnames[option].reg_names; - return 16; -} /* Decode a bitfield of the form matching regexp (N(-N)?,)*N(-N)?. Returns pointer to following character of the format string and @@ -6124,64 +6102,39 @@ arm_symbol_is_valid (asymbol * sym, return (name && *name != '$' && strncmp (name, "__tagsym$$", 10)); } -/* Parse an individual disassembler option. */ +/* Parse the string of disassembler options. */ -void -parse_arm_disassembler_option (char *option) +static void +parse_arm_disassembler_options (char *options) { - if (option == NULL) - return; + char *iter, opt[64]; - if (CONST_STRNEQ (option, "reg-names-")) + FOR_EACH_DISASSEMBLER_OPTION (opt, iter, options) { - int i; - - option += 10; - - for (i = NUM_ARM_REGNAMES; i--;) - if (strneq (option, regnames[i].name, strlen (regnames[i].name))) - { - regname_selected = i; - break; - } + if (CONST_STRNEQ (opt, "reg-names-")) + { + unsigned int i; + for (i = 0; i < NUM_ARM_OPTIONS; i++) + if (strcmp (opt, regnames[i].name) == 0) + { + regname_selected = i; + break; + } - if (i < 0) - /* XXX - should break 'option' at following delimiter. */ - fprintf (stderr, _("Unrecognised register name set: %s\n"), option); + if (i >= NUM_ARM_OPTIONS) + fprintf (stderr, _("Unrecognised register name set: %s\n"), opt); + } + else if (CONST_STRNEQ (opt, "force-thumb")) + force_thumb = 1; + else if (CONST_STRNEQ (opt, "no-force-thumb")) + force_thumb = 0; + else + fprintf (stderr, _("Unrecognised disassembler option: %s\n"), opt); } - else if (CONST_STRNEQ (option, "force-thumb")) - force_thumb = 1; - else if (CONST_STRNEQ (option, "no-force-thumb")) - force_thumb = 0; - else - /* XXX - should break 'option' at following delimiter. */ - fprintf (stderr, _("Unrecognised disassembler option: %s\n"), option); return; } -/* Parse the string of disassembler options, spliting it at whitespaces - or commas. (Whitespace separators supported for backwards compatibility). */ - -static void -parse_disassembler_options (char *options) -{ - if (options == NULL) - return; - - while (*options) - { - parse_arm_disassembler_option (options); - - /* Skip forward to next seperator. */ - while ((*options) && (! ISSPACE (*options)) && (*options != ',')) - ++ options; - /* Skip forward past seperators. */ - while (ISSPACE (*options) || (*options == ',')) - ++ options; - } -} - static bfd_boolean mapping_symbol_for_insn (bfd_vma pc, struct disassemble_info *info, enum map_type *map_symbol); @@ -6473,7 +6426,7 @@ print_insn (bfd_vma pc, struct disassemble_info *info, bfd_boolean little) if (info->disassembler_options) { - parse_disassembler_options (info->disassembler_options); + parse_arm_disassembler_options (info->disassembler_options); /* To avoid repeated parsing of these options, we remove them here. */ info->disassembler_options = NULL; @@ -6842,21 +6795,52 @@ print_insn_little_arm (bfd_vma pc, struct disassemble_info *info) return print_insn (pc, info, TRUE); } +const disasm_options_t * +disassembler_options_arm (void) +{ + static disasm_options_t *opts = NULL; + + if (opts == NULL) + { + unsigned int i; + opts = XNEW (disasm_options_t); + opts->name = XNEWVEC (const char *, NUM_ARM_OPTIONS + 1); + opts->description = XNEWVEC (const char *, NUM_ARM_OPTIONS + 1); + for (i = 0; i < NUM_ARM_OPTIONS; i++) + { + opts->name[i] = regnames[i].name; + if (regnames[i].description != NULL) + opts->description[i] = _(regnames[i].description); + else + opts->description[i] = NULL; + } + /* The array we return must be NULL terminated. */ + opts->name[i] = NULL; + opts->description[i] = NULL; + } + + return opts; +} + void print_arm_disassembler_options (FILE *stream) { - int i; - + unsigned int i, max_len = 0; fprintf (stream, _("\n\ The following ARM specific disassembler options are supported for use with\n\ the -M switch:\n")); - for (i = NUM_ARM_REGNAMES; i--;) - fprintf (stream, " reg-names-%s %*c%s\n", - regnames[i].name, - (int)(14 - strlen (regnames[i].name)), ' ', - regnames[i].description); + for (i = 0; i < NUM_ARM_OPTIONS; i++) + { + unsigned int len = strlen (regnames[i].name); + if (max_len < len) + max_len = len; + } - fprintf (stream, " force-thumb Assume all insns are Thumb insns\n"); - fprintf (stream, " no-force-thumb Examine preceding label to determine an insn's type\n\n"); + for (i = 0, max_len++; i < NUM_ARM_OPTIONS; i++) + fprintf (stream, " %s%*c %s\n", + regnames[i].name, + (int)(max_len - strlen (regnames[i].name)), ' ', + _(regnames[i].description)); } + diff --git a/opcodes/ppc-dis.c b/opcodes/ppc-dis.c index e0eff7a..8f4c487 100644 --- a/opcodes/ppc-dis.c +++ b/opcodes/ppc-dis.c @@ -26,6 +26,7 @@ #include "elf/ppc.h" #include "opintl.h" #include "opcode/ppc.h" +#include "libiberty.h" /* This file provides several disassembler functions, all of which use the disassembler interface defined in dis-asm.h. Several functions @@ -172,8 +173,12 @@ struct ppc_mopt ppc_opts[] = { 0 }, { "ppc32", PPC_OPCODE_PPC, 0 }, + { "32", PPC_OPCODE_PPC, + 0 }, { "ppc64", PPC_OPCODE_PPC | PPC_OPCODE_64, 0 }, + { "64", PPC_OPCODE_PPC | PPC_OPCODE_64, + 0 }, { "ppc64bridge", PPC_OPCODE_PPC | PPC_OPCODE_64_BRIDGE, 0 }, { "ppcps", PPC_OPCODE_PPC | PPC_OPCODE_PPCPS, @@ -278,7 +283,6 @@ powerpc_init_dialect (struct disassemble_info *info) { ppc_cpu_t dialect = 0; ppc_cpu_t sticky = 0; - char *arg; struct dis_private *priv = calloc (sizeof (*priv), 1); if (priv == NULL) @@ -324,29 +328,23 @@ powerpc_init_dialect (struct disassemble_info *info) break; default: dialect = ppc_parse_cpu (dialect, &sticky, "power9") | PPC_OPCODE_ANY; + break; } - arg = info->disassembler_options; - while (arg != NULL) + char opt[64]; + char *iter; + FOR_EACH_DISASSEMBLER_OPTION (opt, iter, info->disassembler_options) { ppc_cpu_t new_cpu = 0; - char *end = strchr (arg, ','); - - if (end != NULL) - *end = 0; - if ((new_cpu = ppc_parse_cpu (dialect, &sticky, arg)) != 0) - dialect = new_cpu; - else if (strcmp (arg, "32") == 0) + if (strcmp (opt, "32") == 0) dialect &= ~(ppc_cpu_t) PPC_OPCODE_64; - else if (strcmp (arg, "64") == 0) + else if (strcmp (opt, "64") == 0) dialect |= PPC_OPCODE_64; + else if ((new_cpu = ppc_parse_cpu (dialect, &sticky, opt)) != 0) + dialect = new_cpu; else - fprintf (stderr, _("warning: ignoring unknown -M%s option\n"), arg); - - if (end != NULL) - *end++ = ','; - arg = end; + fprintf (stderr, _("warning: ignoring unknown -M%s option\n"), opt); } info->private_data = priv; @@ -767,6 +765,26 @@ print_insn_powerpc (bfd_vma memaddr, return 4; } +const disasm_options_t * +disassembler_options_powerpc (void) +{ + static disasm_options_t *opts = NULL; + + if (opts == NULL) + { + size_t i, num_options = sizeof (ppc_opts) / sizeof (ppc_opts[0]); + opts = XNEW (disasm_options_t); + opts->name = XNEWVEC (const char *, num_options + 1); + for (i = 0; i < num_options; i++) + opts->name[i] = ppc_opts[i].opt; + /* The array we return must be NULL terminated. */ + opts->name[i] = NULL; + opts->description = NULL; + } + + return opts; +} + void print_ppc_disassembler_options (FILE *stream) { @@ -785,5 +803,5 @@ the -M switch:\n")); col = 0; } } - fprintf (stream, " 32, 64\n"); + fprintf (stream, "\n"); } diff --git a/opcodes/s390-dis.c b/opcodes/s390-dis.c index 328ba2d..e84b38a 100644 --- a/opcodes/s390-dis.c +++ b/opcodes/s390-dis.c @@ -25,16 +25,30 @@ #include "dis-asm.h" #include "opintl.h" #include "opcode/s390.h" +#include "libiberty.h" -static int init_flag = 0; static int opc_index[256]; static int current_arch_mask = 0; static int option_use_insn_len_bits_p = 0; +typedef struct +{ + const char *name; + const char *description; +} s390_options_t; + +static const s390_options_t options[] = +{ + { "esa" , N_("Disassemble in ESA architecture mode") }, + { "zarch", N_("Disassemble in z/Architecture mode") }, + { "insnlength", N_("Print unknown instructions according to " + "length from first two bits") } +}; + /* Set up index table for first opcode byte. */ -static void -init_disasm (struct disassemble_info *info) +void +disassemble_init_s390 (struct disassemble_info *info) { int i; const char *p; @@ -46,6 +60,9 @@ init_disasm (struct disassemble_info *info) for (i = s390_num_opcodes; i--; ) opc_index[s390_opcodes[i].opcode[0]] = i; + current_arch_mask = 1 << S390_OPCODE_ZARCH; + option_use_insn_len_bits_p = 0; + for (p = info->disassembler_options; p != NULL; ) { if (CONST_STRNEQ (p, "esa")) @@ -61,11 +78,6 @@ init_disasm (struct disassemble_info *info) if (p != NULL) p++; } - - if (!current_arch_mask) - current_arch_mask = 1 << S390_OPCODE_ZARCH; - - init_flag = 1; } /* Derive the length of an instruction from its first byte. */ @@ -266,9 +278,6 @@ print_insn_s390 (bfd_vma memaddr, struct disassemble_info *info) unsigned int value; int status, opsize, bufsize, bytes_to_dump, i; - if (init_flag == 0) - init_disasm (info); - /* The output looks better if we put 6 bytes on a line. */ info->bytes_per_line = 6; @@ -360,15 +369,48 @@ print_insn_s390 (bfd_vma memaddr, struct disassemble_info *info) return 0; } +const disasm_options_t * +disassembler_options_s390 (void) +{ + static disasm_options_t *opts = NULL; + + if (opts == NULL) + { + size_t i, num_options = sizeof (options) / sizeof (options[0]); + opts = XNEW (disasm_options_t); + opts->name = XNEWVEC (const char *, num_options + 1); + opts->description = XNEWVEC (const char *, num_options + 1); + for (i = 0; i < num_options; i++) + { + opts->name[i] = options[i].name; + opts->description[i] = _(options[i].description); + } + /* The array we return must be NULL terminated. */ + opts->name[i] = NULL; + opts->description[i] = NULL; + } + + return opts; +} + void print_s390_disassembler_options (FILE *stream) { + unsigned int i, max_len = 0; fprintf (stream, _("\n\ The following S/390 specific disassembler options are supported for use\n\ with the -M switch (multiple options should be separated by commas):\n")); - fprintf (stream, _(" esa Disassemble in ESA architecture mode\n")); - fprintf (stream, _(" zarch Disassemble in z/Architecture mode\n")); - fprintf (stream, _(" insnlength Print unknown instructions according " - "to length from first two bits\n")); + for (i = 0; i < sizeof (options) / sizeof (options[0]); i++) + { + unsigned int len = strlen (options[i].name); + if (max_len < len) + max_len = len; + } + + for (i = 0, max_len++; i < sizeof (options) / sizeof (options[0]); i++) + fprintf (stream, " %s%*c %s\n", + options[i].name, + (int)(max_len - strlen (options[i].name)), ' ', + _(options[i].description)); } diff --git a/opcodes/po/opcodes.pot b/opcodes/po/opcodes.pot index 56c7a23..e64a678 100644 --- a/opcodes/po/opcodes.pot +++ b/opcodes/po/opcodes.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: bug-binutils@gnu.org\n" -"POT-Creation-Date: 2016-12-23 09:23+0100\n" +"POT-Creation-Date: 2017-02-08 13:38-0600\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" @@ -18,8 +18,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" #. Invalid option. -#. XXX - should break 'option' at following delimiter. -#: aarch64-dis.c:81 arc-dis.c:699 arm-dis.c:6158 +#: aarch64-dis.c:81 arc-dis.c:769 arm-dis.c:6158 #, c-format msgid "Unrecognised disassembler option: %s\n" msgstr "" @@ -54,7 +53,7 @@ msgid "" msgstr "" #: aarch64-dis.c:3215 mips-dis.c:2477 mips-dis.c:2485 mips-dis.c:2487 -#: riscv-dis.c:505 +#: riscv-dis.c:506 #, c-format msgid "\n" msgstr "" @@ -262,7 +261,7 @@ msgstr "" msgid "jump hint unaligned" msgstr "" -#: arc-dis.c:323 +#: arc-dis.c:368 msgid "" "\n" "Warning: disassembly may be wrong due to guessed opcode class choice.\n" @@ -270,7 +269,7 @@ msgid "" "\t\t\t\t" msgstr "" -#: arc-dis.c:1182 +#: arc-dis.c:1267 #, c-format msgid "" "\n" @@ -278,37 +277,37 @@ msgid "" "with -M switch (multiple options should be separated by commas):\n" msgstr "" -#: arc-dis.c:1186 +#: arc-dis.c:1271 #, c-format msgid " dsp Recognize DSP instructions.\n" msgstr "" -#: arc-dis.c:1188 +#: arc-dis.c:1273 #, c-format msgid " spfp Recognize FPX SP instructions.\n" msgstr "" -#: arc-dis.c:1190 +#: arc-dis.c:1275 #, c-format msgid " dpfp Recognize FPX DP instructions.\n" msgstr "" -#: arc-dis.c:1192 +#: arc-dis.c:1277 #, c-format msgid " quarkse_em Recognize FPU QuarkSE-EM instructions.\n" msgstr "" -#: arc-dis.c:1194 +#: arc-dis.c:1279 #, c-format msgid " fpuda Recognize double assist FPU instructions.\n" msgstr "" -#: arc-dis.c:1196 +#: arc-dis.c:1281 #, c-format msgid " fpus Recognize single precision FPU instructions.\n" msgstr "" -#: arc-dis.c:1198 +#: arc-dis.c:1283 #, c-format msgid " fpud Recognize double precision FPU instructions.\n" msgstr "" @@ -454,17 +453,49 @@ msgstr "" msgid "Value must be in the range 0 to 31" msgstr "" -#: arm-dis.c:3634 +#: arm-dis.c:3202 +msgid "Select raw register names" +msgstr "" + +#: arm-dis.c:3204 +msgid "Select register names used by GCC" +msgstr "" + +#: arm-dis.c:3206 +msgid "Select register names used in ARM's ISA documentation" +msgstr "" + +#: arm-dis.c:3208 +msgid "Select register names used in the APCS" +msgstr "" + +#: arm-dis.c:3210 +msgid "Select register names used in the ATPCS" +msgstr "" + +#: arm-dis.c:3212 +msgid "Select special register names used in the ATPCS" +msgstr "" + +#. All non "reg-names-* options must be listed last. +#: arm-dis.c:3216 +msgid "Assume all insns are Thumb insns" +msgstr "" + +#: arm-dis.c:3217 +msgid "Examine preceding label to determine an insn's type" +msgstr "" + +#: arm-dis.c:3638 msgid "<illegal precision>" msgstr "" -#. XXX - should break 'option' at following delimiter. -#: arm-dis.c:6150 +#: arm-dis.c:6151 #, c-format msgid "Unrecognised register name set: %s\n" msgstr "" -#: arm-dis.c:6850 +#: arm-dis.c:6855 #, c-format msgid "" "\n" @@ -472,17 +503,17 @@ msgid "" "the -M switch:\n" msgstr "" -#: avr-dis.c:114 avr-dis.c:135 +#: avr-dis.c:115 avr-dis.c:136 #, c-format msgid "undefined" msgstr "" -#: avr-dis.c:214 +#: avr-dis.c:215 #, c-format msgid "Internal disassembler error" msgstr "" -#: avr-dis.c:267 +#: avr-dis.c:268 #, c-format msgid "unknown constraint `%c'" msgstr "" @@ -573,12 +604,12 @@ msgstr "" #: ip2k-asm.c:789 ip2k-asm.c:896 iq2000-asm.c:644 iq2000-asm.c:648 #: iq2000-asm.c:737 iq2000-asm.c:844 lm32-asm.c:534 lm32-asm.c:538 #: lm32-asm.c:627 lm32-asm.c:734 m32c-asm.c:1769 m32c-asm.c:1773 -#: m32c-asm.c:1862 m32c-asm.c:1969 m32r-asm.c:513 m32r-asm.c:517 -#: m32r-asm.c:606 m32r-asm.c:713 mep-asm.c:1472 mep-asm.c:1476 mep-asm.c:1565 -#: mep-asm.c:1672 mt-asm.c:780 mt-asm.c:784 mt-asm.c:873 mt-asm.c:980 -#: or1k-asm.c:688 or1k-asm.c:692 or1k-asm.c:781 or1k-asm.c:888 xc16x-asm.c:561 -#: xc16x-asm.c:565 xc16x-asm.c:654 xc16x-asm.c:761 xstormy16-asm.c:461 -#: xstormy16-asm.c:465 xstormy16-asm.c:554 xstormy16-asm.c:661 +#: m32c-asm.c:1862 m32c-asm.c:1969 m32r-asm.c:513 m32r-asm.c:517 m32r-asm.c:606 +#: m32r-asm.c:713 mep-asm.c:1472 mep-asm.c:1476 mep-asm.c:1565 mep-asm.c:1672 +#: mt-asm.c:780 mt-asm.c:784 mt-asm.c:873 mt-asm.c:980 or1k-asm.c:688 +#: or1k-asm.c:692 or1k-asm.c:781 or1k-asm.c:888 xc16x-asm.c:561 xc16x-asm.c:565 +#: xc16x-asm.c:654 xc16x-asm.c:761 xstormy16-asm.c:461 xstormy16-asm.c:465 +#: xstormy16-asm.c:554 xstormy16-asm.c:661 msgid "unrecognized instruction" msgstr "" @@ -636,9 +667,8 @@ msgid "*unknown*" msgstr "" #: epiphany-dis.c:277 fr30-dis.c:298 frv-dis.c:395 ip2k-dis.c:287 -#: iq2000-dis.c:188 lm32-dis.c:146 m32c-dis.c:890 m32r-dis.c:278 -#: mep-dis.c:1186 mt-dis.c:289 or1k-dis.c:140 xc16x-dis.c:419 -#: xstormy16-dis.c:167 +#: iq2000-dis.c:188 lm32-dis.c:146 m32c-dis.c:890 m32r-dis.c:278 mep-dis.c:1186 +#: mt-dis.c:289 or1k-dis.c:140 xc16x-dis.c:419 xstormy16-dis.c:167 #, c-format msgid "Unrecognized field %d while printing insn.\n" msgstr "" @@ -760,11 +790,11 @@ msgstr "" msgid "%02x\t\t*unknown*" msgstr "" -#: i386-dis.c:12198 +#: i386-dis.c:12200 msgid "<internal disassembler error>" msgstr "" -#: i386-dis.c:12490 +#: i386-dis.c:12492 #, c-format msgid "" "\n" @@ -773,145 +803,145 @@ msgid "" "with the -M switch (multiple options should be separated by commas):\n" msgstr "" -#: i386-dis.c:12494 +#: i386-dis.c:12496 #, c-format msgid " x86-64 Disassemble in 64bit mode\n" msgstr "" -#: i386-dis.c:12495 +#: i386-dis.c:12497 #, c-format msgid " i386 Disassemble in 32bit mode\n" msgstr "" -#: i386-dis.c:12496 +#: i386-dis.c:12498 #, c-format msgid " i8086 Disassemble in 16bit mode\n" msgstr "" -#: i386-dis.c:12497 +#: i386-dis.c:12499 #, c-format msgid " att Display instruction in AT&T syntax\n" msgstr "" -#: i386-dis.c:12498 +#: i386-dis.c:12500 #, c-format msgid " intel Display instruction in Intel syntax\n" msgstr "" -#: i386-dis.c:12499 +#: i386-dis.c:12501 #, c-format msgid "" " att-mnemonic\n" " Display instruction in AT&T mnemonic\n" msgstr "" -#: i386-dis.c:12501 +#: i386-dis.c:12503 #, c-format msgid "" " intel-mnemonic\n" " Display instruction in Intel mnemonic\n" msgstr "" -#: i386-dis.c:12503 +#: i386-dis.c:12505 #, c-format msgid " addr64 Assume 64bit address size\n" msgstr "" -#: i386-dis.c:12504 +#: i386-dis.c:12506 #, c-format msgid " addr32 Assume 32bit address size\n" msgstr "" -#: i386-dis.c:12505 +#: i386-dis.c:12507 #, c-format msgid " addr16 Assume 16bit address size\n" msgstr "" -#: i386-dis.c:12506 +#: i386-dis.c:12508 #, c-format msgid " data32 Assume 32bit data size\n" msgstr "" -#: i386-dis.c:12507 +#: i386-dis.c:12509 #, c-format msgid " data16 Assume 16bit data size\n" msgstr "" -#: i386-dis.c:12508 +#: i386-dis.c:12510 #, c-format msgid " suffix Always display instruction suffix in AT&T syntax\n" msgstr "" -#: i386-dis.c:12509 +#: i386-dis.c:12511 #, c-format msgid " amd64 Display instruction in AMD64 ISA\n" msgstr "" -#: i386-dis.c:12510 +#: i386-dis.c:12512 #, c-format msgid " intel64 Display instruction in Intel64 ISA\n" msgstr "" -#: i386-dis.c:13061 +#: i386-dis.c:13063 msgid "64-bit address is disabled" msgstr "" -#: i386-gen.c:674 ia64-gen.c:306 +#: i386-gen.c:679 ia64-gen.c:306 #, c-format msgid "%s: Error: " msgstr "" -#: i386-gen.c:838 +#: i386-gen.c:843 #, c-format msgid "%s: %d: Unknown bitfield: %s\n" msgstr "" -#: i386-gen.c:840 +#: i386-gen.c:845 #, c-format msgid "Unknown bitfield: %s\n" msgstr "" -#: i386-gen.c:899 +#: i386-gen.c:904 #, c-format msgid "%s: %d: Missing `)' in bitfield: %s\n" msgstr "" -#: i386-gen.c:1170 +#: i386-gen.c:1175 #, c-format msgid "can't find i386-opc.tbl for reading, errno = %s\n" msgstr "" -#: i386-gen.c:1301 +#: i386-gen.c:1306 #, c-format msgid "can't find i386-reg.tbl for reading, errno = %s\n" msgstr "" -#: i386-gen.c:1378 +#: i386-gen.c:1383 #, c-format msgid "can't create i386-init.h, errno = %s\n" msgstr "" -#: i386-gen.c:1468 ia64-gen.c:2829 +#: i386-gen.c:1473 ia64-gen.c:2829 #, c-format msgid "unable to change directory to \"%s\", errno = %s\n" msgstr "" -#: i386-gen.c:1480 i386-gen.c:1483 +#: i386-gen.c:1485 i386-gen.c:1488 #, c-format msgid "CpuMax != %d!\n" msgstr "" -#: i386-gen.c:1487 +#: i386-gen.c:1492 #, c-format msgid "%d unused bits in i386_cpu_flags.\n" msgstr "" -#: i386-gen.c:1494 +#: i386-gen.c:1499 #, c-format msgid "%d unused bits in i386_operand_type.\n" msgstr "" -#: i386-gen.c:1508 +#: i386-gen.c:1513 #, c-format msgid "can't create i386-tbl.h, errno = %s\n" msgstr "" @@ -1181,12 +1211,12 @@ msgstr "" msgid "Invalid size specifier" msgstr "" -#: m68k-dis.c:1278 +#: m68k-dis.c:1292 #, c-format msgid "<function code %d>" msgstr "" -#: m68k-dis.c:1437 +#: m68k-dis.c:1455 #, c-format msgid "<internal error in opcode table: %s %s>\n" msgstr "" @@ -1229,7 +1259,7 @@ msgstr "" msgid "Value is not aligned enough" msgstr "" -#: mips-dis.c:1633 mips-dis.c:1844 +#: mips-dis.c:1634 mips-dis.c:1846 #, c-format msgid "# internal error, undefined operand in `%s %s'" msgstr "" @@ -1359,20 +1389,20 @@ msgstr "" msgid "Error: read from memory failed" msgstr "" -#: msp430-dis.c:485 +#: msp430-dis.c:499 msgid "Warning: illegal as emulation instr" msgstr "" #. R2/R3 are illegal as dest: may be data section. -#: msp430-dis.c:569 +#: msp430-dis.c:591 msgid "Warning: illegal as 2-op instr" msgstr "" -#: msp430-dis.c:950 +#: msp430-dis.c:1002 msgid "Warning: unrecognised CALLA addressing mode" msgstr "" -#: msp430-dis.c:1232 msp430-dis.c:1249 msp430-dis.c:1270 +#: msp430-dis.c:1303 msp430-dis.c:1324 msp430-dis.c:1345 #, c-format msgid "Warning: reserved use of A/L and B/W bits detected" msgstr "" @@ -1403,12 +1433,12 @@ msgstr "" msgid "$<undefined>" msgstr "" -#: ppc-dis.c:345 +#: ppc-dis.c:347 #, c-format msgid "warning: ignoring unknown -M%s option\n" msgstr "" -#: ppc-dis.c:775 +#: ppc-dis.c:793 #, c-format msgid "" "\n" @@ -1490,12 +1520,12 @@ msgstr "" msgid "Unrecognized disassembler option: %s\n" msgstr "" -#: riscv-dis.c:342 +#: riscv-dis.c:343 #, c-format msgid "# internal error, undefined modifier (%c)" msgstr "" -#: riscv-dis.c:494 +#: riscv-dis.c:495 #, c-format msgid "" "\n" @@ -1503,14 +1533,14 @@ msgid "" "with the -M switch (multiple options should be separated by commas):\n" msgstr "" -#: riscv-dis.c:498 +#: riscv-dis.c:499 #, c-format msgid "" "\n" " numeric Print numeric reigster names, rather than ABI names.\n" msgstr "" -#: riscv-dis.c:501 +#: riscv-dis.c:502 #, c-format msgid "" "\n" @@ -1518,29 +1548,24 @@ msgid "" " than into pseudoinstructions.\n" msgstr "" -#: s390-dis.c:366 -#, c-format -msgid "" -"\n" -"The following S/390 specific disassembler options are supported for use\n" -"with the -M switch (multiple options should be separated by commas):\n" +#: s390-dis.c:42 +msgid "Disassemble in ESA architecture mode" msgstr "" -#: s390-dis.c:370 -#, c-format -msgid " esa Disassemble in ESA architecture mode\n" +#: s390-dis.c:43 +msgid "Disassemble in z/Architecture mode" msgstr "" -#: s390-dis.c:371 -#, c-format -msgid " zarch Disassemble in z/Architecture mode\n" +#: s390-dis.c:44 +msgid "Print unknown instructions according to length from first two bits" msgstr "" -#: s390-dis.c:372 +#: s390-dis.c:400 #, c-format msgid "" -" insnlength Print unknown instructions according to length from first two " -"bits\n" +"\n" +"The following S/390 specific disassembler options are supported for use\n" +"with the -M switch (multiple options should be separated by commas):\n" msgstr "" #: score-dis.c:662 score-dis.c:869 score-dis.c:1030 score-dis.c:1144 diff --git a/binutils/objdump.c b/binutils/objdump.c index b9fecef..4609858 100644 --- a/binutils/objdump.c +++ b/binutils/objdump.c @@ -3728,12 +3728,16 @@ main (int argc, char **argv) machine = optarg; break; case 'M': - if (disassembler_options) - /* Ignore potential memory leak for now. */ - disassembler_options = concat (disassembler_options, ",", - optarg, (const char *) NULL); - else - disassembler_options = optarg; + { + char *options; + if (disassembler_options) + /* Ignore potential memory leak for now. */ + options = concat (disassembler_options, ",", + optarg, (const char *) NULL); + else + options = optarg; + disassembler_options = remove_whitespace_and_extra_commas (options); + } break; case 'j': add_only (optarg); diff --git a/gdb/NEWS b/gdb/NEWS index 08f97c0..c63f1e2 100644 --- a/gdb/NEWS +++ b/gdb/NEWS @@ -73,6 +73,16 @@ flash-erase Erases all the flash memory regions reported by the target. This is equivalent to the CLI command flash-erase. +* New commands + +set disassembler-options +show disassembler-options + Controls the passing of target specific information to the disassembler. + If it is necessary to specify more than one disassembler option then + multiple options can be placed together into a comma separated list. + Default is ''. Currently, the only supported targets are ARM, PowerPC + and S/390. + *** Changes in GDB 7.12 * GDB and GDBserver now build with a C++ compiler by default. diff --git a/gdb/doc/gdb.texinfo b/gdb/doc/gdb.texinfo index a969d1b..26abd9c 100644 --- a/gdb/doc/gdb.texinfo +++ b/gdb/doc/gdb.texinfo @@ -8516,6 +8516,25 @@ location of the relocation table. On some architectures, @value{GDBN} might be able to resolve these to actual function names. @table @code +@kindex set disassembler-options +@cindex disassembler options +@item set disassembler-options @var{option1}[,@var{option2}@dots{}] +This command controls the passing of target specific information to the +disassembler. For a list of valid options, please refer to the +@code{-M}/@code{--disassembler-options} section of the @samp{objdump} +manual and/or the output of @kbd{objdump --help}. The default value is ''. + +If it is necessary to specify more than one disassembler option, then +multiple options can be placed together into a comma separated list. +Currently this command is only supported on targets ARM, PowerPC +and S/390. + +@kindex show disassembler-options +@item show disassembler-options +Show the current setting of the disassembler options. +@end table + +@table @code @kindex set disassembly-flavor @cindex Intel disassembly flavor @cindex AT&T disassembly flavor diff --git a/gdb/disasm.c b/gdb/disasm.c index 64d6684..43ee2fb 100644 --- a/gdb/disasm.c +++ b/gdb/disasm.c @@ -18,19 +18,26 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include "defs.h" +#include "arch-utils.h" #include "target.h" #include "value.h" #include "ui-out.h" #include "disasm.h" #include "gdbcore.h" +#include "gdbcmd.h" #include "dis-asm.h" #include "source.h" +#include "safe-ctype.h" #include <algorithm> /* Disassemble functions. FIXME: We should get rid of all the duplicate code in gdb that does the same thing: disassemble_command() and the gdbtk variation. */ +/* This variable is used to hold the prospective disassembler_options value + which is set by the "set disassembler_options" command. */ +static char *prospective_options = NULL; + /* This structure is used to store line number information for the deprecated /m option. We need a different sort of line table from the normal one cuz we can't @@ -780,6 +787,7 @@ gdb_disassembler::gdb_disassembler (struct gdbarch *gdbarch, m_di.endian = gdbarch_byte_order (gdbarch); m_di.endian_code = gdbarch_byte_order_for_code (gdbarch); m_di.application_data = this; + m_di.disassembler_options = gdbarch_disassembler_options (gdbarch); disassemble_init_for_target (&m_di); } @@ -888,6 +896,8 @@ gdb_buffered_insn_length_init_dis (struct gdbarch *gdbarch, di->endian = gdbarch_byte_order (gdbarch); di->endian_code = gdbarch_byte_order_for_code (gdbarch); + di->application_data = gdbarch; + di->disassembler_options = gdbarch_disassembler_options (gdbarch); disassemble_init_for_target (di); } @@ -904,3 +914,166 @@ gdb_buffered_insn_length (struct gdbarch *gdbarch, return gdbarch_print_insn (gdbarch, addr, &di); } + +void +set_disassembler_options (char *prospective_options) +{ + struct gdbarch *gdbarch = get_current_arch (); + const disasm_options_t *valid_options; + char *options = remove_whitespace_and_extra_commas (prospective_options); + char *iter, opt[256]; + + if (options == NULL) + { + free (gdbarch_disassembler_options (gdbarch)); + set_gdbarch_disassembler_options (gdbarch, NULL); + return; + } + + valid_options = gdbarch_valid_disassembler_options (gdbarch); + if (valid_options == NULL) + { + fprintf_filtered (gdb_stdlog, _("\ +'set disassembler-options ...' is not supported on this architecture.\n")); + return; + } + + /* Verify we have valid disassembler options. */ + FOR_EACH_DISASSEMBLER_OPTION (opt, iter, options) + { + size_t i; + for (i = 0; valid_options->name[i] != NULL; i++) + if (strcmp (opt, valid_options->name[i]) == 0) + break; + if (valid_options->name[i] == NULL) + { + fprintf_filtered (gdb_stdlog, + _("Invalid disassembler option value: '%s'.\n"), + opt); + return; + } + } + + free (gdbarch_disassembler_options (gdbarch)); + set_gdbarch_disassembler_options (gdbarch, xstrdup (options)); +} + +static void +set_disassembler_options_sfunc (char *args, int from_tty, + struct cmd_list_element *c) +{ + set_disassembler_options (prospective_options); +} + +static void +show_disassembler_options_sfunc (struct ui_file *file, int from_tty, + struct cmd_list_element *c, const char *value) +{ + struct gdbarch *gdbarch = get_current_arch (); + const disasm_options_t *valid_options; + + const char *options = gdbarch_disassembler_options (gdbarch); + if (options == NULL) + options = ""; + + fprintf_filtered (file, _("The current disassembler options are '%s'\n"), + options); + + valid_options = gdbarch_valid_disassembler_options (gdbarch); + + if (valid_options == NULL) + return; + + fprintf_filtered (file, _("\n\ +The following disassembler options are supported for use with\n\ +the 'set disassembler-options <option>[,<option>...]' command:\n")); + + if (valid_options->description != NULL) + { + size_t i, max_len = 0; + + /* Compute the length of the longest option name. */ + for (i = 0; valid_options->name[i] != NULL; i++) + { + size_t len = strlen (valid_options->name[i]); + if (max_len < len) + max_len = len; + } + + for (i = 0, max_len++; valid_options->name[i] != NULL; i++) + { + fprintf_filtered (file, " %s", valid_options->name[i]); + if (valid_options->description[i] != NULL) + fprintf_filtered (file, "%*c %s", + (int)(max_len - strlen (valid_options->name[i])), ' ', + valid_options->description[i]); + fprintf_filtered (file, "\n"); + } + } + else + { + size_t i, col; + for (i = 0, col = 0; valid_options->name[i] != NULL; i++) + { + /* Include the " " and "," we print below. */ + size_t len = strlen (valid_options->name[i]) + 2; + if (col + len > 80) + { + fprintf_filtered (file, "\n"); + col = 0; + } + if (col == 0) + fprintf_filtered (file, " %s", valid_options->name[i]); + else + fprintf_filtered (file, ", %s", valid_options->name[i]); + col += len; + } + fprintf_filtered (file, "\n"); + } +} + +/* A completion function for "set disassembler". */ + +static VEC (char_ptr) * +disassembler_options_completer (struct cmd_list_element *ignore, + const char *text, const char *word) +{ + struct gdbarch *gdbarch = get_current_arch (); + const disasm_options_t *opts = gdbarch_valid_disassembler_options (gdbarch); + + if (opts != NULL) + { + /* Only attempt to complete on the last option text. */ + const char *separator = strrchr (text, ','); + if (separator != NULL) + text = separator + 1; + while (ISSPACE (*text)) + text++; + return complete_on_enum (opts->name, text, word); + } + return NULL; +} + + +/* Initialization code. */ + +/* -Wmissing-prototypes */ +extern initialize_file_ftype _initialize_disasm; + +void +_initialize_disasm (void) +{ + struct cmd_list_element *cmd; + + /* Add the command that controls the disassembler options. */ + cmd = add_setshow_string_noescape_cmd ("disassembler-options", no_class, + &prospective_options, _("\ +Set the disassembler options.\n\ +Usage: set disassembler <option>[,<option>...]\n\n\ +See: show disassembler' for valid option values.\n"), _("\ +Show the disassembler options."), NULL, + set_disassembler_options_sfunc, + show_disassembler_options_sfunc, + &setlist, &showlist); + set_cmd_completer (cmd, disassembler_options_completer); +} diff --git a/gdb/disasm.h b/gdb/disasm.h index 42c1f3a..4d29446 100644 --- a/gdb/disasm.h +++ b/gdb/disasm.h @@ -138,4 +138,6 @@ extern int gdb_buffered_insn_length (struct gdbarch *gdbarch, const gdb_byte *insn, int max_len, CORE_ADDR memaddr); +extern void set_disassembler_options (char *); + #endif diff --git a/gdb/gdbarch.sh b/gdb/gdbarch.sh index 54549b6..044743c 100755 --- a/gdb/gdbarch.sh +++ b/gdb/gdbarch.sh @@ -1163,6 +1163,10 @@ m:const char *:gnu_triplet_regexp:void:::default_gnu_triplet_regexp::0 # each address in memory. m:int:addressable_memory_unit_size:void:::default_addressable_memory_unit_size::0 +# Functions for allowing a target to modify its disassembler options. +v:char *:disassembler_options:::0:0::0:pstring (gdbarch->disassembler_options) +v:const disasm_options_t *:valid_disassembler_options:::0:0::0:host_address_to_string (gdbarch->valid_disassembler_options->name) + EOF } @@ -1259,6 +1263,7 @@ cat <<EOF #define GDBARCH_H #include "frame.h" +#include "dis-asm.h" struct floatformat; struct ui_file; diff --git a/gdb/gdbarch.c b/gdb/gdbarch.c index 266f2e9..c4bbf1c 100644 --- a/gdb/gdbarch.c +++ b/gdb/gdbarch.c @@ -339,6 +339,8 @@ struct gdbarch gdbarch_gcc_target_options_ftype *gcc_target_options; gdbarch_gnu_triplet_regexp_ftype *gnu_triplet_regexp; gdbarch_addressable_memory_unit_size_ftype *addressable_memory_unit_size; + char * disassembler_options; + const disasm_options_t * valid_disassembler_options; }; /* Create a new ``struct gdbarch'' based on information provided by @@ -692,6 +694,8 @@ verify_gdbarch (struct gdbarch *gdbarch) /* Skip verify of gcc_target_options, invalid_p == 0 */ /* Skip verify of gnu_triplet_regexp, invalid_p == 0 */ /* Skip verify of addressable_memory_unit_size, invalid_p == 0 */ + /* Skip verify of disassembler_options, invalid_p == 0 */ + /* Skip verify of valid_disassembler_options, invalid_p == 0 */ if (!log.empty ()) internal_error (__FILE__, __LINE__, _("verify_gdbarch: the following are invalid ...%s"), @@ -875,6 +879,9 @@ gdbarch_dump (struct gdbarch *gdbarch, struct ui_file *file) "gdbarch_dump: deprecated_function_start_offset = %s\n", core_addr_to_string_nz (gdbarch->deprecated_function_start_offset)); fprintf_unfiltered (file, + "gdbarch_dump: disassembler_options = %s\n", + pstring (gdbarch->disassembler_options)); + fprintf_unfiltered (file, "gdbarch_dump: gdbarch_displaced_step_copy_insn_p() = %d\n", gdbarch_displaced_step_copy_insn_p (gdbarch)); fprintf_unfiltered (file, @@ -1421,6 +1428,9 @@ gdbarch_dump (struct gdbarch *gdbarch, struct ui_file *file) "gdbarch_dump: unwind_sp = <%s>\n", host_address_to_string (gdbarch->unwind_sp)); fprintf_unfiltered (file, + "gdbarch_dump: valid_disassembler_options = %s\n", + host_address_to_string (gdbarch->valid_disassembler_options->name)); + fprintf_unfiltered (file, "gdbarch_dump: value_from_register = <%s>\n", host_address_to_string (gdbarch->value_from_register)); fprintf_unfiltered (file, @@ -4956,6 +4966,40 @@ set_gdbarch_addressable_memory_unit_size (struct gdbarch *gdbarch, gdbarch->addressable_memory_unit_size = addressable_memory_unit_size; } +char * +gdbarch_disassembler_options (struct gdbarch *gdbarch) +{ + gdb_assert (gdbarch != NULL); + /* Skip verify of disassembler_options, invalid_p == 0 */ + if (gdbarch_debug >= 2) + fprintf_unfiltered (gdb_stdlog, "gdbarch_disassembler_options called\n"); + return gdbarch->disassembler_options; +} + +void +set_gdbarch_disassembler_options (struct gdbarch *gdbarch, + char * disassembler_options) +{ + gdbarch->disassembler_options = disassembler_options; +} + +const disasm_options_t * +gdbarch_valid_disassembler_options (struct gdbarch *gdbarch) +{ + gdb_assert (gdbarch != NULL); + /* Skip verify of valid_disassembler_options, invalid_p == 0 */ + if (gdbarch_debug >= 2) + fprintf_unfiltered (gdb_stdlog, "gdbarch_valid_disassembler_options called\n"); + return gdbarch->valid_disassembler_options; +} + +void +set_gdbarch_valid_disassembler_options (struct gdbarch *gdbarch, + const disasm_options_t * valid_disassembler_options) +{ + gdbarch->valid_disassembler_options = valid_disassembler_options; +} + /* Keep a registry of per-architecture data-pointers required by GDB modules. */ diff --git a/gdb/gdbarch.h b/gdb/gdbarch.h index 50bc6a9..8e095de 100644 --- a/gdb/gdbarch.h +++ b/gdb/gdbarch.h @@ -36,6 +36,7 @@ #define GDBARCH_H #include "frame.h" +#include "dis-asm.h" struct floatformat; struct ui_file; @@ -1545,6 +1546,14 @@ typedef int (gdbarch_addressable_memory_unit_size_ftype) (struct gdbarch *gdbarc extern int gdbarch_addressable_memory_unit_size (struct gdbarch *gdbarch); extern void set_gdbarch_addressable_memory_unit_size (struct gdbarch *gdbarch, gdbarch_addressable_memory_unit_size_ftype *addressable_memory_unit_size); +/* Functions for allowing a target to modify its disassembler options. */ + +extern char * gdbarch_disassembler_options (struct gdbarch *gdbarch); +extern void set_gdbarch_disassembler_options (struct gdbarch *gdbarch, char * disassembler_options); + +extern const disasm_options_t * gdbarch_valid_disassembler_options (struct gdbarch *gdbarch); +extern void set_gdbarch_valid_disassembler_options (struct gdbarch *gdbarch, const disasm_options_t * valid_disassembler_options); + /* Definition for an unknown syscall, used basically in error-cases. */ #define UNKNOWN_SYSCALL (-1) diff --git a/gdb/arm-tdep.c b/gdb/arm-tdep.c index 88ed391..635f88d 100644 --- a/gdb/arm-tdep.c +++ b/gdb/arm-tdep.c @@ -145,9 +145,6 @@ static const char *const arm_mode_strings[] = static const char *arm_fallback_mode_string = "auto"; static const char *arm_force_mode_string = "auto"; -/* Number of different reg name sets (options). */ -static int num_disassembly_options; - /* The standard register names, and all the valid aliases for them. Note that `fp', `sp' and `pc' are not added in this alias list, because they have been added as builtin user registers in @@ -218,7 +215,9 @@ static const char *disassembly_style; style. */ static void set_disassembly_style_sfunc(char *, int, struct cmd_list_element *); -static void set_disassembly_style (void); +static void show_disassembly_style_sfunc (struct ui_file *, int, + struct cmd_list_element *, + const char *); static void convert_from_extended (const struct floatformat *, const void *, void *, int); @@ -8539,9 +8538,34 @@ arm_show_force_mode (struct ui_file *file, int from_tty, static void set_disassembly_style_sfunc (char *args, int from_tty, - struct cmd_list_element *c) + struct cmd_list_element *c) +{ + /* Convert the short style name into the long style name (eg, reg-names-*) + before calling the generic set_disassembler_options() function. */ + char long_name[64], *style = long_name; + snprintf (style, 64, "reg-names-%s", disassembly_style); + set_disassembler_options (style); +} + +static void +show_disassembly_style_sfunc (struct ui_file *file, int from_tty, + struct cmd_list_element *c, const char *value) { - set_disassembly_style (); + struct gdbarch *gdbarch = get_current_arch (); + const char *options = gdbarch_disassembler_options (gdbarch); + char *style = "default"; + char *iter, opt[64]; + + FOR_EACH_DISASSEMBLER_OPTION (opt, iter, options) + { + if (CONST_STRNEQ (opt, "reg-names-")) + { + style = &opt[strlen ("reg-names-")]; + break; + } + } + + fprintf_unfiltered (file, "The disassembly style is \"%s\".\n", style); } \f /* Return the ARM register name corresponding to register I. */ @@ -8582,21 +8606,6 @@ arm_register_name (struct gdbarch *gdbarch, int i) return arm_register_names[i]; } -static void -set_disassembly_style (void) -{ - int current; - - /* Find the style that the user wants. */ - for (current = 0; current < num_disassembly_options; current++) - if (disassembly_style == valid_disassembly_styles[current]) - break; - gdb_assert (current < num_disassembly_options); - - /* Synchronize the disassembler. */ - set_arm_regname_option (current); -} - /* Test whether the coff symbol specific value corresponds to a Thumb function. */ @@ -9556,6 +9565,9 @@ arm_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches) user_reg_add (gdbarch, arm_register_aliases[i].name, value_of_arm_user_reg, &arm_register_aliases[i].regnum); + set_gdbarch_disassembler_options (gdbarch, xstrdup ("reg-names-std")); + set_gdbarch_valid_disassembler_options (gdbarch, disassembler_options_arm ()); + return gdbarch; } @@ -9579,7 +9591,6 @@ _initialize_arm_tdep (void) long length; const char *setname; const char *setdesc; - const char *const *regnames; int i; char regdesc[1024], *rdptr = regdesc; size_t rest = sizeof (regdesc); @@ -9608,9 +9619,6 @@ _initialize_arm_tdep (void) initialize_tdesc_arm_with_vfpv3 (); initialize_tdesc_arm_with_neon (); - /* Get the number of possible sets of register names defined in opcodes. */ - num_disassembly_options = get_arm_regname_num_options (); - /* Add root prefix command for all "set arm"/"show arm" commands. */ add_prefix_cmd ("arm", no_class, set_arm_command, _("Various ARM-specific commands."), @@ -9620,30 +9628,26 @@ _initialize_arm_tdep (void) _("Various ARM-specific commands."), &showarmcmdlist, "show arm ", 0, &showlist); - /* Sync the opcode insn printer with our register viewer. */ - parse_arm_disassembler_option ("reg-names-std"); - /* Initialize the array that will be passed to - add_setshow_enum_cmd(). */ + const disasm_options_t *disasm_options = disassembler_options_arm (); + int num_disassembly_styles = 0; + for (i = 0; disasm_options->name[i] != NULL; i++) + if (CONST_STRNEQ (disasm_options->name[i], "reg-names-")) + num_disassembly_styles++; + + /* Initialize the array that will be passed to add_setshow_enum_cmd(). */ valid_disassembly_styles = XNEWVEC (const char *, - num_disassembly_options + 1); - for (i = 0; i < num_disassembly_options; i++) + num_disassembly_styles + 1); + for (i = 0; i < num_disassembly_styles; i++) { - get_arm_regnames (i, &setname, &setdesc, ®names); - valid_disassembly_styles[i] = setname; - length = snprintf (rdptr, rest, "%s - %s\n", setname, setdesc); + valid_disassembly_styles[i] = disasm_options->name[i]; + length = snprintf (rdptr, rest, "%s - %s\n", disasm_options->name[i], + disasm_options->description[i]); rdptr += length; rest -= length; - /* When we find the default names, tell the disassembler to use - them. */ - if (!strcmp (setname, "std")) - { - disassembly_style = setname; - set_arm_regname_option (i); - } } /* Mark the end of valid options. */ - valid_disassembly_styles[num_disassembly_options] = NULL; + valid_disassembly_styles[num_disassembly_styles] = NULL; /* Create the help text. */ std::string helptext = string_printf ("%s%s%s", @@ -9657,8 +9661,7 @@ _initialize_arm_tdep (void) _("Show the disassembly style."), helptext.c_str (), set_disassembly_style_sfunc, - NULL, /* FIXME: i18n: The disassembly style is - \"%s\". */ + show_disassembly_style_sfunc, &setarmcmdlist, &showarmcmdlist); add_setshow_boolean_cmd ("apcs32", no_class, &arm_apcs_32, diff --git a/gdb/rs6000-tdep.c b/gdb/rs6000-tdep.c index 527f643..81cbf80 100644 --- a/gdb/rs6000-tdep.c +++ b/gdb/rs6000-tdep.c @@ -6592,6 +6592,9 @@ rs6000_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches) else register_ppc_ravenscar_ops (gdbarch); + set_gdbarch_valid_disassembler_options (gdbarch, + disassembler_options_powerpc ()); + return gdbarch; } diff --git a/gdb/s390-linux-tdep.c b/gdb/s390-linux-tdep.c index febdd14..3e934aa 100644 --- a/gdb/s390-linux-tdep.c +++ b/gdb/s390-linux-tdep.c @@ -8113,6 +8113,9 @@ s390_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches) s390_init_linux_record_tdep (&s390_linux_record_tdep, ABI_LINUX_S390); s390_init_linux_record_tdep (&s390x_linux_record_tdep, ABI_LINUX_ZSERIES); + set_gdbarch_valid_disassembler_options (gdbarch, + disassembler_options_s390 ()); + return gdbarch; } diff --git a/gdb/testsuite/gdb.arch/powerpc-altivec.exp b/gdb/testsuite/gdb.arch/powerpc-altivec.exp new file mode 100644 index 0000000..8fd418e --- /dev/null +++ b/gdb/testsuite/gdb.arch/powerpc-altivec.exp @@ -0,0 +1,257 @@ +# Copyright 2016 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +# Test PowerPC instructions disassembly. + +standard_testfile .s +set objfile [standard_output_file ${testfile}.o] + +if {![istarget "powerpc*-*-*"]} then { + verbose "Skipping PowerPC instructions disassembly." + return +} + +if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${objfile}" object {debug}] != "" } { + untested "PowerPC instructions disassembly" + return -1 +} + +clean_restart ${objfile} + +# Disassemble the function. + +gdb_test "set disassembler-options altivec" +set test "disass func" +gdb_test_multiple $test $test { + -re "\r\nDump of assembler code for function func:(\r\n.*\r\n)End of assembler dump.\r\n$gdb_prompt $" { + set func $expect_out(1,string) + pass $test + } +} + +proc instr_to_patt {instr} { + # 0x0000000000000018 <+24>: stxvd2x vs43,r4,r5 + return ".*\r\n\[ \t\]*0x\[0-9a-f\]+ <\\+\[0-9a-f\]*>:\[ \t\]*[string map [list { } "\[ \t\]+" . {\.}] $instr]\[ \t\]*\r\n.*" +} + +proc func_check {instr} { + global func + + set test "Found: $instr" + if [regexp -nocase -line [instr_to_patt $instr] $func] { + pass $test + } else { + fail $test + } +} + +func_check "dss 3" +func_check "dssall" +func_check "dst r5,r4,1" +func_check "dstt r8,r7,0" +func_check "dstst r5,r6,3" +func_check "dststt r4,r5,2" +func_check "lvebx v30,r22,r24" +func_check "lvebx v21,0,r24" +func_check "lvehx v10,r16,r2" +func_check "lvehx v20,0,r23" +func_check "lvewx v17,r4,r18" +func_check "lvewx v23,0,r8" +func_check "lvsl v6,0,r25" +func_check "lvsl v2,0,r6" +func_check "lvsr v22,r16,r12" +func_check "lvsr v0,0,r29" +func_check "lvxl v15,r5,r13" +func_check "lvxl v19,0,r23" +func_check "lvx v22,r1,r2" +func_check "lvx v18,0,r17" +func_check "mfvrsave r31" +func_check "mfvscr v24" +func_check "mtvrsave r10" +func_check "mtvscr v25" +func_check "stvebx v18,r27,r10" +func_check "stvebx v16,0,r6" +func_check "stvehx v17,r13,r16" +func_check "stvehx v23,0,r20" +func_check "stvewx v11,r19,r31" +func_check "stvewx v31,0,r1" +func_check "stvxl v26,r21,r17" +func_check "stvxl v13,0,r22" +func_check "stvx v11,r31,r31" +func_check "stvx v30,0,r16" +func_check "vaddcuw v24,v7,v28" +func_check "vaddfp v3,v30,v11" +func_check "vaddsbs v8,v28,v9" +func_check "vaddshs v7,v5,v4" +func_check "vaddsws v22,v26,v27" +func_check "vaddubm v16,v14,v28" +func_check "vaddubs v6,v1,v25" +func_check "vadduhm v2,v4,v6" +func_check "vadduhs v26,v21,v8" +func_check "vadduwm v29,v31,v1" +func_check "vadduws v23,v13,v4" +func_check "vandc v30,v16,v9" +func_check "vand v3,v13,v27" +func_check "vavgsb v4,v6,v17" +func_check "vavgsh v23,v28,v19" +func_check "vavgsw v8,v15,v31" +func_check "vavgub v6,v7,v25" +func_check "vavguh v25,v22,v10" +func_check "vavguw v3,v23,v29" +func_check "vctsxs v14,v2,6" +func_check "vctuxs v9,v31,20" +func_check "vcfsx v24,v30,3" +func_check "vcfux v17,v21,29" +func_check "vcmpbfp v18,v28,v0" +func_check "vcmpbfp\. v19,v26,v3" +func_check "vcmpeqfp v16,v2,v11" +func_check "vcmpeqfp\. v23,v13,v13" +func_check "vcmpequb v25,v19,v10" +func_check "vcmpequb\. v18,v11,v2" +func_check "vcmpequh v9,v25,v7" +func_check "vcmpequh\. v14,v24,v21" +func_check "vcmpequw v24,v12,v5" +func_check "vcmpequw\. v19,v16,v1" +func_check "vcmpgefp v23,v17,v16" +func_check "vcmpgefp\. v19,v29,v17" +func_check "vcmpgtfp v16,v28,v13" +func_check "vcmpgtfp\. v14,v24,v7" +func_check "vcmpgtsb v16,v22,v6" +func_check "vcmpgtsb\. v2,v12,v14" +func_check "vcmpgtsh v28,v3,v29" +func_check "vcmpgtsh\. v16,v19,v13" +func_check "vcmpgtsw v15,v0,v5" +func_check "vcmpgtsw\. v21,v13,v0" +func_check "vcmpgtub v5,v10,v30" +func_check "vcmpgtub\. v7,v13,v10" +func_check "vcmpgtuh v24,v15,v16" +func_check "vcmpgtuh\. v25,v21,v27" +func_check "vcmpgtuw v17,v27,v6" +func_check "vcmpgtuw\. v8,v21,v27" +func_check "vcfsx v1,v1,14" +func_check "vctsxs v4,v15,25" +func_check "vctuxs v28,v23,14" +func_check "vcfux v6,v6,0" +func_check "vexptefp v0,v8" +func_check "vlogefp v22,v27" +func_check "vmaddfp v23,v18,v5,v18" +func_check "vmaxfp v13,v13,v27" +func_check "vmaxsb v8,v23,v14" +func_check "vmaxsh v19,v17,v0" +func_check "vmaxsw v19,v3,v22" +func_check "vmaxub v23,v30,v28" +func_check "vmaxuh v9,v20,v23" +func_check "vmaxuw v21,v19,v1" +func_check "vmhaddshs v22,v13,v5,v22" +func_check "vmhraddshs v31,v0,v3,v18" +func_check "vminfp v2,v21,v24" +func_check "vminsb v20,v6,v10" +func_check "vminsh v18,v27,v26" +func_check "vminsw v3,v4,v1" +func_check "vminub v7,v0,v13" +func_check "vminuh v0,v12,v6" +func_check "vminuw v6,v3,v1" +func_check "vmladduhm v3,v29,v3,v26" +func_check "vmrghb v21,v5,v31" +func_check "vmrghh v21,v24,v0" +func_check "vmrghw v16,v0,v22" +func_check "vmrglb v1,v17,v16" +func_check "vmrglh v14,v8,v15" +func_check "vmrglw v31,v21,v5" +func_check "vmr v24,v9" +func_check "vmr v24,v9" +func_check "vmsummbm v0,v24,v15,v23" +func_check "vmsumshm v1,v4,v7,v25" +func_check "vmsumshs v9,v8,v13,v31" +func_check "vmsumubm v23,v31,v12,v30" +func_check "vmsumuhm v29,v0,v26,v21" +func_check "vmsumuhs v27,v14,v25,v5" +func_check "vmulesb v10,v25,v14" +func_check "vmulesh v1,v18,v8" +func_check "vmuleub v17,v14,v9" +func_check "vmuleuh v5,v26,v9" +func_check "vmulosb v21,v18,v6" +func_check "vmulosh v4,v5,v8" +func_check "vmuloub v2,v9,v19" +func_check "vmulouh v29,v5,v4" +func_check "vnmsubfp v8,v2,v6,v5" +func_check "vnor v31,v9,v10" +func_check "vnot v25,v31" +func_check "vnot v25,v31" +func_check "vor v23,v7,v2" +func_check "vperm v0,v28,v22,v25" +func_check "vpkpx v16,v25,v17" +func_check "vpkshss v12,v16,v17" +func_check "vpkshus v1,v19,v23" +func_check "vpkswss v25,v7,v13" +func_check "vpkswus v4,v24,v10" +func_check "vpkuhum v9,v27,v12" +func_check "vpkuhus v22,v10,v25" +func_check "vpkuwum v30,v18,v0" +func_check "vpkuwus v7,v3,v22" +func_check "vrefp v24,v28" +func_check "vrfim v17,v19" +func_check "vrfin v24,v25" +func_check "vrfip v3,v5" +func_check "vrfiz v8,v10" +func_check "vrlb v26,v18,v30" +func_check "vrlh v16,v17,v25" +func_check "vrlw v23,v30,v9" +func_check "vrsqrtefp v2,v18" +func_check "vsel v20,v14,v18,v10" +func_check "vslb v25,v25,v12" +func_check "vsldoi v9,v9,v12,7" +func_check "vslh v14,v2,v11" +func_check "vslo v30,v5,v6" +func_check "vsl v22,v30,v9" +func_check "vslw v26,v26,v3" +func_check "vspltb v1,v20,6" +func_check "vsplth v16,v18,3" +func_check "vspltisb v25,-13" +func_check "vspltish v22,10" +func_check "vspltisw v13,13" +func_check "vspltw v9,v18,2" +func_check "vsrab v14,v22,v0" +func_check "vsrah v12,v12,v18" +func_check "vsraw v2,v2,v13" +func_check "vsrb v7,v27,v5" +func_check "vsrh v7,v11,v29" +func_check "vsro v18,v30,v31" +func_check "vsr v2,v9,v28" +func_check "vsrw v0,v25,v0" +func_check "vsubcuw v24,v2,v10" +func_check "vsubfp v22,v24,v20" +func_check "vsubsbs v10,v22,v13" +func_check "vsubshs v24,v17,v28" +func_check "vsubsws v10,v26,v0" +func_check "vsububm v16,v11,v24" +func_check "vsububs v11,v21,v1" +func_check "vsubuhm v6,v12,v24" +func_check "vsubuhs v30,v11,v9" +func_check "vsubuwm v19,v20,v13" +func_check "vsubuws v18,v25,v6" +func_check "vsum2sws v25,v10,v18" +func_check "vsum4sbs v13,v16,v21" +func_check "vsum4shs v23,v8,v4" +func_check "vsum4ubs v28,v13,v30" +func_check "vsumsws v22,v10,v8" +func_check "vupkhpx v24,v14" +func_check "vupkhsb v2,v22" +func_check "vupkhsh v16,v2" +func_check "vupklpx v10,v26" +func_check "vupklsb v15,v28" +func_check "vupklsh v8,v8" +func_check "vxor v25,v0,v3" diff --git a/gdb/testsuite/gdb.arch/powerpc-altivec.s b/gdb/testsuite/gdb.arch/powerpc-altivec.s new file mode 100644 index 0000000..8e10a4e --- /dev/null +++ b/gdb/testsuite/gdb.arch/powerpc-altivec.s @@ -0,0 +1,217 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2016 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + + .text + .globl func +func: + .long 0x7c60066c /* dss 3 */ + .long 0x7e00066c /* dssall */ + .long 0x7c2522ac /* dst r5,r4,1 */ + .long 0x7e083aac /* dstt r8,r7,0 */ + .long 0x7c6532ec /* dstst r5,r6,3 */ + .long 0x7e442aec /* dststt r4,r5,2 */ + .long 0x7fd6c00e /* lvebx v30,r22,r24 */ + .long 0x7ea0c00e /* lvebx v21,0,r24 */ + .long 0x7d50104e /* lvehx v10,r16,r2 */ + .long 0x7e80b84e /* lvehx v20,0,r23 */ + .long 0x7e24908e /* lvewx v17,r4,r18 */ + .long 0x7ee0408e /* lvewx v23,0,r8 */ + .long 0x7cc0c80c /* lvsl v6,0,r25 */ + .long 0x7c40300c /* lvsl v2,0,r6 */ + .long 0x7ed0604c /* lvsr v22,r16,r12 */ + .long 0x7c00e84c /* lvsr v0,0,r29 */ + .long 0x7de56ace /* lvxl v15,r5,r13 */ + .long 0x7e60bace /* lvxl v19,0,r23 */ + .long 0x7ec110ce /* lvx v22,r1,r2 */ + .long 0x7e4088ce /* lvx v18,0,r17 */ + .long 0x7fe042a6 /* mfvrsave r31 */ + .long 0x13000604 /* mfvscr v24 */ + .long 0x7d4043a6 /* mtvrsave r10 */ + .long 0x1000ce44 /* mtvscr v25 */ + .long 0x7e5b510e /* stvebx v18,r27,r10 */ + .long 0x7e00310e /* stvebx v16,0,r6 */ + .long 0x7e2d814e /* stvehx v17,r13,r16 */ + .long 0x7ee0a14e /* stvehx v23,0,r20 */ + .long 0x7d73f98e /* stvewx v11,r19,r31 */ + .long 0x7fe0098e /* stvewx v31,0,r1 */ + .long 0x7f558bce /* stvxl v26,r21,r17 */ + .long 0x7da0b3ce /* stvxl v13,0,r22 */ + .long 0x7d7ff9ce /* stvx v11,r31,r31 */ + .long 0x7fc081ce /* stvx v30,0,r16 */ + .long 0x1307e180 /* vaddcuw v24,v7,v28 */ + .long 0x107e580a /* vaddfp v3,v30,v11 */ + .long 0x111c4b00 /* vaddsbs v8,v28,v9 */ + .long 0x10e52340 /* vaddshs v7,v5,v4 */ + .long 0x12dadb80 /* vaddsws v22,v26,v27 */ + .long 0x120ee000 /* vaddubm v16,v14,v28 */ + .long 0x10c1ca00 /* vaddubs v6,v1,v25 */ + .long 0x10443040 /* vadduhm v2,v4,v6 */ + .long 0x13554240 /* vadduhs v26,v21,v8 */ + .long 0x13bf0880 /* vadduwm v29,v31,v1 */ + .long 0x12ed2280 /* vadduws v23,v13,v4 */ + .long 0x13d04c44 /* vandc v30,v16,v9 */ + .long 0x106ddc04 /* vand v3,v13,v27 */ + .long 0x10868d02 /* vavgsb v4,v6,v17 */ + .long 0x12fc9d42 /* vavgsh v23,v28,v19 */ + .long 0x110ffd82 /* vavgsw v8,v15,v31 */ + .long 0x10c7cc02 /* vavgub v6,v7,v25 */ + .long 0x13365442 /* vavguh v25,v22,v10 */ + .long 0x1077ec82 /* vavguw v3,v23,v29 */ + .long 0x11c613ca /* vctsxs v14,v2,6 */ + .long 0x1134fb8a /* vctuxs v9,v31,20 */ + .long 0x1303f34a /* vcfsx v24,v30,3 */ + .long 0x123dab0a /* vcfux v17,v21,29 */ + .long 0x125c03c6 /* vcmpbfp v18,v28,v0 */ + .long 0x127a1fc6 /* vcmpbfp. v19,v26,v3 */ + .long 0x120258c6 /* vcmpeqfp v16,v2,v11 */ + .long 0x12ed6cc6 /* vcmpeqfp. v23,v13,v13 */ + .long 0x13335006 /* vcmpequb v25,v19,v10 */ + .long 0x124b1406 /* vcmpequb. v18,v11,v2 */ + .long 0x11393846 /* vcmpequh v9,v25,v7 */ + .long 0x11d8ac46 /* vcmpequh. v14,v24,v21 */ + .long 0x130c2886 /* vcmpequw v24,v12,v5 */ + .long 0x12700c86 /* vcmpequw. v19,v16,v1 */ + .long 0x12f181c6 /* vcmpgefp v23,v17,v16 */ + .long 0x127d8dc6 /* vcmpgefp. v19,v29,v17 */ + .long 0x121c6ac6 /* vcmpgtfp v16,v28,v13 */ + .long 0x11d83ec6 /* vcmpgtfp. v14,v24,v7 */ + .long 0x12163306 /* vcmpgtsb v16,v22,v6 */ + .long 0x104c7706 /* vcmpgtsb. v2,v12,v14 */ + .long 0x1383eb46 /* vcmpgtsh v28,v3,v29 */ + .long 0x12136f46 /* vcmpgtsh. v16,v19,v13 */ + .long 0x11e02b86 /* vcmpgtsw v15,v0,v5 */ + .long 0x12ad0786 /* vcmpgtsw. v21,v13,v0 */ + .long 0x10aaf206 /* vcmpgtub v5,v10,v30 */ + .long 0x10ed5606 /* vcmpgtub. v7,v13,v10 */ + .long 0x130f8246 /* vcmpgtuh v24,v15,v16 */ + .long 0x1335de46 /* vcmpgtuh. v25,v21,v27 */ + .long 0x123b3286 /* vcmpgtuw v17,v27,v6 */ + .long 0x1115de86 /* vcmpgtuw. v8,v21,v27 */ + .long 0x102e0b4a /* vcfsx v1,v1,14 */ + .long 0x10997bca /* vctsxs v4,v15,25 */ + .long 0x138ebb8a /* vctuxs v28,v23,14 */ + .long 0x10c0330a /* vcfux v6,v6,0 */ + .long 0x1000418a /* vexptefp v0,v8 */ + .long 0x12c0d9ca /* vlogefp v22,v27 */ + .long 0x12f2916e /* vmaddfp v23,v18,v5,v18 */ + .long 0x11addc0a /* vmaxfp v13,v13,v27 */ + .long 0x11177102 /* vmaxsb v8,v23,v14 */ + .long 0x12710142 /* vmaxsh v19,v17,v0 */ + .long 0x1263b182 /* vmaxsw v19,v3,v22 */ + .long 0x12fee002 /* vmaxub v23,v30,v28 */ + .long 0x1134b842 /* vmaxuh v9,v20,v23 */ + .long 0x12b30882 /* vmaxuw v21,v19,v1 */ + .long 0x12cd2da0 /* vmhaddshs v22,v13,v5,v22 */ + .long 0x13e01ca1 /* vmhraddshs v31,v0,v3,v18 */ + .long 0x1055c44a /* vminfp v2,v21,v24 */ + .long 0x12865302 /* vminsb v20,v6,v10 */ + .long 0x125bd342 /* vminsh v18,v27,v26 */ + .long 0x10640b82 /* vminsw v3,v4,v1 */ + .long 0x10e06a02 /* vminub v7,v0,v13 */ + .long 0x100c3242 /* vminuh v0,v12,v6 */ + .long 0x10c30a82 /* vminuw v6,v3,v1 */ + .long 0x107d1ea2 /* vmladduhm v3,v29,v3,v26 */ + .long 0x12a5f80c /* vmrghb v21,v5,v31 */ + .long 0x12b8004c /* vmrghh v21,v24,v0 */ + .long 0x1200b08c /* vmrghw v16,v0,v22 */ + .long 0x1031810c /* vmrglb v1,v17,v16 */ + .long 0x11c8794c /* vmrglh v14,v8,v15 */ + .long 0x13f5298c /* vmrglw v31,v21,v5 */ + .long 0x13094c84 /* vmr v24,v9 */ + .long 0x13094c84 /* vmr v24,v9 */ + .long 0x10187de5 /* vmsummbm v0,v24,v15,v23 */ + .long 0x10243e68 /* vmsumshm v1,v4,v7,v25 */ + .long 0x11286fe9 /* vmsumshs v9,v8,v13,v31 */ + .long 0x12ff67a4 /* vmsumubm v23,v31,v12,v30 */ + .long 0x13a0d566 /* vmsumuhm v29,v0,v26,v21 */ + .long 0x136ec967 /* vmsumuhs v27,v14,v25,v5 */ + .long 0x11597308 /* vmulesb v10,v25,v14 */ + .long 0x10324348 /* vmulesh v1,v18,v8 */ + .long 0x122e4a08 /* vmuleub v17,v14,v9 */ + .long 0x10ba4a48 /* vmuleuh v5,v26,v9 */ + .long 0x12b23108 /* vmulosb v21,v18,v6 */ + .long 0x10854148 /* vmulosh v4,v5,v8 */ + .long 0x10499808 /* vmuloub v2,v9,v19 */ + .long 0x13a52048 /* vmulouh v29,v5,v4 */ + .long 0x110229af /* vnmsubfp v8,v2,v6,v5 */ + .long 0x13e95504 /* vnor v31,v9,v10 */ + .long 0x133ffd04 /* vnot v25,v31 */ + .long 0x133ffd04 /* vnot v25,v31 */ + .long 0x12e71484 /* vor v23,v7,v2 */ + .long 0x101cb66b /* vperm v0,v28,v22,v25 */ + .long 0x12198b0e /* vpkpx v16,v25,v17 */ + .long 0x1190898e /* vpkshss v12,v16,v17 */ + .long 0x1033b90e /* vpkshus v1,v19,v23 */ + .long 0x132769ce /* vpkswss v25,v7,v13 */ + .long 0x1098514e /* vpkswus v4,v24,v10 */ + .long 0x113b600e /* vpkuhum v9,v27,v12 */ + .long 0x12cac88e /* vpkuhus v22,v10,v25 */ + .long 0x13d2004e /* vpkuwum v30,v18,v0 */ + .long 0x10e3b0ce /* vpkuwus v7,v3,v22 */ + .long 0x1300e10a /* vrefp v24,v28 */ + .long 0x12209aca /* vrfim v17,v19 */ + .long 0x1300ca0a /* vrfin v24,v25 */ + .long 0x10602a8a /* vrfip v3,v5 */ + .long 0x1100524a /* vrfiz v8,v10 */ + .long 0x1352f004 /* vrlb v26,v18,v30 */ + .long 0x1211c844 /* vrlh v16,v17,v25 */ + .long 0x12fe4884 /* vrlw v23,v30,v9 */ + .long 0x1040914a /* vrsqrtefp v2,v18 */ + .long 0x128e92aa /* vsel v20,v14,v18,v10 */ + .long 0x13396104 /* vslb v25,v25,v12 */ + .long 0x112961ec /* vsldoi v9,v9,v12,7 */ + .long 0x11c25944 /* vslh v14,v2,v11 */ + .long 0x13c5340c /* vslo v30,v5,v6 */ + .long 0x12de49c4 /* vsl v22,v30,v9 */ + .long 0x135a1984 /* vslw v26,v26,v3 */ + .long 0x1026a20c /* vspltb v1,v20,6 */ + .long 0x1203924c /* vsplth v16,v18,3 */ + .long 0x1333030c /* vspltisb v25,-13 */ + .long 0x12ca034c /* vspltish v22,10 */ + .long 0x11ad038c /* vspltisw v13,13 */ + .long 0x1122928c /* vspltw v9,v18,2 */ + .long 0x11d60304 /* vsrab v14,v22,v0 */ + .long 0x118c9344 /* vsrah v12,v12,v18 */ + .long 0x10426b84 /* vsraw v2,v2,v13 */ + .long 0x10fb2a04 /* vsrb v7,v27,v5 */ + .long 0x10ebea44 /* vsrh v7,v11,v29 */ + .long 0x125efc4c /* vsro v18,v30,v31 */ + .long 0x1049e2c4 /* vsr v2,v9,v28 */ + .long 0x10190284 /* vsrw v0,v25,v0 */ + .long 0x13025580 /* vsubcuw v24,v2,v10 */ + .long 0x12d8a04a /* vsubfp v22,v24,v20 */ + .long 0x11566f00 /* vsubsbs v10,v22,v13 */ + .long 0x1311e740 /* vsubshs v24,v17,v28 */ + .long 0x115a0780 /* vsubsws v10,v26,v0 */ + .long 0x120bc400 /* vsububm v16,v11,v24 */ + .long 0x11750e00 /* vsububs v11,v21,v1 */ + .long 0x10ccc440 /* vsubuhm v6,v12,v24 */ + .long 0x13cb4e40 /* vsubuhs v30,v11,v9 */ + .long 0x12746c80 /* vsubuwm v19,v20,v13 */ + .long 0x12593680 /* vsubuws v18,v25,v6 */ + .long 0x132a9688 /* vsum2sws v25,v10,v18 */ + .long 0x11b0af08 /* vsum4sbs v13,v16,v21 */ + .long 0x12e82648 /* vsum4shs v23,v8,v4 */ + .long 0x138df608 /* vsum4ubs v28,v13,v30 */ + .long 0x12ca4788 /* vsumsws v22,v10,v8 */ + .long 0x1300734e /* vupkhpx v24,v14 */ + .long 0x1040b20e /* vupkhsb v2,v22 */ + .long 0x1200124e /* vupkhsh v16,v2 */ + .long 0x1140d3ce /* vupklpx v10,v26 */ + .long 0x11e0e28e /* vupklsb v15,v28 */ + .long 0x110042ce /* vupklsh v8,v8 */ + .long 0x13201cc4 /* vxor v25,v0,v3 */ diff --git a/gdb/testsuite/gdb.arch/powerpc-altivec2.exp b/gdb/testsuite/gdb.arch/powerpc-altivec2.exp new file mode 100644 index 0000000..5c046be --- /dev/null +++ b/gdb/testsuite/gdb.arch/powerpc-altivec2.exp @@ -0,0 +1,175 @@ +# Copyright 2016 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +# Test PowerPC instructions disassembly. + +standard_testfile .s +set objfile [standard_output_file ${testfile}.o] + +if {![istarget "powerpc*-*-*"]} then { + verbose "Skipping PowerPC instructions disassembly." + return +} + +if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${objfile}" object {debug}] != "" } { + untested "PowerPC instructions disassembly" + return -1 +} + +clean_restart ${objfile} + +# Disassemble the function. + +gdb_test "set disassembler-options altivec" +set test "disass func" +gdb_test_multiple $test $test { + -re "\r\nDump of assembler code for function func:(\r\n.*\r\n)End of assembler dump.\r\n$gdb_prompt $" { + set func $expect_out(1,string) + pass $test + } +} + +proc instr_to_patt {instr} { + # 0x0000000000000018 <+24>: stxvd2x vs43,r4,r5 + return ".*\r\n\[ \t\]*0x\[0-9a-f\]+ <\\+\[0-9a-f\]*>:\[ \t\]*[string map [list { } "\[ \t\]+" . {\.}] $instr]\[ \t\]*\r\n.*" +} + +proc func_check {instr} { + global func + + set test "Found: $instr" + if [regexp -nocase -line [instr_to_patt $instr] $func] { + pass $test + } else { + fail $test + } +} + +func_check "lvepxl v3,0,r28" +func_check "lvepxl v19,r4,r18" +func_check "lvepx v27,0,r19" +func_check "lvepx v1,r25,r18" +func_check "lvexbx v31,0,r27" +func_check "lvexbx v28,r1,r12" +func_check "lvexhx v31,0,r14" +func_check "lvexhx v17,r16,r31" +func_check "lvexwx v22,0,r29" +func_check "lvexwx v23,r25,r5" +func_check "lvsm v3,0,r12" +func_check "lvsm v27,r29,r1" +func_check "lvswxl v7,0,r6" +func_check "lvswxl v7,r16,r8" +func_check "lvswx v14,0,r18" +func_check "lvswx v28,r28,r16" +func_check "lvtlxl v27,0,r12" +func_check "lvtlxl v27,r28,r0" +func_check "lvtlx v23,0,r25" +func_check "lvtlx v1,r25,r14" +func_check "lvtrxl v20,0,r24" +func_check "lvtrxl v22,r29,r24" +func_check "lvtrx v24,0,r8" +func_check "lvtrx v13,r23,r28" +func_check "mvidsplt v12,r28,r12" +func_check "mviwsplt v10,r27,r0" +func_check "stvepxl v27,0,r13" +func_check "stvepxl v2,r2,r31" +func_check "stvepx v3,0,r10" +func_check "stvepx v27,r28,r0" +func_check "stvexbx v13,0,r6" +func_check "stvexbx v13,r25,r3" +func_check "stvexhx v22,0,r1" +func_check "stvexhx v17,r14,r10" +func_check "stvexwx v21,0,r27" +func_check "stvexwx v31,r18,r1" +func_check "stvflxl v26,0,r13" +func_check "stvflxl v22,r13,r21" +func_check "stvflx v5,0,r9" +func_check "stvflx v21,r24,r1" +func_check "stvfrxl v13,0,r10" +func_check "stvfrxl v13,r17,r25" +func_check "stvfrx v17,0,r10" +func_check "stvfrx v8,r12,r31" +func_check "stvswxl v18,0,r29" +func_check "stvswxl v26,r14,r8" +func_check "stvswx v0,0,r15" +func_check "stvswx v13,r23,r7" +func_check "vabsdub v6,v17,v16" +func_check "vabsduh v21,v18,v4" +func_check "vabsduw v25,v20,v9" +func_check "vpermxor v6,v17,v20,v26" +func_check "vaddeuqm v29,v26,v15,v28" +func_check "vaddecuq v15,v8,v7,v24" +func_check "vsubeuqm v2,v6,v21,v1" +func_check "vsubecuq v29,v6,v0,v4" +func_check "vmulouw v14,v9,v3" +func_check "vmuluwm v24,v16,v18" +func_check "vaddudm v10,v17,v17" +func_check "vmaxud v30,v25,v4" +func_check "vrld v10,v6,v28" +func_check "vcmpequd v27,v7,v7" +func_check "vadduqm v22,v16,v25" +func_check "vaddcuq v1,v21,v29" +func_check "vmulosw v20,v11,v19" +func_check "vmaxsd v24,v19,v1" +func_check "vmuleuw v13,v27,v30" +func_check "vminud v9,v24,v17" +func_check "vcmpgtud v10,v18,v28" +func_check "vmulesw v0,v29,v22" +func_check "vminsd v13,v28,v1" +func_check "vsrad v10,v20,v5" +func_check "vcmpgtsd v27,v21,v5" +func_check "bcdadd\. v0,v23,v30,1" +func_check "vpmsumb v25,v24,v26" +func_check "bcdsub\. v8,v4,v4,1" +func_check "vpmsumh v16,v14,v26" +func_check "vpkudum v27,v2,v26" +func_check "vpmsumw v6,v23,v17" +func_check "vpmsumd v20,v6,v25" +func_check "vpkudus v27,v22,v16" +func_check "vsubudm v21,v20,v18" +func_check "vsubuqm v21,v20,v18" +func_check "vcipher v29,v29,v6" +func_check "vcipherlast v2,v13,v20" +func_check "vgbbd v20,v18" +func_check "vsubcuq v19,v8,v25" +func_check "vorc v9,v26,v29" +func_check "vncipher v20,v20,v13" +func_check "vncipherlast v15,v5,v27" +func_check "vbpermq v3,v19,v6" +func_check "vpksdus v30,v4,v28" +func_check "vnand v0,v4,v14" +func_check "vsld v17,v8,v29" +func_check "vsbox v29,v20" +func_check "vpksdss v11,v7,v11" +func_check "vcmpequd\. v3,v19,v16" +func_check "vupkhsw v18,v17" +func_check "vshasigmaw v29,v8,0,13" +func_check "veqv v23,v28,v26" +func_check "vmrgew v29,v0,v2" +func_check "vmrgow v29,v0,v2" +func_check "vshasigmad v27,v19,0,0" +func_check "vsrd v20,v28,v28" +func_check "vupklsw v18,v21" +func_check "vclzb v30,v7" +func_check "vpopcntb v29,v21" +func_check "vclzh v25,v21" +func_check "vpopcnth v16,v30" +func_check "vclzw v28,v3" +func_check "vpopcntw v10,v9" +func_check "vclzd v22,v9" +func_check "vpopcntd v15,v30" +func_check "vcmpgtud\. v2,v31,v6" +func_check "vcmpgtsd\. v20,v15,v2" diff --git a/gdb/testsuite/gdb.arch/powerpc-altivec2.s b/gdb/testsuite/gdb.arch/powerpc-altivec2.s new file mode 100644 index 0000000..67e068c --- /dev/null +++ b/gdb/testsuite/gdb.arch/powerpc-altivec2.s @@ -0,0 +1,135 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2016 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + + .text + .globl func +func: + .long 0x7c60e20e /* lvepxl v3,0,r28 */ + .long 0x7e64920e /* lvepxl v19,r4,r18 */ + .long 0x7f609a4e /* lvepx v27,0,r19 */ + .long 0x7c39924e /* lvepx v1,r25,r18 */ + .long 0x7fe0da0a /* lvexbx v31,0,r27 */ + .long 0x7f81620a /* lvexbx v28,r1,r12 */ + .long 0x7fe0724a /* lvexhx v31,0,r14 */ + .long 0x7e30fa4a /* lvexhx v17,r16,r31 */ + .long 0x7ec0ea8a /* lvexwx v22,0,r29 */ + .long 0x7ef92a8a /* lvexwx v23,r25,r5 */ + .long 0x7c60660a /* lvsm v3,0,r12 */ + .long 0x7f7d0e0a /* lvsm v27,r29,r1 */ + .long 0x7ce036ca /* lvswxl v7,0,r6 */ + .long 0x7cf046ca /* lvswxl v7,r16,r8 */ + .long 0x7dc094ca /* lvswx v14,0,r18 */ + .long 0x7f9c84ca /* lvswx v28,r28,r16 */ + .long 0x7f60668a /* lvtlxl v27,0,r12 */ + .long 0x7f7c068a /* lvtlxl v27,r28,r0 */ + .long 0x7ee0cc8a /* lvtlx v23,0,r25 */ + .long 0x7c39748a /* lvtlx v1,r25,r14 */ + .long 0x7e80c64a /* lvtrxl v20,0,r24 */ + .long 0x7eddc64a /* lvtrxl v22,r29,r24 */ + .long 0x7f00444a /* lvtrx v24,0,r8 */ + .long 0x7db7e44a /* lvtrx v13,r23,r28 */ + .long 0x7d9c60dc /* mvidsplt v12,r28,r12 */ + .long 0x7d5b005c /* mviwsplt v10,r27,r0 */ + .long 0x7f606e0e /* stvepxl v27,0,r13 */ + .long 0x7c42fe0e /* stvepxl v2,r2,r31 */ + .long 0x7c60564e /* stvepx v3,0,r10 */ + .long 0x7f7c064e /* stvepx v27,r28,r0 */ + .long 0x7da0330a /* stvexbx v13,0,r6 */ + .long 0x7db91b0a /* stvexbx v13,r25,r3 */ + .long 0x7ec00b4a /* stvexhx v22,0,r1 */ + .long 0x7e2e534a /* stvexhx v17,r14,r10 */ + .long 0x7ea0db8a /* stvexwx v21,0,r27 */ + .long 0x7ff20b8a /* stvexwx v31,r18,r1 */ + .long 0x7f406f8a /* stvflxl v26,0,r13 */ + .long 0x7ecdaf8a /* stvflxl v22,r13,r21 */ + .long 0x7ca04d8a /* stvflx v5,0,r9 */ + .long 0x7eb80d8a /* stvflx v21,r24,r1 */ + .long 0x7da0574a /* stvfrxl v13,0,r10 */ + .long 0x7db1cf4a /* stvfrxl v13,r17,r25 */ + .long 0x7e20554a /* stvfrx v17,0,r10 */ + .long 0x7d0cfd4a /* stvfrx v8,r12,r31 */ + .long 0x7e40efca /* stvswxl v18,0,r29 */ + .long 0x7f4e47ca /* stvswxl v26,r14,r8 */ + .long 0x7c007dca /* stvswx v0,0,r15 */ + .long 0x7db73dca /* stvswx v13,r23,r7 */ + .long 0x10d18403 /* vabsdub v6,v17,v16 */ + .long 0x12b22443 /* vabsduh v21,v18,v4 */ + .long 0x13344c83 /* vabsduw v25,v20,v9 */ + .long 0x10d1a6ad /* vpermxor v6,v17,v20,v26 */ + .long 0x13ba7f3c /* vaddeuqm v29,v26,v15,v28 */ + .long 0x11e83e3d /* vaddecuq v15,v8,v7,v24 */ + .long 0x1046a87e /* vsubeuqm v2,v6,v21,v1 */ + .long 0x13a6013f /* vsubecuq v29,v6,v0,v4 */ + .long 0x11c91888 /* vmulouw v14,v9,v3 */ + .long 0x13109089 /* vmuluwm v24,v16,v18 */ + .long 0x115188c0 /* vaddudm v10,v17,v17 */ + .long 0x13d920c2 /* vmaxud v30,v25,v4 */ + .long 0x1146e0c4 /* vrld v10,v6,v28 */ + .long 0x136738c7 /* vcmpequd v27,v7,v7 */ + .long 0x12d0c900 /* vadduqm v22,v16,v25 */ + .long 0x1035e940 /* vaddcuq v1,v21,v29 */ + .long 0x128b9988 /* vmulosw v20,v11,v19 */ + .long 0x131309c2 /* vmaxsd v24,v19,v1 */ + .long 0x11bbf288 /* vmuleuw v13,v27,v30 */ + .long 0x11388ac2 /* vminud v9,v24,v17 */ + .long 0x1152e2c7 /* vcmpgtud v10,v18,v28 */ + .long 0x101db388 /* vmulesw v0,v29,v22 */ + .long 0x11bc0bc2 /* vminsd v13,v28,v1 */ + .long 0x11542bc4 /* vsrad v10,v20,v5 */ + .long 0x13752bc7 /* vcmpgtsd v27,v21,v5 */ + .long 0x1017f601 /* bcdadd. v0,v23,v30,1 */ + .long 0x1338d408 /* vpmsumb v25,v24,v26 */ + .long 0x11042641 /* bcdsub. v8,v4,v4,1 */ + .long 0x120ed448 /* vpmsumh v16,v14,v26 */ + .long 0x1362d44e /* vpkudum v27,v2,v26 */ + .long 0x10d78c88 /* vpmsumw v6,v23,v17 */ + .long 0x1286ccc8 /* vpmsumd v20,v6,v25 */ + .long 0x137684ce /* vpkudus v27,v22,v16 */ + .long 0x12b494c0 /* vsubudm v21,v20,v18 */ + .long 0x12b49500 /* vsubuqm v21,v20,v18 */ + .long 0x13bd3508 /* vcipher v29,v29,v6 */ + .long 0x104da509 /* vcipherlast v2,v13,v20 */ + .long 0x1280950c /* vgbbd v20,v18 */ + .long 0x1268cd40 /* vsubcuq v19,v8,v25 */ + .long 0x113aed44 /* vorc v9,v26,v29 */ + .long 0x12946d48 /* vncipher v20,v20,v13 */ + .long 0x11e5dd49 /* vncipherlast v15,v5,v27 */ + .long 0x1073354c /* vbpermq v3,v19,v6 */ + .long 0x13c4e54e /* vpksdus v30,v4,v28 */ + .long 0x10047584 /* vnand v0,v4,v14 */ + .long 0x1228edc4 /* vsld v17,v8,v29 */ + .long 0x13b405c8 /* vsbox v29,v20 */ + .long 0x11675dce /* vpksdss v11,v7,v11 */ + .long 0x107384c7 /* vcmpequd. v3,v19,v16 */ + .long 0x12408e4e /* vupkhsw v18,v17 */ + .long 0x13a86e82 /* vshasigmaw v29,v8,0,13 */ + .long 0x12fcd684 /* veqv v23,v28,v26 */ + .long 0x13a0178c /* vmrgew v29,v0,v2 */ + .long 0x13a0168c /* vmrgow v29,v0,v2 */ + .long 0x137306c2 /* vshasigmad v27,v19,0,0 */ + .long 0x129ce6c4 /* vsrd v20,v28,v28 */ + .long 0x1240aece /* vupklsw v18,v21 */ + .long 0x13c03f02 /* vclzb v30,v7 */ + .long 0x13a0af03 /* vpopcntb v29,v21 */ + .long 0x1320af42 /* vclzh v25,v21 */ + .long 0x1200f743 /* vpopcnth v16,v30 */ + .long 0x13801f82 /* vclzw v28,v3 */ + .long 0x11404f83 /* vpopcntw v10,v9 */ + .long 0x12c04fc2 /* vclzd v22,v9 */ + .long 0x11e0f7c3 /* vpopcntd v15,v30 */ + .long 0x105f36c7 /* vcmpgtud. v2,v31,v6 */ + .long 0x128f17c7 /* vcmpgtsd. v20,v15,v2 */ diff --git a/gdb/testsuite/gdb.arch/powerpc-altivec3.exp b/gdb/testsuite/gdb.arch/powerpc-altivec3.exp new file mode 100644 index 0000000..d3e90e5 --- /dev/null +++ b/gdb/testsuite/gdb.arch/powerpc-altivec3.exp @@ -0,0 +1,128 @@ +# Copyright 2016 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +# Test PowerPC instructions disassembly. + +standard_testfile .s +set objfile [standard_output_file ${testfile}.o] + +if {![istarget "powerpc*-*-*"]} then { + verbose "Skipping PowerPC instructions disassembly." + return +} + +if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${objfile}" object {debug}] != "" } { + untested "PowerPC instructions disassembly" + return -1 +} + +clean_restart ${objfile} + +# Disassemble the function. + +gdb_test "set disassembler-options altivec" +set test "disass func" +gdb_test_multiple $test $test { + -re "\r\nDump of assembler code for function func:(\r\n.*\r\n)End of assembler dump.\r\n$gdb_prompt $" { + set func $expect_out(1,string) + pass $test + } +} + +proc instr_to_patt {instr} { + # 0x0000000000000018 <+24>: stxvd2x vs43,r4,r5 + return ".*\r\n\[ \t\]*0x\[0-9a-f\]+ <\\+\[0-9a-f\]*>:\[ \t\]*[string map [list { } "\[ \t\]+" . {\.}] $instr]\[ \t\]*\r\n.*" +} + +proc func_check {instr} { + global func + + set test "Found: $instr" + if [regexp -nocase -line [instr_to_patt $instr] $func] { + pass $test + } else { + fail $test + } +} + +func_check "vmul10cuq v11,v30" +func_check "vcmpneb v30,v1,v23" +func_check "vpermr v30,v19,v30,v29" +func_check "vmul10ecuq v20,v20,v17" +func_check "vcmpneh v27,v19,v31" +func_check "vrlwmi v6,v9,v23" +func_check "vcmpnew v22,v26,v1" +func_check "vrldmi v24,v30,v25" +func_check "vcmpnezb v19,v29,v22" +func_check "vcmpnezh v8,v23,v19" +func_check "vrlwnm v27,v24,v11" +func_check "vcmpnezw v21,v13,v10" +func_check "vrldnm v5,v20,v29" +func_check "vmul10uq v30,v19" +func_check "vextractub v24,v21,12" +func_check "vmul10euq v0,v19,v28" +func_check "vextractuh v10,v3,12" +func_check "vextractuw v28,v12,7" +func_check "vextractd v30,v27,1" +func_check "vinsertb v25,v31,4" +func_check "bcdcpsgn\. v21,v14,v30" +func_check "vinserth v22,v18,5" +func_check "vinsertw v29,v22,1" +func_check "vinsertd v29,v13,7" +func_check "vcmpneb\. v22,v25,v8" +func_check "vcmpneh\. v16,v15,v21" +func_check "bcdus\. v22,v21,v31" +func_check "vcmpnew\. v1,v12,v12" +func_check "bcds\. v5,v3,v8,1" +func_check "bcdtrunc\. v27,v22,v1,0" +func_check "vcmpnezb\. v2,v26,v0" +func_check "bcdutrunc\. v26,v14,v7" +func_check "vcmpnezh\. v16,v5,v12" +func_check "bcdctsq\. v24,v5" +func_check "bcdcfsq\. v7,v0,0" +func_check "bcdctz\. v30,v12,1" +func_check "bcdctn\. v17,v23" +func_check "bcdcfz\. v4,v15,1" +func_check "bcdcfn\. v29,v5,1" +func_check "bcdsetsgn\. v27,v12,0" +func_check "vcmpnezw\. v14,v28,v25" +func_check "bcdsr\. v2,v2,v6,1" +func_check "vbpermd v25,v0,v5" +func_check "vclzlsbb r28,v25" +func_check "vctzlsbb r2,v24" +func_check "vnegw v21,v11" +func_check "vnegd v17,v27" +func_check "vprtybw v31,v23" +func_check "vprtybd v21,v23" +func_check "vprtybq v21,v18" +func_check "vextsb2w v30,v4" +func_check "vextsh2w v3,v26" +func_check "vextsb2d v11,v17" +func_check "vextsh2d v5,v10" +func_check "vextsw2d v13,v25" +func_check "vctzb v25,v2" +func_check "vctzh v0,v3" +func_check "vctzw v22,v6" +func_check "vctzd v26,v24" +func_check "vextublx r6,r31,v2" +func_check "vextuhlx r13,r0,v18" +func_check "vextuwlx r14,r30,v31" +func_check "vsrv v15,v12,v14" +func_check "vextubrx r20,r10,v30" +func_check "vslv v21,v21,v2" +func_check "vextuhrx r15,r9,v1" +func_check "vextuwrx r21,r17,v16" +func_check "vmsumudm v20,v21,v22,v23" diff --git a/gdb/testsuite/gdb.arch/powerpc-altivec3.s b/gdb/testsuite/gdb.arch/powerpc-altivec3.s new file mode 100644 index 0000000..bdc9ddc --- /dev/null +++ b/gdb/testsuite/gdb.arch/powerpc-altivec3.s @@ -0,0 +1,88 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2016 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + + .text + .globl func +func: + .long 0x117e0001 /* vmul10cuq v11,v30 */ + .long 0x13c1b807 /* vcmpneb v30,v1,v23 */ + .long 0x13d3f77b /* vpermr v30,v19,v30,v29 */ + .long 0x12948841 /* vmul10ecuq v20,v20,v17 */ + .long 0x1373f847 /* vcmpneh v27,v19,v31 */ + .long 0x10c9b885 /* vrlwmi v6,v9,v23 */ + .long 0x12da0887 /* vcmpnew v22,v26,v1 */ + .long 0x131ec8c5 /* vrldmi v24,v30,v25 */ + .long 0x127db107 /* vcmpnezb v19,v29,v22 */ + .long 0x11179947 /* vcmpnezh v8,v23,v19 */ + .long 0x13785985 /* vrlwnm v27,v24,v11 */ + .long 0x12ad5187 /* vcmpnezw v21,v13,v10 */ + .long 0x10b4e9c5 /* vrldnm v5,v20,v29 */ + .long 0x13d30201 /* vmul10uq v30,v19 */ + .long 0x130caa0d /* vextractub v24,v21,12 */ + .long 0x1013e241 /* vmul10euq v0,v19,v28 */ + .long 0x114c1a4d /* vextractuh v10,v3,12 */ + .long 0x1387628d /* vextractuw v28,v12,7 */ + .long 0x13c1dacd /* vextractd v30,v27,1 */ + .long 0x1324fb0d /* vinsertb v25,v31,4 */ + .long 0x12aef341 /* bcdcpsgn. v21,v14,v30 */ + .long 0x12c5934d /* vinserth v22,v18,5 */ + .long 0x13a1b38d /* vinsertw v29,v22,1 */ + .long 0x13a76bcd /* vinsertd v29,v13,7 */ + .long 0x12d94407 /* vcmpneb. v22,v25,v8 */ + .long 0x120fac47 /* vcmpneh. v16,v15,v21 */ + .long 0x12d5fc81 /* bcdus. v22,v21,v31 */ + .long 0x102c6487 /* vcmpnew. v1,v12,v12 */ + .long 0x10a346c1 /* bcds. v5,v3,v8,1 */ + .long 0x13760d01 /* bcdtrunc. v27,v22,v1,0 */ + .long 0x105a0507 /* vcmpnezb. v2,v26,v0 */ + .long 0x134e3d41 /* bcdutrunc. v26,v14,v7 */ + .long 0x12056547 /* vcmpnezh. v16,v5,v12 */ + .long 0x13002d81 /* bcdctsq. v24,v5 */ + .long 0x10e20581 /* bcdcfsq. v7,v0,0 */ + .long 0x13c46781 /* bcdctz. v30,v12,1 */ + .long 0x1225bd81 /* bcdctn. v17,v23 */ + .long 0x10867f81 /* bcdcfz. v4,v15,1 */ + .long 0x13a72f81 /* bcdcfn. v29,v5,1 */ + .long 0x137f6581 /* bcdsetsgn. v27,v12,0 */ + .long 0x11dccd87 /* vcmpnezw. v14,v28,v25 */ + .long 0x104237c1 /* bcdsr. v2,v2,v6,1 */ + .long 0x13202dcc /* vbpermd v25,v0,v5 */ + .long 0x1380ce02 /* vclzlsbb r28,v25 */ + .long 0x1041c602 /* vctzlsbb r2,v24 */ + .long 0x12a65e02 /* vnegw v21,v11 */ + .long 0x1227de02 /* vnegd v17,v27 */ + .long 0x13e8be02 /* vprtybw v31,v23 */ + .long 0x12a9be02 /* vprtybd v21,v23 */ + .long 0x12aa9602 /* vprtybq v21,v18 */ + .long 0x13d02602 /* vextsb2w v30,v4 */ + .long 0x1071d602 /* vextsh2w v3,v26 */ + .long 0x11788e02 /* vextsb2d v11,v17 */ + .long 0x10b95602 /* vextsh2d v5,v10 */ + .long 0x11bace02 /* vextsw2d v13,v25 */ + .long 0x133c1602 /* vctzb v25,v2 */ + .long 0x101d1e02 /* vctzh v0,v3 */ + .long 0x12de3602 /* vctzw v22,v6 */ + .long 0x135fc602 /* vctzd v26,v24 */ + .long 0x10df160d /* vextublx r6,r31,v2 */ + .long 0x11a0964d /* vextuhlx r13,r0,v18 */ + .long 0x11defe8d /* vextuwlx r14,r30,v31 */ + .long 0x11ec7704 /* vsrv v15,v12,v14 */ + .long 0x128af70d /* vextubrx r20,r10,v30 */ + .long 0x12b51744 /* vslv v21,v21,v2 */ + .long 0x11e90f4d /* vextuhrx r15,r9,v1 */ + .long 0x12b1878d /* vextuwrx r21,r17,v16 */ + .long 0x1295b5e3 /* vmsumudm v20,v21,v22,v23 */ diff --git a/gdb/testsuite/gdb.arch/powerpc-power.exp b/gdb/testsuite/gdb.arch/powerpc-power.exp deleted file mode 100644 index c1c56c5..0000000 --- a/gdb/testsuite/gdb.arch/powerpc-power.exp +++ /dev/null @@ -1,1429 +0,0 @@ -# Copyright 2014-2017 Free Software Foundation, Inc. - -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -# Test PowerPC instructions disassembly. - -standard_testfile .s -set objfile [standard_output_file ${testfile}.o] - -if {![istarget "powerpc*-*-*"]} then { - verbose "Skipping PowerPC instructions disassembly." - return -} - -if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${objfile}" object {debug}] != "" } { - untested "PowerPC instructions disassembly" - return -1 -} - -clean_restart ${objfile} - -# Disassemble the function. - -set test "disass func" -gdb_test_multiple $test $test { - -re "\r\nDump of assembler code for function func:(\r\n.*\r\n)End of assembler dump.\r\n$gdb_prompt $" { - set func $expect_out(1,string) - pass $test - } -} - -proc instr_to_patt {offset instr} { - # 0x0000000000000018 <+24>: stxvd2x vs43,r4,r5 - return ".*\r\n\[ \t\]*0x\[0-9a-f\]+ <\\$offset>:\[ \t\]*[string map [list { } "\[ \t\]+" . {\.}] $instr]\[ \t\]*\r\n.*" -} - -proc func_check {offset instr} { - global func - - set test "found $offset: $instr" - if [regexp -nocase -line [instr_to_patt $offset $instr] $func] { - pass $test - } else { - fail $test - } -} - - -## power7.d -func_check +0 "lxvd2x vs3,r4,r5" -func_check +4 "lxvd2x vs43,r4,r5" -func_check +8 "stxvd2x vs3,r4,r5" -func_check +12 "stxvd2x vs43,r4,r5" -func_check +16 "xxmrghd vs3,vs4,vs5" -func_check +20 "xxmrghd vs43,vs44,vs45" -func_check +24 "xxmrgld vs3,vs4,vs5" -func_check +28 "xxmrgld vs43,vs44,vs45" -func_check +32 "xxmrghd vs3,vs4,vs5" -func_check +36 "xxmrghd vs43,vs44,vs45" -func_check +40 "xxmrgld vs3,vs4,vs5" -func_check +44 "xxmrgld vs43,vs44,vs45" -func_check +48 "xxpermdi vs3,vs4,vs5,1" -func_check +52 "xxpermdi vs43,vs44,vs45,1" -func_check +56 "xxpermdi vs3,vs4,vs5,2" -func_check +60 "xxpermdi vs43,vs44,vs45,2" -func_check +64 "xvmovdp vs3,vs4" -func_check +68 "xvmovdp vs43,vs44" -func_check +72 "xvmovdp vs3,vs4" -func_check +76 "xvmovdp vs43,vs44" -func_check +80 "xvcpsgndp vs3,vs4,vs5" -func_check +84 "xvcpsgndp vs43,vs44,vs45" -func_check +88 "doze" -func_check +92 "nap" -func_check +96 "sleep" -func_check +100 "rvwinkle" -func_check +104 "prtyw r3,r4" -func_check +108 "prtyd r13,r14" -func_check +112 "mfcfar r10" -func_check +116 "mtcfar r11" -func_check +120 "cmpb r3,r4,r5" -func_check +124 "lwzcix r10,r11,r12" -func_check +128 "dadd f16,f17,f18" -func_check +132 "daddq f20,f22,f24" -func_check +136 "dss 3" -func_check +140 "dssall" -func_check +144 "dst r5,r4,1" -func_check +148 "dstt r8,r7,0" -func_check +152 "dstst r5,r6,3" -func_check +156 "dststt r4,r5,2" -func_check +160 "divwe r10,r11,r12" -func_check +164 "divwe\. r11,r12,r13" -func_check +168 "divweo r12,r13,r14" -func_check +172 "divweo\. r13,r14,r15" -func_check +176 "divweu r10,r11,r12" -func_check +180 "divweu\. r11,r12,r13" -func_check +184 "divweuo r12,r13,r14" -func_check +188 "divweuo\. r13,r14,r15" -func_check +192 "bpermd r7,r17,r27" -func_check +196 "popcntw r10,r20" -func_check +200 "popcntd r10,r20" -func_check +204 "ldbrx r20,r21,r22" -func_check +208 "stdbrx r20,r21,r22" -func_check +212 "lfiwzx f10,0,r10" -func_check +216 "lfiwzx f10,r9,r10" -func_check +220 "fcfids f4,f5" -func_check +224 "fcfids\. f4,f5" -func_check +228 "fcfidus f4,f5" -func_check +232 "fcfidus\. f4,f5" -func_check +236 "fctiwu f4,f5" -func_check +240 "fctiwu\. f4,f5" -func_check +244 "fctiwuz f4,f5" -func_check +248 "fctiwuz\. f4,f5" -func_check +252 "fctidu f4,f5" -func_check +256 "fctidu\. f4,f5" -func_check +260 "fctiduz f4,f5" -func_check +264 "fctiduz\. f4,f5" -func_check +268 "fcfidu f4,f5" -func_check +272 "fcfidu\. f4,f5" -func_check +276 "ftdiv cr0,f10,f11" -func_check +280 "ftdiv cr7,f10,f11" -func_check +284 "ftsqrt cr0,f10" -func_check +288 "ftsqrt cr7,f10" -func_check +292 "dcbtt r8,r9" -func_check +296 "dcbtstt r8,r9" -func_check +300 "dcffix f10,f12" -func_check +304 "dcffix\. f20,f22" -func_check +308 "fre f14,f15" -func_check +312 "fre\. f14,f15" -func_check +316 "fres f14,f15" -func_check +320 "fres\. f14,f15" -func_check +324 "frsqrte f14,f15" -func_check +328 "frsqrte\. f14,f15" -func_check +332 "frsqrtes f14,f15" -func_check +336 "frsqrtes\. f14,f15" -func_check +340 "isel r2,r3,r4,28" -func_check +344 "yield" -func_check +348 "yield" -func_check +352 "ori r2,r2,0" -func_check +356 "nop" -func_check +360 "nop" -func_check +364 "ori r2,r2,0" -func_check +368 "mdoio" -func_check +372 "mdoio" -func_check +376 "mdoom" -func_check +380 "mdoom" -func_check +384 "mfppr r10" -func_check +388 "mfppr32 r11" -func_check +392 "mtppr r12" -func_check +396 "mtppr32 r13" -func_check +400 "tlbie r10,r11" - -## altivec.d -func_check +404 "dss 3" -func_check +408 "dssall" -func_check +412 "dst r5,r4,1" -func_check +416 "dstt r8,r7,0" -func_check +420 "dstst r5,r6,3" -func_check +424 "dststt r4,r5,2" -func_check +428 "lvebx v30,r22,r24" -func_check +432 "lvebx v21,0,r24" -func_check +436 "lvehx v10,r16,r2" -func_check +440 "lvehx v20,0,r23" -func_check +444 "lvewx v17,r4,r18" -func_check +448 "lvewx v23,0,r8" -func_check +452 "lvsl v6,0,r25" -func_check +456 "lvsl v2,0,r6" -func_check +460 "lvsr v22,r16,r12" -func_check +464 "lvsr v0,0,r29" -func_check +468 "lvxl v15,r5,r13" -func_check +472 "lvxl v19,0,r23" -func_check +476 "lvx v22,r1,r2" -func_check +480 "lvx v18,0,r17" -func_check +484 "mfvrsave r31" -func_check +488 "mfvscr v24" -func_check +492 "mtvrsave r10" -func_check +496 "mtvscr v25" -func_check +500 "stvebx v18,r27,r10" -func_check +504 "stvebx v16,0,r6" -func_check +508 "stvehx v17,r13,r16" -func_check +512 "stvehx v23,0,r20" -func_check +516 "stvewx v11,r19,r31" -func_check +520 "stvewx v31,0,r1" -func_check +524 "stvxl v26,r21,r17" -func_check +528 "stvxl v13,0,r22" -func_check +532 "stvx v11,r31,r31" -func_check +536 "stvx v30,0,r16" -func_check +540 "vaddcuw v24,v7,v28" -func_check +544 "vaddfp v3,v30,v11" -func_check +548 "vaddsbs v8,v28,v9" -func_check +552 "vaddshs v7,v5,v4" -func_check +556 "vaddsws v22,v26,v27" -func_check +560 "vaddubm v16,v14,v28" -func_check +564 "vaddubs v6,v1,v25" -func_check +568 "vadduhm v2,v4,v6" -func_check +572 "vadduhs v26,v21,v8" -func_check +576 "vadduwm v29,v31,v1" -func_check +580 "vadduws v23,v13,v4" -func_check +584 "vandc v30,v16,v9" -func_check +588 "vand v3,v13,v27" -func_check +592 "vavgsb v4,v6,v17" -func_check +596 "vavgsh v23,v28,v19" -func_check +600 "vavgsw v8,v15,v31" -func_check +604 "vavgub v6,v7,v25" -func_check +608 "vavguh v25,v22,v10" -func_check +612 "vavguw v3,v23,v29" -func_check +616 "vctsxs v14,v2,6" -func_check +620 "vctuxs v9,v31,20" -func_check +624 "vcfsx v24,v30,3" -func_check +628 "vcfux v17,v21,29" -func_check +632 "vcmpbfp v18,v28,v0" -func_check +636 "vcmpbfp\. v19,v26,v3" -func_check +640 "vcmpeqfp v16,v2,v11" -func_check +644 "vcmpeqfp\. v23,v13,v13" -func_check +648 "vcmpequb v25,v19,v10" -func_check +652 "vcmpequb\. v18,v11,v2" -func_check +656 "vcmpequh v9,v25,v7" -func_check +660 "vcmpequh\. v14,v24,v21" -func_check +664 "vcmpequw v24,v12,v5" -func_check +668 "vcmpequw\. v19,v16,v1" -func_check +672 "vcmpgefp v23,v17,v16" -func_check +676 "vcmpgefp\. v19,v29,v17" -func_check +680 "vcmpgtfp v16,v28,v13" -func_check +684 "vcmpgtfp\. v14,v24,v7" -func_check +688 "vcmpgtsb v16,v22,v6" -func_check +692 "vcmpgtsb\. v2,v12,v14" -func_check +696 "vcmpgtsh v28,v3,v29" -func_check +700 "vcmpgtsh\. v16,v19,v13" -func_check +704 "vcmpgtsw v15,v0,v5" -func_check +708 "vcmpgtsw\. v21,v13,v0" -func_check +712 "vcmpgtub v5,v10,v30" -func_check +716 "vcmpgtub\. v7,v13,v10" -func_check +720 "vcmpgtuh v24,v15,v16" -func_check +724 "vcmpgtuh\. v25,v21,v27" -func_check +728 "vcmpgtuw v17,v27,v6" -func_check +732 "vcmpgtuw\. v8,v21,v27" -func_check +736 "vcfsx v1,v1,14" -func_check +740 "vctsxs v4,v15,25" -func_check +744 "vctuxs v28,v23,14" -func_check +748 "vcfux v6,v6,0" -func_check +752 "vexptefp v0,v8" -func_check +756 "vlogefp v22,v27" -func_check +760 "vmaddfp v23,v18,v5,v18" -func_check +764 "vmaxfp v13,v13,v27" -func_check +768 "vmaxsb v8,v23,v14" -func_check +772 "vmaxsh v19,v17,v0" -func_check +776 "vmaxsw v19,v3,v22" -func_check +780 "vmaxub v23,v30,v28" -func_check +784 "vmaxuh v9,v20,v23" -func_check +788 "vmaxuw v21,v19,v1" -func_check +792 "vmhaddshs v22,v13,v5,v22" -func_check +796 "vmhraddshs v31,v0,v3,v18" -func_check +800 "vminfp v2,v21,v24" -func_check +804 "vminsb v20,v6,v10" -func_check +808 "vminsh v18,v27,v26" -func_check +812 "vminsw v3,v4,v1" -func_check +816 "vminub v7,v0,v13" -func_check +820 "vminuh v0,v12,v6" -func_check +824 "vminuw v6,v3,v1" -func_check +828 "vmladduhm v3,v29,v3,v26" -func_check +832 "vmrghb v21,v5,v31" -func_check +836 "vmrghh v21,v24,v0" -func_check +840 "vmrghw v16,v0,v22" -func_check +844 "vmrglb v1,v17,v16" -func_check +848 "vmrglh v14,v8,v15" -func_check +852 "vmrglw v31,v21,v5" -func_check +856 "vmr v24,v9" -func_check +860 "vmr v24,v9" -func_check +864 "vmsummbm v0,v24,v15,v23" -func_check +868 "vmsumshm v1,v4,v7,v25" -func_check +872 "vmsumshs v9,v8,v13,v31" -func_check +876 "vmsumubm v23,v31,v12,v30" -func_check +880 "vmsumuhm v29,v0,v26,v21" -func_check +884 "vmsumuhs v27,v14,v25,v5" -func_check +888 "vmulesb v10,v25,v14" -func_check +892 "vmulesh v1,v18,v8" -func_check +896 "vmuleub v17,v14,v9" -func_check +900 "vmuleuh v5,v26,v9" -func_check +904 "vmulosb v21,v18,v6" -func_check +908 "vmulosh v4,v5,v8" -func_check +912 "vmuloub v2,v9,v19" -func_check +916 "vmulouh v29,v5,v4" -func_check +920 "vnmsubfp v8,v2,v6,v5" -func_check +924 "vnor v31,v9,v10" -func_check +928 "vnot v25,v31" -func_check +932 "vnot v25,v31" -func_check +936 "vor v23,v7,v2" -func_check +940 "vperm v0,v28,v22,v25" -func_check +944 "vpkpx v16,v25,v17" -func_check +948 "vpkshss v12,v16,v17" -func_check +952 "vpkshus v1,v19,v23" -func_check +956 "vpkswss v25,v7,v13" -func_check +960 "vpkswus v4,v24,v10" -func_check +964 "vpkuhum v9,v27,v12" -func_check +968 "vpkuhus v22,v10,v25" -func_check +972 "vpkuwum v30,v18,v0" -func_check +976 "vpkuwus v7,v3,v22" -func_check +980 "vrefp v24,v28" -func_check +984 "vrfim v17,v19" -func_check +988 "vrfin v24,v25" -func_check +992 "vrfip v3,v5" -func_check +996 "vrfiz v8,v10" -func_check +1000 "vrlb v26,v18,v30" -func_check +1004 "vrlh v16,v17,v25" -func_check +1008 "vrlw v23,v30,v9" -func_check +1012 "vrsqrtefp v2,v18" -func_check +1016 "vsel v20,v14,v18,v10" -func_check +1020 "vslb v25,v25,v12" -func_check +1024 "vsldoi v9,v9,v12,7" -func_check +1028 "vslh v14,v2,v11" -func_check +1032 "vslo v30,v5,v6" -func_check +1036 "vsl v22,v30,v9" -func_check +1040 "vslw v26,v26,v3" -func_check +1044 "vspltb v1,v20,6" -func_check +1048 "vsplth v16,v18,3" -func_check +1052 "vspltisb v25,-13" -func_check +1056 "vspltish v22,10" -func_check +1060 "vspltisw v13,13" -func_check +1064 "vspltw v9,v18,2" -func_check +1068 "vsrab v14,v22,v0" -func_check +1072 "vsrah v12,v12,v18" -func_check +1076 "vsraw v2,v2,v13" -func_check +1080 "vsrb v7,v27,v5" -func_check +1084 "vsrh v7,v11,v29" -func_check +1088 "vsro v18,v30,v31" -func_check +1092 "vsr v2,v9,v28" -func_check +1096 "vsrw v0,v25,v0" -func_check +1100 "vsubcuw v24,v2,v10" -func_check +1104 "vsubfp v22,v24,v20" -func_check +1108 "vsubsbs v10,v22,v13" -func_check +1112 "vsubshs v24,v17,v28" -func_check +1116 "vsubsws v10,v26,v0" -func_check +1120 "vsububm v16,v11,v24" -func_check +1124 "vsububs v11,v21,v1" -func_check +1128 "vsubuhm v6,v12,v24" -func_check +1132 "vsubuhs v30,v11,v9" -func_check +1136 "vsubuwm v19,v20,v13" -func_check +1140 "vsubuws v18,v25,v6" -func_check +1144 "vsum2sws v25,v10,v18" -func_check +1148 "vsum4sbs v13,v16,v21" -func_check +1152 "vsum4shs v23,v8,v4" -func_check +1156 "vsum4ubs v28,v13,v30" -func_check +1160 "vsumsws v22,v10,v8" -func_check +1164 "vupkhpx v24,v14" -func_check +1168 "vupkhsb v2,v22" -func_check +1172 "vupkhsh v16,v2" -func_check +1176 "vupklpx v10,v26" -func_check +1180 "vupklsb v15,v28" -func_check +1184 "vupklsh v8,v8" -func_check +1188 "vxor v25,v0,v3" - -## vsd.d -func_check +1192 "lxsdx vs40,r10,r20" -func_check +1196 "lxvd2x vs40,r10,r20" -func_check +1200 "lxvdsx vs40,r10,r20" -func_check +1204 "lxvw4x vs40,r10,r20" -func_check +1208 "stxsdx vs40,r10,r20" -func_check +1212 "stxvd2x vs40,r10,r20" -func_check +1216 "stxvw4x vs40,r10,r20" -func_check +1220 "xsabsdp vs40,vs60" -func_check +1224 "xsadddp vs40,vs50,vs60" -func_check +1228 "xscmpodp cr1,vs50,vs60" -func_check +1232 "xscmpudp cr1,vs50,vs60" -func_check +1236 "xscpsgndp vs40,vs50,vs60" -func_check +1240 "xscvdpsp vs40,vs60" -func_check +1244 "xscvdpsxds vs40,vs60" -func_check +1248 "xscvdpsxws vs40,vs60" -func_check +1252 "xscvdpuxds vs40,vs60" -func_check +1256 "xscvdpuxws vs40,vs60" -func_check +1260 "xscvspdp vs40,vs60" -func_check +1264 "xscvsxddp vs40,vs60" -func_check +1268 "xscvuxddp vs40,vs60" -func_check +1272 "xsdivdp vs40,vs50,vs60" -func_check +1276 "xsmaddadp vs40,vs50,vs60" -func_check +1280 "xsmaddmdp vs40,vs50,vs60" -func_check +1284 "xsmaxdp vs40,vs50,vs60" -func_check +1288 "xsmindp vs40,vs50,vs60" -func_check +1292 "xsmsubadp vs40,vs50,vs60" -func_check +1296 "xsmsubmdp vs40,vs50,vs60" -func_check +1300 "xsmuldp vs40,vs50,vs60" -func_check +1304 "xsnabsdp vs40,vs60" -func_check +1308 "xsnegdp vs40,vs60" -func_check +1312 "xsnmaddadp vs40,vs50,vs60" -func_check +1316 "xsnmaddmdp vs40,vs50,vs60" -func_check +1320 "xsnmsubadp vs40,vs50,vs60" -func_check +1324 "xsnmsubmdp vs40,vs50,vs60" -func_check +1328 "xsrdpi vs40,vs60" -func_check +1332 "xsrdpic vs40,vs60" -func_check +1336 "xsrdpim vs40,vs60" -func_check +1340 "xsrdpip vs40,vs60" -func_check +1344 "xsrdpiz vs40,vs60" -func_check +1348 "xsredp vs40,vs60" -func_check +1352 "xsrsqrtedp vs40,vs60" -func_check +1356 "xssqrtdp vs40,vs60" -func_check +1360 "xssubdp vs40,vs50,vs60" -func_check +1364 "xstdivdp cr1,vs50,vs60" -func_check +1368 "xstsqrtdp cr1,vs60" -func_check +1372 "xvabsdp vs40,vs60" -func_check +1376 "xvabssp vs40,vs60" -func_check +1380 "xvadddp vs40,vs50,vs60" -func_check +1384 "xvaddsp vs40,vs50,vs60" -func_check +1388 "xvcmpeqdp vs40,vs50,vs60" -func_check +1392 "xvcmpeqdp\. vs40,vs50,vs60" -func_check +1396 "xvcmpeqsp vs40,vs50,vs60" -func_check +1400 "xvcmpeqsp\. vs40,vs50,vs60" -func_check +1404 "xvcmpgedp vs40,vs50,vs60" -func_check +1408 "xvcmpgedp\. vs40,vs50,vs60" -func_check +1412 "xvcmpgesp vs40,vs50,vs60" -func_check +1416 "xvcmpgesp\. vs40,vs50,vs60" -func_check +1420 "xvcmpgtdp vs40,vs50,vs60" -func_check +1424 "xvcmpgtdp\. vs40,vs50,vs60" -func_check +1428 "xvcmpgtsp vs40,vs50,vs60" -func_check +1432 "xvcmpgtsp\. vs40,vs50,vs60" -func_check +1436 "xvcpsgndp vs40,vs50,vs60" -func_check +1440 "xvmovdp vs40,vs60" -func_check +1444 "xvmovdp vs40,vs60" -func_check +1448 "xvcpsgnsp vs40,vs50,vs60" -func_check +1452 "xvmovsp vs40,vs60" -func_check +1456 "xvmovsp vs40,vs60" -func_check +1460 "xvcvdpsp vs40,vs60" -func_check +1464 "xvcvdpsxds vs40,vs60" -func_check +1468 "xvcvdpsxws vs40,vs60" -func_check +1472 "xvcvdpuxds vs40,vs60" -func_check +1476 "xvcvdpuxws vs40,vs60" -func_check +1480 "xvcvspdp vs40,vs60" -func_check +1484 "xvcvspsxds vs40,vs60" -func_check +1488 "xvcvspsxws vs40,vs60" -func_check +1492 "xvcvspuxds vs40,vs60" -func_check +1496 "xvcvspuxws vs40,vs60" -func_check +1500 "xvcvsxddp vs40,vs60" -func_check +1504 "xvcvsxdsp vs40,vs60" -func_check +1508 "xvcvsxwdp vs40,vs60" -func_check +1512 "xvcvsxwsp vs40,vs60" -func_check +1516 "xvcvuxddp vs40,vs60" -func_check +1520 "xvcvuxdsp vs40,vs60" -func_check +1524 "xvcvuxwdp vs40,vs60" -func_check +1528 "xvcvuxwsp vs40,vs60" -func_check +1532 "xvdivdp vs40,vs50,vs60" -func_check +1536 "xvdivsp vs40,vs50,vs60" -func_check +1540 "xvmaddadp vs40,vs50,vs60" -func_check +1544 "xvmaddmdp vs40,vs50,vs60" -func_check +1548 "xvmaddasp vs40,vs50,vs60" -func_check +1552 "xvmaddmsp vs40,vs50,vs60" -func_check +1556 "xvmaxdp vs40,vs50,vs60" -func_check +1560 "xvmaxsp vs40,vs50,vs60" -func_check +1564 "xvmindp vs40,vs50,vs60" -func_check +1568 "xvminsp vs40,vs50,vs60" -func_check +1572 "xvmsubadp vs40,vs50,vs60" -func_check +1576 "xvmsubmdp vs40,vs50,vs60" -func_check +1580 "xvmsubasp vs40,vs50,vs60" -func_check +1584 "xvmsubmsp vs40,vs50,vs60" -func_check +1588 "xvmuldp vs40,vs50,vs60" -func_check +1592 "xvmulsp vs40,vs50,vs60" -func_check +1596 "xvnabsdp vs40,vs60" -func_check +1600 "xvnabssp vs40,vs60" -func_check +1604 "xvnegdp vs40,vs60" -func_check +1608 "xvnegsp vs40,vs60" -func_check +1612 "xvnmaddadp vs40,vs50,vs60" -func_check +1616 "xvnmaddmdp vs40,vs50,vs60" -func_check +1620 "xvnmaddasp vs40,vs50,vs60" -func_check +1624 "xvnmaddmsp vs40,vs50,vs60" -func_check +1628 "xvnmsubadp vs40,vs50,vs60" -func_check +1632 "xvnmsubmdp vs40,vs50,vs60" -func_check +1636 "xvnmsubasp vs40,vs50,vs60" -func_check +1640 "xvnmsubmsp vs40,vs50,vs60" -func_check +1644 "xvrdpi vs40,vs60" -func_check +1648 "xvrdpic vs40,vs60" -func_check +1652 "xvrdpim vs40,vs60" -func_check +1656 "xvrdpip vs40,vs60" -func_check +1660 "xvrdpiz vs40,vs60" -func_check +1664 "xvredp vs40,vs60" -func_check +1668 "xvresp vs40,vs60" -func_check +1672 "xvrspi vs40,vs60" -func_check +1676 "xvrspic vs40,vs60" -func_check +1680 "xvrspim vs40,vs60" -func_check +1684 "xvrspip vs40,vs60" -func_check +1688 "xvrspiz vs40,vs60" -func_check +1692 "xvrsqrtedp vs40,vs60" -func_check +1696 "xvrsqrtesp vs40,vs60" -func_check +1700 "xvsqrtdp vs40,vs60" -func_check +1704 "xvsqrtsp vs40,vs60" -func_check +1708 "xvsubdp vs40,vs50,vs60" -func_check +1712 "xvsubsp vs40,vs50,vs60" -func_check +1716 "xvtdivdp cr1,vs50,vs60" -func_check +1720 "xvtdivsp cr1,vs50,vs60" -func_check +1724 "xvtsqrtdp cr1,vs60" -func_check +1728 "xvtsqrtsp cr1,vs60" -func_check +1732 "xxland vs40,vs50,vs60" -func_check +1736 "xxlandc vs40,vs50,vs60" -func_check +1740 "xxlnor vs40,vs50,vs60" -func_check +1744 "xxlor vs40,vs50,vs60" -func_check +1748 "xxlxor vs40,vs50,vs60" -func_check +1752 "xxmrghw vs40,vs50,vs60" -func_check +1756 "xxmrglw vs40,vs50,vs60" -func_check +1760 "xxmrghd vs40,vs50,vs60" -func_check +1764 "xxpermdi vs40,vs50,vs60,1" -func_check +1768 "xxpermdi vs40,vs50,vs60,2" -func_check +1772 "xxmrgld vs40,vs50,vs60" -func_check +1776 "xxspltd vs40,vs50,0" -func_check +1780 "xxspltd vs40,vs50,0" -func_check +1784 "xxspltd vs40,vs50,1" -func_check +1788 "xxspltd vs40,vs50,1" -func_check +1792 "xxmrghd vs40,vs50,vs60" -func_check +1796 "xxmrghd vs40,vs50,vs60" -func_check +1800 "xxmrgld vs40,vs50,vs60" -func_check +1804 "xxswapd vs40,vs50" -func_check +1808 "xxswapd vs40,vs50" -func_check +1812 "xxsel vs40,vs50,vs60,vs62" -func_check +1816 "xxsldwi vs40,vs50,vs60,2" -func_check +1820 "xxspltw vs40,vs60,2" -func_check +1824 "lxvd2x vs40,0,r20" -func_check +1828 "lxvd2x vs40,r10,r20" -func_check +1832 "stxvd2x vs40,0,r20" -func_check +1836 "stxvd2x vs40,r10,r20" - -## power8.d -func_check +1840 "tabort\. r5" -func_check +1844 "tabortwc\. 7,r8,r16" -func_check +1848 "tabortdc\. 20,r11,r10" -func_check +1852 "tabortwci\. 17,r10,-13" -func_check +1856 "tabortdci\. 29,r3,-5" -func_check +1860 "tbegin\." -func_check +1864 "tcheck cr7" -func_check +1868 "tend\." -func_check +1872 "tend\." -func_check +1876 "tendall\." -func_check +1880 "tendall\." -func_check +1884 "treclaim\. r24" -func_check +1888 "trechkpt\." -func_check +1892 "tsuspend\." -func_check +1896 "tsuspend\." -func_check +1900 "tresume\." -func_check +1904 "tresume\." -func_check +1908 "ori r2,r2,0" -func_check +1912 "nop" -func_check +1916 "ori r2,r2,0" -func_check +1920 "rfebb 0" -func_check +1924 "rfebb" -func_check +1928 "rfebb" -func_check +1932 "bctar- 12,4\\*cr5\\+gt" -func_check +1936 "bctarl- 4,4\\*cr1\\+so" -func_check +1940 "bctar\\+ 12,4\\*cr3\\+lt" -func_check +1944 "bctarl\\+ 4,eq" -func_check +1948 "bctar 4,4\\*cr2\\+lt,1" -func_check +1952 "bctarl 4,4\\*cr1\\+so,2" -func_check +1956 "wait" -func_check +1960 "msgsndp r8" -func_check +1964 "mtsle 1" -func_check +1968 "msgclrp r27" -func_check +1972 "stqcx\. r10,r10,r12" -func_check +1976 "stqcx\. r28,0,r7" -func_check +1980 "lqarx r24,r19,r11" -func_check +1984 "lqarx r22,0,r11" -func_check +1988 "mfbhrbe r20,6" -func_check +1992 "pbt\. r29,r17,r16" -func_check +1996 "pbt\. r14,0,r7" -func_check +2000 "clrbhrb" -func_check +2004 "vpermxor v11,v10,v0,v23" -func_check +2008 "vaddeuqm v24,v2,v7,v4" -func_check +2012 "vaddecuq v10,v10,v8,v2" -func_check +2016 "vsubeuqm v5,v15,v8,v19" -func_check +2020 "vsubecuq v12,v31,v16,v29" -func_check +2024 "vmulouw v20,v29,v13" -func_check +2028 "vmuluwm v29,v0,v26" -func_check +2032 "vaddudm v8,v21,v28" -func_check +2036 "vmaxud v1,v26,v1" -func_check +2040 "vrld v20,v3,v1" -func_check +2044 "vcmpequd v4,v19,v11" -func_check +2048 "vadduqm v23,v14,v30" -func_check +2052 "vaddcuq v8,v8,v13" -func_check +2056 "vmulosw v28,v27,v4" -func_check +2060 "vmaxsd v3,v4,v4" -func_check +2064 "vmuleuw v0,v19,v21" -func_check +2068 "vminud v24,v20,v19" -func_check +2072 "vcmpgtud v0,v28,v15" -func_check +2076 "vmulesw v21,v0,v2" -func_check +2080 "vminsd v9,v26,v9" -func_check +2084 "vsrad v25,v29,v11" -func_check +2088 "vcmpgtsd v11,v28,v11" -func_check +2092 "bcdadd\. v5,v8,v26,1" -func_check +2096 "vpmsumb v4,v3,v12" -func_check +2100 "bcdsub\. v26,v31,v21,1" -func_check +2104 "vpmsumh v5,v17,v16" -func_check +2108 "vpkudum v23,v17,v20" -func_check +2112 "vpmsumw v24,v21,v29" -func_check +2116 "vpmsumd v9,v22,v13" -func_check +2120 "vpkudus v18,v19,v18" -func_check +2124 "vsubuqm v30,v16,v22" -func_check +2128 "vcipher v14,v11,v7" -func_check +2132 "vcipherlast v10,v2,v22" -func_check +2136 "vgbbd v23,v13" -func_check +2140 "vsubcuq v16,v25,v16" -func_check +2144 "vorc v31,v1,v5" -func_check +2148 "vncipher v4,v17,v31" -func_check +2152 "vncipherlast v24,v2,v27" -func_check +2156 "vbpermq v23,v21,v23" -func_check +2160 "vpksdus v27,v18,v9" -func_check +2164 "vnand v27,v29,v27" -func_check +2168 "vsld v19,v19,v24" -func_check +2172 "vsbox v5,v13" -func_check +2176 "vpksdss v25,v3,v7" -func_check +2180 "vcmpequd\. v28,v8,v0" -func_check +2184 "vupkhsw v26,v26" -func_check +2188 "vshasigmaw v5,v7,0,6" -func_check +2192 "veqv v28,v21,v14" -func_check +2196 "vmrgow v1,v8,v19" -func_check +2200 "vshasigmad v0,v10,0,10" -func_check +2204 "vsrd v5,v27,v14" -func_check +2208 "vupklsw v11,v13" -func_check +2212 "vclzb v14,v16" -func_check +2216 "vpopcntb v20,v27" -func_check +2220 "vclzh v28,v11" -func_check +2224 "vpopcnth v24,v9" -func_check +2228 "vclzw v27,v31" -func_check +2232 "vpopcntw v17,v19" -func_check +2236 "vclzd v12,v29" -func_check +2240 "vpopcntd v23,v22" -func_check +2244 "vcmpgtud\. v24,v20,v29" -func_check +2248 "vcmpgtsd\. v9,v6,v27" -func_check +2252 "lxsiwzx vs62,r14,r26" -func_check +2256 "lxsiwzx vs40,0,r25" -func_check +2260 "lxsiwax vs25,0,r26" -func_check +2264 "lxsiwax vs3,0,r3" -func_check +2268 "mfvsrd r12,vs62" -func_check +2272 "mffprwz r20,f12" -func_check +2276 "stxsiwx vs14,r9,r14" -func_check +2280 "stxsiwx vs21,0,r8" -func_check +2284 "mtvsrd vs48,r11" -func_check +2288 "mtvrwa v31,r23" -func_check +2292 "mtfprwz f16,r26" -func_check +2296 "lxsspx vs13,r19,r13" -func_check +2300 "lxsspx vs18,0,r13" -func_check +2304 "stxsspx vs43,r2,r4" -func_check +2308 "stxsspx vs55,0,r11" -func_check +2312 "xsaddsp vs54,vs48,vs25" -func_check +2316 "xsmaddasp vs14,vs50,vs1" -func_check +2320 "xssubsp vs26,vs22,vs42" -func_check +2324 "xsmaddmsp vs27,vs53,vs52" -func_check +2328 "xsrsqrtesp vs8,vs59" -func_check +2332 "xssqrtsp vs12,vs41" -func_check +2336 "xsmulsp vs57,vs11,vs32" -func_check +2340 "xsmsubasp vs38,vs20,vs26" -func_check +2344 "xsdivsp vs26,vs19,vs6" -func_check +2348 "xsmsubmsp vs35,vs37,vs55" -func_check +2352 "xsresp vs59,vs8" -func_check +2356 "xsnmaddasp vs44,vs33,vs33" -func_check +2360 "xsnmaddmsp vs17,vs62,vs30" -func_check +2364 "xsnmsubasp vs54,vs52,vs31" -func_check +2368 "xsnmsubmsp vs37,vs5,vs58" -func_check +2372 "xxlorc vs30,vs54,vs44" -func_check +2376 "xxlnand vs49,vs14,vs29" -func_check +2380 "xxleqv vs62,vs22,vs30" -func_check +2384 "xscvdpspn vs60,vs54" -func_check +2388 "xsrsp vs22,vs45" -func_check +2392 "xscvuxdsp vs26,vs59" -func_check +2396 "xscvsxdsp vs38,vs49" -func_check +2400 "xscvspdpn vs59,vs26" -func_check +2404 "fmrgow f24,f14,f2" -func_check +2408 "fmrgew f22,f7,f5" -func_check +2412 "msgsnd r14" -func_check +2416 "msgclr r23" -func_check +2420 "lxvd2x vs40,0,r5" -func_check +2424 "lxvd2x vs40,0,r5" -func_check +2428 "lxvd2x vs10,r20,r6" -func_check +2432 "lxvd2x vs10,r20,r6" -func_check +2436 "stxvd2x vs41,0,r7" -func_check +2440 "stxvd2x vs41,0,r7" -func_check +2444 "stxvd2x vs11,r21,r8" -func_check +2448 "stxvd2x vs11,r21,r8" - -## altivec2.d -func_check +2452 "lvepxl v3,0,r28" -func_check +2456 "lvepxl v19,r4,r18" -func_check +2460 "lvepx v27,0,r19" -func_check +2464 "lvepx v1,r25,r18" -func_check +2468 "lvexbx v31,0,r27" -func_check +2472 "lvexbx v28,r1,r12" -func_check +2476 "lvexhx v31,0,r14" -func_check +2480 "lvexhx v17,r16,r31" -func_check +2484 "lvexwx v22,0,r29" -func_check +2488 "lvexwx v23,r25,r5" -func_check +2492 "lvsm v3,0,r12" -func_check +2496 "lvsm v27,r29,r1" -func_check +2500 "lvswxl v7,0,r6" -func_check +2504 "lvswxl v7,r16,r8" -func_check +2508 "lvswx v14,0,r18" -func_check +2512 "lvswx v28,r28,r16" -func_check +2516 "lvtlxl v27,0,r12" -func_check +2520 "lvtlxl v27,r28,r0" -func_check +2524 "lvtlx v23,0,r25" -func_check +2528 "lvtlx v1,r25,r14" -func_check +2532 "lvtrxl v20,0,r24" -func_check +2536 "lvtrxl v22,r29,r24" -func_check +2540 "lvtrx v24,0,r8" -func_check +2544 "lvtrx v13,r23,r28" -func_check +2548 "mvidsplt v12,r28,r12" -func_check +2552 "mviwsplt v10,r27,r0" -func_check +2556 "stvepxl v27,0,r13" -func_check +2560 "stvepxl v2,r2,r31" -func_check +2564 "stvepx v3,0,r10" -func_check +2568 "stvepx v27,r28,r0" -func_check +2572 "stvexbx v13,0,r6" -func_check +2576 "stvexbx v13,r25,r3" -func_check +2580 "stvexhx v22,0,r1" -func_check +2584 "stvexhx v17,r14,r10" -func_check +2588 "stvexwx v21,0,r27" -func_check +2592 "stvexwx v31,r18,r1" -func_check +2596 "stvflxl v26,0,r13" -func_check +2600 "stvflxl v22,r13,r21" -func_check +2604 "stvflx v5,0,r9" -func_check +2608 "stvflx v21,r24,r1" -func_check +2612 "stvfrxl v13,0,r10" -func_check +2616 "stvfrxl v13,r17,r25" -func_check +2620 "stvfrx v17,0,r10" -func_check +2624 "stvfrx v8,r12,r31" -func_check +2628 "stvswxl v18,0,r29" -func_check +2632 "stvswxl v26,r14,r8" -func_check +2636 "stvswx v0,0,r15" -func_check +2640 "stvswx v13,r23,r7" -func_check +2644 "vabsdub v6,v17,v16" -func_check +2648 "vabsduh v21,v18,v4" -func_check +2652 "vabsduw v25,v20,v9" -func_check +2656 "vpermxor v6,v17,v20,v26" -func_check +2660 "vaddeuqm v29,v26,v15,v28" -func_check +2664 "vaddecuq v15,v8,v7,v24" -func_check +2668 "vsubeuqm v2,v6,v21,v1" -func_check +2672 "vsubecuq v29,v6,v0,v4" -func_check +2676 "vmulouw v14,v9,v3" -func_check +2680 "vmuluwm v24,v16,v18" -func_check +2684 "vaddudm v10,v17,v17" -func_check +2688 "vmaxud v30,v25,v4" -func_check +2692 "vrld v10,v6,v28" -func_check +2696 "vcmpequd v27,v7,v7" -func_check +2700 "vadduqm v22,v16,v25" -func_check +2704 "vaddcuq v1,v21,v29" -func_check +2708 "vmulosw v20,v11,v19" -func_check +2712 "vmaxsd v24,v19,v1" -func_check +2716 "vmuleuw v13,v27,v30" -func_check +2720 "vminud v9,v24,v17" -func_check +2724 "vcmpgtud v10,v18,v28" -func_check +2728 "vmulesw v0,v29,v22" -func_check +2732 "vminsd v13,v28,v1" -func_check +2736 "vsrad v10,v20,v5" -func_check +2740 "vcmpgtsd v27,v21,v5" -func_check +2744 "bcdadd\. v0,v23,v30,1" -func_check +2748 "vpmsumb v25,v24,v26" -func_check +2752 "bcdsub\. v8,v4,v4,1" -func_check +2756 "vpmsumh v16,v14,v26" -func_check +2760 "vpkudum v27,v2,v26" -func_check +2764 "vpmsumw v6,v23,v17" -func_check +2768 "vpmsumd v20,v6,v25" -func_check +2772 "vpkudus v27,v22,v16" -func_check +2776 "vsubudm v21,v20,v18" -func_check +2780 "vsubuqm v21,v20,v18" -func_check +2784 "vcipher v29,v29,v6" -func_check +2788 "vcipherlast v2,v13,v20" -func_check +2792 "vgbbd v20,v18" -func_check +2796 "vsubcuq v19,v8,v25" -func_check +2800 "vorc v9,v26,v29" -func_check +2804 "vncipher v20,v20,v13" -func_check +2808 "vncipherlast v15,v5,v27" -func_check +2812 "vbpermq v3,v19,v6" -func_check +2816 "vpksdus v30,v4,v28" -func_check +2820 "vnand v0,v4,v14" -func_check +2824 "vsld v17,v8,v29" -func_check +2828 "vsbox v29,v20" -func_check +2832 "vpksdss v11,v7,v11" -func_check +2836 "vcmpequd\. v3,v19,v16" -func_check +2840 "vupkhsw v18,v17" -func_check +2844 "vshasigmaw v29,v8,0,13" -func_check +2848 "veqv v23,v28,v26" -func_check +2852 "vmrgew v29,v0,v2" -func_check +2856 "vmrgow v29,v0,v2" -func_check +2860 "vshasigmad v27,v19,0,0" -func_check +2864 "vsrd v20,v28,v28" -func_check +2868 "vupklsw v18,v21" -func_check +2872 "vclzb v30,v7" -func_check +2876 "vpopcntb v29,v21" -func_check +2880 "vclzh v25,v21" -func_check +2884 "vpopcnth v16,v30" -func_check +2888 "vclzw v28,v3" -func_check +2892 "vpopcntw v10,v9" -func_check +2896 "vclzd v22,v9" -func_check +2900 "vpopcntd v15,v30" -func_check +2904 "vcmpgtud\. v2,v31,v6" -func_check +2908 "vcmpgtsd\. v20,v15,v2" - -## vsd2.d -func_check +2912 "lxsiwzx vs62,r14,r26" -func_check +2916 "lxsiwzx vs40,0,r25" -func_check +2920 "lxsiwax vs25,0,r26" -func_check +2924 "lxsiwax vs3,0,r3" -func_check +2928 "mfvsrd r12,vs30" -func_check +2932 "mfvsrd r12,vs30" -func_check +2936 "mfvsrd r12,vs62" -func_check +2940 "mfvsrd r12,vs62" -func_check +2944 "mffprwz r20,f12" -func_check +2948 "mffprwz r20,f12" -func_check +2952 "mfvrwz r21,v12" -func_check +2956 "mfvrwz r21,v12" -func_check +2960 "stxsiwx vs14,r9,r14" -func_check +2964 "stxsiwx vs21,0,r8" -func_check +2968 "mtvsrd vs11,r28" -func_check +2972 "mtvsrd vs11,r28" -func_check +2976 "mtvsrd vs43,r29" -func_check +2980 "mtvsrd vs43,r29" -func_check +2984 "mtfprwa f24,r22" -func_check +2988 "mtfprwa f24,r22" -func_check +2992 "mtvrwa v25,r23" -func_check +2996 "mtvrwa v25,r23" -func_check +3000 "mtfprwz f26,r27" -func_check +3004 "mtfprwz f26,r27" -func_check +3008 "mtvrwz v27,r28" -func_check +3012 "mtvrwz v27,r28" -func_check +3016 "lxsspx vs13,r19,r13" -func_check +3020 "lxsspx vs18,0,r13" -func_check +3024 "stxsspx vs43,r2,r4" -func_check +3028 "stxsspx vs55,0,r11" -func_check +3032 "xsaddsp vs54,vs48,vs25" -func_check +3036 "xsmaddasp vs14,vs50,vs1" -func_check +3040 "xssubsp vs26,vs22,vs42" -func_check +3044 "xsmaddmsp vs27,vs53,vs52" -func_check +3048 "xsrsqrtesp vs8,vs59" -func_check +3052 "xssqrtsp vs12,vs41" -func_check +3056 "xsmulsp vs57,vs11,vs32" -func_check +3060 "xsmsubasp vs38,vs20,vs26" -func_check +3064 "xsdivsp vs26,vs19,vs6" -func_check +3068 "xsmsubmsp vs35,vs37,vs55" -func_check +3072 "xsresp vs59,vs8" -func_check +3076 "xsnmaddasp vs44,vs33,vs33" -func_check +3080 "xsnmaddmsp vs17,vs62,vs30" -func_check +3084 "xsnmsubasp vs54,vs52,vs31" -func_check +3088 "xsnmsubmsp vs37,vs5,vs58" -func_check +3092 "xxlorc vs30,vs54,vs44" -func_check +3096 "xxlnand vs49,vs14,vs29" -func_check +3100 "xxleqv vs62,vs22,vs30" -func_check +3104 "xscvdpspn vs60,vs54" -func_check +3108 "xsrsp vs22,vs45" -func_check +3112 "xscvuxdsp vs26,vs59" -func_check +3116 "xscvsxdsp vs38,vs49" -func_check +3120 "xscvspdpn vs59,vs26" -func_check +3124 "fmrgow f24,f14,f2" -func_check +3128 "fmrgew f22,f7,f5" - -## power9.d -func_check +3132 "cnttzd r3,r13" -func_check +3136 "cnttzd\. r4,r14" -func_check +3140 "cnttzw r5,r15" -func_check +3144 "cnttzw\. r6,r16" -func_check +3148 "modsd r10,r20,r21" -func_check +3152 "modsw r11,r21,r22" -func_check +3156 "modud r12,r22,r23" -func_check +3160 "moduw r13,r23,r24" -func_check +3164 "bcdcfn\. v3,v4,0" -func_check +3168 "bcdcfn\. v3,v4,1" -func_check +3172 "bcdcfsq\. v4,v5,0" -func_check +3176 "bcdcfsq\. v4,v5,1" -func_check +3180 "bcdcfz\. v5,v6,0" -func_check +3184 "bcdcfz\. v5,v6,1" -func_check +3188 "bcdcpsgn\. v6,v7,v8" -func_check +3192 "bcdctn\. v7,v8" -func_check +3196 "bcdctsq\. v8,v9" -func_check +3200 "bcdctz\. v9,v10,0" -func_check +3204 "bcdctz\. v9,v10,1" -func_check +3208 "bcdsetsgn\. v10,v11,0" -func_check +3212 "bcdsetsgn\. v10,v11,1" -func_check +3216 "bcdsr\. v11,v12,v13,0" -func_check +3220 "bcdsr\. v11,v12,v13,1" -func_check +3224 "bcds\. v12,v13,v14,0" -func_check +3228 "bcds\. v12,v13,v14,1" -func_check +3232 "bcdtrunc\. v13,v14,v15,0" -func_check +3236 "bcdtrunc\. v13,v14,v15,1" -func_check +3240 "bcdus\. v14,v15,v16" -func_check +3244 "bcdutrunc\. v15,v16,v17" -func_check +3248 "lxvll vs20,0,r21" -func_check +3252 "lxvll vs20,r10,r21" -func_check +3256 "stxvll vs21,0,r11" -func_check +3260 "stxvll vs21,r10,r11" -func_check +3264 "vmul10cuq v22,v23" -func_check +3268 "vmul10ecuq v23,v24,v25" -func_check +3272 "vmul10euq v24,v25,v26" -func_check +3276 "vmul10uq v25,v26" -func_check +3280 "xsaddqp v10,v11,v12" -func_check +3284 "xsaddqpo v11,v12,v12" -func_check +3288 "xsrqpi 0,v20,v30,0" -func_check +3292 "xsrqpi 1,v20,v30,0" -func_check +3296 "xsrqpi 0,v20,v30,3" -func_check +3300 "xsrqpi 1,v20,v30,3" -func_check +3304 "xsrqpix 0,v21,v31,0" -func_check +3308 "xsrqpix 1,v21,v31,0" -func_check +3312 "xsrqpix 0,v21,v31,3" -func_check +3316 "xsrqpix 1,v21,v31,3" -func_check +3320 "xsmulqp v12,v13,v14" -func_check +3324 "xsmulqpo v13,v14,v15" -func_check +3328 "xsrqpxp 0,v22,v23,0" -func_check +3332 "xsrqpxp 1,v22,v23,0" -func_check +3336 "xsrqpxp 0,v22,v23,3" -func_check +3340 "xsrqpxp 1,v22,v23,3" -func_check +3344 "xscpsgnqp v14,v15,v16" -func_check +3348 "xscmpoqp cr0,v15,v16" -func_check +3352 "xscmpoqp cr7,v15,v16" -func_check +3356 "xscmpexpqp cr0,v16,v17" -func_check +3360 "xscmpexpqp cr7,v16,v17" -func_check +3364 "xsmaddqp v17,v18,v19" -func_check +3368 "xsmaddqpo v18,v19,v20" -func_check +3372 "xsmsubqp v19,v20,v21" -func_check +3376 "xsmsubqpo v20,v21,v22" -func_check +3380 "xsnmaddqp v21,v22,v23" -func_check +3384 "xsnmaddqpo v22,v23,v24" -func_check +3388 "xsnmsubqp v23,v24,v25" -func_check +3392 "xsnmsubqpo v24,v25,v26" -func_check +3396 "xssubqp v25,v26,v27" -func_check +3400 "xssubqpo v26,v27,v28" -func_check +3404 "xsdivqp v27,v28,v29" -func_check +3408 "xsdivqpo v28,v29,v30" -func_check +3412 "xscmpuqp cr0,v29,v30" -func_check +3416 "xscmpuqp cr7,v29,v30" -func_check +3420 "xststdcqp cr0,v30,0" -func_check +3424 "xststdcqp cr7,v30,0" -func_check +3428 "xststdcqp cr0,v31,127" -func_check +3432 "xststdcqp cr7,v31,127" -func_check +3436 "xsabsqp v10,v11" -func_check +3440 "xsxexpqp v11,v12" -func_check +3444 "xsnabsqp v12,v13" -func_check +3448 "xsnegqp v13,v14" -func_check +3452 "xsxsigqp v14,v15" -func_check +3456 "xssqrtqp v15,v16" -func_check +3460 "xssqrtqpo v16,v17" -func_check +3464 "xscvqpuwz v17,v18" -func_check +3468 "xscvudqp v18,v19" -func_check +3472 "xscvqpswz v19,v20" -func_check +3476 "xscvsdqp v20,v21" -func_check +3480 "xscvqpudz v21,v22" -func_check +3484 "xscvqpdp v22,v23" -func_check +3488 "xscvqpdpo v23,v24" -func_check +3492 "xscvdpqp v24,v25" -func_check +3496 "xscvqpsdz v25,v26" -func_check +3500 "xsiexpqp v26,v27,v28" -func_check +3504 "vpermr v4,v5,v6,v7" -func_check +3508 "vextractub v5,v6,0" -func_check +3512 "vextractub v5,v6,15" -func_check +3516 "vextractuh v6,v7,0" -func_check +3520 "vextractuh v6,v7,15" -func_check +3524 "vextractuw v7,v8,0" -func_check +3528 "vextractuw v7,v8,15" -func_check +3532 "vextractd v8,v9,0" -func_check +3536 "vextractd v8,v9,15" -func_check +3540 "vinsertb v9,v10,0" -func_check +3544 "vinsertb v9,v10,15" -func_check +3548 "vinserth v10,v11,0" -func_check +3552 "vinserth v10,v11,15" -func_check +3556 "vinsertw v11,v12,0" -func_check +3560 "vinsertw v11,v12,15" -func_check +3564 "vinsertd v12,v13,0" -func_check +3568 "vinsertd v12,v13,15" -func_check +3572 "mfvsrld r20,vs45" -func_check +3576 "mtvsrws vs46,r21" -func_check +3580 "mtvsrdd vs47,0,r23" -func_check +3584 "mtvsrdd vs47,r22,r23" -func_check +3588 "lxvx vs50,0,r11" -func_check +3592 "lxvx vs0,r10,r11" -func_check +3596 "lxvwsx vs51,0,r12" -func_check +3600 "lxvwsx vs1,r10,r12" -func_check +3604 "lxvh8x vs52,0,r13" -func_check +3608 "lxvh8x vs2,r10,r13" -func_check +3612 "lxvb16x vs53,0,r14" -func_check +3616 "lxvb16x vs3,r10,r14" -func_check +3620 "stxvx vs54,0,r15" -func_check +3624 "stxvx vs4,r20,r15" -func_check +3628 "stxvh8x vs55,0,r16" -func_check +3632 "stxvh8x vs5,r20,r16" -func_check +3636 "stxvb16x vs56,0,r17" -func_check +3640 "stxvb16x vs6,r20,r17" -func_check +3644 "xxextractuw vs4,vs5,0" -func_check +3648 "xxextractuw vs40,vs50,15" -func_check +3652 "xxspltib vs4,0" -func_check +3656 "xxspltib vs41,255" -func_check +3660 "xxinsertw vs5,vs6,0" -func_check +3664 "xxinsertw vs50,vs60,15" -func_check +3668 "xxbrh vs6,vs7" -func_check +3672 "xxbrh vs56,vs57" -func_check +3676 "xxbrw vs7,vs8" -func_check +3680 "xxbrw vs57,vs58" -func_check +3684 "xxbrd vs8,vs9" -func_check +3688 "xxbrd vs58,vs59" -func_check +3692 "xxbrq vs9,vs10" -func_check +3696 "xxbrq vs59,vs60" -func_check +3700 "lxsd v20,0\\(0\\)" -func_check +3704 "lxsd v20,0\\(r10\\)" -func_check +3708 "lxsd v20,8\\(0\\)" -func_check +3712 "lxsd v20,8\\(r10\\)" -func_check +3716 "lxsd v20,-8\\(0\\)" -func_check +3720 "lxsd v20,-8\\(r10\\)" -func_check +3724 "lxsd v20,32764\\(0\\)" -func_check +3728 "lxsd v20,32764\\(r10\\)" -func_check +3732 "lxsd v20,-32768\\(0\\)" -func_check +3736 "lxsd v20,-32768\\(r10\\)" -func_check +3740 "lxssp v30,0\\(0\\)" -func_check +3744 "lxssp v30,0\\(r11\\)" -func_check +3748 "lxssp v30,8\\(0\\)" -func_check +3752 "lxssp v30,8\\(r11\\)" -func_check +3756 "lxssp v30,-8\\(0\\)" -func_check +3760 "lxssp v30,-8\\(r11\\)" -func_check +3764 "lxssp v30,32764\\(0\\)" -func_check +3768 "lxssp v30,32764\\(r11\\)" -func_check +3772 "lxssp v30,-32768\\(0\\)" -func_check +3776 "lxssp v30,-32768\\(r11\\)" -func_check +3780 "lxv vs40,0\\(0\\)" -func_check +3784 "lxv vs40,0\\(r12\\)" -func_check +3788 "lxv vs40,16\\(0\\)" -func_check +3792 "lxv vs40,16\\(r12\\)" -func_check +3796 "lxv vs40,-16\\(0\\)" -func_check +3800 "lxv vs10,-16\\(r12\\)" -func_check +3804 "lxv vs10,32752\\(0\\)" -func_check +3808 "lxv vs10,32752\\(r12\\)" -func_check +3812 "lxv vs10,-32768\\(0\\)" -func_check +3816 "lxv vs10,-32768\\(r12\\)" -func_check +3820 "stxsd v21,0\\(0\\)" -func_check +3824 "stxsd v21,0\\(r10\\)" -func_check +3828 "stxsd v21,8\\(0\\)" -func_check +3832 "stxsd v21,8\\(r10\\)" -func_check +3836 "stxsd v21,-8\\(0\\)" -func_check +3840 "stxsd v21,-8\\(r10\\)" -func_check +3844 "stxsd v21,32764\\(0\\)" -func_check +3848 "stxsd v21,32764\\(r10\\)" -func_check +3852 "stxsd v21,-32768\\(0\\)" -func_check +3856 "stxsd v21,-32768\\(r10\\)" -func_check +3860 "stxssp v31,0\\(0\\)" -func_check +3864 "stxssp v31,0\\(r11\\)" -func_check +3868 "stxssp v31,8\\(0\\)" -func_check +3872 "stxssp v31,8\\(r11\\)" -func_check +3876 "stxssp v31,-8\\(0\\)" -func_check +3880 "stxssp v31,-8\\(r11\\)" -func_check +3884 "stxssp v31,32764\\(0\\)" -func_check +3888 "stxssp v31,32764\\(r11\\)" -func_check +3892 "stxssp v31,-32768\\(0\\)" -func_check +3896 "stxssp v31,-32768\\(r11\\)" -func_check +3900 "stxv vs41,0\\(0\\)" -func_check +3904 "stxv vs41,0\\(r12\\)" -func_check +3908 "stxv vs41,16\\(0\\)" -func_check +3912 "stxv vs41,16\\(r12\\)" -func_check +3916 "stxv vs41,-16\\(0\\)" -func_check +3920 "stxv vs11,-16\\(r12\\)" -func_check +3924 "stxv vs11,32752\\(0\\)" -func_check +3928 "stxv vs11,32752\\(r12\\)" -func_check +3932 "stxv vs11,-32768\\(0\\)" -func_check +3936 "stxv vs11,-32768\\(r12\\)" -func_check +3940 "xxperm vs20,vs22,vs24" -func_check +3944 "xxperm vs40,vs42,vs44" -func_check +3948 "xxpermr vs21,vs23,vs25" -func_check +3952 "xxpermr vs41,vs43,vs45" -func_check +3956 "extswsli r12,r20,0" -func_check +3960 "extswsli r12,r20,1" -func_check +3964 "extswsli r12,r20,63" -func_check +3968 "extswsli\. r13,r21,0" -func_check +3972 "extswsli\. r13,r21,1" -func_check +3976 "extswsli\. r13,r21,63" -func_check +3980 "vrlwmi v14,v22,v23" -func_check +3984 "vrldmi v15,v23,v24" -func_check +3988 "vrlwnm v16,v24,v25" -func_check +3992 "vrldnm v17,v25,v26" -func_check +3996 "vbpermd v18,v26,v27" -func_check +4000 "vnegw v19,v20" -func_check +4004 "vnegd v20,v21" -func_check +4008 "vprtybw v21,v22" -func_check +4012 "vprtybd v22,v23" -func_check +4016 "vprtybq v23,v24" -func_check +4020 "vextsb2w v24,v25" -func_check +4024 "vextsh2w v25,v26" -func_check +4028 "vextsb2d v26,v27" -func_check +4032 "vextsh2d v27,v28" -func_check +4036 "vextsw2d v28,v29" -func_check +4040 "vctzb v29,v30" -func_check +4044 "vctzh v30,v31" -func_check +4048 "vctzw v31,v30" -func_check +4052 "vctzd v30,v29" -func_check +4056 "lxsibzx vs10,0,r20" -func_check +4060 "lxsibzx vs50,r10,r20" -func_check +4064 "lxsihzx vs11,0,r21" -func_check +4068 "lxsihzx vs51,r11,r21" -func_check +4072 "stxsibx vs12,0,r22" -func_check +4076 "stxsibx vs52,r12,r22" -func_check +4080 "stxsihx vs13,0,r23" -func_check +4084 "stxsihx vs53,r13,r23" -func_check +4088 "maddhd r10,r11,r12,r13" -func_check +4092 "maddhdu r20,r21,r22,r23" -func_check +4096 "maddld r2,r3,r4,r5" -func_check +4100 "xscmpexpdp cr0,vs10,vs20" -func_check +4104 "xscmpexpdp cr7,vs40,vs50" -func_check +4108 "xsiexpdp vs41,r11,r21" -func_check +4112 "xststdcdp cr0,vs11,127" -func_check +4116 "xststdcdp cr7,vs41,127" -func_check +4120 "xststdcsp cr0,vs11,127" -func_check +4124 "xststdcsp cr7,vs41,127" -func_check +4128 "xsxexpdp r13,vs43" -func_check +4132 "xsxsigdp r14,vs44" -func_check +4136 "xviexpdp vs45,vs46,vs47" -func_check +4140 "xviexpsp vs46,vs47,vs48" -func_check +4144 "xvtstdcdp vs54,vs55,0" -func_check +4148 "xvtstdcdp vs54,vs55,127" -func_check +4152 "xvtstdcsp vs55,vs56,0" -func_check +4156 "xvtstdcsp vs55,vs56,127" -func_check +4160 "xvxexpdp vs57,vs58" -func_check +4164 "xvxexpsp vs58,vs59" -func_check +4168 "xvxsigdp vs59,vs60" -func_check +4172 "xvxsigsp vs60,vs61" -func_check +4176 "cmpeqb cr0,r6,r7" -func_check +4180 "cmpeqb cr7,r6,r7" -func_check +4184 "cmprb cr0,0,r8,r9" -func_check +4188 "cmprb cr7,0,r8,r9" -func_check +4192 "cmprb cr0,1,r8,r9" -func_check +4196 "cmprb cr7,1,r8,r9" -func_check +4200 "setb r15,cr0" -func_check +4204 "setb r15,cr7" -func_check +4208 "lxvl vs26,0,r10" -func_check +4212 "lxvl vs56,r20,r10" -func_check +4216 "stxvl vs27,0,r11" -func_check +4220 "stxvl vs57,r21,r11" -func_check +4224 "vclzlsbb r20,v30" -func_check +4228 "vctzlsbb r21,v31" -func_check +4232 "vcmpneb v10,v11,v12" -func_check +4236 "vcmpneb\. v20,v21,v22" -func_check +4240 "vcmpneh v11,v12,v13" -func_check +4244 "vcmpneh\. v21,v22,v23" -func_check +4248 "vcmpnew v12,v13,v14" -func_check +4252 "vcmpnew\. v22,v23,v24" -func_check +4256 "vcmpnezb v13,v14,v15" -func_check +4260 "vcmpnezb\. v23,v24,v25" -func_check +4264 "vcmpnezh v14,v15,v16" -func_check +4268 "vcmpnezh\. v24,v25,v26" -func_check +4272 "vcmpnezw v15,v16,v17" -func_check +4276 "vcmpnezw\. v25,v26,v27" -func_check +4280 "vextublx r16,r17,v10" -func_check +4284 "vextubrx r17,r18,v11" -func_check +4288 "vextuhlx r18,r19,v12" -func_check +4292 "vextuhrx r19,r20,v13" -func_check +4296 "vextuwlx r20,r21,v14" -func_check +4300 "vextuwrx r21,r22,v15" -func_check +4304 "dtstsfi cr0,0,f3" -func_check +4308 "dtstsfi cr7,63,f3" -func_check +4312 "dtstsfiq cr0,0,f4" -func_check +4316 "dtstsfiq cr7,63,f4" -func_check +4320 "xscvhpdp vs40,vs50" -func_check +4324 "xscvdphp vs41,vs51" -func_check +4328 "xvcvhpsp vs42,vs52" -func_check +4332 "xvcvsphp vs43,vs53" -func_check +4336 "addpcis r3,0" -func_check +4340 "addpcis r3,0" -func_check +4344 "addpcis r4,1" -func_check +4348 "addpcis r4,1" -func_check +4352 "addpcis r5,-2" -func_check +4356 "addpcis r5,-2" -func_check +4360 "addpcis r6,32767" -func_check +4364 "addpcis r6,32767" -func_check +4368 "addpcis r7,-32768" -func_check +4372 "addpcis r7,-32768" -func_check +4376 "slbsync" -func_check +4380 "slbieg r10,r11" -func_check +4384 "slbmfee r3,r4" -func_check +4388 "slbmfee r3,r4" -func_check +4392 "slbmfee r3,r4,1" -func_check +4396 "slbmfev r4,r5" -func_check +4400 "slbmfev r4,r5" -func_check +4404 "slbmfev r4,r5,1" -func_check +4408 "tlbie r3,r4" -func_check +4412 "tlbie r3,r4" -func_check +4416 "tlbie r3,r4,3,1,1" -func_check +4420 "tlbiel r3" -func_check +4424 "tlbiel r3" -func_check +4428 "tlbiel r3,r4,3,1,1" -func_check +4432 "copy r12,r13" -func_check +4436 "paste\. r10,r11" -func_check +4440 "cpabort" -func_check +4444 "hwsync" -func_check +4448 "hwsync" -func_check +4452 "hwsync" -func_check +4456 "lwsync" -func_check +4460 "lwsync" -func_check +4464 "ptesync" -func_check +4468 "ptesync" -func_check +4472 "ldat r20,0,0" -func_check +4476 "ldat r20,r10,28" -func_check +4480 "lwat r21,0,0" -func_check +4484 "lwat r21,r11,28" -func_check +4488 "stdat r22,0,0" -func_check +4492 "stdat r22,r12,28" -func_check +4496 "stwat r23,0,0" -func_check +4500 "stwat r23,r13,28" -func_check +4504 "urfid" -func_check +4508 "rmieg r30" -func_check +4512 "ldmx r10,0,r15" -func_check +4516 "ldmx r10,r3,r15" -func_check +4520 "stop" -func_check +4524 "wait" -func_check +4528 "wait" -func_check +4532 "darn r3,0" -func_check +4536 "darn r3,1" -func_check +4540 "darn r3,2" -func_check +4544 "mcrxrx cr0" -func_check +4548 "mcrxrx cr7" -func_check +4552 "vslv v20,v21,v22" -func_check +4556 "vsrv v23,v24,v25" -func_check +4560 "msgsync" -func_check +4564 "xscmpeqdp vs30,vs40,vs50" -func_check +4568 "xscmpgtdp vs31,vs41,vs51" -func_check +4572 "xscmpgedp vs32,vs42,vs52" -func_check +4576 "xsmincdp vs34,vs44,vs54" -func_check +4580 "xsmaxcdp vs35,vs45,vs55" -func_check +4584 "xsminjdp vs36,vs46,vs56" -func_check +4588 "xsmaxjdp vs37,vs47,vs57" -func_check +4592 "vmsumudm v20,v21,v22,v23" -func_check +4596 "addex r11,r12,r13,0" -func_check +4600 "addex r11,r12,r13,1" -func_check +4604 "addex r11,r12,r13,2" -func_check +4608 "mffs f25" -func_check +4612 "mffs\. f25" -func_check +4616 "mffsce f26" -func_check +4620 "mffscdrn f27,f20" -func_check +4624 "mffscdrni f28,0" -func_check +4628 "mffscdrni f28,7" -func_check +4632 "mffscrn f29,f21" -func_check +4636 "mffscrni f30,0" -func_check +4640 "mffscrni f30,3" -func_check +4644 "mffsl f31" -func_check +4648 "slbiag r10" - -## altivec3.d -func_check +4652 "vmul10cuq v11,v30" -func_check +4656 "vcmpneb v30,v1,v23" -func_check +4660 "vpermr v30,v19,v30,v29" -func_check +4664 "vmul10ecuq v20,v20,v17" -func_check +4668 "vcmpneh v27,v19,v31" -func_check +4672 "vrlwmi v6,v9,v23" -func_check +4676 "vcmpnew v22,v26,v1" -func_check +4680 "vrldmi v24,v30,v25" -func_check +4684 "vcmpnezb v19,v29,v22" -func_check +4688 "vcmpnezh v8,v23,v19" -func_check +4692 "vrlwnm v27,v24,v11" -func_check +4696 "vcmpnezw v21,v13,v10" -func_check +4700 "vrldnm v5,v20,v29" -func_check +4704 "vmul10uq v30,v19" -func_check +4708 "vextractub v24,v21,12" -func_check +4712 "vmul10euq v0,v19,v28" -func_check +4716 "vextractuh v10,v3,12" -func_check +4720 "vextractuw v28,v12,7" -func_check +4724 "vextractd v30,v27,1" -func_check +4728 "vinsertb v25,v31,4" -func_check +4732 "bcdcpsgn\. v21,v14,v30" -func_check +4736 "vinserth v22,v18,5" -func_check +4740 "vinsertw v29,v22,1" -func_check +4744 "vinsertd v29,v13,7" -func_check +4748 "vcmpneb\. v22,v25,v8" -func_check +4752 "vcmpneh\. v16,v15,v21" -func_check +4756 "bcdus\. v22,v21,v31" -func_check +4760 "vcmpnew\. v1,v12,v12" -func_check +4764 "bcds\. v5,v3,v8,1" -func_check +4768 "bcdtrunc\. v27,v22,v1,0" -func_check +4772 "vcmpnezb\. v2,v26,v0" -func_check +4776 "bcdutrunc\. v26,v14,v7" -func_check +4780 "vcmpnezh\. v16,v5,v12" -func_check +4784 "bcdctsq\. v24,v5" -func_check +4788 "bcdcfsq\. v7,v0,0" -func_check +4792 "bcdctz\. v30,v12,1" -func_check +4796 "bcdctn\. v17,v23" -func_check +4800 "bcdcfz\. v4,v15,1" -func_check +4804 "bcdcfn\. v29,v5,1" -func_check +4808 "bcdsetsgn\. v27,v12,0" -func_check +4812 "vcmpnezw\. v14,v28,v25" -func_check +4816 "bcdsr\. v2,v2,v6,1" -func_check +4820 "vbpermd v25,v0,v5" -func_check +4824 "vclzlsbb r28,v25" -func_check +4828 "vctzlsbb r2,v24" -func_check +4832 "vnegw v21,v11" -func_check +4836 "vnegd v17,v27" -func_check +4840 "vprtybw v31,v23" -func_check +4844 "vprtybd v21,v23" -func_check +4848 "vprtybq v21,v18" -func_check +4852 "vextsb2w v30,v4" -func_check +4856 "vextsh2w v3,v26" -func_check +4860 "vextsb2d v11,v17" -func_check +4864 "vextsh2d v5,v10" -func_check +4868 "vextsw2d v13,v25" -func_check +4872 "vctzb v25,v2" -func_check +4876 "vctzh v0,v3" -func_check +4880 "vctzw v22,v6" -func_check +4884 "vctzd v26,v24" -func_check +4888 "vextublx r6,r31,v2" -func_check +4892 "vextuhlx r13,r0,v18" -func_check +4896 "vextuwlx r14,r30,v31" -func_check +4900 "vsrv v15,v12,v14" -func_check +4904 "vextubrx r20,r10,v30" -func_check +4908 "vslv v21,v21,v2" -func_check +4912 "vextuhrx r15,r9,v1" -func_check +4916 "vextuwrx r21,r17,v16" -func_check +4920 "vmsumudm v20,v21,v22,v23" - -## vsx3.d -func_check +4924 "lxvx vs34,r6,r25" -func_check +4928 "lxvx vs20,0,r10" -func_check +4932 "lxvl vs20,r24,r10" -func_check +4936 "lxvl vs54,0,r29" -func_check +4940 "lxvll vs24,r20,r19" -func_check +4944 "lxvll vs34,0,r14" -func_check +4948 "mfvsrld r2,vs22" -func_check +4952 "lxvwsx vs58,r26,r25" -func_check +4956 "lxvwsx vs55,0,r29" -func_check +4960 "stxvx vs14,r21,r4" -func_check +4964 "stxvx vs30,0,r22" -func_check +4968 "stxvl vs0,r26,r4" -func_check +4972 "stxvl vs37,0,r22" -func_check +4976 "mtvsrws vs24,r10" -func_check +4980 "stxvll vs30,r21,r15" -func_check +4984 "stxvll vs39,0,r14" -func_check +4988 "mtvsrdd vs12,r6,r5" -func_check +4992 "mtvsrdd vs38,0,r21" -func_check +4996 "lxsibzx vs59,r28,r6" -func_check +5000 "lxsibzx vs30,0,r8" -func_check +5004 "lxvh8x vs42,r23,r17" -func_check +5008 "lxvh8x vs36,0,r5" -func_check +5012 "lxsihzx vs12,r9,r11" -func_check +5016 "lxsihzx vs49,0,r13" -func_check +5020 "lxvb16x vs37,r3,r19" -func_check +5024 "lxvb16x vs0,0,r30" -func_check +5028 "stxsibx vs2,r30,r6" -func_check +5032 "stxsibx vs12,0,r13" -func_check +5036 "stxvh8x vs16,r29,r8" -func_check +5040 "stxvh8x vs55,0,r10" -func_check +5044 "stxsihx vs34,r2,r23" -func_check +5048 "stxsihx vs60,0,r23" -func_check +5052 "stxvb16x vs23,r14,r12" -func_check +5056 "stxvb16x vs19,0,r5" -func_check +5060 "lxsd v24,0\\(0\\)" -func_check +5064 "lxsd v15,16\\(r21\\)" -func_check +5068 "lxssp v6,0\\(0\\)" -func_check +5072 "lxssp v23,16\\(r9\\)" -func_check +5076 "xscmpeqdp vs18,vs51,vs33" -func_check +5080 "xscmpgtdp vs2,vs26,vs34" -func_check +5084 "xscmpgedp vs5,vs26,vs20" -func_check +5088 "xxperm vs44,vs10,vs43" -func_check +5092 "xxpermr vs41,vs20,vs5" -func_check +5096 "xscmpexpdp cr4,vs18,vs55" -func_check +5100 "xxextractuw vs23,vs37,3" -func_check +5104 "xxspltib vs54,235" -func_check +5108 "xxinsertw vs15,vs30,4" -func_check +5112 "xsmaxcdp vs12,vs11,vs7" -func_check +5116 "xsmincdp vs32,vs25,vs24" -func_check +5120 "xsmaxjdp vs25,vs53,vs12" -func_check +5124 "xststdcsp cr2,vs36,127" -func_check +5128 "xsminjdp vs32,vs21,vs45" -func_check +5132 "xsxexpdp r17,vs50" -func_check +5136 "xsxsigdp r7,vs40" -func_check +5140 "xscvhpdp vs54,vs34" -func_check +5144 "xscvdphp vs58,vs54" -func_check +5148 "xststdcdp cr0,vs38,127" -func_check +5152 "xvtstdcsp vs56,vs53,127" -func_check +5156 "xviexpsp vs54,vs20,vs52" -func_check +5160 "xsiexpdp vs57,r28,r29" -func_check +5164 "xvxexpdp vs1,vs20" -func_check +5168 "xvxsigdp vs54,vs59" -func_check +5172 "xxbrh vs18,vs37" -func_check +5176 "xvxexpsp vs14,vs1" -func_check +5180 "xvxsigsp vs52,vs13" -func_check +5184 "xxbrw vs19,vs5" -func_check +5188 "xxbrd vs51,vs55" -func_check +5192 "xvcvhpsp vs35,vs17" -func_check +5196 "xvcvsphp vs15,vs45" -func_check +5200 "xxbrq vs17,vs31" -func_check +5204 "xvtstdcdp vs16,vs12,127" -func_check +5208 "xviexpdp vs27,vs9,vs8" -func_check +5212 "lxv vs4,0\\(0\\)" -func_check +5216 "lxv vs40,16\\(r20\\)" -func_check +5220 "stxv vs50,0\\(0\\)" -func_check +5224 "stxv vs8,16\\(r16\\)" -func_check +5228 "stxsd v3,0\\(0\\)" -func_check +5232 "stxsd v17,16\\(r2\\)" -func_check +5236 "stxssp v13,0\\(0\\)" -func_check +5240 "stxssp v17,16\\(r13\\)" -func_check +5244 "xsaddqp v8,v10,v18" -func_check +5248 "xsaddqpo v5,v1,v29" -func_check +5252 "xsrqpi 0,v12,v18,3" -func_check +5256 "xsrqpix 1,v31,v19,0" -func_check +5260 "xsmulqp v14,v1,v6" -func_check +5264 "xsmulqpo v17,v7,v27" -func_check +5268 "xsrqpxp 0,v4,v11,0" -func_check +5272 "xscpsgnqp v29,v23,v28" -func_check +5276 "xscmpoqp cr7,v13,v27" -func_check +5280 "xscmpexpqp cr5,v21,v6" -func_check +5284 "xsmaddqp v2,v19,v4" -func_check +5288 "xsmaddqpo v30,v7,v16" -func_check +5292 "xsmsubqp v21,v30,v15" -func_check +5296 "xsmsubqpo v12,v17,v30" -func_check +5300 "xsnmaddqp v6,v30,v12" -func_check +5304 "xsnmaddqpo v12,v22,v12" -func_check +5308 "xsnmsubqp v10,v29,v27" -func_check +5312 "xsnmsubqpo v29,v29,v13" -func_check +5316 "xssubqp v19,v27,v4" -func_check +5320 "xssubqpo v13,v8,v1" -func_check +5324 "xsdivqp v8,v3,v27" -func_check +5328 "xsdivqpo v24,v20,v27" -func_check +5332 "xscmpuqp cr7,v14,v4" -func_check +5336 "xststdcqp cr4,v2,127" -func_check +5340 "xsabsqp v31,v22" -func_check +5344 "xsxexpqp v25,v3" -func_check +5348 "xsnabsqp v10,v28" -func_check +5352 "xsnegqp v19,v31" -func_check +5356 "xsxsigqp v11,v13" -func_check +5360 "xssqrtqp v13,v14" -func_check +5364 "xssqrtqpo v1,v27" -func_check +5368 "xscvqpuwz v3,v7" -func_check +5372 "xscvudqp v20,v18" -func_check +5376 "xscvqpswz v29,v29" -func_check +5380 "xscvsdqp v2,v28" -func_check +5384 "xscvqpudz v23,v4" -func_check +5388 "xscvqpdp v3,v20" -func_check +5392 "xscvqpdpo v1,v3" -func_check +5396 "xscvdpqp v19,v12" -func_check +5400 "xscvqpsdz v13,v4" -func_check +5404 "xsiexpqp v7,v24,v7" diff --git a/gdb/testsuite/gdb.arch/powerpc-power.s b/gdb/testsuite/gdb.arch/powerpc-power.s deleted file mode 100644 index 91dbac7..0000000 --- a/gdb/testsuite/gdb.arch/powerpc-power.s +++ /dev/null @@ -1,1389 +0,0 @@ -/* This testcase is part of GDB, the GNU debugger. - - Copyright 2014-2017 Free Software Foundation, Inc. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - - .text - .globl func -func: - -## power7.d - .long 0x7c642e98 /* <+0>: lxvd2x vs3,r4,r5 */ - .long 0x7d642e99 /* <+4>: lxvd2x vs43,r4,r5 */ - .long 0x7c642f98 /* <+8>: stxvd2x vs3,r4,r5 */ - .long 0x7d642f99 /* <+12>: stxvd2x vs43,r4,r5 */ - .long 0xf0642850 /* <+16>: xxmrghd vs3,vs4,vs5 */ - .long 0xf16c6857 /* <+20>: xxmrghd vs43,vs44,vs45 */ - .long 0xf0642b50 /* <+24>: xxmrgld vs3,vs4,vs5 */ - .long 0xf16c6b57 /* <+28>: xxmrgld vs43,vs44,vs45 */ - .long 0xf0642850 /* <+32>: xxmrghd vs3,vs4,vs5 */ - .long 0xf16c6857 /* <+36>: xxmrghd vs43,vs44,vs45 */ - .long 0xf0642b50 /* <+40>: xxmrgld vs3,vs4,vs5 */ - .long 0xf16c6b57 /* <+44>: xxmrgld vs43,vs44,vs45 */ - .long 0xf0642950 /* <+48>: xxpermdi vs3,vs4,vs5,1 */ - .long 0xf16c6957 /* <+52>: xxpermdi vs43,vs44,vs45,1 */ - .long 0xf0642a50 /* <+56>: xxpermdi vs3,vs4,vs5,2 */ - .long 0xf16c6a57 /* <+60>: xxpermdi vs43,vs44,vs45,2 */ - .long 0xf0642780 /* <+64>: xvmovdp vs3,vs4 */ - .long 0xf16c6787 /* <+68>: xvmovdp vs43,vs44 */ - .long 0xf0642780 /* <+72>: xvmovdp vs3,vs4 */ - .long 0xf16c6787 /* <+76>: xvmovdp vs43,vs44 */ - .long 0xf0642f80 /* <+80>: xvcpsgndp vs3,vs4,vs5 */ - .long 0xf16c6f87 /* <+84>: xvcpsgndp vs43,vs44,vs45 */ - .long 0x4c000324 /* <+88>: doze */ - .long 0x4c000364 /* <+92>: nap */ - .long 0x4c0003a4 /* <+96>: sleep */ - .long 0x4c0003e4 /* <+100>: rvwinkle */ - .long 0x7c830134 /* <+104>: prtyw r3,r4 */ - .long 0x7dcd0174 /* <+108>: prtyd r13,r14 */ - .long 0x7d5c02a6 /* <+112>: mfcfar r10 */ - .long 0x7d7c03a6 /* <+116>: mtcfar r11 */ - .long 0x7c832bf8 /* <+120>: cmpb r3,r4,r5 */ - .long 0x7d4b662a /* <+124>: lwzcix r10,r11,r12 */ - .long 0xee119004 /* <+128>: dadd f16,f17,f18 */ - .long 0xfe96c004 /* <+132>: daddq f20,f22,f24 */ - .long 0x7c60066c /* <+136>: dss 3 */ - .long 0x7e00066c /* <+140>: dssall */ - .long 0x7c2522ac /* <+144>: dst r5,r4,1 */ - .long 0x7e083aac /* <+148>: dstt r8,r7,0 */ - .long 0x7c6532ec /* <+152>: dstst r5,r6,3 */ - .long 0x7e442aec /* <+156>: dststt r4,r5,2 */ - .long 0x7d4b6356 /* <+160>: divwe r10,r11,r12 */ - .long 0x7d6c6b57 /* <+164>: divwe. r11,r12,r13 */ - .long 0x7d8d7756 /* <+168>: divweo r12,r13,r14 */ - .long 0x7dae7f57 /* <+172>: divweo. r13,r14,r15 */ - .long 0x7d4b6316 /* <+176>: divweu r10,r11,r12 */ - .long 0x7d6c6b17 /* <+180>: divweu. r11,r12,r13 */ - .long 0x7d8d7716 /* <+184>: divweuo r12,r13,r14 */ - .long 0x7dae7f17 /* <+188>: divweuo. r13,r14,r15 */ - .long 0x7e27d9f8 /* <+192>: bpermd r7,r17,r27 */ - .long 0x7e8a02f4 /* <+196>: popcntw r10,r20 */ - .long 0x7e8a03f4 /* <+200>: popcntd r10,r20 */ - .long 0x7e95b428 /* <+204>: ldbrx r20,r21,r22 */ - .long 0x7e95b528 /* <+208>: stdbrx r20,r21,r22 */ - .long 0x7d4056ee /* <+212>: lfiwzx f10,0,r10 */ - .long 0x7d4956ee /* <+216>: lfiwzx f10,r9,r10 */ - .long 0xec802e9c /* <+220>: fcfids f4,f5 */ - .long 0xec802e9d /* <+224>: fcfids. f4,f5 */ - .long 0xec802f9c /* <+228>: fcfidus f4,f5 */ - .long 0xec802f9d /* <+232>: fcfidus. f4,f5 */ - .long 0xfc80291c /* <+236>: fctiwu f4,f5 */ - .long 0xfc80291d /* <+240>: fctiwu. f4,f5 */ - .long 0xfc80291e /* <+244>: fctiwuz f4,f5 */ - .long 0xfc80291f /* <+248>: fctiwuz. f4,f5 */ - .long 0xfc802f5c /* <+252>: fctidu f4,f5 */ - .long 0xfc802f5d /* <+256>: fctidu. f4,f5 */ - .long 0xfc802f5e /* <+260>: fctiduz f4,f5 */ - .long 0xfc802f5f /* <+264>: fctiduz. f4,f5 */ - .long 0xfc802f9c /* <+268>: fcfidu f4,f5 */ - .long 0xfc802f9d /* <+272>: fcfidu. f4,f5 */ - .long 0xfc0a5900 /* <+276>: ftdiv cr0,f10,f11 */ - .long 0xff8a5900 /* <+280>: ftdiv cr7,f10,f11 */ - .long 0xfc005140 /* <+284>: ftsqrt cr0,f10 */ - .long 0xff805140 /* <+288>: ftsqrt cr7,f10 */ - .long 0x7e084a2c /* <+292>: dcbtt r8,r9 */ - .long 0x7e0849ec /* <+296>: dcbtstt r8,r9 */ - .long 0xed406644 /* <+300>: dcffix f10,f12 */ - .long 0xee80b645 /* <+304>: dcffix. f20,f22 */ - .long 0xfdc07830 /* <+308>: fre f14,f15 */ - .long 0xfdc07831 /* <+312>: fre. f14,f15 */ - .long 0xedc07830 /* <+316>: fres f14,f15 */ - .long 0xedc07831 /* <+320>: fres. f14,f15 */ - .long 0xfdc07834 /* <+324>: frsqrte f14,f15 */ - .long 0xfdc07835 /* <+328>: frsqrte. f14,f15 */ - .long 0xedc07834 /* <+332>: frsqrtes f14,f15 */ - .long 0xedc07835 /* <+336>: frsqrtes. f14,f15 */ - .long 0x7c43271e /* <+340>: isel r2,r3,r4,28 */ - .long 0x7f7bdb78 /* <+344>: yield */ - .long 0x7f7bdb78 /* <+348>: yield */ - .long 0x60420000 /* <+352>: ori r2,r2,0 */ - .long 0x60000000 /* <+356>: nop */ - .long 0x60000000 /* <+360>: nop */ - .long 0x60420000 /* <+364>: ori r2,r2,0 */ - .long 0x7fbdeb78 /* <+368>: mdoio */ - .long 0x7fbdeb78 /* <+372>: mdoio */ - .long 0x7fdef378 /* <+376>: mdoom */ - .long 0x7fdef378 /* <+380>: mdoom */ - .long 0x7d40e2a6 /* <+384>: mfppr r10 */ - .long 0x7d62e2a6 /* <+388>: mfppr32 r11 */ - .long 0x7d80e3a6 /* <+392>: mtppr r12 */ - .long 0x7da2e3a6 /* <+396>: mtppr32 r13 */ - .long 0x7d605264 /* <+400>: tlbie r10,r11 */ - -## altivec.d - .long 0x7c60066c /* <+404>: dss 3 */ - .long 0x7e00066c /* <+408>: dssall */ - .long 0x7c2522ac /* <+412>: dst r5,r4,1 */ - .long 0x7e083aac /* <+416>: dstt r8,r7,0 */ - .long 0x7c6532ec /* <+420>: dstst r5,r6,3 */ - .long 0x7e442aec /* <+424>: dststt r4,r5,2 */ - .long 0x7fd6c00e /* <+428>: lvebx v30,r22,r24 */ - .long 0x7ea0c00e /* <+432>: lvebx v21,0,r24 */ - .long 0x7d50104e /* <+436>: lvehx v10,r16,r2 */ - .long 0x7e80b84e /* <+440>: lvehx v20,0,r23 */ - .long 0x7e24908e /* <+444>: lvewx v17,r4,r18 */ - .long 0x7ee0408e /* <+448>: lvewx v23,0,r8 */ - .long 0x7cc0c80c /* <+452>: lvsl v6,0,r25 */ - .long 0x7c40300c /* <+456>: lvsl v2,0,r6 */ - .long 0x7ed0604c /* <+460>: lvsr v22,r16,r12 */ - .long 0x7c00e84c /* <+464>: lvsr v0,0,r29 */ - .long 0x7de56ace /* <+468>: lvxl v15,r5,r13 */ - .long 0x7e60bace /* <+472>: lvxl v19,0,r23 */ - .long 0x7ec110ce /* <+476>: lvx v22,r1,r2 */ - .long 0x7e4088ce /* <+480>: lvx v18,0,r17 */ - .long 0x7fe042a6 /* <+484>: mfvrsave r31 */ - .long 0x13000604 /* <+488>: mfvscr v24 */ - .long 0x7d4043a6 /* <+492>: mtvrsave r10 */ - .long 0x1000ce44 /* <+496>: mtvscr v25 */ - .long 0x7e5b510e /* <+500>: stvebx v18,r27,r10 */ - .long 0x7e00310e /* <+504>: stvebx v16,0,r6 */ - .long 0x7e2d814e /* <+508>: stvehx v17,r13,r16 */ - .long 0x7ee0a14e /* <+512>: stvehx v23,0,r20 */ - .long 0x7d73f98e /* <+516>: stvewx v11,r19,r31 */ - .long 0x7fe0098e /* <+520>: stvewx v31,0,r1 */ - .long 0x7f558bce /* <+524>: stvxl v26,r21,r17 */ - .long 0x7da0b3ce /* <+528>: stvxl v13,0,r22 */ - .long 0x7d7ff9ce /* <+532>: stvx v11,r31,r31 */ - .long 0x7fc081ce /* <+536>: stvx v30,0,r16 */ - .long 0x1307e180 /* <+540>: vaddcuw v24,v7,v28 */ - .long 0x107e580a /* <+544>: vaddfp v3,v30,v11 */ - .long 0x111c4b00 /* <+548>: vaddsbs v8,v28,v9 */ - .long 0x10e52340 /* <+552>: vaddshs v7,v5,v4 */ - .long 0x12dadb80 /* <+556>: vaddsws v22,v26,v27 */ - .long 0x120ee000 /* <+560>: vaddubm v16,v14,v28 */ - .long 0x10c1ca00 /* <+564>: vaddubs v6,v1,v25 */ - .long 0x10443040 /* <+568>: vadduhm v2,v4,v6 */ - .long 0x13554240 /* <+572>: vadduhs v26,v21,v8 */ - .long 0x13bf0880 /* <+576>: vadduwm v29,v31,v1 */ - .long 0x12ed2280 /* <+580>: vadduws v23,v13,v4 */ - .long 0x13d04c44 /* <+584>: vandc v30,v16,v9 */ - .long 0x106ddc04 /* <+588>: vand v3,v13,v27 */ - .long 0x10868d02 /* <+592>: vavgsb v4,v6,v17 */ - .long 0x12fc9d42 /* <+596>: vavgsh v23,v28,v19 */ - .long 0x110ffd82 /* <+600>: vavgsw v8,v15,v31 */ - .long 0x10c7cc02 /* <+604>: vavgub v6,v7,v25 */ - .long 0x13365442 /* <+608>: vavguh v25,v22,v10 */ - .long 0x1077ec82 /* <+612>: vavguw v3,v23,v29 */ - .long 0x11c613ca /* <+616>: vctsxs v14,v2,6 */ - .long 0x1134fb8a /* <+620>: vctuxs v9,v31,20 */ - .long 0x1303f34a /* <+624>: vcfsx v24,v30,3 */ - .long 0x123dab0a /* <+628>: vcfux v17,v21,29 */ - .long 0x125c03c6 /* <+632>: vcmpbfp v18,v28,v0 */ - .long 0x127a1fc6 /* <+636>: vcmpbfp. v19,v26,v3 */ - .long 0x120258c6 /* <+640>: vcmpeqfp v16,v2,v11 */ - .long 0x12ed6cc6 /* <+644>: vcmpeqfp. v23,v13,v13 */ - .long 0x13335006 /* <+648>: vcmpequb v25,v19,v10 */ - .long 0x124b1406 /* <+652>: vcmpequb. v18,v11,v2 */ - .long 0x11393846 /* <+656>: vcmpequh v9,v25,v7 */ - .long 0x11d8ac46 /* <+660>: vcmpequh. v14,v24,v21 */ - .long 0x130c2886 /* <+664>: vcmpequw v24,v12,v5 */ - .long 0x12700c86 /* <+668>: vcmpequw. v19,v16,v1 */ - .long 0x12f181c6 /* <+672>: vcmpgefp v23,v17,v16 */ - .long 0x127d8dc6 /* <+676>: vcmpgefp. v19,v29,v17 */ - .long 0x121c6ac6 /* <+680>: vcmpgtfp v16,v28,v13 */ - .long 0x11d83ec6 /* <+684>: vcmpgtfp. v14,v24,v7 */ - .long 0x12163306 /* <+688>: vcmpgtsb v16,v22,v6 */ - .long 0x104c7706 /* <+692>: vcmpgtsb. v2,v12,v14 */ - .long 0x1383eb46 /* <+696>: vcmpgtsh v28,v3,v29 */ - .long 0x12136f46 /* <+700>: vcmpgtsh. v16,v19,v13 */ - .long 0x11e02b86 /* <+704>: vcmpgtsw v15,v0,v5 */ - .long 0x12ad0786 /* <+708>: vcmpgtsw. v21,v13,v0 */ - .long 0x10aaf206 /* <+712>: vcmpgtub v5,v10,v30 */ - .long 0x10ed5606 /* <+716>: vcmpgtub. v7,v13,v10 */ - .long 0x130f8246 /* <+720>: vcmpgtuh v24,v15,v16 */ - .long 0x1335de46 /* <+724>: vcmpgtuh. v25,v21,v27 */ - .long 0x123b3286 /* <+728>: vcmpgtuw v17,v27,v6 */ - .long 0x1115de86 /* <+732>: vcmpgtuw. v8,v21,v27 */ - .long 0x102e0b4a /* <+736>: vcfsx v1,v1,14 */ - .long 0x10997bca /* <+740>: vctsxs v4,v15,25 */ - .long 0x138ebb8a /* <+744>: vctuxs v28,v23,14 */ - .long 0x10c0330a /* <+748>: vcfux v6,v6,0 */ - .long 0x1000418a /* <+752>: vexptefp v0,v8 */ - .long 0x12c0d9ca /* <+756>: vlogefp v22,v27 */ - .long 0x12f2916e /* <+760>: vmaddfp v23,v18,v5,v18 */ - .long 0x11addc0a /* <+764>: vmaxfp v13,v13,v27 */ - .long 0x11177102 /* <+768>: vmaxsb v8,v23,v14 */ - .long 0x12710142 /* <+772>: vmaxsh v19,v17,v0 */ - .long 0x1263b182 /* <+776>: vmaxsw v19,v3,v22 */ - .long 0x12fee002 /* <+780>: vmaxub v23,v30,v28 */ - .long 0x1134b842 /* <+784>: vmaxuh v9,v20,v23 */ - .long 0x12b30882 /* <+788>: vmaxuw v21,v19,v1 */ - .long 0x12cd2da0 /* <+792>: vmhaddshs v22,v13,v5,v22 */ - .long 0x13e01ca1 /* <+796>: vmhraddshs v31,v0,v3,v18 */ - .long 0x1055c44a /* <+800>: vminfp v2,v21,v24 */ - .long 0x12865302 /* <+804>: vminsb v20,v6,v10 */ - .long 0x125bd342 /* <+808>: vminsh v18,v27,v26 */ - .long 0x10640b82 /* <+812>: vminsw v3,v4,v1 */ - .long 0x10e06a02 /* <+816>: vminub v7,v0,v13 */ - .long 0x100c3242 /* <+820>: vminuh v0,v12,v6 */ - .long 0x10c30a82 /* <+824>: vminuw v6,v3,v1 */ - .long 0x107d1ea2 /* <+828>: vmladduhm v3,v29,v3,v26 */ - .long 0x12a5f80c /* <+832>: vmrghb v21,v5,v31 */ - .long 0x12b8004c /* <+836>: vmrghh v21,v24,v0 */ - .long 0x1200b08c /* <+840>: vmrghw v16,v0,v22 */ - .long 0x1031810c /* <+844>: vmrglb v1,v17,v16 */ - .long 0x11c8794c /* <+848>: vmrglh v14,v8,v15 */ - .long 0x13f5298c /* <+852>: vmrglw v31,v21,v5 */ - .long 0x13094c84 /* <+856>: vmr v24,v9 */ - .long 0x13094c84 /* <+860>: vmr v24,v9 */ - .long 0x10187de5 /* <+864>: vmsummbm v0,v24,v15,v23 */ - .long 0x10243e68 /* <+868>: vmsumshm v1,v4,v7,v25 */ - .long 0x11286fe9 /* <+872>: vmsumshs v9,v8,v13,v31 */ - .long 0x12ff67a4 /* <+876>: vmsumubm v23,v31,v12,v30 */ - .long 0x13a0d566 /* <+880>: vmsumuhm v29,v0,v26,v21 */ - .long 0x136ec967 /* <+884>: vmsumuhs v27,v14,v25,v5 */ - .long 0x11597308 /* <+888>: vmulesb v10,v25,v14 */ - .long 0x10324348 /* <+892>: vmulesh v1,v18,v8 */ - .long 0x122e4a08 /* <+896>: vmuleub v17,v14,v9 */ - .long 0x10ba4a48 /* <+900>: vmuleuh v5,v26,v9 */ - .long 0x12b23108 /* <+904>: vmulosb v21,v18,v6 */ - .long 0x10854148 /* <+908>: vmulosh v4,v5,v8 */ - .long 0x10499808 /* <+912>: vmuloub v2,v9,v19 */ - .long 0x13a52048 /* <+916>: vmulouh v29,v5,v4 */ - .long 0x110229af /* <+920>: vnmsubfp v8,v2,v6,v5 */ - .long 0x13e95504 /* <+924>: vnor v31,v9,v10 */ - .long 0x133ffd04 /* <+928>: vnot v25,v31 */ - .long 0x133ffd04 /* <+932>: vnot v25,v31 */ - .long 0x12e71484 /* <+936>: vor v23,v7,v2 */ - .long 0x101cb66b /* <+940>: vperm v0,v28,v22,v25 */ - .long 0x12198b0e /* <+944>: vpkpx v16,v25,v17 */ - .long 0x1190898e /* <+948>: vpkshss v12,v16,v17 */ - .long 0x1033b90e /* <+952>: vpkshus v1,v19,v23 */ - .long 0x132769ce /* <+956>: vpkswss v25,v7,v13 */ - .long 0x1098514e /* <+960>: vpkswus v4,v24,v10 */ - .long 0x113b600e /* <+964>: vpkuhum v9,v27,v12 */ - .long 0x12cac88e /* <+968>: vpkuhus v22,v10,v25 */ - .long 0x13d2004e /* <+972>: vpkuwum v30,v18,v0 */ - .long 0x10e3b0ce /* <+976>: vpkuwus v7,v3,v22 */ - .long 0x1300e10a /* <+980>: vrefp v24,v28 */ - .long 0x12209aca /* <+984>: vrfim v17,v19 */ - .long 0x1300ca0a /* <+988>: vrfin v24,v25 */ - .long 0x10602a8a /* <+992>: vrfip v3,v5 */ - .long 0x1100524a /* <+996>: vrfiz v8,v10 */ - .long 0x1352f004 /* <+1000>: vrlb v26,v18,v30 */ - .long 0x1211c844 /* <+1004>: vrlh v16,v17,v25 */ - .long 0x12fe4884 /* <+1008>: vrlw v23,v30,v9 */ - .long 0x1040914a /* <+1012>: vrsqrtefp v2,v18 */ - .long 0x128e92aa /* <+1016>: vsel v20,v14,v18,v10 */ - .long 0x13396104 /* <+1020>: vslb v25,v25,v12 */ - .long 0x112961ec /* <+1024>: vsldoi v9,v9,v12,7 */ - .long 0x11c25944 /* <+1028>: vslh v14,v2,v11 */ - .long 0x13c5340c /* <+1032>: vslo v30,v5,v6 */ - .long 0x12de49c4 /* <+1036>: vsl v22,v30,v9 */ - .long 0x135a1984 /* <+1040>: vslw v26,v26,v3 */ - .long 0x1026a20c /* <+1044>: vspltb v1,v20,6 */ - .long 0x1203924c /* <+1048>: vsplth v16,v18,3 */ - .long 0x1333030c /* <+1052>: vspltisb v25,-13 */ - .long 0x12ca034c /* <+1056>: vspltish v22,10 */ - .long 0x11ad038c /* <+1060>: vspltisw v13,13 */ - .long 0x1122928c /* <+1064>: vspltw v9,v18,2 */ - .long 0x11d60304 /* <+1068>: vsrab v14,v22,v0 */ - .long 0x118c9344 /* <+1072>: vsrah v12,v12,v18 */ - .long 0x10426b84 /* <+1076>: vsraw v2,v2,v13 */ - .long 0x10fb2a04 /* <+1080>: vsrb v7,v27,v5 */ - .long 0x10ebea44 /* <+1084>: vsrh v7,v11,v29 */ - .long 0x125efc4c /* <+1088>: vsro v18,v30,v31 */ - .long 0x1049e2c4 /* <+1092>: vsr v2,v9,v28 */ - .long 0x10190284 /* <+1096>: vsrw v0,v25,v0 */ - .long 0x13025580 /* <+1100>: vsubcuw v24,v2,v10 */ - .long 0x12d8a04a /* <+1104>: vsubfp v22,v24,v20 */ - .long 0x11566f00 /* <+1108>: vsubsbs v10,v22,v13 */ - .long 0x1311e740 /* <+1112>: vsubshs v24,v17,v28 */ - .long 0x115a0780 /* <+1116>: vsubsws v10,v26,v0 */ - .long 0x120bc400 /* <+1120>: vsububm v16,v11,v24 */ - .long 0x11750e00 /* <+1124>: vsububs v11,v21,v1 */ - .long 0x10ccc440 /* <+1128>: vsubuhm v6,v12,v24 */ - .long 0x13cb4e40 /* <+1132>: vsubuhs v30,v11,v9 */ - .long 0x12746c80 /* <+1136>: vsubuwm v19,v20,v13 */ - .long 0x12593680 /* <+1140>: vsubuws v18,v25,v6 */ - .long 0x132a9688 /* <+1144>: vsum2sws v25,v10,v18 */ - .long 0x11b0af08 /* <+1148>: vsum4sbs v13,v16,v21 */ - .long 0x12e82648 /* <+1152>: vsum4shs v23,v8,v4 */ - .long 0x138df608 /* <+1156>: vsum4ubs v28,v13,v30 */ - .long 0x12ca4788 /* <+1160>: vsumsws v22,v10,v8 */ - .long 0x1300734e /* <+1164>: vupkhpx v24,v14 */ - .long 0x1040b20e /* <+1168>: vupkhsb v2,v22 */ - .long 0x1200124e /* <+1172>: vupkhsh v16,v2 */ - .long 0x1140d3ce /* <+1176>: vupklpx v10,v26 */ - .long 0x11e0e28e /* <+1180>: vupklsb v15,v28 */ - .long 0x110042ce /* <+1184>: vupklsh v8,v8 */ - .long 0x13201cc4 /* <+1188>: vxor v25,v0,v3 */ - -## vsd.d - .long 0x7d0aa499 /* <+1192>: lxsdx vs40,r10,r20 */ - .long 0x7d0aa699 /* <+1196>: lxvd2x vs40,r10,r20 */ - .long 0x7d0aa299 /* <+1200>: lxvdsx vs40,r10,r20 */ - .long 0x7d0aa619 /* <+1204>: lxvw4x vs40,r10,r20 */ - .long 0x7d0aa599 /* <+1208>: stxsdx vs40,r10,r20 */ - .long 0x7d0aa799 /* <+1212>: stxvd2x vs40,r10,r20 */ - .long 0x7d0aa719 /* <+1216>: stxvw4x vs40,r10,r20 */ - .long 0xf100e567 /* <+1220>: xsabsdp vs40,vs60 */ - .long 0xf112e107 /* <+1224>: xsadddp vs40,vs50,vs60 */ - .long 0xf092e15e /* <+1228>: xscmpodp cr1,vs50,vs60 */ - .long 0xf092e11e /* <+1232>: xscmpudp cr1,vs50,vs60 */ - .long 0xf112e587 /* <+1236>: xscpsgndp vs40,vs50,vs60 */ - .long 0xf100e427 /* <+1240>: xscvdpsp vs40,vs60 */ - .long 0xf100e563 /* <+1244>: xscvdpsxds vs40,vs60 */ - .long 0xf100e163 /* <+1248>: xscvdpsxws vs40,vs60 */ - .long 0xf100e523 /* <+1252>: xscvdpuxds vs40,vs60 */ - .long 0xf100e123 /* <+1256>: xscvdpuxws vs40,vs60 */ - .long 0xf100e527 /* <+1260>: xscvspdp vs40,vs60 */ - .long 0xf100e5e3 /* <+1264>: xscvsxddp vs40,vs60 */ - .long 0xf100e5a3 /* <+1268>: xscvuxddp vs40,vs60 */ - .long 0xf112e1c7 /* <+1272>: xsdivdp vs40,vs50,vs60 */ - .long 0xf112e10f /* <+1276>: xsmaddadp vs40,vs50,vs60 */ - .long 0xf112e14f /* <+1280>: xsmaddmdp vs40,vs50,vs60 */ - .long 0xf112e507 /* <+1284>: xsmaxdp vs40,vs50,vs60 */ - .long 0xf112e547 /* <+1288>: xsmindp vs40,vs50,vs60 */ - .long 0xf112e18f /* <+1292>: xsmsubadp vs40,vs50,vs60 */ - .long 0xf112e1cf /* <+1296>: xsmsubmdp vs40,vs50,vs60 */ - .long 0xf112e187 /* <+1300>: xsmuldp vs40,vs50,vs60 */ - .long 0xf100e5a7 /* <+1304>: xsnabsdp vs40,vs60 */ - .long 0xf100e5e7 /* <+1308>: xsnegdp vs40,vs60 */ - .long 0xf112e50f /* <+1312>: xsnmaddadp vs40,vs50,vs60 */ - .long 0xf112e54f /* <+1316>: xsnmaddmdp vs40,vs50,vs60 */ - .long 0xf112e58f /* <+1320>: xsnmsubadp vs40,vs50,vs60 */ - .long 0xf112e5cf /* <+1324>: xsnmsubmdp vs40,vs50,vs60 */ - .long 0xf100e127 /* <+1328>: xsrdpi vs40,vs60 */ - .long 0xf100e1af /* <+1332>: xsrdpic vs40,vs60 */ - .long 0xf100e1e7 /* <+1336>: xsrdpim vs40,vs60 */ - .long 0xf100e1a7 /* <+1340>: xsrdpip vs40,vs60 */ - .long 0xf100e167 /* <+1344>: xsrdpiz vs40,vs60 */ - .long 0xf100e16b /* <+1348>: xsredp vs40,vs60 */ - .long 0xf100e12b /* <+1352>: xsrsqrtedp vs40,vs60 */ - .long 0xf100e12f /* <+1356>: xssqrtdp vs40,vs60 */ - .long 0xf112e147 /* <+1360>: xssubdp vs40,vs50,vs60 */ - .long 0xf092e1ee /* <+1364>: xstdivdp cr1,vs50,vs60 */ - .long 0xf080e1aa /* <+1368>: xstsqrtdp cr1,vs60 */ - .long 0xf100e767 /* <+1372>: xvabsdp vs40,vs60 */ - .long 0xf100e667 /* <+1376>: xvabssp vs40,vs60 */ - .long 0xf112e307 /* <+1380>: xvadddp vs40,vs50,vs60 */ - .long 0xf112e207 /* <+1384>: xvaddsp vs40,vs50,vs60 */ - .long 0xf112e31f /* <+1388>: xvcmpeqdp vs40,vs50,vs60 */ - .long 0xf112e71f /* <+1392>: xvcmpeqdp. vs40,vs50,vs60 */ - .long 0xf112e21f /* <+1396>: xvcmpeqsp vs40,vs50,vs60 */ - .long 0xf112e61f /* <+1400>: xvcmpeqsp. vs40,vs50,vs60 */ - .long 0xf112e39f /* <+1404>: xvcmpgedp vs40,vs50,vs60 */ - .long 0xf112e79f /* <+1408>: xvcmpgedp. vs40,vs50,vs60 */ - .long 0xf112e29f /* <+1412>: xvcmpgesp vs40,vs50,vs60 */ - .long 0xf112e69f /* <+1416>: xvcmpgesp. vs40,vs50,vs60 */ - .long 0xf112e35f /* <+1420>: xvcmpgtdp vs40,vs50,vs60 */ - .long 0xf112e75f /* <+1424>: xvcmpgtdp. vs40,vs50,vs60 */ - .long 0xf112e25f /* <+1428>: xvcmpgtsp vs40,vs50,vs60 */ - .long 0xf112e65f /* <+1432>: xvcmpgtsp. vs40,vs50,vs60 */ - .long 0xf112e787 /* <+1436>: xvcpsgndp vs40,vs50,vs60 */ - .long 0xf11ce787 /* <+1440>: xvmovdp vs40,vs60 */ - .long 0xf11ce787 /* <+1444>: xvmovdp vs40,vs60 */ - .long 0xf112e687 /* <+1448>: xvcpsgnsp vs40,vs50,vs60 */ - .long 0xf11ce687 /* <+1452>: xvmovsp vs40,vs60 */ - .long 0xf11ce687 /* <+1456>: xvmovsp vs40,vs60 */ - .long 0xf100e627 /* <+1460>: xvcvdpsp vs40,vs60 */ - .long 0xf100e763 /* <+1464>: xvcvdpsxds vs40,vs60 */ - .long 0xf100e363 /* <+1468>: xvcvdpsxws vs40,vs60 */ - .long 0xf100e723 /* <+1472>: xvcvdpuxds vs40,vs60 */ - .long 0xf100e323 /* <+1476>: xvcvdpuxws vs40,vs60 */ - .long 0xf100e727 /* <+1480>: xvcvspdp vs40,vs60 */ - .long 0xf100e663 /* <+1484>: xvcvspsxds vs40,vs60 */ - .long 0xf100e263 /* <+1488>: xvcvspsxws vs40,vs60 */ - .long 0xf100e623 /* <+1492>: xvcvspuxds vs40,vs60 */ - .long 0xf100e223 /* <+1496>: xvcvspuxws vs40,vs60 */ - .long 0xf100e7e3 /* <+1500>: xvcvsxddp vs40,vs60 */ - .long 0xf100e6e3 /* <+1504>: xvcvsxdsp vs40,vs60 */ - .long 0xf100e3e3 /* <+1508>: xvcvsxwdp vs40,vs60 */ - .long 0xf100e2e3 /* <+1512>: xvcvsxwsp vs40,vs60 */ - .long 0xf100e7a3 /* <+1516>: xvcvuxddp vs40,vs60 */ - .long 0xf100e6a3 /* <+1520>: xvcvuxdsp vs40,vs60 */ - .long 0xf100e3a3 /* <+1524>: xvcvuxwdp vs40,vs60 */ - .long 0xf100e2a3 /* <+1528>: xvcvuxwsp vs40,vs60 */ - .long 0xf112e3c7 /* <+1532>: xvdivdp vs40,vs50,vs60 */ - .long 0xf112e2c7 /* <+1536>: xvdivsp vs40,vs50,vs60 */ - .long 0xf112e30f /* <+1540>: xvmaddadp vs40,vs50,vs60 */ - .long 0xf112e34f /* <+1544>: xvmaddmdp vs40,vs50,vs60 */ - .long 0xf112e20f /* <+1548>: xvmaddasp vs40,vs50,vs60 */ - .long 0xf112e24f /* <+1552>: xvmaddmsp vs40,vs50,vs60 */ - .long 0xf112e707 /* <+1556>: xvmaxdp vs40,vs50,vs60 */ - .long 0xf112e607 /* <+1560>: xvmaxsp vs40,vs50,vs60 */ - .long 0xf112e747 /* <+1564>: xvmindp vs40,vs50,vs60 */ - .long 0xf112e647 /* <+1568>: xvminsp vs40,vs50,vs60 */ - .long 0xf112e38f /* <+1572>: xvmsubadp vs40,vs50,vs60 */ - .long 0xf112e3cf /* <+1576>: xvmsubmdp vs40,vs50,vs60 */ - .long 0xf112e28f /* <+1580>: xvmsubasp vs40,vs50,vs60 */ - .long 0xf112e2cf /* <+1584>: xvmsubmsp vs40,vs50,vs60 */ - .long 0xf112e387 /* <+1588>: xvmuldp vs40,vs50,vs60 */ - .long 0xf112e287 /* <+1592>: xvmulsp vs40,vs50,vs60 */ - .long 0xf100e7a7 /* <+1596>: xvnabsdp vs40,vs60 */ - .long 0xf100e6a7 /* <+1600>: xvnabssp vs40,vs60 */ - .long 0xf100e7e7 /* <+1604>: xvnegdp vs40,vs60 */ - .long 0xf100e6e7 /* <+1608>: xvnegsp vs40,vs60 */ - .long 0xf112e70f /* <+1612>: xvnmaddadp vs40,vs50,vs60 */ - .long 0xf112e74f /* <+1616>: xvnmaddmdp vs40,vs50,vs60 */ - .long 0xf112e60f /* <+1620>: xvnmaddasp vs40,vs50,vs60 */ - .long 0xf112e64f /* <+1624>: xvnmaddmsp vs40,vs50,vs60 */ - .long 0xf112e78f /* <+1628>: xvnmsubadp vs40,vs50,vs60 */ - .long 0xf112e7cf /* <+1632>: xvnmsubmdp vs40,vs50,vs60 */ - .long 0xf112e68f /* <+1636>: xvnmsubasp vs40,vs50,vs60 */ - .long 0xf112e6cf /* <+1640>: xvnmsubmsp vs40,vs50,vs60 */ - .long 0xf100e327 /* <+1644>: xvrdpi vs40,vs60 */ - .long 0xf100e3af /* <+1648>: xvrdpic vs40,vs60 */ - .long 0xf100e3e7 /* <+1652>: xvrdpim vs40,vs60 */ - .long 0xf100e3a7 /* <+1656>: xvrdpip vs40,vs60 */ - .long 0xf100e367 /* <+1660>: xvrdpiz vs40,vs60 */ - .long 0xf100e36b /* <+1664>: xvredp vs40,vs60 */ - .long 0xf100e26b /* <+1668>: xvresp vs40,vs60 */ - .long 0xf100e227 /* <+1672>: xvrspi vs40,vs60 */ - .long 0xf100e2af /* <+1676>: xvrspic vs40,vs60 */ - .long 0xf100e2e7 /* <+1680>: xvrspim vs40,vs60 */ - .long 0xf100e2a7 /* <+1684>: xvrspip vs40,vs60 */ - .long 0xf100e267 /* <+1688>: xvrspiz vs40,vs60 */ - .long 0xf100e32b /* <+1692>: xvrsqrtedp vs40,vs60 */ - .long 0xf100e22b /* <+1696>: xvrsqrtesp vs40,vs60 */ - .long 0xf100e32f /* <+1700>: xvsqrtdp vs40,vs60 */ - .long 0xf100e22f /* <+1704>: xvsqrtsp vs40,vs60 */ - .long 0xf112e347 /* <+1708>: xvsubdp vs40,vs50,vs60 */ - .long 0xf112e247 /* <+1712>: xvsubsp vs40,vs50,vs60 */ - .long 0xf092e3ee /* <+1716>: xvtdivdp cr1,vs50,vs60 */ - .long 0xf092e2ee /* <+1720>: xvtdivsp cr1,vs50,vs60 */ - .long 0xf080e3aa /* <+1724>: xvtsqrtdp cr1,vs60 */ - .long 0xf080e2aa /* <+1728>: xvtsqrtsp cr1,vs60 */ - .long 0xf112e417 /* <+1732>: xxland vs40,vs50,vs60 */ - .long 0xf112e457 /* <+1736>: xxlandc vs40,vs50,vs60 */ - .long 0xf112e517 /* <+1740>: xxlnor vs40,vs50,vs60 */ - .long 0xf112e497 /* <+1744>: xxlor vs40,vs50,vs60 */ - .long 0xf112e4d7 /* <+1748>: xxlxor vs40,vs50,vs60 */ - .long 0xf112e097 /* <+1752>: xxmrghw vs40,vs50,vs60 */ - .long 0xf112e197 /* <+1756>: xxmrglw vs40,vs50,vs60 */ - .long 0xf112e057 /* <+1760>: xxmrghd vs40,vs50,vs60 */ - .long 0xf112e157 /* <+1764>: xxpermdi vs40,vs50,vs60,1 */ - .long 0xf112e257 /* <+1768>: xxpermdi vs40,vs50,vs60,2 */ - .long 0xf112e357 /* <+1772>: xxmrgld vs40,vs50,vs60 */ - .long 0xf1129057 /* <+1776>: xxspltd vs40,vs50,0 */ - .long 0xf1129057 /* <+1780>: xxspltd vs40,vs50,0 */ - .long 0xf1129357 /* <+1784>: xxspltd vs40,vs50,1 */ - .long 0xf1129357 /* <+1788>: xxspltd vs40,vs50,1 */ - .long 0xf112e057 /* <+1792>: xxmrghd vs40,vs50,vs60 */ - .long 0xf112e057 /* <+1796>: xxmrghd vs40,vs50,vs60 */ - .long 0xf112e357 /* <+1800>: xxmrgld vs40,vs50,vs60 */ - .long 0xf1129257 /* <+1804>: xxswapd vs40,vs50 */ - .long 0xf1129257 /* <+1808>: xxswapd vs40,vs50 */ - .long 0xf112e7bf /* <+1812>: xxsel vs40,vs50,vs60,vs62*/ - .long 0xf112e217 /* <+1816>: xxsldwi vs40,vs50,vs60,2 */ - .long 0xf102e293 /* <+1820>: xxspltw vs40,vs60,2 */ - .long 0x7d00a699 /* <+1824>: lxvd2x vs40,0,r20 */ - .long 0x7d0aa699 /* <+1828>: lxvd2x vs40,r10,r20 */ - .long 0x7d00a799 /* <+1832>: stxvd2x vs40,0,r20 */ - .long 0x7d0aa799 /* <+1836>: stxvd2x vs40,r10,r20 */ - -## power8.d - .long 0x7c05071d /* <+1840>: tabort. r5 */ - .long 0x7ce8861d /* <+1844>: tabortwc. 7,r8,r16 */ - .long 0x7e8b565d /* <+1848>: tabortdc. 20,r11,r10 */ - .long 0x7e2a9e9d /* <+1852>: tabortwci. 17,r10,-13 */ - .long 0x7fa3dedd /* <+1856>: tabortdci. 29,r3,-5 */ - .long 0x7c00051d /* <+1860>: tbegin. */ - .long 0x7f80059c /* <+1864>: tcheck cr7 */ - .long 0x7c00055d /* <+1868>: tend. */ - .long 0x7c00055d /* <+1872>: tend. */ - .long 0x7e00055d /* <+1876>: tendall. */ - .long 0x7e00055d /* <+1880>: tendall. */ - .long 0x7c18075d /* <+1884>: treclaim. r24 */ - .long 0x7c0007dd /* <+1888>: trechkpt. */ - .long 0x7c0005dd /* <+1892>: tsuspend. */ - .long 0x7c0005dd /* <+1896>: tsuspend. */ - .long 0x7c2005dd /* <+1900>: tresume. */ - .long 0x7c2005dd /* <+1904>: tresume. */ - .long 0x60420000 /* <+1908>: ori r2,r2,0 */ - .long 0x60000000 /* <+1912>: nop */ - .long 0x60420000 /* <+1916>: ori r2,r2,0 */ - .long 0x4c000124 /* <+1920>: rfebb 0 */ - .long 0x4c000924 /* <+1924>: rfebb */ - .long 0x4c000924 /* <+1928>: rfebb */ - .long 0x4d950460 /* <+1932>: bctar- 12,4*cr5+gt */ - .long 0x4c870461 /* <+1936>: bctarl- 4,4*cr1+so */ - .long 0x4dac0460 /* <+1940>: bctar+ 12,4*cr3+lt */ - .long 0x4ca20461 /* <+1944>: bctarl+ 4,eq */ - .long 0x4c880c60 /* <+1948>: bctar 4,4*cr2+lt,1 */ - .long 0x4c871461 /* <+1952>: bctarl 4,4*cr1+so,2 */ - .long 0x7c00003c /* <+1956>: waitasec */ - .long 0x7c00411c /* <+1960>: msgsndp r8 */ - .long 0x7c200126 /* <+1964>: mtsle 1 */ - .long 0x7c00d95c /* <+1968>: msgclrp r27 */ - .long 0x7d4a616d /* <+1972>: stqcx. r10,r10,r12 */ - .long 0x7f80396d /* <+1976>: stqcx. r28,0,r7 */ - .long 0x7f135a28 /* <+1980>: lqarx r24,r19,r11 */ - .long 0x7ec05a28 /* <+1984>: lqarx r22,0,r11 */ - .long 0x7e80325c /* <+1988>: mfbhrbe r20,6 */ - .long 0x7fb18329 /* <+1992>: pbt. r29,r17,r16 */ - .long 0x7dc03b29 /* <+1996>: pbt. r14,0,r7 */ - .long 0x7c00035c /* <+2000>: clrbhrb */ - .long 0x116a05ed /* <+2004>: vpermxor v11,v10,v0,v23 */ - .long 0x1302393c /* <+2008>: vaddeuqm v24,v2,v7,v4 */ - .long 0x114a40bd /* <+2012>: vaddecuq v10,v10,v8,v2 */ - .long 0x10af44fe /* <+2016>: vsubeuqm v5,v15,v8,v19 */ - .long 0x119f877f /* <+2020>: vsubecuq v12,v31,v16,v29 */ - .long 0x129d6888 /* <+2024>: vmulouw v20,v29,v13 */ - .long 0x13a0d089 /* <+2028>: vmuluwm v29,v0,v26 */ - .long 0x1115e0c0 /* <+2032>: vaddudm v8,v21,v28 */ - .long 0x103a08c2 /* <+2036>: vmaxud v1,v26,v1 */ - .long 0x128308c4 /* <+2040>: vrld v20,v3,v1 */ - .long 0x109358c7 /* <+2044>: vcmpequd v4,v19,v11 */ - .long 0x12eef100 /* <+2048>: vadduqm v23,v14,v30 */ - .long 0x11086940 /* <+2052>: vaddcuq v8,v8,v13 */ - .long 0x139b2188 /* <+2056>: vmulosw v28,v27,v4 */ - .long 0x106421c2 /* <+2060>: vmaxsd v3,v4,v4 */ - .long 0x1013aa88 /* <+2064>: vmuleuw v0,v19,v21 */ - .long 0x13149ac2 /* <+2068>: vminud v24,v20,v19 */ - .long 0x101c7ac7 /* <+2072>: vcmpgtud v0,v28,v15 */ - .long 0x12a01388 /* <+2076>: vmulesw v21,v0,v2 */ - .long 0x113a4bc2 /* <+2080>: vminsd v9,v26,v9 */ - .long 0x133d5bc4 /* <+2084>: vsrad v25,v29,v11 */ - .long 0x117c5bc7 /* <+2088>: vcmpgtsd v11,v28,v11 */ - .long 0x10a8d601 /* <+2092>: bcdadd. v5,v8,v26,1 */ - .long 0x10836408 /* <+2096>: vpmsumb v4,v3,v12 */ - .long 0x135fae41 /* <+2100>: bcdsub. v26,v31,v21,1 */ - .long 0x10b18448 /* <+2104>: vpmsumh v5,v17,v16 */ - .long 0x12f1a44e /* <+2108>: vpkudum v23,v17,v20 */ - .long 0x1315ec88 /* <+2112>: vpmsumw v24,v21,v29 */ - .long 0x11366cc8 /* <+2116>: vpmsumd v9,v22,v13 */ - .long 0x125394ce /* <+2120>: vpkudus v18,v19,v18 */ - .long 0x13d0b500 /* <+2124>: vsubuqm v30,v16,v22 */ - .long 0x11cb3d08 /* <+2128>: vcipher v14,v11,v7 */ - .long 0x1142b509 /* <+2132>: vcipherlast v10,v2,v22 */ - .long 0x12e06d0c /* <+2136>: vgbbd v23,v13 */ - .long 0x12198540 /* <+2140>: vsubcuq v16,v25,v16 */ - .long 0x13e12d44 /* <+2144>: vorc v31,v1,v5 */ - .long 0x1091fd48 /* <+2148>: vncipher v4,v17,v31 */ - .long 0x1302dd49 /* <+2152>: vncipherlast v24,v2,v27 */ - .long 0x12f5bd4c /* <+2156>: vbpermq v23,v21,v23 */ - .long 0x13724d4e /* <+2160>: vpksdus v27,v18,v9 */ - .long 0x137ddd84 /* <+2164>: vnand v27,v29,v27 */ - .long 0x1273c5c4 /* <+2168>: vsld v19,v19,v24 */ - .long 0x10ad05c8 /* <+2172>: vsbox v5,v13 */ - .long 0x13233dce /* <+2176>: vpksdss v25,v3,v7 */ - .long 0x138804c7 /* <+2180>: vcmpequd. v28,v8,v0 */ - .long 0x1340d64e /* <+2184>: vupkhsw v26,v26 */ - .long 0x10a73682 /* <+2188>: vshasigmaw v5,v7,0,6 */ - .long 0x13957684 /* <+2192>: veqv v28,v21,v14 */ - .long 0x10289e8c /* <+2196>: vmrgow v1,v8,v19 */ - .long 0x100a56c2 /* <+2200>: vshasigmad v0,v10,0,10 */ - .long 0x10bb76c4 /* <+2204>: vsrd v5,v27,v14 */ - .long 0x11606ece /* <+2208>: vupklsw v11,v13 */ - .long 0x11c08702 /* <+2212>: vclzb v14,v16 */ - .long 0x1280df03 /* <+2216>: vpopcntb v20,v27 */ - .long 0x13805f42 /* <+2220>: vclzh v28,v11 */ - .long 0x13004f43 /* <+2224>: vpopcnth v24,v9 */ - .long 0x1360ff82 /* <+2228>: vclzw v27,v31 */ - .long 0x12209f83 /* <+2232>: vpopcntw v17,v19 */ - .long 0x1180efc2 /* <+2236>: vclzd v12,v29 */ - .long 0x12e0b7c3 /* <+2240>: vpopcntd v23,v22 */ - .long 0x1314eec7 /* <+2244>: vcmpgtud. v24,v20,v29 */ - .long 0x1126dfc7 /* <+2248>: vcmpgtsd. v9,v6,v27 */ - .long 0x7fced019 /* <+2252>: lxsiwzx vs62,r14,r26 */ - .long 0x7d00c819 /* <+2256>: lxsiwzx vs40,0,r25 */ - .long 0x7f20d098 /* <+2260>: lxsiwax vs25,0,r26 */ - .long 0x7c601898 /* <+2264>: lxsiwax vs3,0,r3 */ - .long 0x7fcc0067 /* <+2268>: mfvsrd r12,vs62 */ - .long 0x7d9400e6 /* <+2272>: mffprwz r20,f12 */ - .long 0x7dc97118 /* <+2276>: stxsiwx vs14,r9,r14 */ - .long 0x7ea04118 /* <+2280>: stxsiwx vs21,0,r8 */ - .long 0x7e0b0167 /* <+2284>: mtvsrd vs48,r11 */ - .long 0x7ff701a7 /* <+2288>: mtvrwa v31,r23 */ - .long 0x7e1a01e6 /* <+2292>: mtfprwz f16,r26 */ - .long 0x7db36c18 /* <+2296>: lxsspx vs13,r19,r13 */ - .long 0x7e406c18 /* <+2300>: lxsspx vs18,0,r13 */ - .long 0x7d622519 /* <+2304>: stxsspx vs43,r2,r4 */ - .long 0x7ee05d19 /* <+2308>: stxsspx vs55,0,r11 */ - .long 0xf2d0c805 /* <+2312>: xsaddsp vs54,vs48,vs25 */ - .long 0xf1d2080c /* <+2316>: xsmaddasp vs14,vs50,vs1 */ - .long 0xf3565042 /* <+2320>: xssubsp vs26,vs22,vs42 */ - .long 0xf375a04e /* <+2324>: xsmaddmsp vs27,vs53,vs52 */ - .long 0xf100d82a /* <+2328>: xsrsqrtesp vs8,vs59 */ - .long 0xf180482e /* <+2332>: xssqrtsp vs12,vs41 */ - .long 0xf32b0083 /* <+2336>: xsmulsp vs57,vs11,vs32 */ - .long 0xf0d4d089 /* <+2340>: xsmsubasp vs38,vs20,vs26 */ - .long 0xf35330c0 /* <+2344>: xsdivsp vs26,vs19,vs6 */ - .long 0xf065b8cf /* <+2348>: xsmsubmsp vs35,vs37,vs55 */ - .long 0xf3604069 /* <+2352>: xsresp vs59,vs8 */ - .long 0xf1810c0f /* <+2356>: xsnmaddasp vs44,vs33,vs33 */ - .long 0xf23ef44c /* <+2360>: xsnmaddmsp vs17,vs62,vs30 */ - .long 0xf2d4fc8d /* <+2364>: xsnmsubasp vs54,vs52,vs31 */ - .long 0xf0a5d4cb /* <+2368>: xsnmsubmsp vs37,vs5,vs58 */ - .long 0xf3d66556 /* <+2372>: xxlorc vs30,vs54,vs44 */ - .long 0xf22eed91 /* <+2376>: xxlnand vs49,vs14,vs29 */ - .long 0xf3d6f5d1 /* <+2380>: xxleqv vs62,vs22,vs30 */ - .long 0xf380b42f /* <+2384>: xscvdpspn vs60,vs54 */ - .long 0xf2c06c66 /* <+2388>: xsrsp vs22,vs45 */ - .long 0xf340dca2 /* <+2392>: xscvuxdsp vs26,vs59 */ - .long 0xf0c08ce3 /* <+2396>: xscvsxdsp vs38,vs49 */ - .long 0xf360d52d /* <+2400>: xscvspdpn vs59,vs26 */ - .long 0xff0e168c /* <+2404>: fmrgow f24,f14,f2 */ - .long 0xfec72f8c /* <+2408>: fmrgew f22,f7,f5 */ - .long 0x7c00719c /* <+2412>: msgsnd r14 */ - .long 0x7c00b9dc /* <+2416>: msgclr r23 */ - .long 0x7d002e99 /* <+2420>: lxvd2x vs40,0,r5 */ - .long 0x7d002e99 /* <+2424>: lxvd2x vs40,0,r5 */ - .long 0x7d543698 /* <+2428>: lxvd2x vs10,r20,r6 */ - .long 0x7d543698 /* <+2432>: lxvd2x vs10,r20,r6 */ - .long 0x7d203f99 /* <+2436>: stxvd2x vs41,0,r7 */ - .long 0x7d203f99 /* <+2440>: stxvd2x vs41,0,r7 */ - .long 0x7d754798 /* <+2444>: stxvd2x vs11,r21,r8 */ - .long 0x7d754798 /* <+2448>: stxvd2x vs11,r21,r8 */ - -## altivec2.d - .long 0x7c60e20e /* <+2452>: lvepxl v3,0,r28 */ - .long 0x7e64920e /* <+2456>: lvepxl v19,r4,r18 */ - .long 0x7f609a4e /* <+2460>: lvepx v27,0,r19 */ - .long 0x7c39924e /* <+2464>: lvepx v1,r25,r18 */ - .long 0x7fe0da0a /* <+2468>: lvexbx v31,0,r27 */ - .long 0x7f81620a /* <+2472>: lvexbx v28,r1,r12 */ - .long 0x7fe0724a /* <+2476>: lvexhx v31,0,r14 */ - .long 0x7e30fa4a /* <+2480>: lvexhx v17,r16,r31 */ - .long 0x7ec0ea8a /* <+2484>: lvexwx v22,0,r29 */ - .long 0x7ef92a8a /* <+2488>: lvexwx v23,r25,r5 */ - .long 0x7c60660a /* <+2492>: lvsm v3,0,r12 */ - .long 0x7f7d0e0a /* <+2496>: lvsm v27,r29,r1 */ - .long 0x7ce036ca /* <+2500>: lvswxl v7,0,r6 */ - .long 0x7cf046ca /* <+2504>: lvswxl v7,r16,r8 */ - .long 0x7dc094ca /* <+2508>: lvswx v14,0,r18 */ - .long 0x7f9c84ca /* <+2512>: lvswx v28,r28,r16 */ - .long 0x7f60668a /* <+2516>: lvtlxl v27,0,r12 */ - .long 0x7f7c068a /* <+2520>: lvtlxl v27,r28,r0 */ - .long 0x7ee0cc8a /* <+2524>: lvtlx v23,0,r25 */ - .long 0x7c39748a /* <+2528>: lvtlx v1,r25,r14 */ - .long 0x7e80c64a /* <+2532>: lvtrxl v20,0,r24 */ - .long 0x7eddc64a /* <+2536>: lvtrxl v22,r29,r24 */ - .long 0x7f00444a /* <+2540>: lvtrx v24,0,r8 */ - .long 0x7db7e44a /* <+2544>: lvtrx v13,r23,r28 */ - .long 0x7d9c60dc /* <+2548>: mvidsplt v12,r28,r12 */ - .long 0x7d5b005c /* <+2552>: mviwsplt v10,r27,r0 */ - .long 0x7f606e0e /* <+2556>: stvepxl v27,0,r13 */ - .long 0x7c42fe0e /* <+2560>: stvepxl v2,r2,r31 */ - .long 0x7c60564e /* <+2564>: stvepx v3,0,r10 */ - .long 0x7f7c064e /* <+2568>: stvepx v27,r28,r0 */ - .long 0x7da0330a /* <+2572>: stvexbx v13,0,r6 */ - .long 0x7db91b0a /* <+2576>: stvexbx v13,r25,r3 */ - .long 0x7ec00b4a /* <+2580>: stvexhx v22,0,r1 */ - .long 0x7e2e534a /* <+2584>: stvexhx v17,r14,r10 */ - .long 0x7ea0db8a /* <+2588>: stvexwx v21,0,r27 */ - .long 0x7ff20b8a /* <+2592>: stvexwx v31,r18,r1 */ - .long 0x7f406f8a /* <+2596>: stvflxl v26,0,r13 */ - .long 0x7ecdaf8a /* <+2600>: stvflxl v22,r13,r21 */ - .long 0x7ca04d8a /* <+2604>: stvflx v5,0,r9 */ - .long 0x7eb80d8a /* <+2608>: stvflx v21,r24,r1 */ - .long 0x7da0574a /* <+2612>: stvfrxl v13,0,r10 */ - .long 0x7db1cf4a /* <+2616>: stvfrxl v13,r17,r25 */ - .long 0x7e20554a /* <+2620>: stvfrx v17,0,r10 */ - .long 0x7d0cfd4a /* <+2624>: stvfrx v8,r12,r31 */ - .long 0x7e40efca /* <+2628>: stvswxl v18,0,r29 */ - .long 0x7f4e47ca /* <+2632>: stvswxl v26,r14,r8 */ - .long 0x7c007dca /* <+2636>: stvswx v0,0,r15 */ - .long 0x7db73dca /* <+2640>: stvswx v13,r23,r7 */ - .long 0x10d18403 /* <+2644>: vabsdub v6,v17,v16 */ - .long 0x12b22443 /* <+2648>: vabsduh v21,v18,v4 */ - .long 0x13344c83 /* <+2652>: vabsduw v25,v20,v9 */ - .long 0x10d1a6ad /* <+2656>: vpermxor v6,v17,v20,v26 */ - .long 0x13ba7f3c /* <+2660>: vaddeuqm v29,v26,v15,v28 */ - .long 0x11e83e3d /* <+2664>: vaddecuq v15,v8,v7,v24 */ - .long 0x1046a87e /* <+2668>: vsubeuqm v2,v6,v21,v1 */ - .long 0x13a6013f /* <+2672>: vsubecuq v29,v6,v0,v4 */ - .long 0x11c91888 /* <+2676>: vmulouw v14,v9,v3 */ - .long 0x13109089 /* <+2680>: vmuluwm v24,v16,v18 */ - .long 0x115188c0 /* <+2684>: vaddudm v10,v17,v17 */ - .long 0x13d920c2 /* <+2688>: vmaxud v30,v25,v4 */ - .long 0x1146e0c4 /* <+2692>: vrld v10,v6,v28 */ - .long 0x136738c7 /* <+2696>: vcmpequd v27,v7,v7 */ - .long 0x12d0c900 /* <+2700>: vadduqm v22,v16,v25 */ - .long 0x1035e940 /* <+2704>: vaddcuq v1,v21,v29 */ - .long 0x128b9988 /* <+2708>: vmulosw v20,v11,v19 */ - .long 0x131309c2 /* <+2712>: vmaxsd v24,v19,v1 */ - .long 0x11bbf288 /* <+2716>: vmuleuw v13,v27,v30 */ - .long 0x11388ac2 /* <+2720>: vminud v9,v24,v17 */ - .long 0x1152e2c7 /* <+2724>: vcmpgtud v10,v18,v28 */ - .long 0x101db388 /* <+2728>: vmulesw v0,v29,v22 */ - .long 0x11bc0bc2 /* <+2732>: vminsd v13,v28,v1 */ - .long 0x11542bc4 /* <+2736>: vsrad v10,v20,v5 */ - .long 0x13752bc7 /* <+2740>: vcmpgtsd v27,v21,v5 */ - .long 0x1017f601 /* <+2744>: bcdadd. v0,v23,v30,1 */ - .long 0x1338d408 /* <+2748>: vpmsumb v25,v24,v26 */ - .long 0x11042641 /* <+2752>: bcdsub. v8,v4,v4,1 */ - .long 0x120ed448 /* <+2756>: vpmsumh v16,v14,v26 */ - .long 0x1362d44e /* <+2760>: vpkudum v27,v2,v26 */ - .long 0x10d78c88 /* <+2764>: vpmsumw v6,v23,v17 */ - .long 0x1286ccc8 /* <+2768>: vpmsumd v20,v6,v25 */ - .long 0x137684ce /* <+2772>: vpkudus v27,v22,v16 */ - .long 0x12b494c0 /* <+2776>: vsubudm v21,v20,v18 */ - .long 0x12b49500 /* <+2780>: vsubuqm v21,v20,v18 */ - .long 0x13bd3508 /* <+2784>: vcipher v29,v29,v6 */ - .long 0x104da509 /* <+2788>: vcipherlast v2,v13,v20 */ - .long 0x1280950c /* <+2792>: vgbbd v20,v18 */ - .long 0x1268cd40 /* <+2796>: vsubcuq v19,v8,v25 */ - .long 0x113aed44 /* <+2800>: vorc v9,v26,v29 */ - .long 0x12946d48 /* <+2804>: vncipher v20,v20,v13 */ - .long 0x11e5dd49 /* <+2808>: vncipherlast v15,v5,v27 */ - .long 0x1073354c /* <+2812>: vbpermq v3,v19,v6 */ - .long 0x13c4e54e /* <+2816>: vpksdus v30,v4,v28 */ - .long 0x10047584 /* <+2820>: vnand v0,v4,v14 */ - .long 0x1228edc4 /* <+2824>: vsld v17,v8,v29 */ - .long 0x13b405c8 /* <+2828>: vsbox v29,v20 */ - .long 0x11675dce /* <+2832>: vpksdss v11,v7,v11 */ - .long 0x107384c7 /* <+2836>: vcmpequd. v3,v19,v16 */ - .long 0x12408e4e /* <+2840>: vupkhsw v18,v17 */ - .long 0x13a86e82 /* <+2844>: vshasigmaw v29,v8,0,13 */ - .long 0x12fcd684 /* <+2848>: veqv v23,v28,v26 */ - .long 0x13a0178c /* <+2852>: vmrgew v29,v0,v2 */ - .long 0x13a0168c /* <+2856>: vmrgow v29,v0,v2 */ - .long 0x137306c2 /* <+2860>: vshasigmad v27,v19,0,0 */ - .long 0x129ce6c4 /* <+2864>: vsrd v20,v28,v28 */ - .long 0x1240aece /* <+2868>: vupklsw v18,v21 */ - .long 0x13c03f02 /* <+2872>: vclzb v30,v7 */ - .long 0x13a0af03 /* <+2876>: vpopcntb v29,v21 */ - .long 0x1320af42 /* <+2880>: vclzh v25,v21 */ - .long 0x1200f743 /* <+2884>: vpopcnth v16,v30 */ - .long 0x13801f82 /* <+2888>: vclzw v28,v3 */ - .long 0x11404f83 /* <+2892>: vpopcntw v10,v9 */ - .long 0x12c04fc2 /* <+2896>: vclzd v22,v9 */ - .long 0x11e0f7c3 /* <+2900>: vpopcntd v15,v30 */ - .long 0x105f36c7 /* <+2904>: vcmpgtud. v2,v31,v6 */ - .long 0x128f17c7 /* <+2908>: vcmpgtsd. v20,v15,v2 */ - -## vsd2.d - .long 0x7fced019 /* <+2912>: lxsiwzx vs62,r14,r26 */ - .long 0x7d00c819 /* <+2916>: lxsiwzx vs40,0,r25 */ - .long 0x7f20d098 /* <+2920>: lxsiwax vs25,0,r26 */ - .long 0x7c601898 /* <+2924>: lxsiwax vs3,0,r3 */ - .long 0x7fcc0066 /* <+2928>: mfvsrd r12,vs30 */ - .long 0x7fcc0066 /* <+2932>: mfvsrd r12,vs30 */ - .long 0x7fcc0067 /* <+2936>: mfvsrd r12,vs62 */ - .long 0x7fcc0067 /* <+2940>: mfvsrd r12,vs62 */ - .long 0x7d9400e6 /* <+2944>: mffprwz r20,f12 */ - .long 0x7d9400e6 /* <+2948>: mffprwz r20,f12 */ - .long 0x7d9500e7 /* <+2952>: mfvrwz r21,v12 */ - .long 0x7d9500e7 /* <+2956>: mfvrwz r21,v12 */ - .long 0x7dc97118 /* <+2960>: stxsiwx vs14,r9,r14 */ - .long 0x7ea04118 /* <+2964>: stxsiwx vs21,0,r8 */ - .long 0x7d7c0166 /* <+2968>: mtvsrd vs11,r28 */ - .long 0x7d7c0166 /* <+2972>: mtvsrd vs11,r28 */ - .long 0x7d7d0167 /* <+2976>: mtvsrd vs43,r29 */ - .long 0x7d7d0167 /* <+2980>: mtvsrd vs43,r29 */ - .long 0x7f1601a6 /* <+2984>: mtfprwa f24,r22 */ - .long 0x7f1601a6 /* <+2988>: mtfprwa f24,r22 */ - .long 0x7f3701a7 /* <+2992>: mtvrwa v25,r23 */ - .long 0x7f3701a7 /* <+2996>: mtvrwa v25,r23 */ - .long 0x7f5b01e6 /* <+3000>: mtfprwz f26,r27 */ - .long 0x7f5b01e6 /* <+3004>: mtfprwz f26,r27 */ - .long 0x7f7c01e7 /* <+3008>: mtvrwz v27,r28 */ - .long 0x7f7c01e7 /* <+3012>: mtvrwz v27,r28 */ - .long 0x7db36c18 /* <+3016>: lxsspx vs13,r19,r13 */ - .long 0x7e406c18 /* <+3020>: lxsspx vs18,0,r13 */ - .long 0x7d622519 /* <+3024>: stxsspx vs43,r2,r4 */ - .long 0x7ee05d19 /* <+3028>: stxsspx vs55,0,r11 */ - .long 0xf2d0c805 /* <+3032>: xsaddsp vs54,vs48,vs25 */ - .long 0xf1d2080c /* <+3036>: xsmaddasp vs14,vs50,vs1 */ - .long 0xf3565042 /* <+3040>: xssubsp vs26,vs22,vs42 */ - .long 0xf375a04e /* <+3044>: xsmaddmsp vs27,vs53,vs52 */ - .long 0xf100d82a /* <+3048>: xsrsqrtesp vs8,vs59 */ - .long 0xf180482e /* <+3052>: xssqrtsp vs12,vs41 */ - .long 0xf32b0083 /* <+3056>: xsmulsp vs57,vs11,vs32 */ - .long 0xf0d4d089 /* <+3060>: xsmsubasp vs38,vs20,vs26 */ - .long 0xf35330c0 /* <+3064>: xsdivsp vs26,vs19,vs6 */ - .long 0xf065b8cf /* <+3068>: xsmsubmsp vs35,vs37,vs55 */ - .long 0xf3604069 /* <+3072>: xsresp vs59,vs8 */ - .long 0xf1810c0f /* <+3076>: xsnmaddasp vs44,vs33,vs33 */ - .long 0xf23ef44c /* <+3080>: xsnmaddmsp vs17,vs62,vs30 */ - .long 0xf2d4fc8d /* <+3084>: xsnmsubasp vs54,vs52,vs31 */ - .long 0xf0a5d4cb /* <+3088>: xsnmsubmsp vs37,vs5,vs58 */ - .long 0xf3d66556 /* <+3092>: xxlorc vs30,vs54,vs44 */ - .long 0xf22eed91 /* <+3096>: xxlnand vs49,vs14,vs29 */ - .long 0xf3d6f5d1 /* <+3100>: xxleqv vs62,vs22,vs30 */ - .long 0xf380b42f /* <+3104>: xscvdpspn vs60,vs54 */ - .long 0xf2c06c66 /* <+3108>: xsrsp vs22,vs45 */ - .long 0xf340dca2 /* <+3112>: xscvuxdsp vs26,vs59 */ - .long 0xf0c08ce3 /* <+3116>: xscvsxdsp vs38,vs49 */ - .long 0xf360d52d /* <+3120>: xscvspdpn vs59,vs26 */ - .long 0xff0e168c /* <+3124>: fmrgow f24,f14,f2 */ - .long 0xfec72f8c /* <+3128>: fmrgew f22,f7,f5 */ - -## power9.d - .long 0x7da30474 /* <+3132>: cnttzd r3,r13 */ - .long 0x7dc40475 /* <+3136>: cnttzd. r4,r14 */ - .long 0x7de50434 /* <+3140>: cnttzw r5,r15 */ - .long 0x7e060435 /* <+3144>: cnttzw. r6,r16 */ - .long 0x7d54ae12 /* <+3148>: modsd r10,r20,r21 */ - .long 0x7d75b616 /* <+3152>: modsw r11,r21,r22 */ - .long 0x7d96ba12 /* <+3156>: modud r12,r22,r23 */ - .long 0x7db7c216 /* <+3160>: moduw r13,r23,r24 */ - .long 0x10672581 /* <+3164>: bcdcfn. v3,v4,0 */ - .long 0x10672781 /* <+3168>: bcdcfn. v3,v4,1 */ - .long 0x10822d81 /* <+3172>: bcdcfsq. v4,v5,0 */ - .long 0x10822f81 /* <+3176>: bcdcfsq. v4,v5,1 */ - .long 0x10a63581 /* <+3180>: bcdcfz. v5,v6,0 */ - .long 0x10a63781 /* <+3184>: bcdcfz. v5,v6,1 */ - .long 0x10c74341 /* <+3188>: bcdcpsgn. v6,v7,v8 */ - .long 0x10e54581 /* <+3192>: bcdctn. v7,v8 */ - .long 0x11004d81 /* <+3196>: bcdctsq. v8,v9 */ - .long 0x11245581 /* <+3200>: bcdctz. v9,v10,0 */ - .long 0x11245781 /* <+3204>: bcdctz. v9,v10,1 */ - .long 0x115f5d81 /* <+3208>: bcdsetsgn. v10,v11,0 */ - .long 0x115f5f81 /* <+3212>: bcdsetsgn. v10,v11,1 */ - .long 0x116c6dc1 /* <+3216>: bcdsr. v11,v12,v13,0 */ - .long 0x116c6fc1 /* <+3220>: bcdsr. v11,v12,v13,1 */ - .long 0x118d74c1 /* <+3224>: bcds. v12,v13,v14,0 */ - .long 0x118d76c1 /* <+3228>: bcds. v12,v13,v14,1 */ - .long 0x11ae7d01 /* <+3232>: bcdtrunc. v13,v14,v15,0 */ - .long 0x11ae7f01 /* <+3236>: bcdtrunc. v13,v14,v15,1 */ - .long 0x11cf8481 /* <+3240>: bcdus. v14,v15,v16 */ - .long 0x11f08d41 /* <+3244>: bcdutrunc. v15,v16,v17 */ - .long 0x7e80aa5a /* <+3248>: lxvll vs20,0,r21 */ - .long 0x7e8aaa5a /* <+3252>: lxvll vs20,r10,r21 */ - .long 0x7ea05b5a /* <+3256>: stxvll vs21,0,r11 */ - .long 0x7eaa5b5a /* <+3260>: stxvll vs21,r10,r11 */ - .long 0x12d70001 /* <+3264>: vmul10cuq v22,v23 */ - .long 0x12f8c841 /* <+3268>: vmul10ecuq v23,v24,v25 */ - .long 0x1319d241 /* <+3272>: vmul10euq v24,v25,v26 */ - .long 0x133a0201 /* <+3276>: vmul10uq v25,v26 */ - .long 0xfd4b6008 /* <+3280>: xsaddqp v10,v11,v12 */ - .long 0xfd6c6009 /* <+3284>: xsaddqpo v11,v12,v12 */ - .long 0xfe80f00a /* <+3288>: xsrqpi 0,v20,v30,0 */ - .long 0xfe81f00a /* <+3292>: xsrqpi 1,v20,v30,0 */ - .long 0xfe80f60a /* <+3296>: xsrqpi 0,v20,v30,3 */ - .long 0xfe81f60a /* <+3300>: xsrqpi 1,v20,v30,3 */ - .long 0xfea0f80b /* <+3304>: xsrqpix 0,v21,v31,0 */ - .long 0xfea1f80b /* <+3308>: xsrqpix 1,v21,v31,0 */ - .long 0xfea0fe0b /* <+3312>: xsrqpix 0,v21,v31,3 */ - .long 0xfea1fe0b /* <+3316>: xsrqpix 1,v21,v31,3 */ - .long 0xfd8d7048 /* <+3320>: xsmulqp v12,v13,v14 */ - .long 0xfdae7849 /* <+3324>: xsmulqpo v13,v14,v15 */ - .long 0xfec0b84a /* <+3328>: xsrqpxp 0,v22,v23,0 */ - .long 0xfec1b84a /* <+3332>: xsrqpxp 1,v22,v23,0 */ - .long 0xfec0be4a /* <+3336>: xsrqpxp 0,v22,v23,3 */ - .long 0xfec1be4a /* <+3340>: xsrqpxp 1,v22,v23,3 */ - .long 0xfdcf80c8 /* <+3344>: xscpsgnqp v14,v15,v16 */ - .long 0xfc0f8108 /* <+3348>: xscmpoqp cr0,v15,v16 */ - .long 0xff8f8108 /* <+3352>: xscmpoqp cr7,v15,v16 */ - .long 0xfc108948 /* <+3356>: xscmpexpqp cr0,v16,v17 */ - .long 0xff908948 /* <+3360>: xscmpexpqp cr7,v16,v17 */ - .long 0xfe329b08 /* <+3364>: xsmaddqp v17,v18,v19 */ - .long 0xfe53a309 /* <+3368>: xsmaddqpo v18,v19,v20 */ - .long 0xfe74ab48 /* <+3372>: xsmsubqp v19,v20,v21 */ - .long 0xfe95b349 /* <+3376>: xsmsubqpo v20,v21,v22 */ - .long 0xfeb6bb88 /* <+3380>: xsnmaddqp v21,v22,v23 */ - .long 0xfed7c389 /* <+3384>: xsnmaddqpo v22,v23,v24 */ - .long 0xfef8cbc8 /* <+3388>: xsnmsubqp v23,v24,v25 */ - .long 0xff19d3c9 /* <+3392>: xsnmsubqpo v24,v25,v26 */ - .long 0xff3adc08 /* <+3396>: xssubqp v25,v26,v27 */ - .long 0xff5be409 /* <+3400>: xssubqpo v26,v27,v28 */ - .long 0xff7cec48 /* <+3404>: xsdivqp v27,v28,v29 */ - .long 0xff9df449 /* <+3408>: xsdivqpo v28,v29,v30 */ - .long 0xfc1df508 /* <+3412>: xscmpuqp cr0,v29,v30 */ - .long 0xff9df508 /* <+3416>: xscmpuqp cr7,v29,v30 */ - .long 0xfc00f588 /* <+3420>: xststdcqp cr0,v30,0 */ - .long 0xff80f588 /* <+3424>: xststdcqp cr7,v30,0 */ - .long 0xfc7ffd88 /* <+3428>: xststdcqp cr0,v31,127 */ - .long 0xfffffd88 /* <+3432>: xststdcqp cr7,v31,127 */ - .long 0xfd405e48 /* <+3436>: xsabsqp v10,v11 */ - .long 0xfd626648 /* <+3440>: xsxexpqp v11,v12 */ - .long 0xfd886e48 /* <+3444>: xsnabsqp v12,v13 */ - .long 0xfdb07648 /* <+3448>: xsnegqp v13,v14 */ - .long 0xfdd27e48 /* <+3452>: xsxsigqp v14,v15 */ - .long 0xfdfb8648 /* <+3456>: xssqrtqp v15,v16 */ - .long 0xfe1b8e49 /* <+3460>: xssqrtqpo v16,v17 */ - .long 0xfe219688 /* <+3464>: xscvqpuwz v17,v18 */ - .long 0xfe429e88 /* <+3468>: xscvudqp v18,v19 */ - .long 0xfe69a688 /* <+3472>: xscvqpswz v19,v20 */ - .long 0xfe8aae88 /* <+3476>: xscvsdqp v20,v21 */ - .long 0xfeb1b688 /* <+3480>: xscvqpudz v21,v22 */ - .long 0xfed4be88 /* <+3484>: xscvqpdp v22,v23 */ - .long 0xfef4c689 /* <+3488>: xscvqpdpo v23,v24 */ - .long 0xff16ce88 /* <+3492>: xscvdpqp v24,v25 */ - .long 0xff39d688 /* <+3496>: xscvqpsdz v25,v26 */ - .long 0xff5be6c8 /* <+3500>: xsiexpqp v26,v27,v28 */ - .long 0x108531fb /* <+3504>: vpermr v4,v5,v6,v7 */ - .long 0x10a0320d /* <+3508>: vextractub v5,v6,0 */ - .long 0x10af320d /* <+3512>: vextractub v5,v6,15 */ - .long 0x10c03a4d /* <+3516>: vextractuh v6,v7,0 */ - .long 0x10cf3a4d /* <+3520>: vextractuh v6,v7,15 */ - .long 0x10e0428d /* <+3524>: vextractuw v7,v8,0 */ - .long 0x10ef428d /* <+3528>: vextractuw v7,v8,15 */ - .long 0x11004acd /* <+3532>: vextractd v8,v9,0 */ - .long 0x110f4acd /* <+3536>: vextractd v8,v9,15 */ - .long 0x1120530d /* <+3540>: vinsertb v9,v10,0 */ - .long 0x112f530d /* <+3544>: vinsertb v9,v10,15 */ - .long 0x11405b4d /* <+3548>: vinserth v10,v11,0 */ - .long 0x114f5b4d /* <+3552>: vinserth v10,v11,15 */ - .long 0x1160638d /* <+3556>: vinsertw v11,v12,0 */ - .long 0x116f638d /* <+3560>: vinsertw v11,v12,15 */ - .long 0x11806bcd /* <+3564>: vinsertd v12,v13,0 */ - .long 0x118f6bcd /* <+3568>: vinsertd v12,v13,15 */ - .long 0x7db40267 /* <+3572>: mfvsrld r20,vs45 */ - .long 0x7dd50327 /* <+3576>: mtvsrws vs46,r21 */ - .long 0x7de0bb67 /* <+3580>: mtvsrdd vs47,0,r23 */ - .long 0x7df6bb67 /* <+3584>: mtvsrdd vs47,r22,r23 */ - .long 0x7e405a19 /* <+3588>: lxvx vs50,0,r11 */ - .long 0x7c0a5a18 /* <+3592>: lxvx vs0,r10,r11 */ - .long 0x7e6062d9 /* <+3596>: lxvwsx vs51,0,r12 */ - .long 0x7c2a62d8 /* <+3600>: lxvwsx vs1,r10,r12 */ - .long 0x7e806e59 /* <+3604>: lxvh8x vs52,0,r13 */ - .long 0x7c4a6e58 /* <+3608>: lxvh8x vs2,r10,r13 */ - .long 0x7ea076d9 /* <+3612>: lxvb16x vs53,0,r14 */ - .long 0x7c6a76d8 /* <+3616>: lxvb16x vs3,r10,r14 */ - .long 0x7ec07b19 /* <+3620>: stxvx vs54,0,r15 */ - .long 0x7c947b18 /* <+3624>: stxvx vs4,r20,r15 */ - .long 0x7ee08759 /* <+3628>: stxvh8x vs55,0,r16 */ - .long 0x7cb48758 /* <+3632>: stxvh8x vs5,r20,r16 */ - .long 0x7f008fd9 /* <+3636>: stxvb16x vs56,0,r17 */ - .long 0x7cd48fd8 /* <+3640>: stxvb16x vs6,r20,r17 */ - .long 0xf0802a94 /* <+3644>: xxextractuw vs4,vs5,0 */ - .long 0xf10f9297 /* <+3648>: xxextractuw vs40,vs50,15 */ - .long 0xf08002d0 /* <+3652>: xxspltib vs4,0 */ - .long 0xf127fad1 /* <+3656>: xxspltib vs41,255 */ - .long 0xf0a032d4 /* <+3660>: xxinsertw vs5,vs6,0 */ - .long 0xf24fe2d7 /* <+3664>: xxinsertw vs50,vs60,15 */ - .long 0xf0c73f6c /* <+3668>: xxbrh vs6,vs7 */ - .long 0xf307cf6f /* <+3672>: xxbrh vs56,vs57 */ - .long 0xf0ef476c /* <+3676>: xxbrw vs7,vs8 */ - .long 0xf32fd76f /* <+3680>: xxbrw vs57,vs58 */ - .long 0xf1174f6c /* <+3684>: xxbrd vs8,vs9 */ - .long 0xf357df6f /* <+3688>: xxbrd vs58,vs59 */ - .long 0xf13f576c /* <+3692>: xxbrq vs9,vs10 */ - .long 0xf37fe76f /* <+3696>: xxbrq vs59,vs60 */ - .long 0xe6800002 /* <+3700>: lxsd v20,0(0) */ - .long 0xe68a0002 /* <+3704>: lxsd v20,0(r10) */ - .long 0xe680000a /* <+3708>: lxsd v20,8(0) */ - .long 0xe68a000a /* <+3712>: lxsd v20,8(r10) */ - .long 0xe680fffa /* <+3716>: lxsd v20,-8(0) */ - .long 0xe68afffa /* <+3720>: lxsd v20,-8(r10) */ - .long 0xe6807ffe /* <+3724>: lxsd v20,32764(0) */ - .long 0xe68a7ffe /* <+3728>: lxsd v20,32764(r10) */ - .long 0xe6808002 /* <+3732>: lxsd v20,-32768(0) */ - .long 0xe68a8002 /* <+3736>: lxsd v20,-32768(r10) */ - .long 0xe7c00003 /* <+3740>: lxssp v30,0(0) */ - .long 0xe7cb0003 /* <+3744>: lxssp v30,0(r11) */ - .long 0xe7c0000b /* <+3748>: lxssp v30,8(0) */ - .long 0xe7cb000b /* <+3752>: lxssp v30,8(r11) */ - .long 0xe7c0fffb /* <+3756>: lxssp v30,-8(0) */ - .long 0xe7cbfffb /* <+3760>: lxssp v30,-8(r11) */ - .long 0xe7c07fff /* <+3764>: lxssp v30,32764(0) */ - .long 0xe7cb7fff /* <+3768>: lxssp v30,32764(r11) */ - .long 0xe7c08003 /* <+3772>: lxssp v30,-32768(0) */ - .long 0xe7cb8003 /* <+3776>: lxssp v30,-32768(r11) */ - .long 0xf5000009 /* <+3780>: lxv vs40,0(0) */ - .long 0xf50c0009 /* <+3784>: lxv vs40,0(r12) */ - .long 0xf5000019 /* <+3788>: lxv vs40,16(0) */ - .long 0xf50c0019 /* <+3792>: lxv vs40,16(r12) */ - .long 0xf500fff9 /* <+3796>: lxv vs40,-16(0) */ - .long 0xf54cfff1 /* <+3800>: lxv vs10,-16(r12) */ - .long 0xf5407ff1 /* <+3804>: lxv vs10,32752(0) */ - .long 0xf54c7ff1 /* <+3808>: lxv vs10,32752(r12) */ - .long 0xf5408001 /* <+3812>: lxv vs10,-32768(0) */ - .long 0xf54c8001 /* <+3816>: lxv vs10,-32768(r12) */ - .long 0xf6a00002 /* <+3820>: stxsd v21,0(0) */ - .long 0xf6aa0002 /* <+3824>: stxsd v21,0(r10) */ - .long 0xf6a0000a /* <+3828>: stxsd v21,8(0) */ - .long 0xf6aa000a /* <+3832>: stxsd v21,8(r10) */ - .long 0xf6a0fffa /* <+3836>: stxsd v21,-8(0) */ - .long 0xf6aafffa /* <+3840>: stxsd v21,-8(r10) */ - .long 0xf6a07ffe /* <+3844>: stxsd v21,32764(0) */ - .long 0xf6aa7ffe /* <+3848>: stxsd v21,32764(r10) */ - .long 0xf6a08002 /* <+3852>: stxsd v21,-32768(0) */ - .long 0xf6aa8002 /* <+3856>: stxsd v21,-32768(r10) */ - .long 0xf7e00003 /* <+3860>: stxssp v31,0(0) */ - .long 0xf7eb0003 /* <+3864>: stxssp v31,0(r11) */ - .long 0xf7e0000b /* <+3868>: stxssp v31,8(0) */ - .long 0xf7eb000b /* <+3872>: stxssp v31,8(r11) */ - .long 0xf7e0fffb /* <+3876>: stxssp v31,-8(0) */ - .long 0xf7ebfffb /* <+3880>: stxssp v31,-8(r11) */ - .long 0xf7e07fff /* <+3884>: stxssp v31,32764(0) */ - .long 0xf7eb7fff /* <+3888>: stxssp v31,32764(r11) */ - .long 0xf7e08003 /* <+3892>: stxssp v31,-32768(0) */ - .long 0xf7eb8003 /* <+3896>: stxssp v31,-32768(r11) */ - .long 0xf520000d /* <+3900>: stxv vs41,0(0) */ - .long 0xf52c000d /* <+3904>: stxv vs41,0(r12) */ - .long 0xf520001d /* <+3908>: stxv vs41,16(0) */ - .long 0xf52c001d /* <+3912>: stxv vs41,16(r12) */ - .long 0xf520fffd /* <+3916>: stxv vs41,-16(0) */ - .long 0xf56cfff5 /* <+3920>: stxv vs11,-16(r12) */ - .long 0xf5607ff5 /* <+3924>: stxv vs11,32752(0) */ - .long 0xf56c7ff5 /* <+3928>: stxv vs11,32752(r12) */ - .long 0xf5608005 /* <+3932>: stxv vs11,-32768(0) */ - .long 0xf56c8005 /* <+3936>: stxv vs11,-32768(r12) */ - .long 0xf296c0d0 /* <+3940>: xxperm vs20,vs22,vs24 */ - .long 0xf10a60d7 /* <+3944>: xxperm vs40,vs42,vs44 */ - .long 0xf2b7c9d0 /* <+3948>: xxpermr vs21,vs23,vs25 */ - .long 0xf12b69d7 /* <+3952>: xxpermr vs41,vs43,vs45 */ - .long 0x7e8c06f4 /* <+3956>: extswsli r12,r20,0 */ - .long 0x7e8c0ef4 /* <+3960>: extswsli r12,r20,1 */ - .long 0x7e8cfef6 /* <+3964>: extswsli r12,r20,63 */ - .long 0x7ead06f5 /* <+3968>: extswsli. r13,r21,0 */ - .long 0x7ead0ef5 /* <+3972>: extswsli. r13,r21,1 */ - .long 0x7eadfef7 /* <+3976>: extswsli. r13,r21,63 */ - .long 0x11d6b885 /* <+3980>: vrlwmi v14,v22,v23 */ - .long 0x11f7c0c5 /* <+3984>: vrldmi v15,v23,v24 */ - .long 0x1218c985 /* <+3988>: vrlwnm v16,v24,v25 */ - .long 0x1239d1c5 /* <+3992>: vrldnm v17,v25,v26 */ - .long 0x125addcc /* <+3996>: vbpermd v18,v26,v27 */ - .long 0x1266a602 /* <+4000>: vnegw v19,v20 */ - .long 0x1287ae02 /* <+4004>: vnegd v20,v21 */ - .long 0x12a8b602 /* <+4008>: vprtybw v21,v22 */ - .long 0x12c9be02 /* <+4012>: vprtybd v22,v23 */ - .long 0x12eac602 /* <+4016>: vprtybq v23,v24 */ - .long 0x1310ce02 /* <+4020>: vextsb2w v24,v25 */ - .long 0x1331d602 /* <+4024>: vextsh2w v25,v26 */ - .long 0x1358de02 /* <+4028>: vextsb2d v26,v27 */ - .long 0x1379e602 /* <+4032>: vextsh2d v27,v28 */ - .long 0x139aee02 /* <+4036>: vextsw2d v28,v29 */ - .long 0x13bcf602 /* <+4040>: vctzb v29,v30 */ - .long 0x13ddfe02 /* <+4044>: vctzh v30,v31 */ - .long 0x13fef602 /* <+4048>: vctzw v31,v30 */ - .long 0x13dfee02 /* <+4052>: vctzd v30,v29 */ - .long 0x7d40a61a /* <+4056>: lxsibzx vs10,0,r20 */ - .long 0x7e4aa61b /* <+4060>: lxsibzx vs50,r10,r20 */ - .long 0x7d60ae5a /* <+4064>: lxsihzx vs11,0,r21 */ - .long 0x7e6bae5b /* <+4068>: lxsihzx vs51,r11,r21 */ - .long 0x7d80b71a /* <+4072>: stxsibx vs12,0,r22 */ - .long 0x7e8cb71b /* <+4076>: stxsibx vs52,r12,r22 */ - .long 0x7da0bf5a /* <+4080>: stxsihx vs13,0,r23 */ - .long 0x7eadbf5b /* <+4084>: stxsihx vs53,r13,r23 */ - .long 0x114b6370 /* <+4088>: maddhd r10,r11,r12,r13 */ - .long 0x1295b5f1 /* <+4092>: maddhdu r20,r21,r22,r23 */ - .long 0x10432173 /* <+4096>: maddld r2,r3,r4,r5 */ - .long 0xf00aa1d8 /* <+4100>: xscmpexpdp cr0,vs10,vs20 */ - .long 0xf38891de /* <+4104>: xscmpexpdp cr7,vs40,vs50 */ - .long 0xf12baf2d /* <+4108>: xsiexpdp vs41,r11,r21 */ - .long 0xf07f5da8 /* <+4112>: xststdcdp cr0,vs11,127 */ - .long 0xf3ff4daa /* <+4116>: xststdcdp cr7,vs41,127 */ - .long 0xf07f5ca8 /* <+4120>: xststdcsp cr0,vs11,127 */ - .long 0xf3ff4caa /* <+4124>: xststdcsp cr7,vs41,127 */ - .long 0xf1a05d6e /* <+4128>: xsxexpdp r13,vs43 */ - .long 0xf1c1656e /* <+4132>: xsxsigdp r14,vs44 */ - .long 0xf1ae7fc7 /* <+4136>: xviexpdp vs45,vs46,vs47 */ - .long 0xf1cf86c7 /* <+4140>: xviexpsp vs46,vs47,vs48 */ - .long 0xf2c0bfab /* <+4144>: xvtstdcdp vs54,vs55,0 */ - .long 0xf2dfbfef /* <+4148>: xvtstdcdp vs54,vs55,127 */ - .long 0xf2e0c6ab /* <+4152>: xvtstdcsp vs55,vs56,0 */ - .long 0xf2ffc6ef /* <+4156>: xvtstdcsp vs55,vs56,127 */ - .long 0xf320d76f /* <+4160>: xvxexpdp vs57,vs58 */ - .long 0xf348df6f /* <+4164>: xvxexpsp vs58,vs59 */ - .long 0xf361e76f /* <+4168>: xvxsigdp vs59,vs60 */ - .long 0xf389ef6f /* <+4172>: xvxsigsp vs60,vs61 */ - .long 0x7c0639c0 /* <+4176>: cmpeqb cr0,r6,r7 */ - .long 0x7f8639c0 /* <+4180>: cmpeqb cr7,r6,r7 */ - .long 0x7c084980 /* <+4184>: cmprb cr0,0,r8,r9 */ - .long 0x7f884980 /* <+4188>: cmprb cr7,0,r8,r9 */ - .long 0x7c284980 /* <+4192>: cmprb cr0,1,r8,r9 */ - .long 0x7fa84980 /* <+4196>: cmprb cr7,1,r8,r9 */ - .long 0x7de00100 /* <+4200>: setb r15,cr0 */ - .long 0x7dfc0100 /* <+4204>: setb r15,cr7 */ - .long 0x7f40521a /* <+4208>: lxvl vs26,0,r10 */ - .long 0x7f14521b /* <+4212>: lxvl vs56,r20,r10 */ - .long 0x7f605b1a /* <+4216>: stxvl vs27,0,r11 */ - .long 0x7f355b1b /* <+4220>: stxvl vs57,r21,r11 */ - .long 0x1280f602 /* <+4224>: vclzlsbb r20,v30 */ - .long 0x12a1fe02 /* <+4228>: vctzlsbb r21,v31 */ - .long 0x114b6007 /* <+4232>: vcmpneb v10,v11,v12 */ - .long 0x1295b407 /* <+4236>: vcmpneb. v20,v21,v22 */ - .long 0x116c6847 /* <+4240>: vcmpneh v11,v12,v13 */ - .long 0x12b6bc47 /* <+4244>: vcmpneh. v21,v22,v23 */ - .long 0x118d7087 /* <+4248>: vcmpnew v12,v13,v14 */ - .long 0x12d7c487 /* <+4252>: vcmpnew. v22,v23,v24 */ - .long 0x11ae7907 /* <+4256>: vcmpnezb v13,v14,v15 */ - .long 0x12f8cd07 /* <+4260>: vcmpnezb. v23,v24,v25 */ - .long 0x11cf8147 /* <+4264>: vcmpnezh v14,v15,v16 */ - .long 0x1319d547 /* <+4268>: vcmpnezh. v24,v25,v26 */ - .long 0x11f08987 /* <+4272>: vcmpnezw v15,v16,v17 */ - .long 0x133add87 /* <+4276>: vcmpnezw. v25,v26,v27 */ - .long 0x1211560d /* <+4280>: vextublx r16,r17,v10 */ - .long 0x12325f0d /* <+4284>: vextubrx r17,r18,v11 */ - .long 0x1253664d /* <+4288>: vextuhlx r18,r19,v12 */ - .long 0x12746f4d /* <+4292>: vextuhrx r19,r20,v13 */ - .long 0x1295768d /* <+4296>: vextuwlx r20,r21,v14 */ - .long 0x12b67f8d /* <+4300>: vextuwrx r21,r22,v15 */ - .long 0xec001d46 /* <+4304>: dtstsfi cr0,0,f3 */ - .long 0xefbf1d46 /* <+4308>: dtstsfi cr7,63,f3 */ - .long 0xfc002546 /* <+4312>: dtstsfiq cr0,0,f4 */ - .long 0xffbf2546 /* <+4316>: dtstsfiq cr7,63,f4 */ - .long 0xf110956f /* <+4320>: xscvhpdp vs40,vs50 */ - .long 0xf1319d6f /* <+4324>: xscvdphp vs41,vs51 */ - .long 0xf158a76f /* <+4328>: xvcvhpsp vs42,vs52 */ - .long 0xf179af6f /* <+4332>: xvcvsphp vs43,vs53 */ - .long 0x4c600004 /* <+4336>: addpcis r3,0 */ - .long 0x4c600004 /* <+4340>: addpcis r3,0 */ - .long 0x4c800005 /* <+4344>: addpcis r4,1 */ - .long 0x4c800005 /* <+4348>: addpcis r4,1 */ - .long 0x4cbfffc4 /* <+4352>: addpcis r5,-2 */ - .long 0x4cbfffc4 /* <+4356>: addpcis r5,-2 */ - .long 0x4cdf7fc5 /* <+4360>: addpcis r6,32767 */ - .long 0x4cdf7fc5 /* <+4364>: addpcis r6,32767 */ - .long 0x4ce08004 /* <+4368>: addpcis r7,-32768 */ - .long 0x4ce08004 /* <+4372>: addpcis r7,-32768 */ - .long 0x7c0002a4 /* <+4376>: slbsync */ - .long 0x7d405ba4 /* <+4380>: slbieg r10,r11 */ - .long 0x7c602726 /* <+4384>: slbmfee r3,r4 */ - .long 0x7c602726 /* <+4388>: slbmfee r3,r4 */ - .long 0x7c612726 /* <+4392>: slbmfee r3,r4,1 */ - .long 0x7c802ea6 /* <+4396>: slbmfev r4,r5 */ - .long 0x7c802ea6 /* <+4400>: slbmfev r4,r5 */ - .long 0x7c812ea6 /* <+4404>: slbmfev r4,r5,1 */ - .long 0x7c801a64 /* <+4408>: tlbie r3,r4 */ - .long 0x7c801a64 /* <+4412>: tlbie r3,r4 */ - .long 0x7c8f1a64 /* <+4416>: tlbie r3,r4,3,1,1 */ - .long 0x7c001a24 /* <+4420>: tlbiel r3 */ - .long 0x7c001a24 /* <+4424>: tlbiel r3 */ - .long 0x7c8f1a24 /* <+4428>: tlbiel r3,r4,3,1,1 */ - .long 0x7c2c6e0c /* <+4432>: copy r12,r13 */ - .long 0x7c2a5f0d /* <+4436>: paste. r10,r11 */ - .long 0x7c00068c /* <+4440>: cpabort */ - .long 0x7c0004ac /* <+4444>: hwsync */ - .long 0x7c0004ac /* <+4448>: hwsync */ - .long 0x7c0004ac /* <+4452>: hwsync */ - .long 0x7c2004ac /* <+4456>: lwsync */ - .long 0x7c2004ac /* <+4460>: lwsync */ - .long 0x7c4004ac /* <+4464>: ptesync */ - .long 0x7c4004ac /* <+4468>: ptesync */ - .long 0x7e8004cc /* <+4472>: ldat r20,0,0 */ - .long 0x7e8ae4cc /* <+4476>: ldat r20,r10,28 */ - .long 0x7ea0048c /* <+4480>: lwat r21,0,0 */ - .long 0x7eabe48c /* <+4484>: lwat r21,r11,28 */ - .long 0x7ec005cc /* <+4488>: stdat r22,0,0 */ - .long 0x7ecce5cc /* <+4492>: stdat r22,r12,28 */ - .long 0x7ee0058c /* <+4496>: stwat r23,0,0 */ - .long 0x7eede58c /* <+4500>: stwat r23,r13,28 */ - .long 0x4c000264 /* <+4504>: urfid */ - .long 0x7c00f6e4 /* <+4508>: rmieg r30 */ - .long 0x7d407a6a /* <+4512>: ldmx r10,0,r15 */ - .long 0x7d437a6a /* <+4516>: ldmx r10,r3,r15 */ - .long 0x4c0002e4 /* <+4520>: stop */ - .long 0x7c00003c /* <+4524>: wait */ - .long 0x7c00003c /* <+4528>: wait */ - .long 0x7c6005e6 /* <+4532>: darn r3,0 */ - .long 0x7c6105e6 /* <+4536>: darn r3,1 */ - .long 0x7c6205e6 /* <+4540>: darn r3,2 */ - .long 0x7c000480 /* <+4544>: mcrxrx cr0 */ - .long 0x7f800480 /* <+4548>: mcrxrx cr7 */ - .long 0x1295b744 /* <+4552>: vslv v20,v21,v22 */ - .long 0x12f8cf04 /* <+4556>: vsrv v23,v24,v25 */ - .long 0x7c0006ec /* <+4560>: msgsync */ - .long 0xf3c8901e /* <+4564>: xscmpeqdp vs30,vs40,vs50 */ - .long 0xf3e9985e /* <+4568>: xscmpgtdp vs31,vs41,vs51 */ - .long 0xf00aa09f /* <+4572>: xscmpgedp vs32,vs42,vs52 */ - .long 0xf04cb447 /* <+4576>: xsmincdp vs34,vs44,vs54 */ - .long 0xf06dbc07 /* <+4580>: xsmaxcdp vs35,vs45,vs55 */ - .long 0xf08ec4c7 /* <+4584>: xsminjdp vs36,vs46,vs56 */ - .long 0xf0afcc87 /* <+4588>: xsmaxjdp vs37,vs47,vs57 */ - .long 0x1295b5e3 /* <+4592>: vmsumudm v20,v21,v22,v23 */ - .long 0x7d6c6954 /* <+4596>: addex r11,r12,r13,0 */ - .long 0x7d6c6b54 /* <+4600>: addex r11,r12,r13,1 */ - .long 0x7d6c6d54 /* <+4604>: addex r11,r12,r13,2 */ - .long 0xff20048e /* <+4608>: mffs f25 */ - .long 0xff20048f /* <+4612>: mffs. f25 */ - .long 0xff41048e /* <+4616>: mffsce f26 */ - .long 0xff74a48e /* <+4620>: mffscdrn f27,f20 */ - .long 0xff95048e /* <+4624>: mffscdrni f28,0 */ - .long 0xff953c8e /* <+4628>: mffscdrni f28,7 */ - .long 0xffb6ac8e /* <+4632>: mffscrn f29,f21 */ - .long 0xffd7048e /* <+4636>: mffscrni f30,0 */ - .long 0xffd71c8e /* <+4640>: mffscrni f30,3 */ - .long 0xfff8048e /* <+4644>: mffsl f31 */ - .long 0x7d4006a4 /* <+4648>: slbiag r10 */ - -## altivec3.d - .long 0x117e0001 /* <+4652>: vmul10cuq v11,v30 */ - .long 0x13c1b807 /* <+4656>: vcmpneb v30,v1,v23 */ - .long 0x13d3f77b /* <+4660>: vpermr v30,v19,v30,v29 */ - .long 0x12948841 /* <+4664>: vmul10ecuq v20,v20,v17 */ - .long 0x1373f847 /* <+4668>: vcmpneh v27,v19,v31 */ - .long 0x10c9b885 /* <+4672>: vrlwmi v6,v9,v23 */ - .long 0x12da0887 /* <+4676>: vcmpnew v22,v26,v1 */ - .long 0x131ec8c5 /* <+4680>: vrldmi v24,v30,v25 */ - .long 0x127db107 /* <+4684>: vcmpnezb v19,v29,v22 */ - .long 0x11179947 /* <+4688>: vcmpnezh v8,v23,v19 */ - .long 0x13785985 /* <+4692>: vrlwnm v27,v24,v11 */ - .long 0x12ad5187 /* <+4696>: vcmpnezw v21,v13,v10 */ - .long 0x10b4e9c5 /* <+4700>: vrldnm v5,v20,v29 */ - .long 0x13d30201 /* <+4704>: vmul10uq v30,v19 */ - .long 0x130caa0d /* <+4708>: vextractub v24,v21,12 */ - .long 0x1013e241 /* <+4712>: vmul10euq v0,v19,v28 */ - .long 0x114c1a4d /* <+4716>: vextractuh v10,v3,12 */ - .long 0x1387628d /* <+4720>: vextractuw v28,v12,7 */ - .long 0x13c1dacd /* <+4724>: vextractd v30,v27,1 */ - .long 0x1324fb0d /* <+4728>: vinsertb v25,v31,4 */ - .long 0x12aef341 /* <+4732>: bcdcpsgn. v21,v14,v30 */ - .long 0x12c5934d /* <+4736>: vinserth v22,v18,5 */ - .long 0x13a1b38d /* <+4740>: vinsertw v29,v22,1 */ - .long 0x13a76bcd /* <+4744>: vinsertd v29,v13,7 */ - .long 0x12d94407 /* <+4748>: vcmpneb. v22,v25,v8 */ - .long 0x120fac47 /* <+4752>: vcmpneh. v16,v15,v21 */ - .long 0x12d5fc81 /* <+4756>: bcdus. v22,v21,v31 */ - .long 0x102c6487 /* <+4760>: vcmpnew. v1,v12,v12 */ - .long 0x10a346c1 /* <+4764>: bcds. v5,v3,v8,1 */ - .long 0x13760d01 /* <+4768>: bcdtrunc. v27,v22,v1,0 */ - .long 0x105a0507 /* <+4772>: vcmpnezb. v2,v26,v0 */ - .long 0x134e3d41 /* <+4776>: bcdutrunc. v26,v14,v7 */ - .long 0x12056547 /* <+4780>: vcmpnezh. v16,v5,v12 */ - .long 0x13002d81 /* <+4784>: bcdctsq. v24,v5 */ - .long 0x10e20581 /* <+4788>: bcdcfsq. v7,v0,0 */ - .long 0x13c46781 /* <+4792>: bcdctz. v30,v12,1 */ - .long 0x1225bd81 /* <+4796>: bcdctn. v17,v23 */ - .long 0x10867f81 /* <+4800>: bcdcfz. v4,v15,1 */ - .long 0x13a72f81 /* <+4804>: bcdcfn. v29,v5,1 */ - .long 0x137f6581 /* <+4808>: bcdsetsgn. v27,v12,0 */ - .long 0x11dccd87 /* <+4812>: vcmpnezw. v14,v28,v25 */ - .long 0x104237c1 /* <+4816>: bcdsr. v2,v2,v6,1 */ - .long 0x13202dcc /* <+4820>: vbpermd v25,v0,v5 */ - .long 0x1380ce02 /* <+4824>: vclzlsbb r28,v25 */ - .long 0x1041c602 /* <+4828>: vctzlsbb r2,v24 */ - .long 0x12a65e02 /* <+4832>: vnegw v21,v11 */ - .long 0x1227de02 /* <+4836>: vnegd v17,v27 */ - .long 0x13e8be02 /* <+4840>: vprtybw v31,v23 */ - .long 0x12a9be02 /* <+4844>: vprtybd v21,v23 */ - .long 0x12aa9602 /* <+4848>: vprtybq v21,v18 */ - .long 0x13d02602 /* <+4852>: vextsb2w v30,v4 */ - .long 0x1071d602 /* <+4856>: vextsh2w v3,v26 */ - .long 0x11788e02 /* <+4860>: vextsb2d v11,v17 */ - .long 0x10b95602 /* <+4864>: vextsh2d v5,v10 */ - .long 0x11bace02 /* <+4868>: vextsw2d v13,v25 */ - .long 0x133c1602 /* <+4872>: vctzb v25,v2 */ - .long 0x101d1e02 /* <+4876>: vctzh v0,v3 */ - .long 0x12de3602 /* <+4880>: vctzw v22,v6 */ - .long 0x135fc602 /* <+4884>: vctzd v26,v24 */ - .long 0x10df160d /* <+4888>: vextublx r6,r31,v2 */ - .long 0x11a0964d /* <+4892>: vextuhlx r13,r0,v18 */ - .long 0x11defe8d /* <+4896>: vextuwlx r14,r30,v31 */ - .long 0x11ec7704 /* <+4900>: vsrv v15,v12,v14 */ - .long 0x128af70d /* <+4904>: vextubrx r20,r10,v30 */ - .long 0x12b51744 /* <+4908>: vslv v21,v21,v2 */ - .long 0x11e90f4d /* <+4912>: vextuhrx r15,r9,v1 */ - .long 0x12b1878d /* <+4916>: vextuwrx r21,r17,v16 */ - .long 0x1295b5e3 /* <+4920>: vmsumudm v20,v21,v22,v23 */ -## vsx3.d - .long 0x7c46ca19 /* <+4924>: lxvx vs34,r6,r25 */ - .long 0x7e805218 /* <+4928>: lxvx vs20,0,r10 */ - .long 0x7e98521a /* <+4932>: lxvl vs20,r24,r10 */ - .long 0x7ec0ea1b /* <+4936>: lxvl vs54,0,r29 */ - .long 0x7f149a5a /* <+4940>: lxvll vs24,r20,r19 */ - .long 0x7c40725b /* <+4944>: lxvll vs34,0,r14 */ - .long 0x7ec20266 /* <+4948>: mfvsrld r2,vs22 */ - .long 0x7f5acad9 /* <+4952>: lxvwsx vs58,r26,r25 */ - .long 0x7ee0ead9 /* <+4956>: lxvwsx vs55,0,r29 */ - .long 0x7dd52318 /* <+4960>: stxvx vs14,r21,r4 */ - .long 0x7fc0b318 /* <+4964>: stxvx vs30,0,r22 */ - .long 0x7c1a231a /* <+4968>: stxvl vs0,r26,r4 */ - .long 0x7ca0b31b /* <+4972>: stxvl vs37,0,r22 */ - .long 0x7f0a0326 /* <+4976>: mtvsrws vs24,r10 */ - .long 0x7fd57b5a /* <+4980>: stxvll vs30,r21,r15 */ - .long 0x7ce0735b /* <+4984>: stxvll vs39,0,r14 */ - .long 0x7d862b66 /* <+4988>: mtvsrdd vs12,r6,r5 */ - .long 0x7cc0ab67 /* <+4992>: mtvsrdd vs38,0,r21 */ - .long 0x7f7c361b /* <+4996>: lxsibzx vs59,r28,r6 */ - .long 0x7fc0461a /* <+5000>: lxsibzx vs30,0,r8 */ - .long 0x7d578e59 /* <+5004>: lxvh8x vs42,r23,r17 */ - .long 0x7c802e59 /* <+5008>: lxvh8x vs36,0,r5 */ - .long 0x7d895e5a /* <+5012>: lxsihzx vs12,r9,r11 */ - .long 0x7e206e5b /* <+5016>: lxsihzx vs49,0,r13 */ - .long 0x7ca39ed9 /* <+5020>: lxvb16x vs37,r3,r19 */ - .long 0x7c00f6d8 /* <+5024>: lxvb16x vs0,0,r30 */ - .long 0x7c5e371a /* <+5028>: stxsibx vs2,r30,r6 */ - .long 0x7d806f1a /* <+5032>: stxsibx vs12,0,r13 */ - .long 0x7e1d4758 /* <+5036>: stxvh8x vs16,r29,r8 */ - .long 0x7ee05759 /* <+5040>: stxvh8x vs55,0,r10 */ - .long 0x7c42bf5b /* <+5044>: stxsihx vs34,r2,r23 */ - .long 0x7f80bf5b /* <+5048>: stxsihx vs60,0,r23 */ - .long 0x7eee67d8 /* <+5052>: stxvb16x vs23,r14,r12 */ - .long 0x7e602fd8 /* <+5056>: stxvb16x vs19,0,r5 */ - .long 0xe7000002 /* <+5060>: lxsd v24,0(0) */ - .long 0xe5f50012 /* <+5064>: lxsd v15,16(r21) */ - .long 0xe4c00003 /* <+5068>: lxssp v6,0(0) */ - .long 0xe6e90013 /* <+5072>: lxssp v23,16(r9) */ - .long 0xf253081e /* <+5076>: xscmpeqdp vs18,vs51,vs33 */ - .long 0xf05a105a /* <+5080>: xscmpgtdp vs2,vs26,vs34 */ - .long 0xf0baa098 /* <+5084>: xscmpgedp vs5,vs26,vs20 */ - .long 0xf18a58d3 /* <+5088>: xxperm vs44,vs10,vs43 */ - .long 0xf13429d1 /* <+5092>: xxpermr vs41,vs20,vs5 */ - .long 0xf212b9da /* <+5096>: xscmpexpdp cr4,vs18,vs55 */ - .long 0xf2e32a96 /* <+5100>: xxextractuw vs23,vs37,3 */ - .long 0xf2c75ad1 /* <+5104>: xxspltib vs54,235 */ - .long 0xf1e4f2d4 /* <+5108>: xxinsertw vs15,vs30,4 */ - .long 0xf18b3c00 /* <+5112>: xsmaxcdp vs12,vs11,vs7 */ - .long 0xf019c441 /* <+5116>: xsmincdp vs32,vs25,vs24 */ - .long 0xf3356484 /* <+5120>: xsmaxjdp vs25,vs53,vs12 */ - .long 0xf17f24aa /* <+5124>: xststdcsp cr2,vs36,127 */ - .long 0xf0156cc3 /* <+5128>: xsminjdp vs32,vs21,vs45 */ - .long 0xf220956e /* <+5132>: xsxexpdp r17,vs50 */ - .long 0xf0e1456e /* <+5136>: xsxsigdp r7,vs40 */ - .long 0xf2d0156f /* <+5140>: xscvhpdp vs54,vs34 */ - .long 0xf351b56f /* <+5144>: xscvdphp vs58,vs54 */ - .long 0xf07f35aa /* <+5148>: xststdcdp cr0,vs38,127 */ - .long 0xf31faeef /* <+5152>: xvtstdcsp vs56,vs53,127 */ - .long 0xf2d4a6c3 /* <+5156>: xviexpsp vs54,vs20,vs52 */ - .long 0xf33cef2d /* <+5160>: xsiexpdp vs57,r28,r29 */ - .long 0xf020a76c /* <+5164>: xvxexpdp vs1,vs20 */ - .long 0xf2c1df6f /* <+5168>: xvxsigdp vs54,vs59 */ - .long 0xf2472f6e /* <+5172>: xxbrh vs18,vs37 */ - .long 0xf1c80f6c /* <+5176>: xvxexpsp vs14,vs1 */ - .long 0xf2896f6d /* <+5180>: xvxsigsp vs52,vs13 */ - .long 0xf26f2f6c /* <+5184>: xxbrw vs19,vs5 */ - .long 0xf277bf6f /* <+5188>: xxbrd vs51,vs55 */ - .long 0xf0788f6d /* <+5192>: xvcvhpsp vs35,vs17 */ - .long 0xf1f96f6e /* <+5196>: xvcvsphp vs15,vs45 */ - .long 0xf23fff6c /* <+5200>: xxbrq vs17,vs31 */ - .long 0xf21f67ec /* <+5204>: xvtstdcdp vs16,vs12,127 */ - .long 0xf36947c0 /* <+5208>: xviexpdp vs27,vs9,vs8 */ - .long 0xf4800001 /* <+5212>: lxv vs4,0(0) */ - .long 0xf5140019 /* <+5216>: lxv vs40,16(r20) */ - .long 0xf640000d /* <+5220>: stxv vs50,0(0) */ - .long 0xf5100015 /* <+5224>: stxv vs8,16(r16) */ - .long 0xf4600002 /* <+5228>: stxsd v3,0(0) */ - .long 0xf6220012 /* <+5232>: stxsd v17,16(r2) */ - .long 0xf5a00003 /* <+5236>: stxssp v13,0(0) */ - .long 0xf62d0013 /* <+5240>: stxssp v17,16(r13) */ - .long 0xfd0a9008 /* <+5244>: xsaddqp v8,v10,v18 */ - .long 0xfca1e809 /* <+5248>: xsaddqpo v5,v1,v29 */ - .long 0xfd80960a /* <+5252>: xsrqpi 0,v12,v18,3 */ - .long 0xffe1980b /* <+5256>: xsrqpix 1,v31,v19,0 */ - .long 0xfdc13048 /* <+5260>: xsmulqp v14,v1,v6 */ - .long 0xfe27d849 /* <+5264>: xsmulqpo v17,v7,v27 */ - .long 0xfc80584a /* <+5268>: xsrqpxp 0,v4,v11,0 */ - .long 0xffb7e0c8 /* <+5272>: xscpsgnqp v29,v23,v28 */ - .long 0xff8dd908 /* <+5276>: xscmpoqp cr7,v13,v27 */ - .long 0xfe953148 /* <+5280>: xscmpexpqp cr5,v21,v6 */ - .long 0xfc532308 /* <+5284>: xsmaddqp v2,v19,v4 */ - .long 0xffc78309 /* <+5288>: xsmaddqpo v30,v7,v16 */ - .long 0xfebe7b48 /* <+5292>: xsmsubqp v21,v30,v15 */ - .long 0xfd91f349 /* <+5296>: xsmsubqpo v12,v17,v30 */ - .long 0xfcde6388 /* <+5300>: xsnmaddqp v6,v30,v12 */ - .long 0xfd966389 /* <+5304>: xsnmaddqpo v12,v22,v12 */ - .long 0xfd5ddbc8 /* <+5308>: xsnmsubqp v10,v29,v27 */ - .long 0xffbd6bc9 /* <+5312>: xsnmsubqpo v29,v29,v13 */ - .long 0xfe7b2408 /* <+5316>: xssubqp v19,v27,v4 */ - .long 0xfda80c09 /* <+5320>: xssubqpo v13,v8,v1 */ - .long 0xfd03dc48 /* <+5324>: xsdivqp v8,v3,v27 */ - .long 0xff14dc49 /* <+5328>: xsdivqpo v24,v20,v27 */ - .long 0xff8e2508 /* <+5332>: xscmpuqp cr7,v14,v4 */ - .long 0xfe7f1588 /* <+5336>: xststdcqp cr4,v2,127 */ - .long 0xffe0b648 /* <+5340>: xsabsqp v31,v22 */ - .long 0xff221e48 /* <+5344>: xsxexpqp v25,v3 */ - .long 0xfd48e648 /* <+5348>: xsnabsqp v10,v28 */ - .long 0xfe70fe48 /* <+5352>: xsnegqp v19,v31 */ - .long 0xfd726e48 /* <+5356>: xsxsigqp v11,v13 */ - .long 0xfdbb7648 /* <+5360>: xssqrtqp v13,v14 */ - .long 0xfc3bde49 /* <+5364>: xssqrtqpo v1,v27 */ - .long 0xfc613e88 /* <+5368>: xscvqpuwz v3,v7 */ - .long 0xfe829688 /* <+5372>: xscvudqp v20,v18 */ - .long 0xffa9ee88 /* <+5376>: xscvqpswz v29,v29 */ - .long 0xfc4ae688 /* <+5380>: xscvsdqp v2,v28 */ - .long 0xfef12688 /* <+5384>: xscvqpudz v23,v4 */ - .long 0xfc74a688 /* <+5388>: xscvqpdp v3,v20 */ - .long 0xfc341e89 /* <+5392>: xscvqpdpo v1,v3 */ - .long 0xfe766688 /* <+5396>: xscvdpqp v19,v12 */ - .long 0xfdb92688 /* <+5400>: xscvqpsdz v13,v4 */ - .long 0xfcf83ec8 /* <+5404>: xsiexpqp v7,v24,v7 */ diff --git a/gdb/testsuite/gdb.arch/powerpc-power7.exp b/gdb/testsuite/gdb.arch/powerpc-power7.exp new file mode 100644 index 0000000..f6b1a40 --- /dev/null +++ b/gdb/testsuite/gdb.arch/powerpc-power7.exp @@ -0,0 +1,161 @@ +# Copyright 2016 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +# Test PowerPC instructions disassembly. + +standard_testfile .s +set objfile [standard_output_file ${testfile}.o] + +if {![istarget "powerpc*-*-*"]} then { + verbose "Skipping PowerPC instructions disassembly." + return +} + +if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${objfile}" object {debug}] != "" } { + untested "PowerPC instructions disassembly" + return -1 +} + +clean_restart ${objfile} + +# Disassemble the function. + +gdb_test "set disassembler-options power7" +set test "disass func" +gdb_test_multiple $test $test { + -re "\r\nDump of assembler code for function func:(\r\n.*\r\n)End of assembler dump.\r\n$gdb_prompt $" { + set func $expect_out(1,string) + pass $test + } +} + +proc instr_to_patt {instr} { + # 0x0000000000000018 <+24>: stxvd2x vs43,r4,r5 + return ".*\r\n\[ \t\]*0x\[0-9a-f\]+ <\\+\[0-9a-f\]*>:\[ \t\]*[string map [list { } "\[ \t\]+" . {\.}] $instr]\[ \t\]*\r\n.*" +} + +proc func_check {instr} { + global func + + set test "Found: $instr" + if [regexp -nocase -line [instr_to_patt $instr] $func] { + pass $test + } else { + fail $test + } +} + +func_check "lxvd2x vs3,r4,r5" +func_check "lxvd2x vs43,r4,r5" +func_check "stxvd2x vs3,r4,r5" +func_check "stxvd2x vs43,r4,r5" +func_check "xxmrghd vs3,vs4,vs5" +func_check "xxmrghd vs43,vs44,vs45" +func_check "xxmrgld vs3,vs4,vs5" +func_check "xxmrgld vs43,vs44,vs45" +func_check "xxmrghd vs3,vs4,vs5" +func_check "xxmrghd vs43,vs44,vs45" +func_check "xxmrgld vs3,vs4,vs5" +func_check "xxmrgld vs43,vs44,vs45" +func_check "xxpermdi vs3,vs4,vs5,1" +func_check "xxpermdi vs43,vs44,vs45,1" +func_check "xxpermdi vs3,vs4,vs5,2" +func_check "xxpermdi vs43,vs44,vs45,2" +func_check "xvmovdp vs3,vs4" +func_check "xvmovdp vs43,vs44" +func_check "xvmovdp vs3,vs4" +func_check "xvmovdp vs43,vs44" +func_check "xvcpsgndp vs3,vs4,vs5" +func_check "xvcpsgndp vs43,vs44,vs45" +func_check "doze" +func_check "nap" +func_check "sleep" +func_check "rvwinkle" +func_check "prtyw r3,r4" +func_check "prtyd r13,r14" +func_check "mfcfar r10" +func_check "mtcfar r11" +func_check "cmpb r3,r4,r5" +func_check "lwzcix r10,r11,r12" +func_check "dadd f16,f17,f18" +func_check "daddq f20,f22,f24" +func_check "dss 3" +func_check "dssall" +func_check "dst r5,r4,1" +func_check "dstt r8,r7,0" +func_check "dstst r5,r6,3" +func_check "dststt r4,r5,2" +func_check "divwe r10,r11,r12" +func_check "divwe\. r11,r12,r13" +func_check "divweo r12,r13,r14" +func_check "divweo\. r13,r14,r15" +func_check "divweu r10,r11,r12" +func_check "divweu\. r11,r12,r13" +func_check "divweuo r12,r13,r14" +func_check "divweuo\. r13,r14,r15" +func_check "bpermd r7,r17,r27" +func_check "popcntw r10,r20" +func_check "popcntd r10,r20" +func_check "ldbrx r20,r21,r22" +func_check "stdbrx r20,r21,r22" +func_check "lfiwzx f10,0,r10" +func_check "lfiwzx f10,r9,r10" +func_check "fcfids f4,f5" +func_check "fcfids\. f4,f5" +func_check "fcfidus f4,f5" +func_check "fcfidus\. f4,f5" +func_check "fctiwu f4,f5" +func_check "fctiwu\. f4,f5" +func_check "fctiwuz f4,f5" +func_check "fctiwuz\. f4,f5" +func_check "fctidu f4,f5" +func_check "fctidu\. f4,f5" +func_check "fctiduz f4,f5" +func_check "fctiduz\. f4,f5" +func_check "fcfidu f4,f5" +func_check "fcfidu\. f4,f5" +func_check "ftdiv cr0,f10,f11" +func_check "ftdiv cr7,f10,f11" +func_check "ftsqrt cr0,f10" +func_check "ftsqrt cr7,f10" +func_check "dcbtt r8,r9" +func_check "dcbtstt r8,r9" +func_check "dcffix f10,f12" +func_check "dcffix\. f20,f22" +func_check "fre f14,f15" +func_check "fre\. f14,f15" +func_check "fres f14,f15" +func_check "fres\. f14,f15" +func_check "frsqrte f14,f15" +func_check "frsqrte\. f14,f15" +func_check "frsqrtes f14,f15" +func_check "frsqrtes\. f14,f15" +func_check "isel r2,r3,r4,28" +func_check "yield" +func_check "yield" +func_check "ori r2,r2,0" +func_check "nop" +func_check "nop" +func_check "ori r2,r2,0" +func_check "mdoio" +func_check "mdoio" +func_check "mdoom" +func_check "mdoom" +func_check "mfppr r10" +func_check "mfppr32 r11" +func_check "mtppr r12" +func_check "mtppr32 r13" +func_check "tlbie r10,r11" diff --git a/gdb/testsuite/gdb.arch/powerpc-power7.s b/gdb/testsuite/gdb.arch/powerpc-power7.s new file mode 100644 index 0000000..cadb4a2 --- /dev/null +++ b/gdb/testsuite/gdb.arch/powerpc-power7.s @@ -0,0 +1,121 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2016 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + + .text + .globl func +func: + .long 0x7c642e98 /* lxvd2x vs3,r4,r5 */ + .long 0x7d642e99 /* lxvd2x vs43,r4,r5 */ + .long 0x7c642f98 /* stxvd2x vs3,r4,r5 */ + .long 0x7d642f99 /* stxvd2x vs43,r4,r5 */ + .long 0xf0642850 /* xxmrghd vs3,vs4,vs5 */ + .long 0xf16c6857 /* xxmrghd vs43,vs44,vs45 */ + .long 0xf0642b50 /* xxmrgld vs3,vs4,vs5 */ + .long 0xf16c6b57 /* xxmrgld vs43,vs44,vs45 */ + .long 0xf0642850 /* xxmrghd vs3,vs4,vs5 */ + .long 0xf16c6857 /* xxmrghd vs43,vs44,vs45 */ + .long 0xf0642b50 /* xxmrgld vs3,vs4,vs5 */ + .long 0xf16c6b57 /* xxmrgld vs43,vs44,vs45 */ + .long 0xf0642950 /* xxpermdi vs3,vs4,vs5,1 */ + .long 0xf16c6957 /* xxpermdi vs43,vs44,vs45,1 */ + .long 0xf0642a50 /* xxpermdi vs3,vs4,vs5,2 */ + .long 0xf16c6a57 /* xxpermdi vs43,vs44,vs45,2 */ + .long 0xf0642780 /* xvmovdp vs3,vs4 */ + .long 0xf16c6787 /* xvmovdp vs43,vs44 */ + .long 0xf0642780 /* xvmovdp vs3,vs4 */ + .long 0xf16c6787 /* xvmovdp vs43,vs44 */ + .long 0xf0642f80 /* xvcpsgndp vs3,vs4,vs5 */ + .long 0xf16c6f87 /* xvcpsgndp vs43,vs44,vs45 */ + .long 0x4c000324 /* doze */ + .long 0x4c000364 /* nap */ + .long 0x4c0003a4 /* sleep */ + .long 0x4c0003e4 /* rvwinkle */ + .long 0x7c830134 /* prtyw r3,r4 */ + .long 0x7dcd0174 /* prtyd r13,r14 */ + .long 0x7d5c02a6 /* mfcfar r10 */ + .long 0x7d7c03a6 /* mtcfar r11 */ + .long 0x7c832bf8 /* cmpb r3,r4,r5 */ + .long 0x7d4b662a /* lwzcix r10,r11,r12 */ + .long 0xee119004 /* dadd f16,f17,f18 */ + .long 0xfe96c004 /* daddq f20,f22,f24 */ + .long 0x7c60066c /* dss 3 */ + .long 0x7e00066c /* dssall */ + .long 0x7c2522ac /* dst r5,r4,1 */ + .long 0x7e083aac /* dstt r8,r7,0 */ + .long 0x7c6532ec /* dstst r5,r6,3 */ + .long 0x7e442aec /* dststt r4,r5,2 */ + .long 0x7d4b6356 /* divwe r10,r11,r12 */ + .long 0x7d6c6b57 /* divwe. r11,r12,r13 */ + .long 0x7d8d7756 /* divweo r12,r13,r14 */ + .long 0x7dae7f57 /* divweo. r13,r14,r15 */ + .long 0x7d4b6316 /* divweu r10,r11,r12 */ + .long 0x7d6c6b17 /* divweu. r11,r12,r13 */ + .long 0x7d8d7716 /* divweuo r12,r13,r14 */ + .long 0x7dae7f17 /* divweuo. r13,r14,r15 */ + .long 0x7e27d9f8 /* bpermd r7,r17,r27 */ + .long 0x7e8a02f4 /* popcntw r10,r20 */ + .long 0x7e8a03f4 /* popcntd r10,r20 */ + .long 0x7e95b428 /* ldbrx r20,r21,r22 */ + .long 0x7e95b528 /* stdbrx r20,r21,r22 */ + .long 0x7d4056ee /* lfiwzx f10,0,r10 */ + .long 0x7d4956ee /* lfiwzx f10,r9,r10 */ + .long 0xec802e9c /* fcfids f4,f5 */ + .long 0xec802e9d /* fcfids. f4,f5 */ + .long 0xec802f9c /* fcfidus f4,f5 */ + .long 0xec802f9d /* fcfidus. f4,f5 */ + .long 0xfc80291c /* fctiwu f4,f5 */ + .long 0xfc80291d /* fctiwu. f4,f5 */ + .long 0xfc80291e /* fctiwuz f4,f5 */ + .long 0xfc80291f /* fctiwuz. f4,f5 */ + .long 0xfc802f5c /* fctidu f4,f5 */ + .long 0xfc802f5d /* fctidu. f4,f5 */ + .long 0xfc802f5e /* fctiduz f4,f5 */ + .long 0xfc802f5f /* fctiduz. f4,f5 */ + .long 0xfc802f9c /* fcfidu f4,f5 */ + .long 0xfc802f9d /* fcfidu. f4,f5 */ + .long 0xfc0a5900 /* ftdiv cr0,f10,f11 */ + .long 0xff8a5900 /* ftdiv cr7,f10,f11 */ + .long 0xfc005140 /* ftsqrt cr0,f10 */ + .long 0xff805140 /* ftsqrt cr7,f10 */ + .long 0x7e084a2c /* dcbtt r8,r9 */ + .long 0x7e0849ec /* dcbtstt r8,r9 */ + .long 0xed406644 /* dcffix f10,f12 */ + .long 0xee80b645 /* dcffix. f20,f22 */ + .long 0xfdc07830 /* fre f14,f15 */ + .long 0xfdc07831 /* fre. f14,f15 */ + .long 0xedc07830 /* fres f14,f15 */ + .long 0xedc07831 /* fres. f14,f15 */ + .long 0xfdc07834 /* frsqrte f14,f15 */ + .long 0xfdc07835 /* frsqrte. f14,f15 */ + .long 0xedc07834 /* frsqrtes f14,f15 */ + .long 0xedc07835 /* frsqrtes. f14,f15 */ + .long 0x7c43271e /* isel r2,r3,r4,28 */ + .long 0x7f7bdb78 /* yield */ + .long 0x7f7bdb78 /* yield */ + .long 0x60420000 /* ori r2,r2,0 */ + .long 0x60000000 /* nop */ + .long 0x60000000 /* nop */ + .long 0x60420000 /* ori r2,r2,0 */ + .long 0x7fbdeb78 /* mdoio */ + .long 0x7fbdeb78 /* mdoio */ + .long 0x7fdef378 /* mdoom */ + .long 0x7fdef378 /* mdoom */ + .long 0x7d40e2a6 /* mfppr r10 */ + .long 0x7d62e2a6 /* mfppr32 r11 */ + .long 0x7d80e3a6 /* mtppr r12 */ + .long 0x7da2e3a6 /* mtppr32 r13 */ + .long 0x7d605264 /* tlbie r10,r11 */ diff --git a/gdb/testsuite/gdb.arch/powerpc-power8.exp b/gdb/testsuite/gdb.arch/powerpc-power8.exp new file mode 100644 index 0000000..68bfaef --- /dev/null +++ b/gdb/testsuite/gdb.arch/powerpc-power8.exp @@ -0,0 +1,245 @@ +# Copyright 2016 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +# Test PowerPC instructions disassembly. + +standard_testfile .s +set objfile [standard_output_file ${testfile}.o] + +if {![istarget "powerpc*-*-*"]} then { + verbose "Skipping PowerPC instructions disassembly." + return +} + +if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${objfile}" object {debug}] != "" } { + untested "PowerPC instructions disassembly" + return -1 +} + +clean_restart ${objfile} + +# Disassemble the function. + +gdb_test "set disassembler-options power8" +set test "disass func" +gdb_test_multiple $test $test { + -re "\r\nDump of assembler code for function func:(\r\n.*\r\n)End of assembler dump.\r\n$gdb_prompt $" { + set func $expect_out(1,string) + pass $test + } +} + +proc instr_to_patt {instr} { + # 0x0000000000000018 <+24>: stxvd2x vs43,r4,r5 + return ".*\r\n\[ \t\]*0x\[0-9a-f\]+ <\\+\[0-9a-f\]*>:\[ \t\]*[string map [list { } "\[ \t\]+" . {\.}] $instr]\[ \t\]*\r\n.*" +} + +proc func_check {instr} { + global func + + set test "Found: $instr" + if [regexp -nocase -line [instr_to_patt $instr] $func] { + pass $test + } else { + fail $test + } +} + +func_check "tabort\. r5" +func_check "tabortwc\. 7,r8,r16" +func_check "tabortdc\. 20,r11,r10" +func_check "tabortwci\. 17,r10,-13" +func_check "tabortdci\. 29,r3,-5" +func_check "tbegin\. " +func_check "tcheck cr7" +func_check "tend\. " +func_check "tend\. " +func_check "tendall\." +func_check "tendall\." +func_check "treclaim\. r24" +func_check "trechkpt\." +func_check "tsuspend\." +func_check "tsuspend\." +func_check "tresume\." +func_check "tresume\." +func_check "ori r2,r2,0" +func_check "nop" +func_check "ori r2,r2,0" +func_check "rfebb 0" +func_check "rfebb " +func_check "rfebb " +func_check "bctar- 12,4\\*cr5\\+gt" +func_check "bctarl- 4,4\\*cr1\\+so" +func_check "bctar\\+ 12,4\\*cr3\\+lt" +func_check "bctarl\\+ 4,eq" +func_check "bctar 4,4\\*cr2\\+lt,1" +func_check "bctarl 4,4\\*cr1\\+so,2" +func_check "waitasec" +func_check "msgsndp r8" +func_check "mtsle 1" +func_check "msgclrp r27" +func_check "stqcx\. r10,r10,r12" +func_check "stqcx\. r28,0,r7" +func_check "lqarx r24,r19,r11" +func_check "lqarx r22,0,r11" +func_check "mfbhrbe r20,6" +func_check "pbt\. r29,r17,r16" +func_check "pbt\. r14,0,r7" +func_check "clrbhrb" +func_check "vpermxor v11,v10,v0,v23" +func_check "vaddeuqm v24,v2,v7,v4" +func_check "vaddecuq v10,v10,v8,v2" +func_check "vsubeuqm v5,v15,v8,v19" +func_check "vsubecuq v12,v31,v16,v29" +func_check "vmulouw v20,v29,v13" +func_check "vmuluwm v29,v0,v26" +func_check "vaddudm v8,v21,v28" +func_check "vmaxud v1,v26,v1" +func_check "vrld v20,v3,v1" +func_check "vcmpequd v4,v19,v11" +func_check "vadduqm v23,v14,v30" +func_check "vaddcuq v8,v8,v13" +func_check "vmulosw v28,v27,v4" +func_check "vmaxsd v3,v4,v4" +func_check "vmuleuw v0,v19,v21" +func_check "vminud v24,v20,v19" +func_check "vcmpgtud v0,v28,v15" +func_check "vmulesw v21,v0,v2" +func_check "vminsd v9,v26,v9" +func_check "vsrad v25,v29,v11" +func_check "vcmpgtsd v11,v28,v11" +func_check "bcdadd\. v5,v8,v26,1" +func_check "vpmsumb v4,v3,v12" +func_check "bcdsub\. v26,v31,v21,1" +func_check "vpmsumh v5,v17,v16" +func_check "vpkudum v23,v17,v20" +func_check "vpmsumw v24,v21,v29" +func_check "vpmsumd v9,v22,v13" +func_check "vpkudus v18,v19,v18" +func_check "vsubuqm v30,v16,v22" +func_check "vcipher v14,v11,v7" +func_check "vcipherlast v10,v2,v22" +func_check "vgbbd v23,v13" +func_check "vsubcuq v16,v25,v16" +func_check "vorc v31,v1,v5" +func_check "vncipher v4,v17,v31" +func_check "vncipherlast v24,v2,v27" +func_check "vbpermq v23,v21,v23" +func_check "vpksdus v27,v18,v9" +func_check "vnand v27,v29,v27" +func_check "vsld v19,v19,v24" +func_check "vsbox v5,v13" +func_check "vpksdss v25,v3,v7" +func_check "vcmpequd\. v28,v8,v0" +func_check "vupkhsw v26,v26" +func_check "vshasigmaw v5,v7,0,6" +func_check "veqv v28,v21,v14" +func_check "vmrgow v1,v8,v19" +func_check "vshasigmad v0,v10,0,10" +func_check "vsrd v5,v27,v14" +func_check "vupklsw v11,v13" +func_check "vclzb v14,v16" +func_check "vpopcntb v20,v27" +func_check "vclzh v28,v11" +func_check "vpopcnth v24,v9" +func_check "vclzw v27,v31" +func_check "vpopcntw v17,v19" +func_check "vclzd v12,v29" +func_check "vpopcntd v23,v22" +func_check "vcmpgtud\. v24,v20,v29" +func_check "vcmpgtsd\. v9,v6,v27" +func_check "lxsiwzx vs62,r14,r26" +func_check "lxsiwzx vs40,0,r25" +func_check "lxsiwax vs25,0,r26" +func_check "lxsiwax vs3,0,r3" +func_check "mfvsrd r12,vs62" +func_check "mffprwz r20,f12" +func_check "stxsiwx vs14,r9,r14" +func_check "stxsiwx vs21,0,r8" +func_check "mtvsrd vs48,r11" +func_check "mtvrwa v31,r23" +func_check "mtfprwz f16,r26" +func_check "lxsspx vs13,r19,r13" +func_check "lxsspx vs18,0,r13" +func_check "stxsspx vs43,r2,r4" +func_check "stxsspx vs55,0,r11" +func_check "xsaddsp vs54,vs48,vs25" +func_check "xsmaddasp vs14,vs50,vs1" +func_check "xssubsp vs26,vs22,vs42" +func_check "xsmaddmsp vs27,vs53,vs52" +func_check "xsrsqrtesp vs8,vs59" +func_check "xssqrtsp vs12,vs41" +func_check "xsmulsp vs57,vs11,vs32" +func_check "xsmsubasp vs38,vs20,vs26" +func_check "xsdivsp vs26,vs19,vs6" +func_check "xsmsubmsp vs35,vs37,vs55" +func_check "xsresp vs59,vs8" +func_check "xsnmaddasp vs44,vs33,vs33" +func_check "xsnmaddmsp vs17,vs62,vs30" +func_check "xsnmsubasp vs54,vs52,vs31" +func_check "xsnmsubmsp vs37,vs5,vs58" +func_check "xxlorc vs30,vs54,vs44" +func_check "xxlnand vs49,vs14,vs29" +func_check "xxleqv vs62,vs22,vs30" +func_check "xscvdpspn vs60,vs54" +func_check "xsrsp vs22,vs45" +func_check "xscvuxdsp vs26,vs59" +func_check "xscvsxdsp vs38,vs49" +func_check "xscvspdpn vs59,vs26" +func_check "fmrgow f24,f14,f2" +func_check "fmrgew f22,f7,f5" +func_check "msgsnd r14" +func_check "msgclr r23" +func_check "lxvd2x vs40,0,r5" +func_check "lxvd2x vs40,0,r5" +func_check "lxvd2x vs10,r20,r6" +func_check "lxvd2x vs10,r20,r6" +func_check "stxvd2x vs41,0,r7" +func_check "stxvd2x vs41,0,r7" +func_check "stxvd2x vs11,r21,r8" +func_check "stxvd2x vs11,r21,r8" +func_check "lbarx r20,0,r7" +func_check "lbarx r20,0,r7" +func_check "lbarx r20,0,r7,1" +func_check "lbarx r20,r1,r7" +func_check "lbarx r20,r1,r7" +func_check "lbarx r20,r1,r7,1" +func_check "ldarx r21,0,r8" +func_check "ldarx r21,0,r8" +func_check "ldarx r21,0,r8,1" +func_check "ldarx r21,r1,r8" +func_check "ldarx r21,r1,r8" +func_check "ldarx r21,r1,r8,1" +func_check "lharx r22,0,r9" +func_check "lharx r22,0,r9" +func_check "lharx r22,0,r9,1" +func_check "lharx r22,r1,r9" +func_check "lharx r22,r1,r9" +func_check "lharx r22,r1,r9,1" +func_check "lwarx r23,0,r10" +func_check "lwarx r23,0,r10" +func_check "lwarx r23,0,r10,1" +func_check "lwarx r23,r1,r10" +func_check "lwarx r23,r1,r10" +func_check "lwarx r23,r1,r10,1" +func_check "stbcx\. r10,0,r7" +func_check "stbcx\. r10,r1,r7" +func_check "sthcx\. r11,0,r8" +func_check "sthcx\. r11,r1,r8" +func_check "stwcx\. r12,0,r9" +func_check "stwcx\. r12,r1,r9" +func_check "stdcx\. r13,0,r10" +func_check "stdcx\. r13,r1,r10" diff --git a/gdb/testsuite/gdb.arch/powerpc-power8.s b/gdb/testsuite/gdb.arch/powerpc-power8.s new file mode 100644 index 0000000..1f528a9 --- /dev/null +++ b/gdb/testsuite/gdb.arch/powerpc-power8.s @@ -0,0 +1,205 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2016 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + + .text + .globl func +func: + .long 0x7c05071d /* tabort. r5 */ + .long 0x7ce8861d /* tabortwc. 7,r8,r16 */ + .long 0x7e8b565d /* tabortdc. 20,r11,r10 */ + .long 0x7e2a9e9d /* tabortwci. 17,r10,-13 */ + .long 0x7fa3dedd /* tabortdci. 29,r3,-5 */ + .long 0x7c00051d /* tbegin. */ + .long 0x7f80059c /* tcheck cr7 */ + .long 0x7c00055d /* tend. */ + .long 0x7c00055d /* tend. */ + .long 0x7e00055d /* tendall. */ + .long 0x7e00055d /* tendall. */ + .long 0x7c18075d /* treclaim. r24 */ + .long 0x7c0007dd /* trechkpt. */ + .long 0x7c0005dd /* tsuspend. */ + .long 0x7c0005dd /* tsuspend. */ + .long 0x7c2005dd /* tresume. */ + .long 0x7c2005dd /* tresume. */ + .long 0x60420000 /* ori r2,r2,0 */ + .long 0x60000000 /* nop */ + .long 0x60420000 /* ori r2,r2,0 */ + .long 0x4c000124 /* rfebb 0 */ + .long 0x4c000924 /* rfebb */ + .long 0x4c000924 /* rfebb */ + .long 0x4d950460 /* bctar- 12,4*cr5+gt */ + .long 0x4c870461 /* bctarl- 4,4*cr1+so */ + .long 0x4dac0460 /* bctar+ 12,4*cr3+lt */ + .long 0x4ca20461 /* bctarl+ 4,eq */ + .long 0x4c880c60 /* bctar 4,4*cr2+lt,1 */ + .long 0x4c871461 /* bctarl 4,4*cr1+so,2 */ + .long 0x7c00003c /* waitasec */ + .long 0x7c00411c /* msgsndp r8 */ + .long 0x7c200126 /* mtsle 1 */ + .long 0x7c00d95c /* msgclrp r27 */ + .long 0x7d4a616d /* stqcx. r10,r10,r12 */ + .long 0x7f80396d /* stqcx. r28,0,r7 */ + .long 0x7f135a28 /* lqarx r24,r19,r11 */ + .long 0x7ec05a28 /* lqarx r22,0,r11 */ + .long 0x7e80325c /* mfbhrbe r20,6 */ + .long 0x7fb18329 /* pbt. r29,r17,r16 */ + .long 0x7dc03b29 /* pbt. r14,0,r7 */ + .long 0x7c00035c /* clrbhrb */ + .long 0x116a05ed /* vpermxor v11,v10,v0,v23 */ + .long 0x1302393c /* vaddeuqm v24,v2,v7,v4 */ + .long 0x114a40bd /* vaddecuq v10,v10,v8,v2 */ + .long 0x10af44fe /* vsubeuqm v5,v15,v8,v19 */ + .long 0x119f877f /* vsubecuq v12,v31,v16,v29 */ + .long 0x129d6888 /* vmulouw v20,v29,v13 */ + .long 0x13a0d089 /* vmuluwm v29,v0,v26 */ + .long 0x1115e0c0 /* vaddudm v8,v21,v28 */ + .long 0x103a08c2 /* vmaxud v1,v26,v1 */ + .long 0x128308c4 /* vrld v20,v3,v1 */ + .long 0x109358c7 /* vcmpequd v4,v19,v11 */ + .long 0x12eef100 /* vadduqm v23,v14,v30 */ + .long 0x11086940 /* vaddcuq v8,v8,v13 */ + .long 0x139b2188 /* vmulosw v28,v27,v4 */ + .long 0x106421c2 /* vmaxsd v3,v4,v4 */ + .long 0x1013aa88 /* vmuleuw v0,v19,v21 */ + .long 0x13149ac2 /* vminud v24,v20,v19 */ + .long 0x101c7ac7 /* vcmpgtud v0,v28,v15 */ + .long 0x12a01388 /* vmulesw v21,v0,v2 */ + .long 0x113a4bc2 /* vminsd v9,v26,v9 */ + .long 0x133d5bc4 /* vsrad v25,v29,v11 */ + .long 0x117c5bc7 /* vcmpgtsd v11,v28,v11 */ + .long 0x10a8d601 /* bcdadd. v5,v8,v26,1 */ + .long 0x10836408 /* vpmsumb v4,v3,v12 */ + .long 0x135fae41 /* bcdsub. v26,v31,v21,1 */ + .long 0x10b18448 /* vpmsumh v5,v17,v16 */ + .long 0x12f1a44e /* vpkudum v23,v17,v20 */ + .long 0x1315ec88 /* vpmsumw v24,v21,v29 */ + .long 0x11366cc8 /* vpmsumd v9,v22,v13 */ + .long 0x125394ce /* vpkudus v18,v19,v18 */ + .long 0x13d0b500 /* vsubuqm v30,v16,v22 */ + .long 0x11cb3d08 /* vcipher v14,v11,v7 */ + .long 0x1142b509 /* vcipherlast v10,v2,v22 */ + .long 0x12e06d0c /* vgbbd v23,v13 */ + .long 0x12198540 /* vsubcuq v16,v25,v16 */ + .long 0x13e12d44 /* vorc v31,v1,v5 */ + .long 0x1091fd48 /* vncipher v4,v17,v31 */ + .long 0x1302dd49 /* vncipherlast v24,v2,v27 */ + .long 0x12f5bd4c /* vbpermq v23,v21,v23 */ + .long 0x13724d4e /* vpksdus v27,v18,v9 */ + .long 0x137ddd84 /* vnand v27,v29,v27 */ + .long 0x1273c5c4 /* vsld v19,v19,v24 */ + .long 0x10ad05c8 /* vsbox v5,v13 */ + .long 0x13233dce /* vpksdss v25,v3,v7 */ + .long 0x138804c7 /* vcmpequd. v28,v8,v0 */ + .long 0x1340d64e /* vupkhsw v26,v26 */ + .long 0x10a73682 /* vshasigmaw v5,v7,0,6 */ + .long 0x13957684 /* veqv v28,v21,v14 */ + .long 0x10289e8c /* vmrgow v1,v8,v19 */ + .long 0x100a56c2 /* vshasigmad v0,v10,0,10 */ + .long 0x10bb76c4 /* vsrd v5,v27,v14 */ + .long 0x11606ece /* vupklsw v11,v13 */ + .long 0x11c08702 /* vclzb v14,v16 */ + .long 0x1280df03 /* vpopcntb v20,v27 */ + .long 0x13805f42 /* vclzh v28,v11 */ + .long 0x13004f43 /* vpopcnth v24,v9 */ + .long 0x1360ff82 /* vclzw v27,v31 */ + .long 0x12209f83 /* vpopcntw v17,v19 */ + .long 0x1180efc2 /* vclzd v12,v29 */ + .long 0x12e0b7c3 /* vpopcntd v23,v22 */ + .long 0x1314eec7 /* vcmpgtud. v24,v20,v29 */ + .long 0x1126dfc7 /* vcmpgtsd. v9,v6,v27 */ + .long 0x7fced019 /* lxsiwzx vs62,r14,r26 */ + .long 0x7d00c819 /* lxsiwzx vs40,0,r25 */ + .long 0x7f20d098 /* lxsiwax vs25,0,r26 */ + .long 0x7c601898 /* lxsiwax vs3,0,r3 */ + .long 0x7fcc0067 /* mfvsrd r12,vs62 */ + .long 0x7d9400e6 /* mffprwz r20,f12 */ + .long 0x7dc97118 /* stxsiwx vs14,r9,r14 */ + .long 0x7ea04118 /* stxsiwx vs21,0,r8 */ + .long 0x7e0b0167 /* mtvsrd vs48,r11 */ + .long 0x7ff701a7 /* mtvrwa v31,r23 */ + .long 0x7e1a01e6 /* mtfprwz f16,r26 */ + .long 0x7db36c18 /* lxsspx vs13,r19,r13 */ + .long 0x7e406c18 /* lxsspx vs18,0,r13 */ + .long 0x7d622519 /* stxsspx vs43,r2,r4 */ + .long 0x7ee05d19 /* stxsspx vs55,0,r11 */ + .long 0xf2d0c805 /* xsaddsp vs54,vs48,vs25 */ + .long 0xf1d2080c /* xsmaddasp vs14,vs50,vs1 */ + .long 0xf3565042 /* xssubsp vs26,vs22,vs42 */ + .long 0xf375a04e /* xsmaddmsp vs27,vs53,vs52 */ + .long 0xf100d82a /* xsrsqrtesp vs8,vs59 */ + .long 0xf180482e /* xssqrtsp vs12,vs41 */ + .long 0xf32b0083 /* xsmulsp vs57,vs11,vs32 */ + .long 0xf0d4d089 /* xsmsubasp vs38,vs20,vs26 */ + .long 0xf35330c0 /* xsdivsp vs26,vs19,vs6 */ + .long 0xf065b8cf /* xsmsubmsp vs35,vs37,vs55 */ + .long 0xf3604069 /* xsresp vs59,vs8 */ + .long 0xf1810c0f /* xsnmaddasp vs44,vs33,vs33 */ + .long 0xf23ef44c /* xsnmaddmsp vs17,vs62,vs30 */ + .long 0xf2d4fc8d /* xsnmsubasp vs54,vs52,vs31 */ + .long 0xf0a5d4cb /* xsnmsubmsp vs37,vs5,vs58 */ + .long 0xf3d66556 /* xxlorc vs30,vs54,vs44 */ + .long 0xf22eed91 /* xxlnand vs49,vs14,vs29 */ + .long 0xf3d6f5d1 /* xxleqv vs62,vs22,vs30 */ + .long 0xf380b42f /* xscvdpspn vs60,vs54 */ + .long 0xf2c06c66 /* xsrsp vs22,vs45 */ + .long 0xf340dca2 /* xscvuxdsp vs26,vs59 */ + .long 0xf0c08ce3 /* xscvsxdsp vs38,vs49 */ + .long 0xf360d52d /* xscvspdpn vs59,vs26 */ + .long 0xff0e168c /* fmrgow f24,f14,f2 */ + .long 0xfec72f8c /* fmrgew f22,f7,f5 */ + .long 0x7c00719c /* msgsnd r14 */ + .long 0x7c00b9dc /* msgclr r23 */ + .long 0x7d002e99 /* lxvd2x vs40,0,r5 */ + .long 0x7d002e99 /* lxvd2x vs40,0,r5 */ + .long 0x7d543698 /* lxvd2x vs10,r20,r6 */ + .long 0x7d543698 /* lxvd2x vs10,r20,r6 */ + .long 0x7d203f99 /* stxvd2x vs41,0,r7 */ + .long 0x7d203f99 /* stxvd2x vs41,0,r7 */ + .long 0x7d754798 /* stxvd2x vs11,r21,r8 */ + .long 0x7d754798 /* stxvd2x vs11,r21,r8 */ + .long 0x7e803868 /* lbarx r20,0,r7 */ + .long 0x7e803868 /* lbarx r20,0,r7 */ + .long 0x7e803869 /* lbarx r20,0,r7,1 */ + .long 0x7e813868 /* lbarx r20,r1,r7 */ + .long 0x7e813868 /* lbarx r20,r1,r7 */ + .long 0x7e813869 /* lbarx r20,r1,r7,1 */ + .long 0x7ea040a8 /* ldarx r21,0,r8 */ + .long 0x7ea040a8 /* ldarx r21,0,r8 */ + .long 0x7ea040a9 /* ldarx r21,0,r8,1 */ + .long 0x7ea140a8 /* ldarx r21,r1,r8 */ + .long 0x7ea140a8 /* ldarx r21,r1,r8 */ + .long 0x7ea140a9 /* ldarx r21,r1,r8,1 */ + .long 0x7ec048e8 /* lharx r22,0,r9 */ + .long 0x7ec048e8 /* lharx r22,0,r9 */ + .long 0x7ec048e9 /* lharx r22,0,r9,1 */ + .long 0x7ec148e8 /* lharx r22,r1,r9 */ + .long 0x7ec148e8 /* lharx r22,r1,r9 */ + .long 0x7ec148e9 /* lharx r22,r1,r9,1 */ + .long 0x7ee05028 /* lwarx r23,0,r10 */ + .long 0x7ee05028 /* lwarx r23,0,r10 */ + .long 0x7ee05029 /* lwarx r23,0,r10,1 */ + .long 0x7ee15028 /* lwarx r23,r1,r10 */ + .long 0x7ee15028 /* lwarx r23,r1,r10 */ + .long 0x7ee15029 /* lwarx r23,r1,r10,1 */ + .long 0x7d403d6d /* stbcx. r10,0,r7 */ + .long 0x7d413d6d /* stbcx. r10,r1,r7 */ + .long 0x7d6045ad /* sthcx. r11,0,r8 */ + .long 0x7d6145ad /* sthcx. r11,r1,r8 */ + .long 0x7d80492d /* stwcx. r12,0,r9 */ + .long 0x7d81492d /* stwcx. r12,r1,r9 */ + .long 0x7da051ad /* stdcx. r13,0,r10 */ + .long 0x7da151ad /* stdcx. r13,r1,r10 */ diff --git a/gdb/testsuite/gdb.arch/powerpc-power9.exp b/gdb/testsuite/gdb.arch/powerpc-power9.exp new file mode 100644 index 0000000..7ea9ac7 --- /dev/null +++ b/gdb/testsuite/gdb.arch/powerpc-power9.exp @@ -0,0 +1,442 @@ +# Copyright 2016 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +# Test PowerPC instructions disassembly. + +standard_testfile .s +set objfile [standard_output_file ${testfile}.o] + +if {![istarget "powerpc*-*-*"]} then { + verbose "Skipping PowerPC instructions disassembly." + return +} + +if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${objfile}" object {debug}] != "" } { + untested "PowerPC instructions disassembly" + return -1 +} + +clean_restart ${objfile} + +# Disassemble the function. + +gdb_test "set disassembler-options power9" +set test "disass func" +gdb_test_multiple $test $test { + -re "\r\nDump of assembler code for function func:(\r\n.*\r\n)End of assembler dump.\r\n$gdb_prompt $" { + set func $expect_out(1,string) + pass $test + } +} + +proc instr_to_patt {instr} { + # 0x0000000000000018 <+24>: stxvd2x vs43,r4,r5 + return ".*\r\n\[ \t\]*0x\[0-9a-f\]+ <\\+\[0-9a-f\]*>:\[ \t\]*[string map [list { } "\[ \t\]+" . {\.}] $instr]\[ \t\]*\r\n.*" +} + +proc func_check {instr} { + global func + + set test "Found: $instr" + if [regexp -nocase -line [instr_to_patt $instr] $func] { + pass $test + } else { + fail $test + } +} + +func_check "cnttzd r3,r13" +func_check "cnttzd\. r4,r14" +func_check "cnttzw r5,r15" +func_check "cnttzw\. r6,r16" +func_check "modsd r10,r20,r21" +func_check "modsw r11,r21,r22" +func_check "modud r12,r22,r23" +func_check "moduw r13,r23,r24" +func_check "bcdcfn\. v3,v4,0" +func_check "bcdcfn\. v3,v4,1" +func_check "bcdcfsq\. v4,v5,0" +func_check "bcdcfsq\. v4,v5,1" +func_check "bcdcfz\. v5,v6,0" +func_check "bcdcfz\. v5,v6,1" +func_check "bcdcpsgn\. v6,v7,v8" +func_check "bcdctn\. v7,v8" +func_check "bcdctsq\. v8,v9" +func_check "bcdctz\. v9,v10,0" +func_check "bcdctz\. v9,v10,1" +func_check "bcdsetsgn\. v10,v11,0" +func_check "bcdsetsgn\. v10,v11,1" +func_check "bcdsr\. v11,v12,v13,0" +func_check "bcdsr\. v11,v12,v13,1" +func_check "bcds\. v12,v13,v14,0" +func_check "bcds\. v12,v13,v14,1" +func_check "bcdtrunc\. v13,v14,v15,0" +func_check "bcdtrunc\. v13,v14,v15,1" +func_check "bcdus\. v14,v15,v16" +func_check "bcdutrunc\. v15,v16,v17" +func_check "lxvll vs20,0,r21" +func_check "lxvll vs20,r10,r21" +func_check "stxvll vs21,0,r11" +func_check "stxvll vs21,r10,r11" +func_check "vmul10cuq v22,v23" +func_check "vmul10ecuq v23,v24,v25" +func_check "vmul10euq v24,v25,v26" +func_check "vmul10uq v25,v26" +func_check "xsaddqp v10,v11,v12" +func_check "xsaddqpo v11,v12,v12" +func_check "xsrqpi 0,v20,v30,0" +func_check "xsrqpi 1,v20,v30,0" +func_check "xsrqpi 0,v20,v30,3" +func_check "xsrqpi 1,v20,v30,3" +func_check "xsrqpix 0,v21,v31,0" +func_check "xsrqpix 1,v21,v31,0" +func_check "xsrqpix 0,v21,v31,3" +func_check "xsrqpix 1,v21,v31,3" +func_check "xsmulqp v12,v13,v14" +func_check "xsmulqpo v13,v14,v15" +func_check "xsrqpxp 0,v22,v23,0" +func_check "xsrqpxp 1,v22,v23,0" +func_check "xsrqpxp 0,v22,v23,3" +func_check "xsrqpxp 1,v22,v23,3" +func_check "xscpsgnqp v14,v15,v16" +func_check "xscmpoqp cr0,v15,v16" +func_check "xscmpoqp cr7,v15,v16" +func_check "xscmpexpqp cr0,v16,v17" +func_check "xscmpexpqp cr7,v16,v17" +func_check "xsmaddqp v17,v18,v19" +func_check "xsmaddqpo v18,v19,v20" +func_check "xsmsubqp v19,v20,v21" +func_check "xsmsubqpo v20,v21,v22" +func_check "xsnmaddqp v21,v22,v23" +func_check "xsnmaddqpo v22,v23,v24" +func_check "xsnmsubqp v23,v24,v25" +func_check "xsnmsubqpo v24,v25,v26" +func_check "xssubqp v25,v26,v27" +func_check "xssubqpo v26,v27,v28" +func_check "xsdivqp v27,v28,v29" +func_check "xsdivqpo v28,v29,v30" +func_check "xscmpuqp cr0,v29,v30" +func_check "xscmpuqp cr7,v29,v30" +func_check "xststdcqp cr0,v30,0" +func_check "xststdcqp cr7,v30,0" +func_check "xststdcqp cr0,v31,127" +func_check "xststdcqp cr7,v31,127" +func_check "xsabsqp v10,v11" +func_check "xsxexpqp v11,v12" +func_check "xsnabsqp v12,v13" +func_check "xsnegqp v13,v14" +func_check "xsxsigqp v14,v15" +func_check "xssqrtqp v15,v16" +func_check "xssqrtqpo v16,v17" +func_check "xscvqpuwz v17,v18" +func_check "xscvudqp v18,v19" +func_check "xscvqpswz v19,v20" +func_check "xscvsdqp v20,v21" +func_check "xscvqpudz v21,v22" +func_check "xscvqpdp v22,v23" +func_check "xscvqpdpo v23,v24" +func_check "xscvdpqp v24,v25" +func_check "xscvqpsdz v25,v26" +func_check "xsiexpqp v26,v27,v28" +func_check "vpermr v4,v5,v6,v7" +func_check "vextractub v5,v6,0" +func_check "vextractub v5,v6,15" +func_check "vextractuh v6,v7,0" +func_check "vextractuh v6,v7,15" +func_check "vextractuw v7,v8,0" +func_check "vextractuw v7,v8,15" +func_check "vextractd v8,v9,0" +func_check "vextractd v8,v9,15" +func_check "vinsertb v9,v10,0" +func_check "vinsertb v9,v10,15" +func_check "vinserth v10,v11,0" +func_check "vinserth v10,v11,15" +func_check "vinsertw v11,v12,0" +func_check "vinsertw v11,v12,15" +func_check "vinsertd v12,v13,0" +func_check "vinsertd v12,v13,15" +func_check "mfvsrld r20,vs45" +func_check "mtvsrws vs46,r21" +func_check "mtvsrdd vs47,0,r23" +func_check "mtvsrdd vs47,r22,r23" +func_check "lxvx vs50,0,r11" +func_check "lxvx vs0,r10,r11" +func_check "lxvwsx vs51,0,r12" +func_check "lxvwsx vs1,r10,r12" +func_check "lxvh8x vs52,0,r13" +func_check "lxvh8x vs2,r10,r13" +func_check "lxvb16x vs53,0,r14" +func_check "lxvb16x vs3,r10,r14" +func_check "stxvx vs54,0,r15" +func_check "stxvx vs4,r20,r15" +func_check "stxvh8x vs55,0,r16" +func_check "stxvh8x vs5,r20,r16" +func_check "stxvb16x vs56,0,r17" +func_check "stxvb16x vs6,r20,r17" +func_check "xxextractuw vs4,vs5,0" +func_check "xxextractuw vs40,vs50,15" +func_check "xxspltib vs4,0" +func_check "xxspltib vs4,128" +func_check "xxspltib vs41,255" +func_check "xxspltib vs41,255" +func_check "xxinsertw vs5,vs6,0" +func_check "xxinsertw vs50,vs60,15" +func_check "xxbrh vs6,vs7" +func_check "xxbrh vs56,vs57" +func_check "xxbrw vs7,vs8" +func_check "xxbrw vs57,vs58" +func_check "xxbrd vs8,vs9" +func_check "xxbrd vs58,vs59" +func_check "xxbrq vs9,vs10" +func_check "xxbrq vs59,vs60" +func_check "lxsd v20,0\\(0\\)" +func_check "lxsd v20,0\\(r10\\)" +func_check "lxsd v20,8\\(0\\)" +func_check "lxsd v20,8\\(r10\\)" +func_check "lxsd v20,-8\\(0\\)" +func_check "lxsd v20,-8\\(r10\\)" +func_check "lxsd v20,32764\\(0\\)" +func_check "lxsd v20,32764\\(r10\\)" +func_check "lxsd v20,-32768\\(0\\)" +func_check "lxsd v20,-32768\\(r10\\)" +func_check "lxssp v30,0\\(0\\)" +func_check "lxssp v30,0\\(r11\\)" +func_check "lxssp v30,8\\(0\\)" +func_check "lxssp v30,8\\(r11\\)" +func_check "lxssp v30,-8\\(0\\)" +func_check "lxssp v30,-8\\(r11\\)" +func_check "lxssp v30,32764\\(0\\)" +func_check "lxssp v30,32764\\(r11\\)" +func_check "lxssp v30,-32768\\(0\\)" +func_check "lxssp v30,-32768\\(r11\\)" +func_check "lxv vs40,0\\(0\\)" +func_check "lxv vs40,0\\(r12\\)" +func_check "lxv vs40,16\\(0\\)" +func_check "lxv vs40,16\\(r12\\)" +func_check "lxv vs40,-16\\(0\\)" +func_check "lxv vs10,-16\\(r12\\)" +func_check "lxv vs10,32752\\(0\\)" +func_check "lxv vs10,32752\\(r12\\)" +func_check "lxv vs10,-32768\\(0\\)" +func_check "lxv vs10,-32768\\(r12\\)" +func_check "stxsd v21,0\\(0\\)" +func_check "stxsd v21,0\\(r10\\)" +func_check "stxsd v21,8\\(0\\)" +func_check "stxsd v21,8\\(r10\\)" +func_check "stxsd v21,-8\\(0\\)" +func_check "stxsd v21,-8\\(r10\\)" +func_check "stxsd v21,32764\\(0\\)" +func_check "stxsd v21,32764\\(r10\\)" +func_check "stxsd v21,-32768\\(0\\)" +func_check "stxsd v21,-32768\\(r10\\)" +func_check "stxssp v31,0\\(0\\)" +func_check "stxssp v31,0\\(r11\\)" +func_check "stxssp v31,8\\(0\\)" +func_check "stxssp v31,8\\(r11\\)" +func_check "stxssp v31,-8\\(0\\)" +func_check "stxssp v31,-8\\(r11\\)" +func_check "stxssp v31,32764\\(0\\)" +func_check "stxssp v31,32764\\(r11\\)" +func_check "stxssp v31,-32768\\(0\\)" +func_check "stxssp v31,-32768\\(r11\\)" +func_check "stxv vs41,0\\(0\\)" +func_check "stxv vs41,0\\(r12\\)" +func_check "stxv vs41,16\\(0\\)" +func_check "stxv vs41,16\\(r12\\)" +func_check "stxv vs41,-16\\(0\\)" +func_check "stxv vs11,-16\\(r12\\)" +func_check "stxv vs11,32752\\(0\\)" +func_check "stxv vs11,32752\\(r12\\)" +func_check "stxv vs11,-32768\\(0\\)" +func_check "stxv vs11,-32768\\(r12\\)" +func_check "xxperm vs20,vs22,vs24" +func_check "xxperm vs40,vs42,vs44" +func_check "xxpermr vs21,vs23,vs25" +func_check "xxpermr vs41,vs43,vs45" +func_check "extswsli r12,r20,0" +func_check "extswsli r12,r20,1" +func_check "extswsli r12,r20,63" +func_check "extswsli\. r13,r21,0" +func_check "extswsli\. r13,r21,1" +func_check "extswsli\. r13,r21,63" +func_check "vrlwmi v14,v22,v23" +func_check "vrldmi v15,v23,v24" +func_check "vrlwnm v16,v24,v25" +func_check "vrldnm v17,v25,v26" +func_check "vbpermd v18,v26,v27" +func_check "vnegw v19,v20" +func_check "vnegd v20,v21" +func_check "vprtybw v21,v22" +func_check "vprtybd v22,v23" +func_check "vprtybq v23,v24" +func_check "vextsb2w v24,v25" +func_check "vextsh2w v25,v26" +func_check "vextsb2d v26,v27" +func_check "vextsh2d v27,v28" +func_check "vextsw2d v28,v29" +func_check "vctzb v29,v30" +func_check "vctzh v30,v31" +func_check "vctzw v31,v30" +func_check "vctzd v30,v29" +func_check "lxsibzx vs10,0,r20" +func_check "lxsibzx vs50,r10,r20" +func_check "lxsihzx vs11,0,r21" +func_check "lxsihzx vs51,r11,r21" +func_check "stxsibx vs12,0,r22" +func_check "stxsibx vs52,r12,r22" +func_check "stxsihx vs13,0,r23" +func_check "stxsihx vs53,r13,r23" +func_check "maddhd r10,r11,r12,r13" +func_check "maddhdu r20,r21,r22,r23" +func_check "maddld r2,r3,r4,r5" +func_check "xscmpexpdp cr0,vs10,vs20" +func_check "xscmpexpdp cr7,vs40,vs50" +func_check "xsiexpdp vs41,r11,r21" +func_check "xststdcdp cr0,vs11,127" +func_check "xststdcdp cr7,vs41,127" +func_check "xststdcsp cr0,vs11,127" +func_check "xststdcsp cr7,vs41,127" +func_check "xsxexpdp r13,vs43" +func_check "xsxsigdp r14,vs44" +func_check "xviexpdp vs45,vs46,vs47" +func_check "xviexpsp vs46,vs47,vs48" +func_check "xvtstdcdp vs54,vs55,0" +func_check "xvtstdcdp vs54,vs55,127" +func_check "xvtstdcsp vs55,vs56,0" +func_check "xvtstdcsp vs55,vs56,127" +func_check "xvxexpdp vs57,vs58" +func_check "xvxexpsp vs58,vs59" +func_check "xvxsigdp vs59,vs60" +func_check "xvxsigsp vs60,vs61" +func_check "cmpeqb cr0,r6,r7" +func_check "cmpeqb cr7,r6,r7" +func_check "cmprb cr0,0,r8,r9" +func_check "cmprb cr7,0,r8,r9" +func_check "cmprb cr0,1,r8,r9" +func_check "cmprb cr7,1,r8,r9" +func_check "setb r15,cr0" +func_check "setb r15,cr7" +func_check "lxvl vs26,0,r10" +func_check "lxvl vs56,r20,r10" +func_check "stxvl vs27,0,r11" +func_check "stxvl vs57,r21,r11" +func_check "vclzlsbb r20,v30" +func_check "vctzlsbb r21,v31" +func_check "vcmpneb v10,v11,v12" +func_check "vcmpneb\. v20,v21,v22" +func_check "vcmpneh v11,v12,v13" +func_check "vcmpneh\. v21,v22,v23" +func_check "vcmpnew v12,v13,v14" +func_check "vcmpnew\. v22,v23,v24" +func_check "vcmpnezb v13,v14,v15" +func_check "vcmpnezb\. v23,v24,v25" +func_check "vcmpnezh v14,v15,v16" +func_check "vcmpnezh\. v24,v25,v26" +func_check "vcmpnezw v15,v16,v17" +func_check "vcmpnezw\. v25,v26,v27" +func_check "vextublx r16,r17,v10" +func_check "vextubrx r17,r18,v11" +func_check "vextuhlx r18,r19,v12" +func_check "vextuhrx r19,r20,v13" +func_check "vextuwlx r20,r21,v14" +func_check "vextuwrx r21,r22,v15" +func_check "dtstsfi cr0,0,f3" +func_check "dtstsfi cr7,63,f3" +func_check "dtstsfiq cr0,0,f4" +func_check "dtstsfiq cr7,63,f4" +func_check "xscvhpdp vs40,vs50" +func_check "xscvdphp vs41,vs51" +func_check "xvcvhpsp vs42,vs52" +func_check "xvcvsphp vs43,vs53" +func_check "addpcis r3,0" +func_check "addpcis r3,0" +func_check "addpcis r4,1" +func_check "addpcis r4,1" +func_check "addpcis r5,-2" +func_check "addpcis r5,-2" +func_check "addpcis r6,32767" +func_check "addpcis r6,32767" +func_check "addpcis r7,-32768" +func_check "addpcis r7,-32768" +func_check "slbsync" +func_check "slbiag r10" +func_check "slbieg r10,r11" +func_check "slbmfee r3,r4" +func_check "slbmfee r3,r4" +func_check "slbmfee r3,r4,1" +func_check "slbmfev r4,r5" +func_check "slbmfev r4,r5" +func_check "slbmfev r4,r5,1" +func_check "tlbie r3,r4" +func_check "tlbie r3,r4" +func_check "tlbie r3,r4,3,1,1" +func_check "tlbiel r3" +func_check "tlbiel r3" +func_check "tlbiel r3,r4,3,1,1" +func_check "copy r12,r13" +func_check "paste\. r10,r11" +func_check "cpabort" +func_check "hwsync" +func_check "hwsync" +func_check "hwsync" +func_check "lwsync" +func_check "lwsync" +func_check "ptesync" +func_check "ptesync" +func_check "ldat r20,0,0" +func_check "ldat r20,r10,28" +func_check "lwat r21,0,0" +func_check "lwat r21,r11,28" +func_check "stdat r22,0,0" +func_check "stdat r22,r12,28" +func_check "stwat r23,0,0" +func_check "stwat r23,r13,28" +func_check "urfid" +func_check "rmieg r30" +func_check "ldmx r10,0,r15" +func_check "ldmx r10,r3,r15" +func_check "stop" +func_check "wait " +func_check "wait " +func_check "darn r3,0" +func_check "darn r3,1" +func_check "darn r3,2" +func_check "mcrxrx cr0" +func_check "mcrxrx cr7" +func_check "vslv v20,v21,v22" +func_check "vsrv v23,v24,v25" +func_check "msgsync" +func_check "xscmpeqdp vs30,vs40,vs50" +func_check "xscmpgtdp vs31,vs41,vs51" +func_check "xscmpgedp vs32,vs42,vs52" +func_check "xsmincdp vs34,vs44,vs54" +func_check "xsmaxcdp vs35,vs45,vs55" +func_check "xsminjdp vs36,vs46,vs56" +func_check "xsmaxjdp vs37,vs47,vs57" +func_check "vmsumudm v20,v21,v22,v23" +func_check "addex r11,r12,r13,0" +func_check "addex r11,r12,r13,1" +func_check "addex r11,r12,r13,2" +func_check "mffs f25" +func_check "mffs\. f25" +func_check "mffsce f26" +func_check "mffscdrn f27,f20" +func_check "mffscdrni f28,0" +func_check "mffscdrni f28,7" +func_check "mffscrn f29,f21" +func_check "mffscrni f30,0" +func_check "mffscrni f30,3" +func_check "mffsl f31" diff --git a/gdb/testsuite/gdb.arch/powerpc-power9.s b/gdb/testsuite/gdb.arch/powerpc-power9.s new file mode 100644 index 0000000..8018202 --- /dev/null +++ b/gdb/testsuite/gdb.arch/powerpc-power9.s @@ -0,0 +1,402 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2016 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + + .text + .globl func +func: + .long 0x7da30474 /* cnttzd r3,r13 */ + .long 0x7dc40475 /* cnttzd. r4,r14 */ + .long 0x7de50434 /* cnttzw r5,r15 */ + .long 0x7e060435 /* cnttzw. r6,r16 */ + .long 0x7d54ae12 /* modsd r10,r20,r21 */ + .long 0x7d75b616 /* modsw r11,r21,r22 */ + .long 0x7d96ba12 /* modud r12,r22,r23 */ + .long 0x7db7c216 /* moduw r13,r23,r24 */ + .long 0x10672581 /* bcdcfn. v3,v4,0 */ + .long 0x10672781 /* bcdcfn. v3,v4,1 */ + .long 0x10822d81 /* bcdcfsq. v4,v5,0 */ + .long 0x10822f81 /* bcdcfsq. v4,v5,1 */ + .long 0x10a63581 /* bcdcfz. v5,v6,0 */ + .long 0x10a63781 /* bcdcfz. v5,v6,1 */ + .long 0x10c74341 /* bcdcpsgn. v6,v7,v8 */ + .long 0x10e54581 /* bcdctn. v7,v8 */ + .long 0x11004d81 /* bcdctsq. v8,v9 */ + .long 0x11245581 /* bcdctz. v9,v10,0 */ + .long 0x11245781 /* bcdctz. v9,v10,1 */ + .long 0x115f5d81 /* bcdsetsgn. v10,v11,0 */ + .long 0x115f5f81 /* bcdsetsgn. v10,v11,1 */ + .long 0x116c6dc1 /* bcdsr. v11,v12,v13,0 */ + .long 0x116c6fc1 /* bcdsr. v11,v12,v13,1 */ + .long 0x118d74c1 /* bcds. v12,v13,v14,0 */ + .long 0x118d76c1 /* bcds. v12,v13,v14,1 */ + .long 0x11ae7d01 /* bcdtrunc. v13,v14,v15,0 */ + .long 0x11ae7f01 /* bcdtrunc. v13,v14,v15,1 */ + .long 0x11cf8481 /* bcdus. v14,v15,v16 */ + .long 0x11f08d41 /* bcdutrunc. v15,v16,v17 */ + .long 0x7e80aa5a /* lxvll vs20,0,r21 */ + .long 0x7e8aaa5a /* lxvll vs20,r10,r21 */ + .long 0x7ea05b5a /* stxvll vs21,0,r11 */ + .long 0x7eaa5b5a /* stxvll vs21,r10,r11 */ + .long 0x12d70001 /* vmul10cuq v22,v23 */ + .long 0x12f8c841 /* vmul10ecuq v23,v24,v25 */ + .long 0x1319d241 /* vmul10euq v24,v25,v26 */ + .long 0x133a0201 /* vmul10uq v25,v26 */ + .long 0xfd4b6008 /* xsaddqp v10,v11,v12 */ + .long 0xfd6c6009 /* xsaddqpo v11,v12,v12 */ + .long 0xfe80f00a /* xsrqpi 0,v20,v30,0 */ + .long 0xfe81f00a /* xsrqpi 1,v20,v30,0 */ + .long 0xfe80f60a /* xsrqpi 0,v20,v30,3 */ + .long 0xfe81f60a /* xsrqpi 1,v20,v30,3 */ + .long 0xfea0f80b /* xsrqpix 0,v21,v31,0 */ + .long 0xfea1f80b /* xsrqpix 1,v21,v31,0 */ + .long 0xfea0fe0b /* xsrqpix 0,v21,v31,3 */ + .long 0xfea1fe0b /* xsrqpix 1,v21,v31,3 */ + .long 0xfd8d7048 /* xsmulqp v12,v13,v14 */ + .long 0xfdae7849 /* xsmulqpo v13,v14,v15 */ + .long 0xfec0b84a /* xsrqpxp 0,v22,v23,0 */ + .long 0xfec1b84a /* xsrqpxp 1,v22,v23,0 */ + .long 0xfec0be4a /* xsrqpxp 0,v22,v23,3 */ + .long 0xfec1be4a /* xsrqpxp 1,v22,v23,3 */ + .long 0xfdcf80c8 /* xscpsgnqp v14,v15,v16 */ + .long 0xfc0f8108 /* xscmpoqp cr0,v15,v16 */ + .long 0xff8f8108 /* xscmpoqp cr7,v15,v16 */ + .long 0xfc108948 /* xscmpexpqp cr0,v16,v17 */ + .long 0xff908948 /* xscmpexpqp cr7,v16,v17 */ + .long 0xfe329b08 /* xsmaddqp v17,v18,v19 */ + .long 0xfe53a309 /* xsmaddqpo v18,v19,v20 */ + .long 0xfe74ab48 /* xsmsubqp v19,v20,v21 */ + .long 0xfe95b349 /* xsmsubqpo v20,v21,v22 */ + .long 0xfeb6bb88 /* xsnmaddqp v21,v22,v23 */ + .long 0xfed7c389 /* xsnmaddqpo v22,v23,v24 */ + .long 0xfef8cbc8 /* xsnmsubqp v23,v24,v25 */ + .long 0xff19d3c9 /* xsnmsubqpo v24,v25,v26 */ + .long 0xff3adc08 /* xssubqp v25,v26,v27 */ + .long 0xff5be409 /* xssubqpo v26,v27,v28 */ + .long 0xff7cec48 /* xsdivqp v27,v28,v29 */ + .long 0xff9df449 /* xsdivqpo v28,v29,v30 */ + .long 0xfc1df508 /* xscmpuqp cr0,v29,v30 */ + .long 0xff9df508 /* xscmpuqp cr7,v29,v30 */ + .long 0xfc00f588 /* xststdcqp cr0,v30,0 */ + .long 0xff80f588 /* xststdcqp cr7,v30,0 */ + .long 0xfc7ffd88 /* xststdcqp cr0,v31,127 */ + .long 0xfffffd88 /* xststdcqp cr7,v31,127 */ + .long 0xfd405e48 /* xsabsqp v10,v11 */ + .long 0xfd626648 /* xsxexpqp v11,v12 */ + .long 0xfd886e48 /* xsnabsqp v12,v13 */ + .long 0xfdb07648 /* xsnegqp v13,v14 */ + .long 0xfdd27e48 /* xsxsigqp v14,v15 */ + .long 0xfdfb8648 /* xssqrtqp v15,v16 */ + .long 0xfe1b8e49 /* xssqrtqpo v16,v17 */ + .long 0xfe219688 /* xscvqpuwz v17,v18 */ + .long 0xfe429e88 /* xscvudqp v18,v19 */ + .long 0xfe69a688 /* xscvqpswz v19,v20 */ + .long 0xfe8aae88 /* xscvsdqp v20,v21 */ + .long 0xfeb1b688 /* xscvqpudz v21,v22 */ + .long 0xfed4be88 /* xscvqpdp v22,v23 */ + .long 0xfef4c689 /* xscvqpdpo v23,v24 */ + .long 0xff16ce88 /* xscvdpqp v24,v25 */ + .long 0xff39d688 /* xscvqpsdz v25,v26 */ + .long 0xff5be6c8 /* xsiexpqp v26,v27,v28 */ + .long 0x108531fb /* vpermr v4,v5,v6,v7 */ + .long 0x10a0320d /* vextractub v5,v6,0 */ + .long 0x10af320d /* vextractub v5,v6,15 */ + .long 0x10c03a4d /* vextractuh v6,v7,0 */ + .long 0x10cf3a4d /* vextractuh v6,v7,15 */ + .long 0x10e0428d /* vextractuw v7,v8,0 */ + .long 0x10ef428d /* vextractuw v7,v8,15 */ + .long 0x11004acd /* vextractd v8,v9,0 */ + .long 0x110f4acd /* vextractd v8,v9,15 */ + .long 0x1120530d /* vinsertb v9,v10,0 */ + .long 0x112f530d /* vinsertb v9,v10,15 */ + .long 0x11405b4d /* vinserth v10,v11,0 */ + .long 0x114f5b4d /* vinserth v10,v11,15 */ + .long 0x1160638d /* vinsertw v11,v12,0 */ + .long 0x116f638d /* vinsertw v11,v12,15 */ + .long 0x11806bcd /* vinsertd v12,v13,0 */ + .long 0x118f6bcd /* vinsertd v12,v13,15 */ + .long 0x7db40267 /* mfvsrld r20,vs45 */ + .long 0x7dd50327 /* mtvsrws vs46,r21 */ + .long 0x7de0bb67 /* mtvsrdd vs47,0,r23 */ + .long 0x7df6bb67 /* mtvsrdd vs47,r22,r23 */ + .long 0x7e405a19 /* lxvx vs50,0,r11 */ + .long 0x7c0a5a18 /* lxvx vs0,r10,r11 */ + .long 0x7e6062d9 /* lxvwsx vs51,0,r12 */ + .long 0x7c2a62d8 /* lxvwsx vs1,r10,r12 */ + .long 0x7e806e59 /* lxvh8x vs52,0,r13 */ + .long 0x7c4a6e58 /* lxvh8x vs2,r10,r13 */ + .long 0x7ea076d9 /* lxvb16x vs53,0,r14 */ + .long 0x7c6a76d8 /* lxvb16x vs3,r10,r14 */ + .long 0x7ec07b19 /* stxvx vs54,0,r15 */ + .long 0x7c947b18 /* stxvx vs4,r20,r15 */ + .long 0x7ee08759 /* stxvh8x vs55,0,r16 */ + .long 0x7cb48758 /* stxvh8x vs5,r20,r16 */ + .long 0x7f008fd9 /* stxvb16x vs56,0,r17 */ + .long 0x7cd48fd8 /* stxvb16x vs6,r20,r17 */ + .long 0xf0802a94 /* xxextractuw vs4,vs5,0 */ + .long 0xf10f9297 /* xxextractuw vs40,vs50,15 */ + .long 0xf08002d0 /* xxspltib vs4,0 */ + .long 0xf08402d0 /* xxspltib vs4,128 */ + .long 0xf127fad1 /* xxspltib vs41,255 */ + .long 0xf127fad1 /* xxspltib vs41,255 */ + .long 0xf0a032d4 /* xxinsertw vs5,vs6,0 */ + .long 0xf24fe2d7 /* xxinsertw vs50,vs60,15 */ + .long 0xf0c73f6c /* xxbrh vs6,vs7 */ + .long 0xf307cf6f /* xxbrh vs56,vs57 */ + .long 0xf0ef476c /* xxbrw vs7,vs8 */ + .long 0xf32fd76f /* xxbrw vs57,vs58 */ + .long 0xf1174f6c /* xxbrd vs8,vs9 */ + .long 0xf357df6f /* xxbrd vs58,vs59 */ + .long 0xf13f576c /* xxbrq vs9,vs10 */ + .long 0xf37fe76f /* xxbrq vs59,vs60 */ + .long 0xe6800002 /* lxsd v20,0(0) */ + .long 0xe68a0002 /* lxsd v20,0(r10) */ + .long 0xe680000a /* lxsd v20,8(0) */ + .long 0xe68a000a /* lxsd v20,8(r10) */ + .long 0xe680fffa /* lxsd v20,-8(0) */ + .long 0xe68afffa /* lxsd v20,-8(r10) */ + .long 0xe6807ffe /* lxsd v20,32764(0) */ + .long 0xe68a7ffe /* lxsd v20,32764(r10) */ + .long 0xe6808002 /* lxsd v20,-32768(0) */ + .long 0xe68a8002 /* lxsd v20,-32768(r10) */ + .long 0xe7c00003 /* lxssp v30,0(0) */ + .long 0xe7cb0003 /* lxssp v30,0(r11) */ + .long 0xe7c0000b /* lxssp v30,8(0) */ + .long 0xe7cb000b /* lxssp v30,8(r11) */ + .long 0xe7c0fffb /* lxssp v30,-8(0) */ + .long 0xe7cbfffb /* lxssp v30,-8(r11) */ + .long 0xe7c07fff /* lxssp v30,32764(0) */ + .long 0xe7cb7fff /* lxssp v30,32764(r11) */ + .long 0xe7c08003 /* lxssp v30,-32768(0) */ + .long 0xe7cb8003 /* lxssp v30,-32768(r11) */ + .long 0xf5000009 /* lxv vs40,0(0) */ + .long 0xf50c0009 /* lxv vs40,0(r12) */ + .long 0xf5000019 /* lxv vs40,16(0) */ + .long 0xf50c0019 /* lxv vs40,16(r12) */ + .long 0xf500fff9 /* lxv vs40,-16(0) */ + .long 0xf54cfff1 /* lxv vs10,-16(r12) */ + .long 0xf5407ff1 /* lxv vs10,32752(0) */ + .long 0xf54c7ff1 /* lxv vs10,32752(r12) */ + .long 0xf5408001 /* lxv vs10,-32768(0) */ + .long 0xf54c8001 /* lxv vs10,-32768(r12) */ + .long 0xf6a00002 /* stxsd v21,0(0) */ + .long 0xf6aa0002 /* stxsd v21,0(r10) */ + .long 0xf6a0000a /* stxsd v21,8(0) */ + .long 0xf6aa000a /* stxsd v21,8(r10) */ + .long 0xf6a0fffa /* stxsd v21,-8(0) */ + .long 0xf6aafffa /* stxsd v21,-8(r10) */ + .long 0xf6a07ffe /* stxsd v21,32764(0) */ + .long 0xf6aa7ffe /* stxsd v21,32764(r10) */ + .long 0xf6a08002 /* stxsd v21,-32768(0) */ + .long 0xf6aa8002 /* stxsd v21,-32768(r10) */ + .long 0xf7e00003 /* stxssp v31,0(0) */ + .long 0xf7eb0003 /* stxssp v31,0(r11) */ + .long 0xf7e0000b /* stxssp v31,8(0) */ + .long 0xf7eb000b /* stxssp v31,8(r11) */ + .long 0xf7e0fffb /* stxssp v31,-8(0) */ + .long 0xf7ebfffb /* stxssp v31,-8(r11) */ + .long 0xf7e07fff /* stxssp v31,32764(0) */ + .long 0xf7eb7fff /* stxssp v31,32764(r11) */ + .long 0xf7e08003 /* stxssp v31,-32768(0) */ + .long 0xf7eb8003 /* stxssp v31,-32768(r11) */ + .long 0xf520000d /* stxv vs41,0(0) */ + .long 0xf52c000d /* stxv vs41,0(r12) */ + .long 0xf520001d /* stxv vs41,16(0) */ + .long 0xf52c001d /* stxv vs41,16(r12) */ + .long 0xf520fffd /* stxv vs41,-16(0) */ + .long 0xf56cfff5 /* stxv vs11,-16(r12) */ + .long 0xf5607ff5 /* stxv vs11,32752(0) */ + .long 0xf56c7ff5 /* stxv vs11,32752(r12) */ + .long 0xf5608005 /* stxv vs11,-32768(0) */ + .long 0xf56c8005 /* stxv vs11,-32768(r12) */ + .long 0xf296c0d0 /* xxperm vs20,vs22,vs24 */ + .long 0xf10a60d7 /* xxperm vs40,vs42,vs44 */ + .long 0xf2b7c9d0 /* xxpermr vs21,vs23,vs25 */ + .long 0xf12b69d7 /* xxpermr vs41,vs43,vs45 */ + .long 0x7e8c06f4 /* extswsli r12,r20,0 */ + .long 0x7e8c0ef4 /* extswsli r12,r20,1 */ + .long 0x7e8cfef6 /* extswsli r12,r20,63 */ + .long 0x7ead06f5 /* extswsli. r13,r21,0 */ + .long 0x7ead0ef5 /* extswsli. r13,r21,1 */ + .long 0x7eadfef7 /* extswsli. r13,r21,63 */ + .long 0x11d6b885 /* vrlwmi v14,v22,v23 */ + .long 0x11f7c0c5 /* vrldmi v15,v23,v24 */ + .long 0x1218c985 /* vrlwnm v16,v24,v25 */ + .long 0x1239d1c5 /* vrldnm v17,v25,v26 */ + .long 0x125addcc /* vbpermd v18,v26,v27 */ + .long 0x1266a602 /* vnegw v19,v20 */ + .long 0x1287ae02 /* vnegd v20,v21 */ + .long 0x12a8b602 /* vprtybw v21,v22 */ + .long 0x12c9be02 /* vprtybd v22,v23 */ + .long 0x12eac602 /* vprtybq v23,v24 */ + .long 0x1310ce02 /* vextsb2w v24,v25 */ + .long 0x1331d602 /* vextsh2w v25,v26 */ + .long 0x1358de02 /* vextsb2d v26,v27 */ + .long 0x1379e602 /* vextsh2d v27,v28 */ + .long 0x139aee02 /* vextsw2d v28,v29 */ + .long 0x13bcf602 /* vctzb v29,v30 */ + .long 0x13ddfe02 /* vctzh v30,v31 */ + .long 0x13fef602 /* vctzw v31,v30 */ + .long 0x13dfee02 /* vctzd v30,v29 */ + .long 0x7d40a61a /* lxsibzx vs10,0,r20 */ + .long 0x7e4aa61b /* lxsibzx vs50,r10,r20 */ + .long 0x7d60ae5a /* lxsihzx vs11,0,r21 */ + .long 0x7e6bae5b /* lxsihzx vs51,r11,r21 */ + .long 0x7d80b71a /* stxsibx vs12,0,r22 */ + .long 0x7e8cb71b /* stxsibx vs52,r12,r22 */ + .long 0x7da0bf5a /* stxsihx vs13,0,r23 */ + .long 0x7eadbf5b /* stxsihx vs53,r13,r23 */ + .long 0x114b6370 /* maddhd r10,r11,r12,r13 */ + .long 0x1295b5f1 /* maddhdu r20,r21,r22,r23 */ + .long 0x10432173 /* maddld r2,r3,r4,r5 */ + .long 0xf00aa1d8 /* xscmpexpdp cr0,vs10,vs20 */ + .long 0xf38891de /* xscmpexpdp cr7,vs40,vs50 */ + .long 0xf12baf2d /* xsiexpdp vs41,r11,r21 */ + .long 0xf07f5da8 /* xststdcdp cr0,vs11,127 */ + .long 0xf3ff4daa /* xststdcdp cr7,vs41,127 */ + .long 0xf07f5ca8 /* xststdcsp cr0,vs11,127 */ + .long 0xf3ff4caa /* xststdcsp cr7,vs41,127 */ + .long 0xf1a05d6e /* xsxexpdp r13,vs43 */ + .long 0xf1c1656e /* xsxsigdp r14,vs44 */ + .long 0xf1ae7fc7 /* xviexpdp vs45,vs46,vs47 */ + .long 0xf1cf86c7 /* xviexpsp vs46,vs47,vs48 */ + .long 0xf2c0bfab /* xvtstdcdp vs54,vs55,0 */ + .long 0xf2dfbfef /* xvtstdcdp vs54,vs55,127 */ + .long 0xf2e0c6ab /* xvtstdcsp vs55,vs56,0 */ + .long 0xf2ffc6ef /* xvtstdcsp vs55,vs56,127 */ + .long 0xf320d76f /* xvxexpdp vs57,vs58 */ + .long 0xf348df6f /* xvxexpsp vs58,vs59 */ + .long 0xf361e76f /* xvxsigdp vs59,vs60 */ + .long 0xf389ef6f /* xvxsigsp vs60,vs61 */ + .long 0x7c0639c0 /* cmpeqb cr0,r6,r7 */ + .long 0x7f8639c0 /* cmpeqb cr7,r6,r7 */ + .long 0x7c084980 /* cmprb cr0,0,r8,r9 */ + .long 0x7f884980 /* cmprb cr7,0,r8,r9 */ + .long 0x7c284980 /* cmprb cr0,1,r8,r9 */ + .long 0x7fa84980 /* cmprb cr7,1,r8,r9 */ + .long 0x7de00100 /* setb r15,cr0 */ + .long 0x7dfc0100 /* setb r15,cr7 */ + .long 0x7f40521a /* lxvl vs26,0,r10 */ + .long 0x7f14521b /* lxvl vs56,r20,r10 */ + .long 0x7f605b1a /* stxvl vs27,0,r11 */ + .long 0x7f355b1b /* stxvl vs57,r21,r11 */ + .long 0x1280f602 /* vclzlsbb r20,v30 */ + .long 0x12a1fe02 /* vctzlsbb r21,v31 */ + .long 0x114b6007 /* vcmpneb v10,v11,v12 */ + .long 0x1295b407 /* vcmpneb. v20,v21,v22 */ + .long 0x116c6847 /* vcmpneh v11,v12,v13 */ + .long 0x12b6bc47 /* vcmpneh. v21,v22,v23 */ + .long 0x118d7087 /* vcmpnew v12,v13,v14 */ + .long 0x12d7c487 /* vcmpnew. v22,v23,v24 */ + .long 0x11ae7907 /* vcmpnezb v13,v14,v15 */ + .long 0x12f8cd07 /* vcmpnezb. v23,v24,v25 */ + .long 0x11cf8147 /* vcmpnezh v14,v15,v16 */ + .long 0x1319d547 /* vcmpnezh. v24,v25,v26 */ + .long 0x11f08987 /* vcmpnezw v15,v16,v17 */ + .long 0x133add87 /* vcmpnezw. v25,v26,v27 */ + .long 0x1211560d /* vextublx r16,r17,v10 */ + .long 0x12325f0d /* vextubrx r17,r18,v11 */ + .long 0x1253664d /* vextuhlx r18,r19,v12 */ + .long 0x12746f4d /* vextuhrx r19,r20,v13 */ + .long 0x1295768d /* vextuwlx r20,r21,v14 */ + .long 0x12b67f8d /* vextuwrx r21,r22,v15 */ + .long 0xec001d46 /* dtstsfi cr0,0,f3 */ + .long 0xefbf1d46 /* dtstsfi cr7,63,f3 */ + .long 0xfc002546 /* dtstsfiq cr0,0,f4 */ + .long 0xffbf2546 /* dtstsfiq cr7,63,f4 */ + .long 0xf110956f /* xscvhpdp vs40,vs50 */ + .long 0xf1319d6f /* xscvdphp vs41,vs51 */ + .long 0xf158a76f /* xvcvhpsp vs42,vs52 */ + .long 0xf179af6f /* xvcvsphp vs43,vs53 */ + .long 0x4c600004 /* addpcis r3,0 */ + .long 0x4c600004 /* addpcis r3,0 */ + .long 0x4c800005 /* addpcis r4,1 */ + .long 0x4c800005 /* addpcis r4,1 */ + .long 0x4cbfffc4 /* addpcis r5,-2 */ + .long 0x4cbfffc4 /* addpcis r5,-2 */ + .long 0x4cdf7fc5 /* addpcis r6,32767 */ + .long 0x4cdf7fc5 /* addpcis r6,32767 */ + .long 0x4ce08004 /* addpcis r7,-32768 */ + .long 0x4ce08004 /* addpcis r7,-32768 */ + .long 0x7c0002a4 /* slbsync */ + .long 0x7d4006a4 /* slbiag r10 */ + .long 0x7d405ba4 /* slbieg r10,r11 */ + .long 0x7c602726 /* slbmfee r3,r4 */ + .long 0x7c602726 /* slbmfee r3,r4 */ + .long 0x7c612726 /* slbmfee r3,r4,1 */ + .long 0x7c802ea6 /* slbmfev r4,r5 */ + .long 0x7c802ea6 /* slbmfev r4,r5 */ + .long 0x7c812ea6 /* slbmfev r4,r5,1 */ + .long 0x7c801a64 /* tlbie r3,r4 */ + .long 0x7c801a64 /* tlbie r3,r4 */ + .long 0x7c8f1a64 /* tlbie r3,r4,3,1,1 */ + .long 0x7c001a24 /* tlbiel r3 */ + .long 0x7c001a24 /* tlbiel r3 */ + .long 0x7c8f1a24 /* tlbiel r3,r4,3,1,1 */ + .long 0x7c2c6e0c /* copy r12,r13 */ + .long 0x7c2a5f0d /* paste. r10,r11 */ + .long 0x7c00068c /* cpabort */ + .long 0x7c0004ac /* hwsync */ + .long 0x7c0004ac /* hwsync */ + .long 0x7c0004ac /* hwsync */ + .long 0x7c2004ac /* lwsync */ + .long 0x7c2004ac /* lwsync */ + .long 0x7c4004ac /* ptesync */ + .long 0x7c4004ac /* ptesync */ + .long 0x7e8004cc /* ldat r20,0,0 */ + .long 0x7e8ae4cc /* ldat r20,r10,28 */ + .long 0x7ea0048c /* lwat r21,0,0 */ + .long 0x7eabe48c /* lwat r21,r11,28 */ + .long 0x7ec005cc /* stdat r22,0,0 */ + .long 0x7ecce5cc /* stdat r22,r12,28 */ + .long 0x7ee0058c /* stwat r23,0,0 */ + .long 0x7eede58c /* stwat r23,r13,28 */ + .long 0x4c000264 /* urfid */ + .long 0x7c00f6e4 /* rmieg r30 */ + .long 0x7d407a6a /* ldmx r10,0,r15 */ + .long 0x7d437a6a /* ldmx r10,r3,r15 */ + .long 0x4c0002e4 /* stop */ + .long 0x7c00003c /* wait */ + .long 0x7c00003c /* wait */ + .long 0x7c6005e6 /* darn r3,0 */ + .long 0x7c6105e6 /* darn r3,1 */ + .long 0x7c6205e6 /* darn r3,2 */ + .long 0x7c000480 /* mcrxrx cr0 */ + .long 0x7f800480 /* mcrxrx cr7 */ + .long 0x1295b744 /* vslv v20,v21,v22 */ + .long 0x12f8cf04 /* vsrv v23,v24,v25 */ + .long 0x7c0006ec /* msgsync */ + .long 0xf3c8901e /* xscmpeqdp vs30,vs40,vs50 */ + .long 0xf3e9985e /* xscmpgtdp vs31,vs41,vs51 */ + .long 0xf00aa09f /* xscmpgedp vs32,vs42,vs52 */ + .long 0xf04cb447 /* xsmincdp vs34,vs44,vs54 */ + .long 0xf06dbc07 /* xsmaxcdp vs35,vs45,vs55 */ + .long 0xf08ec4c7 /* xsminjdp vs36,vs46,vs56 */ + .long 0xf0afcc87 /* xsmaxjdp vs37,vs47,vs57 */ + .long 0x1295b5e3 /* vmsumudm v20,v21,v22,v23 */ + .long 0x7d6c6954 /* addex r11,r12,r13,0 */ + .long 0x7d6c6b54 /* addex r11,r12,r13,1 */ + .long 0x7d6c6d54 /* addex r11,r12,r13,2 */ + .long 0xff20048e /* mffs f25 */ + .long 0xff20048f /* mffs. f25 */ + .long 0xff41048e /* mffsce f26 */ + .long 0xff74a48e /* mffscdrn f27,f20 */ + .long 0xff95048e /* mffscdrni f28,0 */ + .long 0xff953c8e /* mffscdrni f28,7 */ + .long 0xffb6ac8e /* mffscrn f29,f21 */ + .long 0xffd7048e /* mffscrni f30,0 */ + .long 0xffd71c8e /* mffscrni f30,3 */ + .long 0xfff8048e /* mffsl f31 */ diff --git a/gdb/testsuite/gdb.arch/powerpc-vsx.exp b/gdb/testsuite/gdb.arch/powerpc-vsx.exp new file mode 100644 index 0000000..e597155 --- /dev/null +++ b/gdb/testsuite/gdb.arch/powerpc-vsx.exp @@ -0,0 +1,222 @@ +# Copyright 2016 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +# Test PowerPC instructions disassembly. + +standard_testfile .s +set objfile [standard_output_file ${testfile}.o] + +if {![istarget "powerpc*-*-*"]} then { + verbose "Skipping PowerPC instructions disassembly." + return +} + +if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${objfile}" object {debug}] != "" } { + untested "PowerPC instructions disassembly" + return -1 +} + +clean_restart ${objfile} + +# Disassemble the function. + +gdb_test "set disassembler-options vsx" +set test "disass func" +gdb_test_multiple $test $test { + -re "\r\nDump of assembler code for function func:(\r\n.*\r\n)End of assembler dump.\r\n$gdb_prompt $" { + set func $expect_out(1,string) + pass $test + } +} + +proc instr_to_patt {instr} { + # 0x0000000000000018 <+24>: stxvd2x vs43,r4,r5 + return ".*\r\n\[ \t\]*0x\[0-9a-f\]+ <\\+\[0-9a-f\]*>:\[ \t\]*[string map [list { } "\[ \t\]+" . {\.}] $instr]\[ \t\]*\r\n.*" +} + +proc func_check {instr} { + global func + + set test "Found: $instr" + if [regexp -nocase -line [instr_to_patt $instr] $func] { + pass $test + } else { + fail $test + } +} + +func_check "lxsdx vs40,r10,r20" +func_check "lxvd2x vs40,r10,r20" +func_check "lxvdsx vs40,r10,r20" +func_check "lxvw4x vs40,r10,r20" +func_check "stxsdx vs40,r10,r20" +func_check "stxvd2x vs40,r10,r20" +func_check "stxvw4x vs40,r10,r20" +func_check "xsabsdp vs40,vs60" +func_check "xsadddp vs40,vs50,vs60" +func_check "xscmpodp cr1,vs50,vs60" +func_check "xscmpudp cr1,vs50,vs60" +func_check "xscpsgndp vs40,vs50,vs60" +func_check "xscvdpsp vs40,vs60" +func_check "xscvdpsxds vs40,vs60" +func_check "xscvdpsxws vs40,vs60" +func_check "xscvdpuxds vs40,vs60" +func_check "xscvdpuxws vs40,vs60" +func_check "xscvspdp vs40,vs60" +func_check "xscvsxddp vs40,vs60" +func_check "xscvuxddp vs40,vs60" +func_check "xsdivdp vs40,vs50,vs60" +func_check "xsmaddadp vs40,vs50,vs60" +func_check "xsmaddmdp vs40,vs50,vs60" +func_check "xsmaxdp vs40,vs50,vs60" +func_check "xsmindp vs40,vs50,vs60" +func_check "xsmsubadp vs40,vs50,vs60" +func_check "xsmsubmdp vs40,vs50,vs60" +func_check "xsmuldp vs40,vs50,vs60" +func_check "xsnabsdp vs40,vs60" +func_check "xsnegdp vs40,vs60" +func_check "xsnmaddadp vs40,vs50,vs60" +func_check "xsnmaddmdp vs40,vs50,vs60" +func_check "xsnmsubadp vs40,vs50,vs60" +func_check "xsnmsubmdp vs40,vs50,vs60" +func_check "xsrdpi vs40,vs60" +func_check "xsrdpic vs40,vs60" +func_check "xsrdpim vs40,vs60" +func_check "xsrdpip vs40,vs60" +func_check "xsrdpiz vs40,vs60" +func_check "xsredp vs40,vs60" +func_check "xsrsqrtedp vs40,vs60" +func_check "xssqrtdp vs40,vs60" +func_check "xssubdp vs40,vs50,vs60" +func_check "xstdivdp cr1,vs50,vs60" +func_check "xstsqrtdp cr1,vs60" +func_check "xvabsdp vs40,vs60" +func_check "xvabssp vs40,vs60" +func_check "xvadddp vs40,vs50,vs60" +func_check "xvaddsp vs40,vs50,vs60" +func_check "xvcmpeqdp vs40,vs50,vs60" +func_check "xvcmpeqdp\. vs40,vs50,vs60" +func_check "xvcmpeqsp vs40,vs50,vs60" +func_check "xvcmpeqsp\. vs40,vs50,vs60" +func_check "xvcmpgedp vs40,vs50,vs60" +func_check "xvcmpgedp\. vs40,vs50,vs60" +func_check "xvcmpgesp vs40,vs50,vs60" +func_check "xvcmpgesp\. vs40,vs50,vs60" +func_check "xvcmpgtdp vs40,vs50,vs60" +func_check "xvcmpgtdp\. vs40,vs50,vs60" +func_check "xvcmpgtsp vs40,vs50,vs60" +func_check "xvcmpgtsp\. vs40,vs50,vs60" +func_check "xvcpsgndp vs40,vs50,vs60" +func_check "xvmovdp vs40,vs60" +func_check "xvmovdp vs40,vs60" +func_check "xvcpsgnsp vs40,vs50,vs60" +func_check "xvmovsp vs40,vs60" +func_check "xvmovsp vs40,vs60" +func_check "xvcvdpsp vs40,vs60" +func_check "xvcvdpsxds vs40,vs60" +func_check "xvcvdpsxws vs40,vs60" +func_check "xvcvdpuxds vs40,vs60" +func_check "xvcvdpuxws vs40,vs60" +func_check "xvcvspdp vs40,vs60" +func_check "xvcvspsxds vs40,vs60" +func_check "xvcvspsxws vs40,vs60" +func_check "xvcvspuxds vs40,vs60" +func_check "xvcvspuxws vs40,vs60" +func_check "xvcvsxddp vs40,vs60" +func_check "xvcvsxdsp vs40,vs60" +func_check "xvcvsxwdp vs40,vs60" +func_check "xvcvsxwsp vs40,vs60" +func_check "xvcvuxddp vs40,vs60" +func_check "xvcvuxdsp vs40,vs60" +func_check "xvcvuxwdp vs40,vs60" +func_check "xvcvuxwsp vs40,vs60" +func_check "xvdivdp vs40,vs50,vs60" +func_check "xvdivsp vs40,vs50,vs60" +func_check "xvmaddadp vs40,vs50,vs60" +func_check "xvmaddmdp vs40,vs50,vs60" +func_check "xvmaddasp vs40,vs50,vs60" +func_check "xvmaddmsp vs40,vs50,vs60" +func_check "xvmaxdp vs40,vs50,vs60" +func_check "xvmaxsp vs40,vs50,vs60" +func_check "xvmindp vs40,vs50,vs60" +func_check "xvminsp vs40,vs50,vs60" +func_check "xvmsubadp vs40,vs50,vs60" +func_check "xvmsubmdp vs40,vs50,vs60" +func_check "xvmsubasp vs40,vs50,vs60" +func_check "xvmsubmsp vs40,vs50,vs60" +func_check "xvmuldp vs40,vs50,vs60" +func_check "xvmulsp vs40,vs50,vs60" +func_check "xvnabsdp vs40,vs60" +func_check "xvnabssp vs40,vs60" +func_check "xvnegdp vs40,vs60" +func_check "xvnegsp vs40,vs60" +func_check "xvnmaddadp vs40,vs50,vs60" +func_check "xvnmaddmdp vs40,vs50,vs60" +func_check "xvnmaddasp vs40,vs50,vs60" +func_check "xvnmaddmsp vs40,vs50,vs60" +func_check "xvnmsubadp vs40,vs50,vs60" +func_check "xvnmsubmdp vs40,vs50,vs60" +func_check "xvnmsubasp vs40,vs50,vs60" +func_check "xvnmsubmsp vs40,vs50,vs60" +func_check "xvrdpi vs40,vs60" +func_check "xvrdpic vs40,vs60" +func_check "xvrdpim vs40,vs60" +func_check "xvrdpip vs40,vs60" +func_check "xvrdpiz vs40,vs60" +func_check "xvredp vs40,vs60" +func_check "xvresp vs40,vs60" +func_check "xvrspi vs40,vs60" +func_check "xvrspic vs40,vs60" +func_check "xvrspim vs40,vs60" +func_check "xvrspip vs40,vs60" +func_check "xvrspiz vs40,vs60" +func_check "xvrsqrtedp vs40,vs60" +func_check "xvrsqrtesp vs40,vs60" +func_check "xvsqrtdp vs40,vs60" +func_check "xvsqrtsp vs40,vs60" +func_check "xvsubdp vs40,vs50,vs60" +func_check "xvsubsp vs40,vs50,vs60" +func_check "xvtdivdp cr1,vs50,vs60" +func_check "xvtdivsp cr1,vs50,vs60" +func_check "xvtsqrtdp cr1,vs60" +func_check "xvtsqrtsp cr1,vs60" +func_check "xxland vs40,vs50,vs60" +func_check "xxlandc vs40,vs50,vs60" +func_check "xxlnor vs40,vs50,vs60" +func_check "xxlor vs40,vs50,vs60" +func_check "xxlxor vs40,vs50,vs60" +func_check "xxmrghw vs40,vs50,vs60" +func_check "xxmrglw vs40,vs50,vs60" +func_check "xxmrghd vs40,vs50,vs60" +func_check "xxpermdi vs40,vs50,vs60,1" +func_check "xxpermdi vs40,vs50,vs60,2" +func_check "xxmrgld vs40,vs50,vs60" +func_check "xxspltd vs40,vs50,0" +func_check "xxspltd vs40,vs50,0" +func_check "xxspltd vs40,vs50,1" +func_check "xxspltd vs40,vs50,1" +func_check "xxmrghd vs40,vs50,vs60" +func_check "xxmrghd vs40,vs50,vs60" +func_check "xxmrgld vs40,vs50,vs60" +func_check "xxswapd vs40,vs50" +func_check "xxswapd vs40,vs50" +func_check "xxsel vs40,vs50,vs60,vs62" +func_check "xxsldwi vs40,vs50,vs60,2" +func_check "xxspltw vs40,vs60,2" +func_check "lxvd2x vs40,0,r20" +func_check "lxvd2x vs40,r10,r20" +func_check "stxvd2x vs40,0,r20" +func_check "stxvd2x vs40,r10,r20" diff --git a/gdb/testsuite/gdb.arch/powerpc-vsx.s b/gdb/testsuite/gdb.arch/powerpc-vsx.s new file mode 100644 index 0000000..c7e85c1 --- /dev/null +++ b/gdb/testsuite/gdb.arch/powerpc-vsx.s @@ -0,0 +1,182 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2016 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + + .text + .globl func +func: + .long 0x7d0aa499 /* lxsdx vs40,r10,r20 */ + .long 0x7d0aa699 /* lxvd2x vs40,r10,r20 */ + .long 0x7d0aa299 /* lxvdsx vs40,r10,r20 */ + .long 0x7d0aa619 /* lxvw4x vs40,r10,r20 */ + .long 0x7d0aa599 /* stxsdx vs40,r10,r20 */ + .long 0x7d0aa799 /* stxvd2x vs40,r10,r20 */ + .long 0x7d0aa719 /* stxvw4x vs40,r10,r20 */ + .long 0xf100e567 /* xsabsdp vs40,vs60 */ + .long 0xf112e107 /* xsadddp vs40,vs50,vs60 */ + .long 0xf092e15e /* xscmpodp cr1,vs50,vs60 */ + .long 0xf092e11e /* xscmpudp cr1,vs50,vs60 */ + .long 0xf112e587 /* xscpsgndp vs40,vs50,vs60 */ + .long 0xf100e427 /* xscvdpsp vs40,vs60 */ + .long 0xf100e563 /* xscvdpsxds vs40,vs60 */ + .long 0xf100e163 /* xscvdpsxws vs40,vs60 */ + .long 0xf100e523 /* xscvdpuxds vs40,vs60 */ + .long 0xf100e123 /* xscvdpuxws vs40,vs60 */ + .long 0xf100e527 /* xscvspdp vs40,vs60 */ + .long 0xf100e5e3 /* xscvsxddp vs40,vs60 */ + .long 0xf100e5a3 /* xscvuxddp vs40,vs60 */ + .long 0xf112e1c7 /* xsdivdp vs40,vs50,vs60 */ + .long 0xf112e10f /* xsmaddadp vs40,vs50,vs60 */ + .long 0xf112e14f /* xsmaddmdp vs40,vs50,vs60 */ + .long 0xf112e507 /* xsmaxdp vs40,vs50,vs60 */ + .long 0xf112e547 /* xsmindp vs40,vs50,vs60 */ + .long 0xf112e18f /* xsmsubadp vs40,vs50,vs60 */ + .long 0xf112e1cf /* xsmsubmdp vs40,vs50,vs60 */ + .long 0xf112e187 /* xsmuldp vs40,vs50,vs60 */ + .long 0xf100e5a7 /* xsnabsdp vs40,vs60 */ + .long 0xf100e5e7 /* xsnegdp vs40,vs60 */ + .long 0xf112e50f /* xsnmaddadp vs40,vs50,vs60 */ + .long 0xf112e54f /* xsnmaddmdp vs40,vs50,vs60 */ + .long 0xf112e58f /* xsnmsubadp vs40,vs50,vs60 */ + .long 0xf112e5cf /* xsnmsubmdp vs40,vs50,vs60 */ + .long 0xf100e127 /* xsrdpi vs40,vs60 */ + .long 0xf100e1af /* xsrdpic vs40,vs60 */ + .long 0xf100e1e7 /* xsrdpim vs40,vs60 */ + .long 0xf100e1a7 /* xsrdpip vs40,vs60 */ + .long 0xf100e167 /* xsrdpiz vs40,vs60 */ + .long 0xf100e16b /* xsredp vs40,vs60 */ + .long 0xf100e12b /* xsrsqrtedp vs40,vs60 */ + .long 0xf100e12f /* xssqrtdp vs40,vs60 */ + .long 0xf112e147 /* xssubdp vs40,vs50,vs60 */ + .long 0xf092e1ee /* xstdivdp cr1,vs50,vs60 */ + .long 0xf080e1aa /* xstsqrtdp cr1,vs60 */ + .long 0xf100e767 /* xvabsdp vs40,vs60 */ + .long 0xf100e667 /* xvabssp vs40,vs60 */ + .long 0xf112e307 /* xvadddp vs40,vs50,vs60 */ + .long 0xf112e207 /* xvaddsp vs40,vs50,vs60 */ + .long 0xf112e31f /* xvcmpeqdp vs40,vs50,vs60 */ + .long 0xf112e71f /* xvcmpeqdp. vs40,vs50,vs60 */ + .long 0xf112e21f /* xvcmpeqsp vs40,vs50,vs60 */ + .long 0xf112e61f /* xvcmpeqsp. vs40,vs50,vs60 */ + .long 0xf112e39f /* xvcmpgedp vs40,vs50,vs60 */ + .long 0xf112e79f /* xvcmpgedp. vs40,vs50,vs60 */ + .long 0xf112e29f /* xvcmpgesp vs40,vs50,vs60 */ + .long 0xf112e69f /* xvcmpgesp. vs40,vs50,vs60 */ + .long 0xf112e35f /* xvcmpgtdp vs40,vs50,vs60 */ + .long 0xf112e75f /* xvcmpgtdp. vs40,vs50,vs60 */ + .long 0xf112e25f /* xvcmpgtsp vs40,vs50,vs60 */ + .long 0xf112e65f /* xvcmpgtsp. vs40,vs50,vs60 */ + .long 0xf112e787 /* xvcpsgndp vs40,vs50,vs60 */ + .long 0xf11ce787 /* xvmovdp vs40,vs60 */ + .long 0xf11ce787 /* xvmovdp vs40,vs60 */ + .long 0xf112e687 /* xvcpsgnsp vs40,vs50,vs60 */ + .long 0xf11ce687 /* xvmovsp vs40,vs60 */ + .long 0xf11ce687 /* xvmovsp vs40,vs60 */ + .long 0xf100e627 /* xvcvdpsp vs40,vs60 */ + .long 0xf100e763 /* xvcvdpsxds vs40,vs60 */ + .long 0xf100e363 /* xvcvdpsxws vs40,vs60 */ + .long 0xf100e723 /* xvcvdpuxds vs40,vs60 */ + .long 0xf100e323 /* xvcvdpuxws vs40,vs60 */ + .long 0xf100e727 /* xvcvspdp vs40,vs60 */ + .long 0xf100e663 /* xvcvspsxds vs40,vs60 */ + .long 0xf100e263 /* xvcvspsxws vs40,vs60 */ + .long 0xf100e623 /* xvcvspuxds vs40,vs60 */ + .long 0xf100e223 /* xvcvspuxws vs40,vs60 */ + .long 0xf100e7e3 /* xvcvsxddp vs40,vs60 */ + .long 0xf100e6e3 /* xvcvsxdsp vs40,vs60 */ + .long 0xf100e3e3 /* xvcvsxwdp vs40,vs60 */ + .long 0xf100e2e3 /* xvcvsxwsp vs40,vs60 */ + .long 0xf100e7a3 /* xvcvuxddp vs40,vs60 */ + .long 0xf100e6a3 /* xvcvuxdsp vs40,vs60 */ + .long 0xf100e3a3 /* xvcvuxwdp vs40,vs60 */ + .long 0xf100e2a3 /* xvcvuxwsp vs40,vs60 */ + .long 0xf112e3c7 /* xvdivdp vs40,vs50,vs60 */ + .long 0xf112e2c7 /* xvdivsp vs40,vs50,vs60 */ + .long 0xf112e30f /* xvmaddadp vs40,vs50,vs60 */ + .long 0xf112e34f /* xvmaddmdp vs40,vs50,vs60 */ + .long 0xf112e20f /* xvmaddasp vs40,vs50,vs60 */ + .long 0xf112e24f /* xvmaddmsp vs40,vs50,vs60 */ + .long 0xf112e707 /* xvmaxdp vs40,vs50,vs60 */ + .long 0xf112e607 /* xvmaxsp vs40,vs50,vs60 */ + .long 0xf112e747 /* xvmindp vs40,vs50,vs60 */ + .long 0xf112e647 /* xvminsp vs40,vs50,vs60 */ + .long 0xf112e38f /* xvmsubadp vs40,vs50,vs60 */ + .long 0xf112e3cf /* xvmsubmdp vs40,vs50,vs60 */ + .long 0xf112e28f /* xvmsubasp vs40,vs50,vs60 */ + .long 0xf112e2cf /* xvmsubmsp vs40,vs50,vs60 */ + .long 0xf112e387 /* xvmuldp vs40,vs50,vs60 */ + .long 0xf112e287 /* xvmulsp vs40,vs50,vs60 */ + .long 0xf100e7a7 /* xvnabsdp vs40,vs60 */ + .long 0xf100e6a7 /* xvnabssp vs40,vs60 */ + .long 0xf100e7e7 /* xvnegdp vs40,vs60 */ + .long 0xf100e6e7 /* xvnegsp vs40,vs60 */ + .long 0xf112e70f /* xvnmaddadp vs40,vs50,vs60 */ + .long 0xf112e74f /* xvnmaddmdp vs40,vs50,vs60 */ + .long 0xf112e60f /* xvnmaddasp vs40,vs50,vs60 */ + .long 0xf112e64f /* xvnmaddmsp vs40,vs50,vs60 */ + .long 0xf112e78f /* xvnmsubadp vs40,vs50,vs60 */ + .long 0xf112e7cf /* xvnmsubmdp vs40,vs50,vs60 */ + .long 0xf112e68f /* xvnmsubasp vs40,vs50,vs60 */ + .long 0xf112e6cf /* xvnmsubmsp vs40,vs50,vs60 */ + .long 0xf100e327 /* xvrdpi vs40,vs60 */ + .long 0xf100e3af /* xvrdpic vs40,vs60 */ + .long 0xf100e3e7 /* xvrdpim vs40,vs60 */ + .long 0xf100e3a7 /* xvrdpip vs40,vs60 */ + .long 0xf100e367 /* xvrdpiz vs40,vs60 */ + .long 0xf100e36b /* xvredp vs40,vs60 */ + .long 0xf100e26b /* xvresp vs40,vs60 */ + .long 0xf100e227 /* xvrspi vs40,vs60 */ + .long 0xf100e2af /* xvrspic vs40,vs60 */ + .long 0xf100e2e7 /* xvrspim vs40,vs60 */ + .long 0xf100e2a7 /* xvrspip vs40,vs60 */ + .long 0xf100e267 /* xvrspiz vs40,vs60 */ + .long 0xf100e32b /* xvrsqrtedp vs40,vs60 */ + .long 0xf100e22b /* xvrsqrtesp vs40,vs60 */ + .long 0xf100e32f /* xvsqrtdp vs40,vs60 */ + .long 0xf100e22f /* xvsqrtsp vs40,vs60 */ + .long 0xf112e347 /* xvsubdp vs40,vs50,vs60 */ + .long 0xf112e247 /* xvsubsp vs40,vs50,vs60 */ + .long 0xf092e3ee /* xvtdivdp cr1,vs50,vs60 */ + .long 0xf092e2ee /* xvtdivsp cr1,vs50,vs60 */ + .long 0xf080e3aa /* xvtsqrtdp cr1,vs60 */ + .long 0xf080e2aa /* xvtsqrtsp cr1,vs60 */ + .long 0xf112e417 /* xxland vs40,vs50,vs60 */ + .long 0xf112e457 /* xxlandc vs40,vs50,vs60 */ + .long 0xf112e517 /* xxlnor vs40,vs50,vs60 */ + .long 0xf112e497 /* xxlor vs40,vs50,vs60 */ + .long 0xf112e4d7 /* xxlxor vs40,vs50,vs60 */ + .long 0xf112e097 /* xxmrghw vs40,vs50,vs60 */ + .long 0xf112e197 /* xxmrglw vs40,vs50,vs60 */ + .long 0xf112e057 /* xxmrghd vs40,vs50,vs60 */ + .long 0xf112e157 /* xxpermdi vs40,vs50,vs60,1 */ + .long 0xf112e257 /* xxpermdi vs40,vs50,vs60,2 */ + .long 0xf112e357 /* xxmrgld vs40,vs50,vs60 */ + .long 0xf1129057 /* xxspltd vs40,vs50,0 */ + .long 0xf1129057 /* xxspltd vs40,vs50,0 */ + .long 0xf1129357 /* xxspltd vs40,vs50,1 */ + .long 0xf1129357 /* xxspltd vs40,vs50,1 */ + .long 0xf112e057 /* xxmrghd vs40,vs50,vs60 */ + .long 0xf112e057 /* xxmrghd vs40,vs50,vs60 */ + .long 0xf112e357 /* xxmrgld vs40,vs50,vs60 */ + .long 0xf1129257 /* xxswapd vs40,vs50 */ + .long 0xf1129257 /* xxswapd vs40,vs50 */ + .long 0xf112e7bf /* xxsel vs40,vs50,vs60,vs62 */ + .long 0xf112e217 /* xxsldwi vs40,vs50,vs60,2 */ + .long 0xf102e293 /* xxspltw vs40,vs60,2 */ + .long 0x7d00a699 /* lxvd2x vs40,0,r20 */ + .long 0x7d0aa699 /* lxvd2x vs40,r10,r20 */ + .long 0x7d00a799 /* stxvd2x vs40,0,r20 */ + .long 0x7d0aa799 /* stxvd2x vs40,r10,r20 */ diff --git a/gdb/testsuite/gdb.arch/powerpc-vsx2.exp b/gdb/testsuite/gdb.arch/powerpc-vsx2.exp new file mode 100644 index 0000000..4daebd9 --- /dev/null +++ b/gdb/testsuite/gdb.arch/powerpc-vsx2.exp @@ -0,0 +1,115 @@ +# Copyright 2016 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +# Test PowerPC instructions disassembly. + +standard_testfile .s +set objfile [standard_output_file ${testfile}.o] + +if {![istarget "powerpc*-*-*"]} then { + verbose "Skipping PowerPC instructions disassembly." + return +} + +if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${objfile}" object {debug}] != "" } { + untested "PowerPC instructions disassembly" + return -1 +} + +clean_restart ${objfile} + +# Disassemble the function. + +gdb_test "set disassembler-options vsx" +set test "disass func" +gdb_test_multiple $test $test { + -re "\r\nDump of assembler code for function func:(\r\n.*\r\n)End of assembler dump.\r\n$gdb_prompt $" { + set func $expect_out(1,string) + pass $test + } +} + +proc instr_to_patt {instr} { + # 0x0000000000000018 <+24>: stxvd2x vs43,r4,r5 + return ".*\r\n\[ \t\]*0x\[0-9a-f\]+ <\\+\[0-9a-f\]*>:\[ \t\]*[string map [list { } "\[ \t\]+" . {\.}] $instr]\[ \t\]*\r\n.*" +} + +proc func_check {instr} { + global func + + set test "Found: $instr" + if [regexp -nocase -line [instr_to_patt $instr] $func] { + pass $test + } else { + fail $test + } +} + +func_check "lxsiwzx vs62,r14,r26" +func_check "lxsiwzx vs40,0,r25" +func_check "lxsiwax vs25,0,r26" +func_check "lxsiwax vs3,0,r3" +func_check "mfvsrd r12,vs30" +func_check "mfvsrd r12,vs30" +func_check "mfvsrd r12,vs62" +func_check "mfvsrd r12,vs62" +func_check "mffprwz r20,f12" +func_check "mffprwz r20,f12" +func_check "mfvrwz r21,v12" +func_check "mfvrwz r21,v12" +func_check "stxsiwx vs14,r9,r14" +func_check "stxsiwx vs21,0,r8" +func_check "mtvsrd vs11,r28" +func_check "mtvsrd vs11,r28" +func_check "mtvsrd vs43,r29" +func_check "mtvsrd vs43,r29" +func_check "mtfprwa f24,r22" +func_check "mtfprwa f24,r22" +func_check "mtvrwa v25,r23" +func_check "mtvrwa v25,r23" +func_check "mtfprwz f26,r27" +func_check "mtfprwz f26,r27" +func_check "mtvrwz v27,r28" +func_check "mtvrwz v27,r28" +func_check "lxsspx vs13,r19,r13" +func_check "lxsspx vs18,0,r13" +func_check "stxsspx vs43,r2,r4" +func_check "stxsspx vs55,0,r11" +func_check "xsaddsp vs54,vs48,vs25" +func_check "xsmaddasp vs14,vs50,vs1" +func_check "xssubsp vs26,vs22,vs42" +func_check "xsmaddmsp vs27,vs53,vs52" +func_check "xsrsqrtesp vs8,vs59" +func_check "xssqrtsp vs12,vs41" +func_check "xsmulsp vs57,vs11,vs32" +func_check "xsmsubasp vs38,vs20,vs26" +func_check "xsdivsp vs26,vs19,vs6" +func_check "xsmsubmsp vs35,vs37,vs55" +func_check "xsresp vs59,vs8" +func_check "xsnmaddasp vs44,vs33,vs33" +func_check "xsnmaddmsp vs17,vs62,vs30" +func_check "xsnmsubasp vs54,vs52,vs31" +func_check "xsnmsubmsp vs37,vs5,vs58" +func_check "xxlorc vs30,vs54,vs44" +func_check "xxlnand vs49,vs14,vs29" +func_check "xxleqv vs62,vs22,vs30" +func_check "xscvdpspn vs60,vs54" +func_check "xsrsp vs22,vs45" +func_check "xscvuxdsp vs26,vs59" +func_check "xscvsxdsp vs38,vs49" +func_check "xscvspdpn vs59,vs26" +func_check "fmrgow f24,f14,f2" +func_check "fmrgew f22,f7,f5" diff --git a/gdb/testsuite/gdb.arch/powerpc-vsx2.s b/gdb/testsuite/gdb.arch/powerpc-vsx2.s new file mode 100644 index 0000000..c21759f --- /dev/null +++ b/gdb/testsuite/gdb.arch/powerpc-vsx2.s @@ -0,0 +1,75 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2016 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + + .text + .globl func +func: + .long 0x7fced019 /* lxsiwzx vs62,r14,r26 */ + .long 0x7d00c819 /* lxsiwzx vs40,0,r25 */ + .long 0x7f20d098 /* lxsiwax vs25,0,r26 */ + .long 0x7c601898 /* lxsiwax vs3,0,r3 */ + .long 0x7fcc0066 /* mfvsrd r12,vs30 */ + .long 0x7fcc0066 /* mfvsrd r12,vs30 */ + .long 0x7fcc0067 /* mfvsrd r12,vs62 */ + .long 0x7fcc0067 /* mfvsrd r12,vs62 */ + .long 0x7d9400e6 /* mffprwz r20,f12 */ + .long 0x7d9400e6 /* mffprwz r20,f12 */ + .long 0x7d9500e7 /* mfvrwz r21,v12 */ + .long 0x7d9500e7 /* mfvrwz r21,v12 */ + .long 0x7dc97118 /* stxsiwx vs14,r9,r14 */ + .long 0x7ea04118 /* stxsiwx vs21,0,r8 */ + .long 0x7d7c0166 /* mtvsrd vs11,r28 */ + .long 0x7d7c0166 /* mtvsrd vs11,r28 */ + .long 0x7d7d0167 /* mtvsrd vs43,r29 */ + .long 0x7d7d0167 /* mtvsrd vs43,r29 */ + .long 0x7f1601a6 /* mtfprwa f24,r22 */ + .long 0x7f1601a6 /* mtfprwa f24,r22 */ + .long 0x7f3701a7 /* mtvrwa v25,r23 */ + .long 0x7f3701a7 /* mtvrwa v25,r23 */ + .long 0x7f5b01e6 /* mtfprwz f26,r27 */ + .long 0x7f5b01e6 /* mtfprwz f26,r27 */ + .long 0x7f7c01e7 /* mtvrwz v27,r28 */ + .long 0x7f7c01e7 /* mtvrwz v27,r28 */ + .long 0x7db36c18 /* lxsspx vs13,r19,r13 */ + .long 0x7e406c18 /* lxsspx vs18,0,r13 */ + .long 0x7d622519 /* stxsspx vs43,r2,r4 */ + .long 0x7ee05d19 /* stxsspx vs55,0,r11 */ + .long 0xf2d0c805 /* xsaddsp vs54,vs48,vs25 */ + .long 0xf1d2080c /* xsmaddasp vs14,vs50,vs1 */ + .long 0xf3565042 /* xssubsp vs26,vs22,vs42 */ + .long 0xf375a04e /* xsmaddmsp vs27,vs53,vs52 */ + .long 0xf100d82a /* xsrsqrtesp vs8,vs59 */ + .long 0xf180482e /* xssqrtsp vs12,vs41 */ + .long 0xf32b0083 /* xsmulsp vs57,vs11,vs32 */ + .long 0xf0d4d089 /* xsmsubasp vs38,vs20,vs26 */ + .long 0xf35330c0 /* xsdivsp vs26,vs19,vs6 */ + .long 0xf065b8cf /* xsmsubmsp vs35,vs37,vs55 */ + .long 0xf3604069 /* xsresp vs59,vs8 */ + .long 0xf1810c0f /* xsnmaddasp vs44,vs33,vs33 */ + .long 0xf23ef44c /* xsnmaddmsp vs17,vs62,vs30 */ + .long 0xf2d4fc8d /* xsnmsubasp vs54,vs52,vs31 */ + .long 0xf0a5d4cb /* xsnmsubmsp vs37,vs5,vs58 */ + .long 0xf3d66556 /* xxlorc vs30,vs54,vs44 */ + .long 0xf22eed91 /* xxlnand vs49,vs14,vs29 */ + .long 0xf3d6f5d1 /* xxleqv vs62,vs22,vs30 */ + .long 0xf380b42f /* xscvdpspn vs60,vs54 */ + .long 0xf2c06c66 /* xsrsp vs22,vs45 */ + .long 0xf340dca2 /* xscvuxdsp vs26,vs59 */ + .long 0xf0c08ce3 /* xscvsxdsp vs38,vs49 */ + .long 0xf360d52d /* xscvspdpn vs59,vs26 */ + .long 0xff0e168c /* fmrgow f24,f14,f2 */ + .long 0xfec72f8c /* fmrgew f22,f7,f5 */ diff --git a/gdb/testsuite/gdb.arch/powerpc-vsx3.exp b/gdb/testsuite/gdb.arch/powerpc-vsx3.exp new file mode 100644 index 0000000..a20a636 --- /dev/null +++ b/gdb/testsuite/gdb.arch/powerpc-vsx3.exp @@ -0,0 +1,181 @@ +# Copyright 2016 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +# Test PowerPC instructions disassembly. + +standard_testfile .s +set objfile [standard_output_file ${testfile}.o] + +if {![istarget "powerpc*-*-*"]} then { + verbose "Skipping PowerPC instructions disassembly." + return +} + +if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${objfile}" object {debug}] != "" } { + untested "PowerPC instructions disassembly" + return -1 +} + +clean_restart ${objfile} + +# Disassemble the function. + +gdb_test "set disassembler-options vsx" +set test "disass func" +gdb_test_multiple $test $test { + -re "\r\nDump of assembler code for function func:(\r\n.*\r\n)End of assembler dump.\r\n$gdb_prompt $" { + set func $expect_out(1,string) + pass $test + } +} + +proc instr_to_patt {instr} { + # 0x0000000000000018 <+24>: stxvd2x vs43,r4,r5 + return ".*\r\n\[ \t\]*0x\[0-9a-f\]+ <\\+\[0-9a-f\]*>:\[ \t\]*[string map [list { } "\[ \t\]+" . {\.}] $instr]\[ \t\]*\r\n.*" +} + +proc func_check {instr} { + global func + + set test "Found: $instr" + if [regexp -nocase -line [instr_to_patt $instr] $func] { + pass $test + } else { + fail $test + } +} + +func_check "lxvx vs34,r6,r25" +func_check "lxvx vs20,0,r10" +func_check "lxvl vs20,r24,r10" +func_check "lxvl vs54,0,r29" +func_check "lxvll vs24,r20,r19" +func_check "lxvll vs34,0,r14" +func_check "mfvsrld r2,vs22" +func_check "lxvwsx vs58,r26,r25" +func_check "lxvwsx vs55,0,r29" +func_check "stxvx vs14,r21,r4" +func_check "stxvx vs30,0,r22" +func_check "stxvl vs0,r26,r4" +func_check "stxvl vs37,0,r22" +func_check "mtvsrws vs24,r10" +func_check "stxvll vs30,r21,r15" +func_check "stxvll vs39,0,r14" +func_check "mtvsrdd vs12,r6,r5" +func_check "mtvsrdd vs38,0,r21" +func_check "lxsibzx vs59,r28,r6" +func_check "lxsibzx vs30,0,r8" +func_check "lxvh8x vs42,r23,r17" +func_check "lxvh8x vs36,0,r5" +func_check "lxsihzx vs12,r9,r11" +func_check "lxsihzx vs49,0,r13" +func_check "lxvb16x vs37,r3,r19" +func_check "lxvb16x vs0,0,r30" +func_check "stxsibx vs2,r30,r6" +func_check "stxsibx vs12,0,r13" +func_check "stxvh8x vs16,r29,r8" +func_check "stxvh8x vs55,0,r10" +func_check "stxsihx vs34,r2,r23" +func_check "stxsihx vs60,0,r23" +func_check "stxvb16x vs23,r14,r12" +func_check "stxvb16x vs19,0,r5" +func_check "lxsd v24,0\\(0\\)" +func_check "lxsd v15,16\\(r21\\)" +func_check "lxssp v6,0\\(0\\)" +func_check "lxssp v23,16\\(r9\\)" +func_check "xscmpeqdp vs18,vs51,vs33" +func_check "xscmpgtdp vs2,vs26,vs34" +func_check "xscmpgedp vs5,vs26,vs20" +func_check "xxperm vs44,vs10,vs43" +func_check "xxpermr vs41,vs20,vs5" +func_check "xscmpexpdp cr4,vs18,vs55" +func_check "xxextractuw vs23,vs37,3" +func_check "xxspltib vs54,235" +func_check "xxinsertw vs15,vs30,4" +func_check "xsmaxcdp vs12,vs11,vs7" +func_check "xsmincdp vs32,vs25,vs24" +func_check "xsmaxjdp vs25,vs53,vs12" +func_check "xststdcsp cr2,vs36,127" +func_check "xsminjdp vs32,vs21,vs45" +func_check "xsxexpdp r17,vs50" +func_check "xsxsigdp r7,vs40" +func_check "xscvhpdp vs54,vs34" +func_check "xscvdphp vs58,vs54" +func_check "xststdcdp cr0,vs38,127" +func_check "xvtstdcsp vs56,vs53,127" +func_check "xviexpsp vs54,vs20,vs52" +func_check "xsiexpdp vs57,r28,r29" +func_check "xvxexpdp vs1,vs20" +func_check "xvxsigdp vs54,vs59" +func_check "xxbrh vs18,vs37" +func_check "xvxexpsp vs14,vs1" +func_check "xvxsigsp vs52,vs13" +func_check "xxbrw vs19,vs5" +func_check "xxbrd vs51,vs55" +func_check "xvcvhpsp vs35,vs17" +func_check "xvcvsphp vs15,vs45" +func_check "xxbrq vs17,vs31" +func_check "xvtstdcdp vs16,vs12,127" +func_check "xviexpdp vs27,vs9,vs8" +func_check "lxv vs4,0\\(0\\)" +func_check "lxv vs40,16\\(r20\\)" +func_check "stxv vs50,0\\(0\\)" +func_check "stxv vs8,16\\(r16\\)" +func_check "stxsd v3,0\\(0\\)" +func_check "stxsd v17,16\\(r2\\)" +func_check "stxssp v13,0\\(0\\)" +func_check "stxssp v17,16\\(r13\\)" +func_check "xsaddqp v8,v10,v18" +func_check "xsaddqpo v5,v1,v29" +func_check "xsrqpi 0,v12,v18,3" +func_check "xsrqpix 1,v31,v19,0" +func_check "xsmulqp v14,v1,v6" +func_check "xsmulqpo v17,v7,v27" +func_check "xsrqpxp 0,v4,v11,0" +func_check "xscpsgnqp v29,v23,v28" +func_check "xscmpoqp cr7,v13,v27" +func_check "xscmpexpqp cr5,v21,v6" +func_check "xsmaddqp v2,v19,v4" +func_check "xsmaddqpo v30,v7,v16" +func_check "xsmsubqp v21,v30,v15" +func_check "xsmsubqpo v12,v17,v30" +func_check "xsnmaddqp v6,v30,v12" +func_check "xsnmaddqpo v12,v22,v12" +func_check "xsnmsubqp v10,v29,v27" +func_check "xsnmsubqpo v29,v29,v13" +func_check "xssubqp v19,v27,v4" +func_check "xssubqpo v13,v8,v1" +func_check "xsdivqp v8,v3,v27" +func_check "xsdivqpo v24,v20,v27" +func_check "xscmpuqp cr7,v14,v4" +func_check "xststdcqp cr4,v2,127" +func_check "xsabsqp v31,v22" +func_check "xsxexpqp v25,v3" +func_check "xsnabsqp v10,v28" +func_check "xsnegqp v19,v31" +func_check "xsxsigqp v11,v13" +func_check "xssqrtqp v13,v14" +func_check "xssqrtqpo v1,v27" +func_check "xscvqpuwz v3,v7" +func_check "xscvudqp v20,v18" +func_check "xscvqpswz v29,v29" +func_check "xscvsdqp v2,v28" +func_check "xscvqpudz v23,v4" +func_check "xscvqpdp v3,v20" +func_check "xscvqpdpo v1,v3" +func_check "xscvdpqp v19,v12" +func_check "xscvqpsdz v13,v4" +func_check "xsiexpqp v7,v24,v7" diff --git a/gdb/testsuite/gdb.arch/powerpc-vsx3.s b/gdb/testsuite/gdb.arch/powerpc-vsx3.s new file mode 100644 index 0000000..1ada3cc --- /dev/null +++ b/gdb/testsuite/gdb.arch/powerpc-vsx3.s @@ -0,0 +1,141 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2016 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + + .text + .globl func +func: + .long 0x7c46ca19 /* lxvx vs34,r6,r25 */ + .long 0x7e805218 /* lxvx vs20,0,r10 */ + .long 0x7e98521a /* lxvl vs20,r24,r10 */ + .long 0x7ec0ea1b /* lxvl vs54,0,r29 */ + .long 0x7f149a5a /* lxvll vs24,r20,r19 */ + .long 0x7c40725b /* lxvll vs34,0,r14 */ + .long 0x7ec20266 /* mfvsrld r2,vs22 */ + .long 0x7f5acad9 /* lxvwsx vs58,r26,r25 */ + .long 0x7ee0ead9 /* lxvwsx vs55,0,r29 */ + .long 0x7dd52318 /* stxvx vs14,r21,r4 */ + .long 0x7fc0b318 /* stxvx vs30,0,r22 */ + .long 0x7c1a231a /* stxvl vs0,r26,r4 */ + .long 0x7ca0b31b /* stxvl vs37,0,r22 */ + .long 0x7f0a0326 /* mtvsrws vs24,r10 */ + .long 0x7fd57b5a /* stxvll vs30,r21,r15 */ + .long 0x7ce0735b /* stxvll vs39,0,r14 */ + .long 0x7d862b66 /* mtvsrdd vs12,r6,r5 */ + .long 0x7cc0ab67 /* mtvsrdd vs38,0,r21 */ + .long 0x7f7c361b /* lxsibzx vs59,r28,r6 */ + .long 0x7fc0461a /* lxsibzx vs30,0,r8 */ + .long 0x7d578e59 /* lxvh8x vs42,r23,r17 */ + .long 0x7c802e59 /* lxvh8x vs36,0,r5 */ + .long 0x7d895e5a /* lxsihzx vs12,r9,r11 */ + .long 0x7e206e5b /* lxsihzx vs49,0,r13 */ + .long 0x7ca39ed9 /* lxvb16x vs37,r3,r19 */ + .long 0x7c00f6d8 /* lxvb16x vs0,0,r30 */ + .long 0x7c5e371a /* stxsibx vs2,r30,r6 */ + .long 0x7d806f1a /* stxsibx vs12,0,r13 */ + .long 0x7e1d4758 /* stxvh8x vs16,r29,r8 */ + .long 0x7ee05759 /* stxvh8x vs55,0,r10 */ + .long 0x7c42bf5b /* stxsihx vs34,r2,r23 */ + .long 0x7f80bf5b /* stxsihx vs60,0,r23 */ + .long 0x7eee67d8 /* stxvb16x vs23,r14,r12 */ + .long 0x7e602fd8 /* stxvb16x vs19,0,r5 */ + .long 0xe7000002 /* lxsd v24,0(0) */ + .long 0xe5f50012 /* lxsd v15,16(r21) */ + .long 0xe4c00003 /* lxssp v6,0(0) */ + .long 0xe6e90013 /* lxssp v23,16(r9) */ + .long 0xf253081e /* xscmpeqdp vs18,vs51,vs33 */ + .long 0xf05a105a /* xscmpgtdp vs2,vs26,vs34 */ + .long 0xf0baa098 /* xscmpgedp vs5,vs26,vs20 */ + .long 0xf18a58d3 /* xxperm vs44,vs10,vs43 */ + .long 0xf13429d1 /* xxpermr vs41,vs20,vs5 */ + .long 0xf212b9da /* xscmpexpdp cr4,vs18,vs55 */ + .long 0xf2e32a96 /* xxextractuw vs23,vs37,3 */ + .long 0xf2c75ad1 /* xxspltib vs54,235 */ + .long 0xf1e4f2d4 /* xxinsertw vs15,vs30,4 */ + .long 0xf18b3c00 /* xsmaxcdp vs12,vs11,vs7 */ + .long 0xf019c441 /* xsmincdp vs32,vs25,vs24 */ + .long 0xf3356484 /* xsmaxjdp vs25,vs53,vs12 */ + .long 0xf17f24aa /* xststdcsp cr2,vs36,127 */ + .long 0xf0156cc3 /* xsminjdp vs32,vs21,vs45 */ + .long 0xf220956e /* xsxexpdp r17,vs50 */ + .long 0xf0e1456e /* xsxsigdp r7,vs40 */ + .long 0xf2d0156f /* xscvhpdp vs54,vs34 */ + .long 0xf351b56f /* xscvdphp vs58,vs54 */ + .long 0xf07f35aa /* xststdcdp cr0,vs38,127 */ + .long 0xf31faeef /* xvtstdcsp vs56,vs53,127 */ + .long 0xf2d4a6c3 /* xviexpsp vs54,vs20,vs52 */ + .long 0xf33cef2d /* xsiexpdp vs57,r28,r29 */ + .long 0xf020a76c /* xvxexpdp vs1,vs20 */ + .long 0xf2c1df6f /* xvxsigdp vs54,vs59 */ + .long 0xf2472f6e /* xxbrh vs18,vs37 */ + .long 0xf1c80f6c /* xvxexpsp vs14,vs1 */ + .long 0xf2896f6d /* xvxsigsp vs52,vs13 */ + .long 0xf26f2f6c /* xxbrw vs19,vs5 */ + .long 0xf277bf6f /* xxbrd vs51,vs55 */ + .long 0xf0788f6d /* xvcvhpsp vs35,vs17 */ + .long 0xf1f96f6e /* xvcvsphp vs15,vs45 */ + .long 0xf23fff6c /* xxbrq vs17,vs31 */ + .long 0xf21f67ec /* xvtstdcdp vs16,vs12,127 */ + .long 0xf36947c0 /* xviexpdp vs27,vs9,vs8 */ + .long 0xf4800001 /* lxv vs4,0(0) */ + .long 0xf5140019 /* lxv vs40,16(r20) */ + .long 0xf640000d /* stxv vs50,0(0) */ + .long 0xf5100015 /* stxv vs8,16(r16) */ + .long 0xf4600002 /* stxsd v3,0(0) */ + .long 0xf6220012 /* stxsd v17,16(r2) */ + .long 0xf5a00003 /* stxssp v13,0(0) */ + .long 0xf62d0013 /* stxssp v17,16(r13) */ + .long 0xfd0a9008 /* xsaddqp v8,v10,v18 */ + .long 0xfca1e809 /* xsaddqpo v5,v1,v29 */ + .long 0xfd80960a /* xsrqpi 0,v12,v18,3 */ + .long 0xffe1980b /* xsrqpix 1,v31,v19,0 */ + .long 0xfdc13048 /* xsmulqp v14,v1,v6 */ + .long 0xfe27d849 /* xsmulqpo v17,v7,v27 */ + .long 0xfc80584a /* xsrqpxp 0,v4,v11,0 */ + .long 0xffb7e0c8 /* xscpsgnqp v29,v23,v28 */ + .long 0xff8dd908 /* xscmpoqp cr7,v13,v27 */ + .long 0xfe953148 /* xscmpexpqp cr5,v21,v6 */ + .long 0xfc532308 /* xsmaddqp v2,v19,v4 */ + .long 0xffc78309 /* xsmaddqpo v30,v7,v16 */ + .long 0xfebe7b48 /* xsmsubqp v21,v30,v15 */ + .long 0xfd91f349 /* xsmsubqpo v12,v17,v30 */ + .long 0xfcde6388 /* xsnmaddqp v6,v30,v12 */ + .long 0xfd966389 /* xsnmaddqpo v12,v22,v12 */ + .long 0xfd5ddbc8 /* xsnmsubqp v10,v29,v27 */ + .long 0xffbd6bc9 /* xsnmsubqpo v29,v29,v13 */ + .long 0xfe7b2408 /* xssubqp v19,v27,v4 */ + .long 0xfda80c09 /* xssubqpo v13,v8,v1 */ + .long 0xfd03dc48 /* xsdivqp v8,v3,v27 */ + .long 0xff14dc49 /* xsdivqpo v24,v20,v27 */ + .long 0xff8e2508 /* xscmpuqp cr7,v14,v4 */ + .long 0xfe7f1588 /* xststdcqp cr4,v2,127 */ + .long 0xffe0b648 /* xsabsqp v31,v22 */ + .long 0xff221e48 /* xsxexpqp v25,v3 */ + .long 0xfd48e648 /* xsnabsqp v10,v28 */ + .long 0xfe70fe48 /* xsnegqp v19,v31 */ + .long 0xfd726e48 /* xsxsigqp v11,v13 */ + .long 0xfdbb7648 /* xssqrtqp v13,v14 */ + .long 0xfc3bde49 /* xssqrtqpo v1,v27 */ + .long 0xfc613e88 /* xscvqpuwz v3,v7 */ + .long 0xfe829688 /* xscvudqp v20,v18 */ + .long 0xffa9ee88 /* xscvqpswz v29,v29 */ + .long 0xfc4ae688 /* xscvsdqp v2,v28 */ + .long 0xfef12688 /* xscvqpudz v23,v4 */ + .long 0xfc74a688 /* xscvqpdp v3,v20 */ + .long 0xfc341e89 /* xscvqpdpo v1,v3 */ + .long 0xfe766688 /* xscvdpqp v19,v12 */ + .long 0xfdb92688 /* xscvqpsdz v13,v4 */ + .long 0xfcf83ec8 /* xsiexpqp v7,v24,v7 */ diff --git a/gdb/testsuite/gdb.disasm/disassembler-options.exp b/gdb/testsuite/gdb.disasm/disassembler-options.exp new file mode 100644 index 0000000..eb2f52c --- /dev/null +++ b/gdb/testsuite/gdb.disasm/disassembler-options.exp @@ -0,0 +1,34 @@ +# Copyright (C) 2017 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# This test exercises set/show disassembler-options + +gdb_exit +gdb_start + +gdb_test_no_output "set disassembler-options" +gdb_test "show disassembler-options" \ + "The current disassembler options are ''.*" \ + "show NULL disassembler-options" + +gdb_test_multiple "set disassembler-options invalid_option_value" \ + "set disassembler-options to invalid option value" { + -re "Invalid disassembler option value: 'invalid_option_value'\." { + pass "set disassembler-options invalid_option_value" + } + -re "'set disassembler-options \.\.\.' is not supported on this architecture\." { + pass "set disassembler-options invalid_option_value" + } +} ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH, updated] Add support for setting disassembler-options in GDB for POWER, ARM and S390 2017-02-13 18:48 ` Peter Bergner @ 2017-02-14 20:01 ` Pedro Alves 2017-02-15 23:14 ` Peter Bergner 0 siblings, 1 reply; 16+ messages in thread From: Pedro Alves @ 2017-02-14 20:01 UTC (permalink / raw) To: Peter Bergner, Yao Qi Cc: gdb-patches, Alan Modra, Ulrich Weigand, Eli Zaretskii, Nick Clifton, binutils On 02/13/2017 06:47 PM, Peter Bergner wrote: > On 2/13/17 9:52 AM, Yao Qi wrote: >> Peter Bergner <bergner@vnet.ibm.com> writes: >> Function get_arm_regname_num_options is only used in gdb. Since we've >> have disassembler_options_arm, we can use it in gdb and remove >> get_arm_regname_num_options. >> >> We use get_arm_regname_num_options in arm-tdep.c, >> >> /* Get the number of possible sets of register names defined in opcodes. */ >> num_disassembly_options = get_arm_regname_num_options (); >> >> We can get 'num_disassembly_options' by iterating options from >> disassembler_options_arm. > > Done. > > >> Likewise, we can use disassembler_options_arm in gdb and remove >> get_arm_regnames. We use get_arm_regnames like this in arm-tdep.c, >> >> for (i = 0; i < num_disassembly_options; i++) >> { >> get_arm_regnames (i, &setname, &setdesc); >> valid_disassembly_styles[i] = setname; >> length = snprintf (rdptr, rest, "%s - %s\n", setname, setdesc); >> rdptr += length; >> rest -= length; >> } >> >> but we can replace it by disassembler_options_arm instead. > > Done. > > > >>> +# Functions for allowing a target to modify its disassembler options. >>> +v:char *:disassembler_options:::0:0::0:pstring (gdbarch->disassembler_options) >> >> These options should be modeled as per-architecture data. We need to >> define a key to access that data dynamically. grep >> "static struct gdbarch_data *" in *.c. > > Not done, as from Pedro's note, it sounded like he was arguing against > this review suggestion. I agree with that, since I think users would > expect 9I know I would) that setting the disassembler_options would be > persistent across their debug session. > > >>> +v:const disasm_options_t *:disassembler_options_arch:::0:0::0:host_address_to_string (gdbarch->disassembler_options_arch->name) >> >> disassembler_options_arch is not clear to me, and I feel >> gdbarch_disassembler_options_arch is even worse. How about renaming it >> to "disassembler_options_supported" or "valid_disassembler_options"? > > Changed to valid_disassembler_options. > > > Here is an updated patch with the above changes. I'll note that I > did not change the existing behavior of ARM defaulting to reg-names-gcc > when disassembling with objdump, while gdb defaults to reg-names-std. FYI, I tried applying the patch locally, to play with it a bit, but it failed with "fatal: corrupt patch at line 178". A couple suggestions for the future: - Maintain the intended git commit log as an integral part of the patch, and include it in patch re-posts, so that any revision of the patch can be reviewed as a self-contained entity. There's probably some rationale for some changes to the tests that is written down in some earlier intro, but was lost meanwhile. - For each new revision of the patch, bump a v2, v3, etc. revision number in the email subject, so that's easier to find specific revisions, and to identify which email contains the latest version. TIA :-) Some comments on the patch follow. (When the same comment would apply in multiple places, I only commented once.) > diff --git a/gdb/doc/gdb.texinfo b/gdb/doc/gdb.texinfo > index a969d1b..26abd9c 100644 > --- a/gdb/doc/gdb.texinfo > +++ b/gdb/doc/gdb.texinfo > @@ -8516,6 +8516,25 @@ location of the relocation table. On some architectures, @value{GDBN} > might be able to resolve these to actual function names. > > @table @code > +@kindex set disassembler-options > +@cindex disassembler options > +@item set disassembler-options @var{option1}[,@var{option2}@dots{}] > +This command controls the passing of target specific information to the > +disassembler. For a list of valid options, please refer to the > +@code{-M}/@code{--disassembler-options} section of the @samp{objdump} > +manual and/or the output of @kbd{objdump --help}. The default value is ''. '' renders as a single double-quote, not two single-quotes. In any case, I'd suggest saying instead "The default is the empty string", or "The default is not options". Likewise in NEWS. > + > +If it is necessary to specify more than one disassembler option, then > +multiple options can be placed together into a comma separated list. > +Currently this command is only supported on targets ARM, PowerPC > +and S/390. > + > +@kindex show disassembler-options > +@item show disassembler-options > +Show the current setting of the disassembler options. > +@end table > + > +@table @code > @kindex set disassembly-flavor > @cindex Intel disassembly flavor > @cindex AT&T disassembly flavor > diff --git a/gdb/disasm.c b/gdb/disasm.c > index 64d6684..43ee2fb 100644 > @@ -888,6 +896,8 @@ gdb_buffered_insn_length_init_dis (struct gdbarch *gdbarch, > di->endian = gdbarch_byte_order (gdbarch); > di->endian_code = gdbarch_byte_order_for_code (gdbarch); > > + di->application_data = gdbarch; Is this above used anywhere? > + di->disassembler_options = gdbarch_disassembler_options (gdbarch); > disassemble_init_for_target (di); > } > > @@ -904,3 +914,166 @@ gdb_buffered_insn_length (struct gdbarch *gdbarch, > > return gdbarch_print_insn (gdbarch, addr, &di); > } > + > +void > +set_disassembler_options (char *prospective_options) > +{ > + struct gdbarch *gdbarch = get_current_arch (); > + const disasm_options_t *valid_options; > + char *options = remove_whitespace_and_extra_commas (prospective_options); > + char *iter, opt[256]; Can we get rid of the hardcoded (and not enforced) limit? Maybe just use strtok_r instead of FOR_EACH_DISASSEMBLER_OPTION? > + /* Verify we have valid disassembler options. */ > + FOR_EACH_DISASSEMBLER_OPTION (opt, iter, options) > + { > + size_t i; > + for (i = 0; valid_options->name[i] != NULL; i++) > + if (strcmp (opt, valid_options->name[i]) == 0) > + break; > + if (valid_options->name[i] == NULL) > + { > + fprintf_filtered (gdb_stdlog, > + _("Invalid disassembler option value: '%s'.\n"), > + opt); > + return; > + } > + } > + > + free (gdbarch_disassembler_options (gdbarch)); > + set_gdbarch_disassembler_options (gdbarch, xstrdup (options)); > +} > + > +/* A completion function for "set disassembler". */ > + > +static VEC (char_ptr) * > +disassembler_options_completer (struct cmd_list_element *ignore, > + const char *text, const char *word) > +{ > + struct gdbarch *gdbarch = get_current_arch (); > + const disasm_options_t *opts = gdbarch_valid_disassembler_options (gdbarch); > + > + if (opts != NULL) > + { > + /* Only attempt to complete on the last option text. */ > + const char *separator = strrchr (text, ','); > + if (separator != NULL) > + text = separator + 1; I believe 'word' points past the comma already? > + while (ISSPACE (*text)) > + text++; skip_spaces_const. > + return complete_on_enum (opts->name, text, word); > + } > + return NULL; > +} > + > +void > +_initialize_disasm (void) > +{ > + struct cmd_list_element *cmd; > + > + /* Add the command that controls the disassembler options. */ > + cmd = add_setshow_string_noescape_cmd ("disassembler-options", no_class, > + &prospective_options, _("\ > +Set the disassembler options.\n\ > +Usage: set disassembler <option>[,<option>...]\n\n\ > +See: show disassembler' for valid option values.\n"), _("\ Spell out "set/show disassembler-options" in full. > +Show the disassembler options."), NULL, > + set_disassembler_options_sfunc, > + show_disassembler_options_sfunc, > + &setlist, &showlist); > + set_cmd_completer (cmd, disassembler_options_completer); > +} > diff --git a/gdb/disasm.h b/gdb/disasm.h > index 42c1f3a..4d29446 100644 > --- a/gdb/disasm.h > +++ b/gdb/disasm.h > @@ -138,4 +138,6 @@ extern int gdb_buffered_insn_length (struct gdbarch *gdbarch, > const gdb_byte *insn, int max_len, > CORE_ADDR memaddr); > > +extern void set_disassembler_options (char *); Need intro comment. > + > #endif > diff --git a/gdb/gdbarch.sh b/gdb/gdbarch.sh > index 54549b6..044743c 100755 > diff --git a/gdb/arm-tdep.c b/gdb/arm-tdep.c > index 88ed391..635f88d 100644 > --- a/gdb/arm-tdep.c > +++ b/gdb/arm-tdep.c > @@ -145,9 +145,6 @@ static const char *const arm_mode_strings[] = > static const char *arm_fallback_mode_string = "auto"; > static const char *arm_force_mode_string = "auto"; > > -/* Number of different reg name sets (options). */ > -static int num_disassembly_options; > - > /* The standard register names, and all the valid aliases for them. Note > that `fp', `sp' and `pc' are not added in this alias list, because they > have been added as builtin user registers in > @@ -218,7 +215,9 @@ static const char *disassembly_style; > style. */ > static void set_disassembly_style_sfunc(char *, int, > struct cmd_list_element *); > -static void set_disassembly_style (void); > +static void show_disassembly_style_sfunc (struct ui_file *, int, > + struct cmd_list_element *, > + const char *); > > static void convert_from_extended (const struct floatformat *, const void *, > void *, int); > @@ -8539,9 +8538,34 @@ arm_show_force_mode (struct ui_file *file, int from_tty, > > static void > set_disassembly_style_sfunc (char *args, int from_tty, > - struct cmd_list_element *c) > + struct cmd_list_element *c) > +{ > + /* Convert the short style name into the long style name (eg, reg-names-*) > + before calling the generic set_disassembler_options() function. */ > + char long_name[64], *style = long_name; No need for the separate pointer var, AFAICS, but... > + snprintf (style, 64, "reg-names-%s", disassembly_style); > + set_disassembler_options (style); ...how about avoiding the hard coded buffer size: std::string long_name = std::string ("reg-names-") + disassembly_style; set_disassembler_options (&long_name[0]); > +} > + > +static void > +show_disassembly_style_sfunc (struct ui_file *file, int from_tty, > + struct cmd_list_element *c, const char *value) > { > - set_disassembly_style (); > + struct gdbarch *gdbarch = get_current_arch (); > + const char *options = gdbarch_disassembler_options (gdbarch); > + char *style = "default"; Why "default" instead of empty? > + char *iter, opt[64]; > + > + FOR_EACH_DISASSEMBLER_OPTION (opt, iter, options) > + { > + if (CONST_STRNEQ (opt, "reg-names-")) > + { > + style = &opt[strlen ("reg-names-")]; > + break; > + } > + } > + > + fprintf_unfiltered (file, "The disassembly style is \"%s\".\n", style); > } > \f > /* Return the ARM register name corresponding to register I. */ > diff --git a/gdb/testsuite/gdb.arch/powerpc-altivec.exp b/gdb/testsuite/gdb.arch/powerpc-altivec.exp > new file mode 100644 > index 0000000..8fd418e > --- /dev/null > +++ b/gdb/testsuite/gdb.arch/powerpc-altivec.exp > @@ -0,0 +1,257 @@ > +# Copyright 2016 Free Software Foundation, Inc. 2016-2017. Actually, if you're largely copying the file contents from some other file, you'll need to preserve the original copyright years in the new file (and include 2017). > + > +# This program is free software; you can redistribute it and/or modify > +# it under the terms of the GNU General Public License as published by > +# the Free Software Foundation; either version 2 of the License, or > +# (at your option) any later version. > +# > +# This program is distributed in the hope that it will be useful, > +# but WITHOUT ANY WARRANTY; without even the implied warranty of > +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > +# GNU General Public License for more details. > +# > +# You should have received a copy of the GNU General Public License > +# along with this program; if not, write to the Free Software > +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. Please use an updated GPLv3 copyright header. Looks like a couple tests sneaked in with the old v2 header. > + > +# Test PowerPC instructions disassembly. > + > +standard_testfile .s > +set objfile [standard_output_file ${testfile}.o] > + > +if {![istarget "powerpc*-*-*"]} then { > + verbose "Skipping PowerPC instructions disassembly." > + return > +} > + > +if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${objfile}" object {debug}] != "" } { > + untested "PowerPC instructions disassembly" > + return -1 > +} > + > +clean_restart ${objfile} > + > +# Disassemble the function. > + > +gdb_test "set disassembler-options altivec" > +set test "disass func" > +gdb_test_multiple $test $test { > + -re "\r\nDump of assembler code for function func:(\r\n.*\r\n)End of assembler dump.\r\n$gdb_prompt $" { > + set func $expect_out(1,string) > + pass $test > + } > +} If this test fails, $func is left unset, and then the following tests that use it error out with a tcl error. Set it to some bogus default before calling gdb_test_multiple. I understand that you're largely copying the mechanism from an existing test, but, I should mention that this extracting the function disassembly in one go seems fragile -- at some point this can grow enough to overflow expect's buffer. How about instead using gdb_test_sequence ? Something like: set insn_sequence_re "" foreach insn { "dss 3" "dssall" "dst r5,r4,1" .... } { lappend insn_list_re [instr_to_patt $insn] } gdb_test_sequence "some test name" "" $insn_list_re You could even go a step further and extract the instruction list from the .s file, since you already have the disassembled instructions written there: + .long 0x117e0001 /* vmul10cuq v11,v30 */ + .long 0x13c1b807 /* vcmpneb v30,v1,v23 */ That'd result in smaller .exp files, and truly only one place to update the tests whenever they need to change. Bonus would be to use "disassemble /r" and match the raw opcodes as well. > + > +proc instr_to_patt {instr} { > + # 0x0000000000000018 <+24>: stxvd2x vs43,r4,r5 > + return ".*\r\n\[ \t\]*0x\[0-9a-f\]+ <\\+\[0-9a-f\]*>:\[ \t\]*[string map [list { } "\[ \t\]+" . {\.}] $instr]\[ \t\]*\r\n.*" Run $instr through string_to_regexp instead of string map. Could also use $hex instead of the the 0-9a-f patterns. > +} > + > +proc func_check {instr} { > + global func > + > + set test "Found: $instr" lowercase "found:" (all test names in gdb are lowercase.) > +gdb_test_multiple "set disassembler-options invalid_option_value" \ > + "set disassembler-options to invalid option value" { > + -re "Invalid disassembler option value: 'invalid_option_value'\." { > + pass "set disassembler-options invalid_option_value" > + } > + -re "'set disassembler-options \.\.\.' is not supported on this architecture\." { > + pass "set disassembler-options invalid_option_value" > + } The usual style is to put the test name in a variable, like: set test "set disassembler-options invalid_option_value" gdb_test_multiple $test $test { -re "Invalid disassembler option value: 'invalid_option_value'\." { pass $test } -re "'set disassembler-options \.\.\.' is not supported on this architecture\." { pass $test } } This makes it copy/paste typo-proof. Thanks, Pedro Alves ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH, updated] Add support for setting disassembler-options in GDB for POWER, ARM and S390 2017-02-14 20:01 ` Pedro Alves @ 2017-02-15 23:14 ` Peter Bergner 2017-02-15 23:48 ` Alan Modra 2017-02-16 0:21 ` Pedro Alves 0 siblings, 2 replies; 16+ messages in thread From: Peter Bergner @ 2017-02-15 23:14 UTC (permalink / raw) To: Pedro Alves Cc: Yao Qi, gdb-patches, Alan Modra, Ulrich Weigand, Eli Zaretskii, Nick Clifton, binutils On 2/14/17 2:01 PM, Pedro Alves wrote: > - Maintain the intended git commit log as an integral part > of the patch, and include it in patch re-posts, so that > any revision of the patch can be reviewed as a > self-contained entity. There's probably some rationale for > some changes to the tests that is written down in some > earlier intro, but was lost meanwhile. I'm not a git expert, as I'm paid to work on gcc and we still use subversion. I am willing to learn though, so can you explain what you mean by the above? > - For each new revision of the patch, bump a v2, v3, etc. > revision number in the email subject, so that's easier > to find specific revisions, and to identify whic > email contains the latest version. Easily done, as I've been doing just that internally. I'm frightened to say that I'm at v25 and counting. :-( >> +manual and/or the output of @kbd{objdump --help}. The default value is ''. > > '' renders as a single double-quote, not two single-quotes. In any > case, I'd suggest saying instead "The default is the empty string", or > "The default is not options". Likewise in NEWS. Done. >> @@ -888,6 +896,8 @@ gdb_buffered_insn_length_init_dis (struct gdbarch *gdbarch, >> di->endian = gdbarch_byte_order (gdbarch); >> di->endian_code = gdbarch_byte_order_for_code (gdbarch); >> >> + di->application_data = gdbarch; > > Is this above used anywhere? I think this might be left over from something I was trying and forgot to remove. I'll remove it. >> + char *options = remove_whitespace_and_extra_commas (prospective_options); >> + char *iter, opt[256]; > > Can we get rid of the hardcoded (and not enforced) limit? > Maybe just use strtok_r instead of FOR_EACH_DISASSEMBLER_OPTION? > >> + /* Verify we have valid disassembler options. */ >> + FOR_EACH_DISASSEMBLER_OPTION (opt, iter, options) The problem with strtok{,_r} is that it is destructive to the option string, so we'd have to dup the string before scanning it, which doesn't seem very elegant either. We would also need to remember to free the dup'd string as well when we were done with it. The reason I copied the parsed option into a char array was that I needed a null terminated string that I could use with strcmp. Unfortunately, the POWER port has several options that have a common prefix: Eg: "e500" & "e500mc", "ppc" & "ppc32" and "ppc64", etc. ...which strncmp cannot disambiguate, because it doesn't enforce the two strings have the same length. I have two ideas, one is to write our own strcmp that treats option delimiters like ',' just like '\0'. The other idea would be to modify the disassembler_options string so that we use '\0' as the delimiter between the different options. We'd need an extra '\0' at the end to know when we've run out of options though. If we did this, then we could just use standard strcmp on the options. >> +/* A completion function for "set disassembler". */ >> + >> +static VEC (char_ptr) * >> +disassembler_options_completer (struct cmd_list_element *ignore, >> + const char *text, const char *word) >> +{ >> + struct gdbarch *gdbarch = get_current_arch (); >> + const disasm_options_t *opts = gdbarch_valid_disassembler_options (gdbarch); >> + >> + if (opts != NULL) >> + { >> + /* Only attempt to complete on the last option text. */ >> + const char *separator = strrchr (text, ','); >> + if (separator != NULL) >> + text = separator + 1; > > I believe 'word' points past the comma already? 'word' does point past the last comma, but sometimes, it points well past the last comma. For example, if I type: set disassembler-options force-thumb, reg-name-g<tab> ...then 'text' will equal "force-thumb, reg-name-g" and 'word' will equal "g". To get the completer to match "reg-names-gcc", I have to modify 'text' to be "reg-names-g". >> + while (ISSPACE (*text)) >> + text++; > > skip_spaces_const. Done. >> + /* Add the command that controls the disassembler options. */ >> + cmd = add_setshow_string_noescape_cmd ("disassembler-options", no_class, >> + &prospective_options, _("\ >> +Set the disassembler options.\n\ >> +Usage: set disassembler <option>[,<option>...]\n\n\ >> +See: show disassembler' for valid option values.\n"), _("\ > > Spell out "set/show disassembler-options" in full. Ahh, I forgot to modify this once we changed the name of the command. Thanks for catching that. >> +extern void set_disassembler_options (char *); > > Need intro comment. Done. > ...how about avoiding the hard coded buffer size: > > std::string long_name = std::string ("reg-names-") + disassembly_style; > set_disassembler_options (&long_name[0]); Nice, done. >> +static void >> +show_disassembly_style_sfunc (struct ui_file *file, int from_tty, >> + struct cmd_list_element *c, const char *value) >> { >> - set_disassembly_style (); >> + struct gdbarch *gdbarch = get_current_arch (); >> + const char *options = gdbarch_disassembler_options (gdbarch); >> + char *style = "default"; > > Why "default" instead of empty? That might be left over old code too. Changed to "". >> +++ b/gdb/testsuite/gdb.arch/powerpc-altivec.exp >> @@ -0,0 +1,257 @@ >> +# Copyright 2016 Free Software Foundation, Inc. > > 2016-2017. Actually, if you're largely copying the file contents > from some other file, you'll need to preserve the original > copyright years in the new file (and include 2017). The original was 2014-..., so I changed it to 2014-2017. > Please use an updated GPLv3 copyright header. Looks like a couple tests > sneaked in with the old v2 header. I just copied in the header used by powerpc-power.exp (ie, the huge test case I broke up) and it had the old copyright header version. I have updated the tests to use version 3. Thanks for noticing. >> +gdb_test "set disassembler-options altivec" >> +set test "disass func" >> +gdb_test_multiple $test $test { >> + -re "\r\nDump of assembler code for function func:(\r\n.*\r\n)End of assembler dump.\r\n$gdb_prompt $" { >> + set func $expect_out(1,string) >> + pass $test >> + } >> +} > > If this test fails, $func is left unset, and then the following > tests that use it error out with a tcl error. Set it to > some bogus default before calling gdb_test_multiple. Ok, I'll do that. > I understand that you're largely copying the mechanism > from an existing test, but, I should mention that this extracting > the function disassembly in one go seems fragile -- at some point > this can grow enough to overflow expect's buffer. I'm just using the mechanism that the original HUGE test case used. The fact that I'm breaking that test case up into many much smaller test cases is an improvement and makes overflowing expect's buffer less likely with the patch than before the patch. > How about instead using gdb_test_sequence ? Something like: > > set insn_sequence_re "" > > foreach insn { > "dss 3" > "dssall" > "dst r5,r4,1" > .... > } { > lappend insn_list_re [instr_to_patt $insn] > } > > gdb_test_sequence "some test name" "" $insn_list_re > > You could even go a step further and extract the > instruction list from the .s file, since you already > have the disassembled instructions written there: > > + .long 0x117e0001 /* vmul10cuq v11,v30 */ > + .long 0x13c1b807 /* vcmpneb v30,v1,v23 */ > > That'd result in smaller .exp files, and truly only one > place to update the tests whenever they need to change. > > Bonus would be to use "disassemble /r" and match the raw opcodes > as well. That's sounds great, but I'm afraid I have no idea how to do the above and I don't see any examples like it in the testsuite to copy. Unless you can show me a lot more context to your idea, I'm afraid I'm going to have to leave the test cases as they are. >> +proc instr_to_patt {instr} { >> + # 0x0000000000000018 <+24>: stxvd2x vs43,r4,r5 >> + return ".*\r\n\[ \t\]*0x\[0-9a-f\]+ <\\+\[0-9a-f\]*>:\[ \t\]*[string map [list { } "\[ \t\]+" . {\.}] $instr]\[ \t\]*\r\n.*" > > Run $instr through string_to_regexp instead of string > map. > > Could also use $hex instead of the the 0-9a-f patterns. These were just cut/pasted from other usage. I'll try and make those changes though. >> +proc func_check {instr} { >> + global func >> + >> + set test "Found: $instr" > > lowercase "found:" (all test names in gdb are lowercase.) Done. > The usual style is to put the test name in a variable, like: > > set test "set disassembler-options invalid_option_value" > gdb_test_multiple $test $test { > -re "Invalid disassembler option value: 'invalid_option_value'\." { > pass $test > } > -re "'set disassembler-options \.\.\.' is not supported on this architecture\." { > pass $test > } > } > > This makes it copy/paste typo-proof. Done. I'll post another patch after I've played with the option scanning I mentioned above. Thanks for the review. Peter ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH, updated] Add support for setting disassembler-options in GDB for POWER, ARM and S390 2017-02-15 23:14 ` Peter Bergner @ 2017-02-15 23:48 ` Alan Modra 2017-02-16 0:21 ` Pedro Alves 1 sibling, 0 replies; 16+ messages in thread From: Alan Modra @ 2017-02-15 23:48 UTC (permalink / raw) To: Peter Bergner Cc: Pedro Alves, Yao Qi, gdb-patches, Ulrich Weigand, Eli Zaretskii, Nick Clifton, binutils On Wed, Feb 15, 2017 at 05:14:16PM -0600, Peter Bergner wrote: > On 2/14/17 2:01 PM, Pedro Alves wrote: > > - Maintain the intended git commit log as an integral part > > of the patch, and include it in patch re-posts, so that > > any revision of the patch can be reviewed as a > > self-contained entity. There's probably some rationale for > > some changes to the tests that is written down in some > > earlier intro, but was lost meanwhile. > > I'm not a git expert, as I'm paid to work on gcc and we still use > subversion. I am willing to learn though, so can you explain what > you mean by the above? When you commit the patch to your local git repo, write your email into the git commit message. Then (perhaps) trim that a little for the push upstream. Take a look at "git log" for binutils-gdb. We are quite verbose. -- Alan Modra Australia Development Lab, IBM ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH, updated] Add support for setting disassembler-options in GDB for POWER, ARM and S390 2017-02-15 23:14 ` Peter Bergner 2017-02-15 23:48 ` Alan Modra @ 2017-02-16 0:21 ` Pedro Alves 2017-02-16 1:59 ` Peter Bergner 1 sibling, 1 reply; 16+ messages in thread From: Pedro Alves @ 2017-02-16 0:21 UTC (permalink / raw) To: Peter Bergner Cc: Yao Qi, gdb-patches, Alan Modra, Ulrich Weigand, Eli Zaretskii, Nick Clifton, binutils On 02/15/2017 11:14 PM, Peter Bergner wrote: > On 2/14/17 2:01 PM, Pedro Alves wrote: >> - Maintain the intended git commit log as an integral part >> of the patch, and include it in patch re-posts, so that >> any revision of the patch can be reviewed as a >> self-contained entity. There's probably some rationale for >> some changes to the tests that is written down in some >> earlier intro, but was lost meanwhile. > > I'm not a git expert, as I'm paid to work on gcc and we still use > subversion. I am willing to learn though, so can you explain what > you mean by the above? Play with "git log gdb/" a bit and you'll get a feel. You'll notice that we put the rationale for changes in the commit log, unlike in gcc, where folks just tend to copy the ChangeLog entry to the svn log at commit time. In practice, what this means is just that you use "git commit --ammend", and edit the commit message to include the rationale for the patch, and update it / maintain it whenever the patch changes in a way that might change the description/rationale for the patch. The commit log is reviewed as a part of the patch as well. More info here http://sourceware.org/gdb/wiki/ContributionChecklist. I'd recommend reading Linux patch submission guidelines, there are many such documents, and tend to explain these things very nicely. For example: https://kernelnewbies.org/PatchPhilosophy >> - For each new revision of the patch, bump a v2, v3, etc. >> revision number in the email subject, so that's easier >> to find specific revisions, and to identify whic >> email contains the latest version. > > Easily done, as I've been doing just that internally. > I'm frightened to say that I'm at v25 and counting. :-( Internal revisions don't count, only public submissions. :-) > >>> + char *options = remove_whitespace_and_extra_commas >>> (prospective_options); >>> + char *iter, opt[256]; >> >> Can we get rid of the hardcoded (and not enforced) limit? >> Maybe just use strtok_r instead of FOR_EACH_DISASSEMBLER_OPTION? >> >>> + /* Verify we have valid disassembler options. */ >>> + FOR_EACH_DISASSEMBLER_OPTION (opt, iter, options) > > The problem with strtok{,_r} is that it is destructive to the option > string, so we'd have to dup the string before scanning it, which > doesn't seem very elegant either. We would also need to remember > to free the dup'd string as well when we were done with it. > > The reason I copied the parsed option into a char array was that I > needed a null terminated string that I could use with strcmp. > Unfortunately, the POWER port has several options that have a > common prefix: > > Eg: "e500" & "e500mc", "ppc" & "ppc32" and "ppc64", etc. > > ...which strncmp cannot disambiguate, because it doesn't enforce the > two strings have the same length. You could handle that with: if (optlen == strlen (valid_options->name[i]) && strncmp (opt, optlen, valid_options->name[i]) == 0) and adjust the macro to return the len up to the comma (minus whitespace) in optlen, and make opt be a pointer that points directly to the input string. > I have two ideas, one is to write our own strcmp that treats option > delimiters like ',' just like '\0'. Or something like that. > The other idea would be to > modify the disassembler_options string so that we use '\0' as the > delimiter between the different options. We'd need an extra '\0' > at the end to know when we've run out of options though. If we > did this, then we could just use standard strcmp on the options. Can't see how this would work without an interning step, given the delimiters come from user input. >> I believe 'word' points past the comma already? > > 'word' does point past the last comma, but sometimes, it points well > past the last comma. For example, if I type: > > set disassembler-options force-thumb, reg-name-g<tab> > > ...then 'text' will equal "force-thumb, reg-name-g" and 'word' > will equal "g". To get the completer to match "reg-names-gcc", > I have to modify 'text' to be "reg-names-g". Ah, that's because "-" is a word break character too. That'd be fixable by implementing the set_cmd_completer_handle_brkchars hook, but let's not bother. Please just check that (gdb) complete set disassembler-options force-thumb, reg-name-g does the right thing. >> I understand that you're largely copying the mechanism >> from an existing test, but, I should mention that this extracting >> the function disassembly in one go seems fragile -- at some point >> this can grow enough to overflow expect's buffer. > > I'm just using the mechanism that the original HUGE test case used. > The fact that I'm breaking that test case up into many much smaller > test cases is an improvement and makes overflowing expect's buffer > less likely with the patch than before the patch. This mention of "breaking the test cases up in many smaller test cases" is the sort of rationale that would be nice to put in the commit log. :-) I wasn't actually sure that that's what you're doing, and why. Seemed like you've changed the tests to avoid hardcoding offsets too? (it would probabably be clearer to do that with a separate preparatory patch, with the added advantage that that part could probably be merged to master quickly, but fine to keep it together if you prefer.) > That's sounds great, but I'm afraid I have no idea how to do the > above and I don't see any examples like it in the testsuite to copy. > Unless you can show me a lot more context to your idea, I'm afraid > I'm going to have to leave the test cases as they are. OK, let's leave it. Thanks, Pedro Alves ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH, updated] Add support for setting disassembler-options in GDB for POWER, ARM and S390 2017-02-16 0:21 ` Pedro Alves @ 2017-02-16 1:59 ` Peter Bergner 2017-02-16 2:09 ` Pedro Alves 0 siblings, 1 reply; 16+ messages in thread From: Peter Bergner @ 2017-02-16 1:59 UTC (permalink / raw) To: Pedro Alves Cc: Yao Qi, gdb-patches, Alan Modra, Ulrich Weigand, Eli Zaretskii, Nick Clifton, binutils On 2/15/17 6:21 PM, Pedro Alves wrote: > In practice, what this means is just that you use > "git commit --ammend", and edit the commit message to include the > rationale for the patch, and update it / maintain it whenever the patch > changes in a way that might change the description/rationale for > the patch. Ah, the --ammend is the part I was missing. Thanks. >> Easily done, as I've been doing just that internally. >> I'm frightened to say that I'm at v25 and counting. :-( > > Internal revisions don't count, only public submissions. :-) Well the number of public submissions isn't too far off my internal patches. :-) >> Eg: "e500" & "e500mc", "ppc" & "ppc32" and "ppc64", etc. >> >> ...which strncmp cannot disambiguate, because it doesn't enforce the >> two strings have the same length. > > You could handle that with: > > if (optlen == strlen (valid_options->name[i]) > && strncmp (opt, optlen, valid_options->name[i]) == 0) Yes, but that involves two scans over the string, so... >> I have two ideas, one is to write our own strcmp that treats option >> delimiters like ',' just like '\0'. > > Or something like that. ... I will attempt to try this first, since it seems like the easiest solution. Is there a preferred location for a function like this to go into? Looking around, it seems maybe common/common-utils.c? >> The other idea would be to >> modify the disassembler_options string so that we use '\0' as the >> delimiter between the different options. We'd need an extra '\0' >> at the end to know when we've run out of options though. If we >> did this, then we could just use standard strcmp on the options. > > Can't see how this would work without an interning step, > given the delimiters come from user input. To be honest, I'd prefer an option string like this, since it would allow for an easy FOR_EACH_DISASSEMBLER_OPTION macro and we could use standard strcmp, but I too was wondering how I could easily add 1 extra char to the string to hold the extra null byte which is needed to identify the end of the option strings. That's why I was going to try my first suggestion first. > Please just check that > > (gdb) complete set disassembler-options force-thumb, reg-name-g > > does the right thing. It does: (gdb) complete set disassembler-options force-thumb, reg-names-g set disassembler-options force-thumb, reg-names-gcc Ditto for the ARM specific set arm disassembler option (which uses short option names): (gdb) complete set arm disassembler g set arm disassembler gcc > This mention of "breaking the test cases up in many smaller > test cases" is the sort of rationale that would be nice to put in the > commit log. :-) I wasn't actually sure that that's what you're > doing, and why. Seemed like you've changed the tests to avoid > hardcoding offsets too? (it would probabably be clearer to do that > with a separate preparatory patch, with the added advantage that > that part could probably be merged to master quickly, but fine > to keep it together if you prefer.) Well that was the whole rational for this patch. I had made some changes to GAS to modify the support for our POWER9 cpu and thought I'd be a good citizen and update the GDB testsuite while I was at it. Unfortunately, the file was incredibly large and hard to update due to the hard coded file offsets. Also, the test case tested for power7, power8 and power9 all in the same test case. I thought it best if we test each cpu separately and that we should be able to enforce the disassembler options when doing it (in case we deprecate some instruction(s) on newer cpus). And this is what led to the patch we have now. :-) Peter ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH, updated] Add support for setting disassembler-options in GDB for POWER, ARM and S390 2017-02-16 1:59 ` Peter Bergner @ 2017-02-16 2:09 ` Pedro Alves 0 siblings, 0 replies; 16+ messages in thread From: Pedro Alves @ 2017-02-16 2:09 UTC (permalink / raw) To: Peter Bergner Cc: Yao Qi, gdb-patches, Alan Modra, Ulrich Weigand, Eli Zaretskii, Nick Clifton, binutils On 02/16/2017 01:58 AM, Peter Bergner wrote: > On 2/15/17 6:21 PM, Pedro Alves wrote: >>> Easily done, as I've been doing just that internally. >>> I'm frightened to say that I'm at v25 and counting. :-( >> >> Internal revisions don't count, only public submissions. :-) > > Well the number of public submissions isn't too far off my > internal patches. :-) :-) >>> Eg: "e500" & "e500mc", "ppc" & "ppc32" and "ppc64", etc. >>> >>> ...which strncmp cannot disambiguate, because it doesn't enforce the >>> two strings have the same length. >> >> You could handle that with: >> >> if (optlen == strlen (valid_options->name[i]) >> && strncmp (opt, optlen, valid_options->name[i]) == 0) > > Yes, but that involves two scans over the string, so... This is far from performance critical code, but if you're worried about the double-scan, then you could write it like this: if (strncmp (opt, valid_options->name[i], optlen) == 0 && valid_options->name[optlen] == '\0') Thanks, Pedro Alves ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH, updated] Add support for setting disassembler-options in GDB for POWER, ARM and S390 2017-02-08 21:03 [PATCH, updated] Add support for setting disassembler-options in GDB for POWER, ARM and S390 Peter Bergner 2017-02-13 15:53 ` Yao Qi @ 2017-02-13 18:52 ` Peter Bergner 1 sibling, 0 replies; 16+ messages in thread From: Peter Bergner @ 2017-02-13 18:52 UTC (permalink / raw) To: gdb-patches Cc: Alan Modra, Pedro Alves, Yao Qi, Ulrich Weigand, Eli Zaretskii, Nick Clifton, binutils On 2/8/17 3:01 PM, Peter Bergner wrote: > +/* Parse the disassembler options, looking for ',' seperated options. */ > +extern char *parse_one_disassembler_option (char *, const char *); > + > +/* A macro for iterating over each comma seperated option in OPTIONS. > +================================================================================ > + OPT > +*/ Just noticed these typos (s/seperated/separated/ and the comment). Fixed. Peter ^ permalink raw reply [flat|nested] 16+ messages in thread
end of thread, other threads:[~2017-02-16 2:09 UTC | newest] Thread overview: 16+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2017-02-08 21:03 [PATCH, updated] Add support for setting disassembler-options in GDB for POWER, ARM and S390 Peter Bergner 2017-02-13 15:53 ` Yao Qi 2017-02-13 16:31 ` Peter Bergner 2017-02-13 16:58 ` Pedro Alves 2017-02-13 17:32 ` Peter Bergner 2017-02-14 17:21 ` Yao Qi 2017-02-14 17:35 ` Pedro Alves 2017-02-13 17:08 ` Peter Bergner 2017-02-13 18:48 ` Peter Bergner 2017-02-14 20:01 ` Pedro Alves 2017-02-15 23:14 ` Peter Bergner 2017-02-15 23:48 ` Alan Modra 2017-02-16 0:21 ` Pedro Alves 2017-02-16 1:59 ` Peter Bergner 2017-02-16 2:09 ` Pedro Alves 2017-02-13 18:52 ` Peter Bergner
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).