GDB: Add support for the new set/show disassembler-options commands.
authorPeter Bergner <bergner@vnet.ibm.com>
Tue, 28 Feb 2017 18:32:07 +0000 (12:32 -0600)
committerPeter Bergner <bergner@vnet.ibm.com>
Tue, 28 Feb 2017 18:32:07 +0000 (12:32 -0600)
This commit adds support to GDB so that it can modify the disassembler-options
value that is passed to the disassembler, similar to objdump's -M option.
Currently, the only supported targets are ARM, PowerPC and S/390, but
adding support for a new target(s) is not difficult.

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.
(disassembler_options_cmp): Likewise.
(next_disassembler_option): New inline function.
(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.
(disassembler_options_cmp): Likewise.
* arm-dis.c: Include "libiberty.h".
(NUM_ELEM): Delete.
(regnames): Use long disassembler style names.
Add force-thumb and no-force-thumb options.
(NUM_ARM_REGNAMES): Rename from this...
(NUM_ARM_OPTIONS): ...to this.  Use ARRAY_SIZE.
(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): Use 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.
(ppc_parse_cpu): Use ARRAY_SIZE and disassembler_options_cmp.
(powerpc_init_dialect): Add break to switch statement.
Use new FOR_EACH_DISASSEMBLER_OPTION macro.
(disassembler_options_powerpc): New function.
(print_ppc_disassembler_options): Use ARRAY_SIZE.
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): Use remove_whitespace_and_extra_commas.

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->disassembler_options.
(get_disassembler_options): New function.
(set_disassembler_options): Likewise.
(set_disassembler_options_sfunc): Likewise.
(show_disassembler_options_sfunc): Likewise.
(disassembler_options_completer): Likewise.
(_initialize_disasm): Likewise.
* disasm.h (get_disassembler_options): New prototype.
(set_disassembler_options): Likewise.
* 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.
(arm_disassembler_options): New static variable.
(set_disassembly_style_sfunc): Convert short style name into long
option name.  Call set_disassembler_options.
(show_disassembly_style_sfunc): New function.
(arm_gdbarch_init): Call set_gdbarch_disassembler_options and
set_gdbarch_verify_disassembler_options.
(_initialize_arm_tdep): Delete regnames variable and update callers.
(arm_disassembler_options): Initialize.
(disasm_options): New variable.
(num_disassembly_options): Rename from this...
(num_disassembly_styles): ...to this.  Compute by scanning through
disasm_options.
(valid_disassembly_styles): Initialize using disasm_options.
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 (powerpc_disassembler_options): New static variable.
(rs6000_gdbarch_init): Call set_gdbarch_disassembler_options and
set_gdbarch_verify_disassembler_options.
* s390-tdep.c (s390_disassembler_options): New static variable.
(s390_gdbarch_init):all set_gdbarch_disassembler_options and
set_gdbarch_verify_disassembler_options.

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.
* gdb.arch/arm-disassembler-options.exp: Likewise.
* gdb.arch/powerpc-disassembler-options.exp: Likewise.
* gdb.arch/s390-disassembler-options.exp: Likewise.

46 files changed:
binutils/ChangeLog
binutils/objdump.c
gdb/ChangeLog
gdb/NEWS
gdb/arm-tdep.c
gdb/disasm.c
gdb/disasm.h
gdb/doc/gdb.texinfo
gdb/gdbarch.c
gdb/gdbarch.h
gdb/gdbarch.sh
gdb/rs6000-tdep.c
gdb/s390-linux-tdep.c
gdb/testsuite/ChangeLog
gdb/testsuite/gdb.arch/arm-disassembler-options.exp [new file with mode: 0644]
gdb/testsuite/gdb.arch/powerpc-altivec.exp [new file with mode: 0644]
gdb/testsuite/gdb.arch/powerpc-altivec.s [new file with mode: 0644]
gdb/testsuite/gdb.arch/powerpc-altivec2.exp [new file with mode: 0644]
gdb/testsuite/gdb.arch/powerpc-altivec2.s [new file with mode: 0644]
gdb/testsuite/gdb.arch/powerpc-altivec3.exp [new file with mode: 0644]
gdb/testsuite/gdb.arch/powerpc-altivec3.s [new file with mode: 0644]
gdb/testsuite/gdb.arch/powerpc-disassembler-options.exp [new file with mode: 0644]
gdb/testsuite/gdb.arch/powerpc-power.exp [deleted file]
gdb/testsuite/gdb.arch/powerpc-power.s [deleted file]
gdb/testsuite/gdb.arch/powerpc-power7.exp [new file with mode: 0644]
gdb/testsuite/gdb.arch/powerpc-power7.s [new file with mode: 0644]
gdb/testsuite/gdb.arch/powerpc-power8.exp [new file with mode: 0644]
gdb/testsuite/gdb.arch/powerpc-power8.s [new file with mode: 0644]
gdb/testsuite/gdb.arch/powerpc-power9.exp [new file with mode: 0644]
gdb/testsuite/gdb.arch/powerpc-power9.s [new file with mode: 0644]
gdb/testsuite/gdb.arch/powerpc-vsx.exp [new file with mode: 0644]
gdb/testsuite/gdb.arch/powerpc-vsx.s [new file with mode: 0644]
gdb/testsuite/gdb.arch/powerpc-vsx2.exp [new file with mode: 0644]
gdb/testsuite/gdb.arch/powerpc-vsx2.s [new file with mode: 0644]
gdb/testsuite/gdb.arch/powerpc-vsx3.exp [new file with mode: 0644]
gdb/testsuite/gdb.arch/powerpc-vsx3.s [new file with mode: 0644]
gdb/testsuite/gdb.arch/s390-disassembler-options.exp [new file with mode: 0644]
gdb/testsuite/gdb.disasm/disassembler-options.exp [new file with mode: 0644]
include/ChangeLog
include/dis-asm.h
opcodes/ChangeLog
opcodes/arm-dis.c
opcodes/disassemble.c
opcodes/po/opcodes.pot
opcodes/ppc-dis.c
opcodes/s390-dis.c

index f54c12d923b8f388e80e41a7ff904b87a61bb9af..7004b0b9a9b70148a57290bae90efc2e942abf12 100644 (file)
@@ -1,3 +1,7 @@
+2017-02-28  Peter Bergner  <bergner@vnet.ibm.com>
+
+       * objdump.c (main): Use remove_whitespace_and_extra_commas.
+
 2017-02-27  Jan Kratochvil  <jan.kratochvil@redhat.com>
 
        Fix compilation with GCC 4.4.7.
index b9fecefca5ae8f80a1d21d0364be489e2f7736ef..4609858f9e38f19db0a812f529edf629496b8ed0 100644 (file)
@@ -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);
index fafa10c84e47cd8f200b20b668794950a7c32d6b..b06029154fde508494398efa7f7484956b692f75 100644 (file)
@@ -1,3 +1,49 @@
+2017-02-28  Peter Bergner  <bergner@vnet.ibm.com>
+
+       * 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->disassembler_options.
+       (get_disassembler_options): New function.
+       (set_disassembler_options): Likewise.
+       (set_disassembler_options_sfunc): Likewise.
+       (show_disassembler_options_sfunc): Likewise.
+       (disassembler_options_completer): Likewise.
+       (_initialize_disasm): Likewise.
+       * disasm.h (get_disassembler_options): New prototype.
+       (set_disassembler_options): Likewise.
+       * 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.
+       (arm_disassembler_options): New static variable.
+       (set_disassembly_style_sfunc): Convert short style name into long
+       option name.  Call set_disassembler_options.
+       (show_disassembly_style_sfunc): New function.
+       (arm_gdbarch_init): Call set_gdbarch_disassembler_options and
+       set_gdbarch_verify_disassembler_options.
+       (_initialize_arm_tdep): Delete regnames variable and update callers.
+       (arm_disassembler_options): Initialize.
+       (disasm_options): New variable.
+       (num_disassembly_options): Rename from this...
+       (num_disassembly_styles): ...to this.  Compute by scanning through
+       disasm_options.
+       (valid_disassembly_styles): Initialize using disasm_options.
+       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 (powerpc_disassembler_options): New static variable.
+       (rs6000_gdbarch_init): Call set_gdbarch_disassembler_options and
+       set_gdbarch_verify_disassembler_options.
+       * s390-tdep.c (s390_disassembler_options): New static variable.
+       (s390_gdbarch_init):all set_gdbarch_disassembler_options and
+       set_gdbarch_verify_disassembler_options.
+
 2017-02-27  Simon Marchi  <simon.marchi@ericsson.com>
 
        * remote.c (remote_add_target_side_condition): Remove "struct"
index 76de00e85c261d9674381acf4f584d82bd4d8b0e..cf585954d79186ef76cc3d16b3b3f3f5ebb58626 100644 (file)
--- a/gdb/NEWS
+++ b/gdb/NEWS
@@ -84,6 +84,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.
+  The default value is the empty string.  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.
index 88ed391729813dc4ef8e4dccb6698fa798e0de08..3aee7221f3417c31d470561823967d3022bd107c 100644 (file)
@@ -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
@@ -208,6 +205,9 @@ static const char *const arm_register_names[] =
  "f4",  "f5",  "f6",  "f7",    /* 20 21 22 23 */
  "fps", "cpsr" };              /* 24 25       */
 
+/* Holds the current set of options to be passed to the disassembler.  */
+static char *arm_disassembler_options;
+
 /* Valid register name styles.  */
 static const char **valid_disassembly_styles;
 
@@ -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,32 @@ 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.  */
+  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)
+{
+  struct gdbarch *gdbarch = get_current_arch ();
+  char *options = get_disassembler_options (gdbarch);
+  const char *style = "";
+  int len = 0;
+  char *opt;
+
+  FOR_EACH_DISASSEMBLER_OPTION (opt, options)
+    if (CONST_STRNEQ (opt, "reg-names-"))
+      {
+       style = &opt[strlen ("reg-names-")];
+       len = strcspn (style, ",");
+      }
+
+  fprintf_unfiltered (file, "The disassembly style is \"%.*s\".\n", len, style);
 }
 \f
 /* Return the ARM register name corresponding to register I.  */
@@ -8582,21 +8607,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 +9566,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, &arm_disassembler_options);
+  set_gdbarch_valid_disassembler_options (gdbarch, disassembler_options_arm ());
+
   return gdbarch;
 }
 
@@ -9579,8 +9592,7 @@ _initialize_arm_tdep (void)
   long length;
   const char *setname;
   const char *setdesc;
-  const char *const *regnames;
-  int i;
+  int i, j;
   char regdesc[1024], *rdptr = regdesc;
   size_t rest = sizeof (regdesc);
 
@@ -9608,9 +9620,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 +9629,30 @@ _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().  */
+  arm_disassembler_options = xstrdup ("reg-names-std");
+  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++)
-    {
-      get_arm_regnames (i, &setname, &setdesc, &regnames);
-      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);
-       }
-    }
+                                     num_disassembly_styles + 1);
+  for (i = j = 0; disasm_options->name[i] != NULL; i++)
+    if (CONST_STRNEQ (disasm_options->name[i], "reg-names-"))
+      {
+       size_t offset = strlen ("reg-names-");
+       const char *style = disasm_options->name[i];
+       valid_disassembly_styles[j++] = &style[offset];
+       length = snprintf (rdptr, rest, "%s - %s\n", &style[offset],
+                          disasm_options->description[i]);
+       rdptr += length;
+       rest -= length;
+      }
   /* 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 +9666,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,
index 64d6684b53e3981b26f94ad9a4c93bfc6d35e1d1..ab080e2690e74b17c2447374dda7e921af0496c3 100644 (file)
    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 = get_disassembler_options (gdbarch);
   disassemble_init_for_target (&m_di);
 }
 
@@ -888,6 +896,7 @@ 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->disassembler_options = get_disassembler_options (gdbarch);
   disassemble_init_for_target (di);
 }
 
@@ -904,3 +913,173 @@ gdb_buffered_insn_length (struct gdbarch *gdbarch,
 
   return gdbarch_print_insn (gdbarch, addr, &di);
 }
+
+char *
+get_disassembler_options (struct gdbarch *gdbarch)
+{
+  char **disassembler_options = gdbarch_disassembler_options (gdbarch);
+  if (disassembler_options == NULL)
+    return NULL;
+  return *disassembler_options;
+}
+
+void
+set_disassembler_options (char *prospective_options)
+{
+  struct gdbarch *gdbarch = get_current_arch ();
+  char **disassembler_options = gdbarch_disassembler_options (gdbarch);
+  const disasm_options_t *valid_options;
+  char *options = remove_whitespace_and_extra_commas (prospective_options);
+  char *opt;
+
+  /* Allow all architectures, even ones that do not support 'set disassembler',
+     to reset their disassembler options to NULL.  */
+  if (options == NULL)
+    {
+      if (disassembler_options != NULL)
+       {
+         free (*disassembler_options);
+         *disassembler_options = 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, options)
+    {
+      size_t i;
+      for (i = 0; valid_options->name[i] != NULL; i++)
+       if (disassembler_options_cmp (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 (*disassembler_options);
+  *disassembler_options = 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 = get_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 the\n\
+'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;
+      fprintf_filtered (file, "  ");
+      for (i = 0; valid_options->name[i] != NULL; i++)
+       {
+         fprintf_filtered (file, "%s", valid_options->name[i]);
+         if (valid_options->name[i + 1] != NULL)
+           fprintf_filtered (file, ", ");
+         wrap_here ("  ");
+       }
+      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;
+      text = skip_spaces_const (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-options <option>[,<option>...]\n\n\
+See: 'show disassembler-options' 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);
+}
index 42c1f3af6d48bed68722b95554849494b4e85d74..ad3e8ddbf9ba74f2cb48811f1ed04ca4a32f5365 100644 (file)
@@ -138,4 +138,12 @@ extern int gdb_buffered_insn_length (struct gdbarch *gdbarch,
                                     const gdb_byte *insn, int max_len,
                                     CORE_ADDR memaddr);
 
+/* Returns GDBARCH's disassembler options.  */
+
+extern char *get_disassembler_options (struct gdbarch *gdbarch);
+
+/* Sets the active gdbarch's disassembler options to OPTIONS.  */
+
+extern void set_disassembler_options (char *options);
+
 #endif
index 962325be3a11521e12c00a535d370157346aac72..f19e80f104e4394eaf1f2378b6de86bf07abb074 100644 (file)
@@ -8519,6 +8519,27 @@ libraries might show a seemingly bogus location---it's actually a
 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}
+(@pxref{objdump,,objdump,binutils.info,The GNU Binary Utilities}).
+The default value is the empty string.
+
+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
index 266f2e9ee472fc40804ca3fa623f585bf75a88a8..f52cf5d698be7e85e19c11d227dd26c1ef6a8891 100644 (file)
@@ -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"),
@@ -874,6 +878,9 @@ gdbarch_dump (struct gdbarch *gdbarch, struct ui_file *file)
   fprintf_unfiltered (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));
@@ -1420,6 +1427,9 @@ gdbarch_dump (struct gdbarch *gdbarch, struct ui_file *file)
   fprintf_unfiltered (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));
@@ -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.  */
index 50bc6a95103b72c6b0c2e81a8fd69b5a415ebfc9..34f82a719aaa366b7e08dc32d0e64b81767fd993 100644 (file)
@@ -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)
 
index 54549b6319b8831267e49c096d44e94238198628..6902e0e34d26d14f8a55e45a8391543fd7c792c0 100755 (executable)
@@ -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;
index 72ee05de2f37131e8181c74417eee08c51c2f6d0..67c4d5184b93189b80e5e37aaff2b9e23c9b7b1e 100644 (file)
     && (regnum) >= (tdep)->ppc_efpr0_regnum \
     && (regnum) < (tdep)->ppc_efpr0_regnum + ppc_num_efprs)
 
+/* Holds the current set of options to be passed to the disassembler.  */
+static char *powerpc_disassembler_options;
+
 /* The list of available "set powerpc ..." and "show powerpc ..."
    commands.  */
 static struct cmd_list_element *setpowerpccmdlist = NULL;
@@ -6609,6 +6612,10 @@ rs6000_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
   else
     register_ppc_ravenscar_ops (gdbarch);
 
+  set_gdbarch_disassembler_options (gdbarch, &powerpc_disassembler_options);
+  set_gdbarch_valid_disassembler_options (gdbarch,
+                                         disassembler_options_powerpc ());
+
   return gdbarch;
 }
 
index febdd14aa380b55bf681bc0ffe88b98096b48040..abc9438cd710b71bf515b4c6a5bdfcd5606170fe 100644 (file)
@@ -79,6 +79,9 @@
 #define XML_SYSCALL_FILENAME_S390 "syscalls/s390-linux.xml"
 #define XML_SYSCALL_FILENAME_S390X "syscalls/s390x-linux.xml"
 
+/* Holds the current set of options to be passed to the disassembler.  */
+static char *s390_disassembler_options;
+
 enum s390_abi_kind
 {
   ABI_LINUX_S390,
@@ -8113,6 +8116,10 @@ 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 (gdbarch, &s390_disassembler_options);
+  set_gdbarch_valid_disassembler_options (gdbarch,
+                                         disassembler_options_s390 ());
+
   return gdbarch;
 }
 
index b102b87b790ffa87fbf20109ab7b30b2c35490e9..cb8bf53131e1d842ed22932135aa398e72a333d8 100644 (file)
@@ -1,3 +1,30 @@
+2017-02-28  Peter Bergner  <bergner@vnet.ibm.com>
+
+       * 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.
+       * gdb.arch/arm-disassembler-options.exp: Likewise.
+       * gdb.arch/powerpc-disassembler-options.exp: Likewise.
+       * gdb.arch/s390-disassembler-options.exp: Likewise.
+
 2017-02-23  Luis Machado  <lgustavo@codesourcery.com>
 
        * gdb.reverse/insn-reverse.x86.c (check_rdrand_support): Renamed to ...
diff --git a/gdb/testsuite/gdb.arch/arm-disassembler-options.exp b/gdb/testsuite/gdb.arch/arm-disassembler-options.exp
new file mode 100644 (file)
index 0000000..0116e6b
--- /dev/null
@@ -0,0 +1,56 @@
+# 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/>.
+
+# This file is part of the gdb testsuite.
+
+# This test exercises set/show disassembler-options results are preserved
+# across multiple set architecture calls.
+
+if {![istarget "arm*-*-*"]} then {
+    verbose "Skipping ARM disassembler options."
+    return
+}
+
+gdb_exit
+gdb_start
+
+set option "reg-names-gcc,force-thumb"
+set arch1 "armv2"
+set arch2 "armv5"
+
+gdb_test "set architecture $arch1" \
+       "The target architecture is assumed to be $arch1" \
+       "set architecture $arch1"
+
+gdb_test_no_output "set disassembler-options"
+gdb_test "show disassembler-options" \
+       "The current disassembler options are ''.*" \
+       "show NULL disassembler-options"
+
+gdb_test_no_output "set disassembler-options $option"
+gdb_test "show disassembler-options" \
+       "The current disassembler options are '$option'.*" \
+       "show disassembler-options $option"
+
+# Change architectures and verify the disassembler options have been preserved.
+
+gdb_test "set architecture $arch2" \
+       "The target architecture is assumed to be $arch2" \
+       "set architecture $arch2"
+
+gdb_test "show disassembler-options" \
+       "The current disassembler options are '$option'.*" \
+       "show disassembler-options $option"
+
diff --git a/gdb/testsuite/gdb.arch/powerpc-altivec.exp b/gdb/testsuite/gdb.arch/powerpc-altivec.exp
new file mode 100644 (file)
index 0000000..2587847
--- /dev/null
@@ -0,0 +1,261 @@
+# 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/>.
+
+# This file is part of the gdb testsuite.
+
+# 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 func ""
+
+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} {
+    global decimal hex
+    # 0x0000000000000018 <+24>:        stxvd2x vs43,r4,r5
+    return "\[ \t\]*$hex <\\+$decimal>:\[ \t\]*[string_to_regexp $instr]"
+}
+
+proc func_check {instr} {
+    global func
+
+    set test "found: '$instr'"
+    set peb [instr_to_patt $instr]
+    if [regexp -nocase -line [instr_to_patt $instr] $func] {
+       pass $test
+    } else {
+       fail $peb
+    }
+}
+
+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 (file)
index 0000000..4148002
--- /dev/null
@@ -0,0 +1,217 @@
+/* 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:
+       .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 (file)
index 0000000..70f4ccb
--- /dev/null
@@ -0,0 +1,178 @@
+# 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/>.
+
+# This file is part of the gdb testsuite.
+
+# 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 func ""
+
+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} {
+    global decimal hex
+    # 0x0000000000000018 <+24>:        stxvd2x vs43,r4,r5
+    return "\[ \t\]*$hex <\\+$decimal>:\[ \t\]*[string_to_regexp $instr]"
+}
+
+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 (file)
index 0000000..6148fb9
--- /dev/null
@@ -0,0 +1,135 @@
+/* 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:
+       .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 (file)
index 0000000..b928e1b
--- /dev/null
@@ -0,0 +1,131 @@
+# 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/>.
+
+# This file is part of the gdb testsuite.
+
+# 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 func ""
+
+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} {
+    global decimal hex
+    # 0x0000000000000018 <+24>:        stxvd2x vs43,r4,r5
+    return "\[ \t\]*$hex <\\+$decimal>:\[ \t\]*[string_to_regexp $instr]"
+}
+
+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 (file)
index 0000000..9e33325
--- /dev/null
@@ -0,0 +1,88 @@
+/* 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:
+       .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-disassembler-options.exp b/gdb/testsuite/gdb.arch/powerpc-disassembler-options.exp
new file mode 100644 (file)
index 0000000..80a937d
--- /dev/null
@@ -0,0 +1,56 @@
+# 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/>.
+
+# This file is part of the gdb testsuite.
+
+# This test exercises set/show disassembler-options results are preserved
+# across multiple set architecture calls.
+
+if {![istarget "powerpc*-*-*"]} then {
+    verbose "Skipping PowerPC disassembler options."
+    return
+}
+
+gdb_exit
+gdb_start
+
+set option "power9"
+set arch1 "rs6000:6000"
+set arch2 "powerpc:common64"
+
+gdb_test "set architecture $arch1" \
+       "The target architecture is assumed to be $arch1" \
+       "set architecture $arch1"
+
+gdb_test_no_output "set disassembler-options"
+gdb_test "show disassembler-options" \
+       "The current disassembler options are ''.*" \
+       "show NULL disassembler-options"
+
+gdb_test_no_output "set disassembler-options $option"
+gdb_test "show disassembler-options" \
+       "The current disassembler options are '$option'.*" \
+       "show disassembler-options $option"
+
+# Change architectures and verify the disassembler options have been preserved.
+
+gdb_test "set architecture $arch2" \
+       "The target architecture is assumed to be $arch2" \
+       "set architecture $arch2"
+
+gdb_test "show disassembler-options" \
+       "The current disassembler options are '$option'.*" \
+       "show disassembler-options $option"
+
diff --git a/gdb/testsuite/gdb.arch/powerpc-power.exp b/gdb/testsuite/gdb.arch/powerpc-power.exp
deleted file mode 100644 (file)
index c1c56c5..0000000
+++ /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 (file)
index 91dbac7..0000000
+++ /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 (file)
index 0000000..ae48eec
--- /dev/null
@@ -0,0 +1,164 @@
+# 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/>.
+
+# This file is part of the gdb testsuite.
+
+# 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 func ""
+
+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} {
+    global decimal hex
+    # 0x0000000000000018 <+24>:        stxvd2x vs43,r4,r5
+    return "\[ \t\]*$hex <\\+$decimal>:\[ \t\]*[string_to_regexp $instr]"
+}
+
+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 (file)
index 0000000..c7b1858
--- /dev/null
@@ -0,0 +1,121 @@
+/* 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:
+       .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 (file)
index 0000000..432dcb4
--- /dev/null
@@ -0,0 +1,248 @@
+# 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/>.
+
+# This file is part of the gdb testsuite.
+
+# 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 func ""
+
+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} {
+    global decimal hex
+    # 0x0000000000000018 <+24>:        stxvd2x vs43,r4,r5
+    return "\[ \t\]*$hex <\\+$decimal>:\[ \t\]*[string_to_regexp $instr]"
+}
+
+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 (file)
index 0000000..3922b1b
--- /dev/null
@@ -0,0 +1,205 @@
+/* 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:
+       .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 (file)
index 0000000..cb9be17
--- /dev/null
@@ -0,0 +1,445 @@
+# 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/>.
+
+# This file is part of the gdb testsuite.
+
+# 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 func ""
+
+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} {
+    global decimal hex
+    # 0x0000000000000018 <+24>:        stxvd2x vs43,r4,r5
+    return "\[ \t\]*$hex <\\+$decimal>:\[ \t\]*[string_to_regexp $instr]"
+}
+
+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 (file)
index 0000000..65d8783
--- /dev/null
@@ -0,0 +1,402 @@
+/* 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:
+       .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 (file)
index 0000000..60fe9d4
--- /dev/null
@@ -0,0 +1,225 @@
+# 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/>.
+
+# This file is part of the gdb testsuite.
+
+# 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 func ""
+
+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} {
+    global decimal hex
+    # 0x0000000000000018 <+24>:        stxvd2x vs43,r4,r5
+    return "\[ \t\]*$hex <\\+$decimal>:\[ \t\]*[string_to_regexp $instr]"
+}
+
+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 (file)
index 0000000..3986d73
--- /dev/null
@@ -0,0 +1,182 @@
+/* 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:
+       .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 (file)
index 0000000..ce2e237
--- /dev/null
@@ -0,0 +1,118 @@
+# 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/>.
+
+# This file is part of the gdb testsuite.
+
+# 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 func ""
+
+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} {
+    global decimal hex
+    # 0x0000000000000018 <+24>:        stxvd2x vs43,r4,r5
+    return "\[ \t\]*$hex <\\+$decimal>:\[ \t\]*[string_to_regexp $instr]"
+}
+
+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 (file)
index 0000000..4ac411b
--- /dev/null
@@ -0,0 +1,75 @@
+/* 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:
+       .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 (file)
index 0000000..8008c63
--- /dev/null
@@ -0,0 +1,184 @@
+# 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/>.
+
+# This file is part of the gdb testsuite.
+
+# 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 func ""
+
+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} {
+    global decimal hex
+    # 0x0000000000000018 <+24>:        stxvd2x vs43,r4,r5
+    return "\[ \t\]*$hex <\\+$decimal>:\[ \t\]*[string_to_regexp $instr]"
+}
+
+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 (file)
index 0000000..297e1af
--- /dev/null
@@ -0,0 +1,141 @@
+/* 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:
+       .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.arch/s390-disassembler-options.exp b/gdb/testsuite/gdb.arch/s390-disassembler-options.exp
new file mode 100644 (file)
index 0000000..af791e4
--- /dev/null
@@ -0,0 +1,56 @@
+# 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/>.
+
+# This file is part of the gdb testsuite.
+
+# This test exercises set/show disassembler-options results are preserved
+# across multiple set architecture calls.
+
+if {![istarget "s390*-*-*"]} then {
+    verbose "Skipping S390 disassembler options."
+    return
+}
+
+gdb_exit
+gdb_start
+
+set option "esa"
+set arch1 "s390:64-bit"
+set arch2 "s390:31-bit"
+
+gdb_test "set architecture $arch1" \
+       "The target architecture is assumed to be $arch1" \
+       "set architecture $arch1"
+
+gdb_test_no_output "set disassembler-options"
+gdb_test "show disassembler-options" \
+       "The current disassembler options are ''.*" \
+       "show NULL disassembler-options"
+
+gdb_test_no_output "set disassembler-options $option"
+gdb_test "show disassembler-options" \
+       "The current disassembler options are '$option'.*" \
+       "show disassembler-options $option"
+
+# Change architectures and verify the disassembler options have been preserved.
+
+gdb_test "set architecture $arch2" \
+       "The target architecture is assumed to be $arch2" \
+       "set architecture $arch2"
+
+gdb_test "show disassembler-options" \
+       "The current disassembler options are '$option'.*" \
+       "show disassembler-options $option"
+
diff --git a/gdb/testsuite/gdb.disasm/disassembler-options.exp b/gdb/testsuite/gdb.disasm/disassembler-options.exp
new file mode 100644 (file)
index 0000000..48f2b28
--- /dev/null
@@ -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"
+
+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
+  }
+}
index de28dcb3077cbd9bec6014445ce0a8499b9673d0..17e17522d31060a69c085f44bbfc91e05d09fb8b 100644 (file)
@@ -1,3 +1,19 @@
+2017-02-28  Peter Bergner  <bergner@vnet.ibm.com>
+
+       * 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.
+       (disassembler_options_cmp): Likewise.
+       (next_disassembler_option): New inline function.
+       (FOR_EACH_DISASSEMBLER_OPTION): New macro.
+
 2017-02-28  Alan Modra  <amodra@gmail.com>
 
        * elf/ppc64.h (R_PPC64_16DX_HA): New.  Expand fake reloc comment.
index 48729208d75be332e87b186e73dda65b3c0ea74c..f0544509d0c1beb96d4f6791932029d011cfda1d 100644 (file)
@@ -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,29 @@ 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 *);
+
+/* Like STRCMP, but treat ',' the same as '\0' so that we match
+   strings like "foobar" against "foobar,xxyyzz,...".  */
+extern int disassembler_options_cmp (const char *, const char *);
+
+/* A helper function for FOR_EACH_DISASSEMBLER_OPTION.  */
+static inline char *
+next_disassembler_option (char *options)
+{
+  char *opt = strchr (options, ',');
+  if (opt != NULL)
+    opt++;
+  return opt;
+}
+
+/* A macro for iterating over each comma separated option in OPTIONS.  */
+#define FOR_EACH_DISASSEMBLER_OPTION(OPT, OPTIONS) \
+  for ((OPT) = (OPTIONS); \
+       (OPT) != NULL; \
+       (OPT) = next_disassembler_option (OPT))
+
 \f
 /* This block of definitions is for particular callers who read instructions
    into a buffer before calling the instruction decoder.  */
index 4eb33bc123fc554f513449ba34aa76a8897f417b..0400fca637bddadae6a7e38699e9172b0906ae06 100644 (file)
@@ -1,3 +1,46 @@
+2017-02-28  Peter Bergner  <bergner@vnet.ibm.com>
+
+       * disassemble.c Include "safe-ctype.h".
+       (disassemble_init_for_target): Handle s390 init.
+       (remove_whitespace_and_extra_commas): New function.
+       (disassembler_options_cmp): Likewise.
+       * arm-dis.c: Include "libiberty.h".
+       (NUM_ELEM): Delete.
+       (regnames): Use long disassembler style names.
+       Add force-thumb and no-force-thumb options.
+       (NUM_ARM_REGNAMES): Rename from this...
+       (NUM_ARM_OPTIONS): ...to this.  Use ARRAY_SIZE.
+       (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): Use 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.
+       (ppc_parse_cpu): Use ARRAY_SIZE and disassembler_options_cmp.
+       (powerpc_init_dialect): Add break to switch statement.
+       Use new FOR_EACH_DISASSEMBLER_OPTION macro.
+       (disassembler_options_powerpc): New function.
+       (print_ppc_disassembler_options): Use ARRAY_SIZE.
+       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.
+
 2017-02-28  Jan Beulich  <jbeulich@suse.com>
 
        * i386-dis.c (PCMPESTR_Fixup): New.
index 2987403fbfae14b4551e472ed12537adf95a5316..e4f99b823518c697aa2f896e9d8f7b0caa62664e 100644 (file)
@@ -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.  */
 #define strneq(a,b,n)  (strncmp ((a), (b), (n)) == 0)
 #endif
 
-#ifndef NUM_ELEM
-#define NUM_ELEM(a)     (sizeof (a) / sizeof (a)[0])
-#endif
-
 /* Cached mapping symbol state.  */
 enum map_type
 {
@@ -3198,18 +3195,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 +3234,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   ARRAY_SIZE (regnames)
 #define arm_regnames      regnames[regname_selected].reg_names
 
 static bfd_boolean force_thumb = FALSE;
@@ -3254,31 +3253,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 +6098,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 *opt;
 
-  if (CONST_STRNEQ (option, "reg-names-"))
+  FOR_EACH_DISASSEMBLER_OPTION (opt, 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 (disassembler_options_cmp (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 +6422,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 +6791,51 @@ 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));
 }
index 1b1524247aeacc968fe7ca1abf85d89ab05be690..eef06584f43cb4cc78776a0282eaab9172317c83 100644 (file)
@@ -20,6 +20,7 @@
 
 #include "sysdep.h"
 #include "dis-asm.h"
+#include "safe-ctype.h"
 
 #ifdef ARCH_all
 #define ARCH_aarch64
@@ -648,8 +649,77 @@ disassemble_init_for_target (struct disassemble_info * info)
 #if defined (ARCH_powerpc) || defined (ARCH_rs6000)
       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;
+}
+
+/* Like STRCMP, but treat ',' the same as '\0' so that we match
+   strings like "foobar" against "foobar,xxyyzz,...".  */
+
+int
+disassembler_options_cmp (const char *s1, const char *s2)
+{
+  unsigned char c1, c2;
+
+  do
+    {
+      c1 = (unsigned char) *s1++;
+      if (c1 == ',')
+       c1 = '\0';
+      c2 = (unsigned char) *s2++;
+      if (c2 == ',')
+       c2 = '\0';
+      if (c1 == '\0')
+       return c1 - c2;
+    }
+  while (c1 == c2);
+
+  return c1 - c2;
+}
index 56c7a23d54452cf23a484bec0da2d55fb3fda599..e64a678309fda023afc0c65d2a417bb657adb2ff 100644 (file)
@@ -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
index e0eff7a67bd23562376b7f00a82af666f062e334..3f8aef811483ed4859a34b5535a0ea295edf2418 100644 (file)
@@ -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,
@@ -252,8 +257,8 @@ ppc_parse_cpu (ppc_cpu_t ppc_cpu, ppc_cpu_t *sticky, const char *arg)
 {
   unsigned int i;
 
-  for (i = 0; i < sizeof (ppc_opts) / sizeof (ppc_opts[0]); i++)
-    if (strcmp (ppc_opts[i].opt, arg) == 0)
+  for (i = 0; i < ARRAY_SIZE (ppc_opts); i++)
+    if (disassembler_options_cmp (ppc_opts[i].opt, arg) == 0)
       {
        if (ppc_opts[i].sticky)
          {
@@ -264,7 +269,7 @@ ppc_parse_cpu (ppc_cpu_t ppc_cpu, ppc_cpu_t *sticky, const char *arg)
        ppc_cpu = ppc_opts[i].cpu;
        break;
       }
-  if (i >= sizeof (ppc_opts) / sizeof (ppc_opts[0]))
+  if (i >= ARRAY_SIZE (ppc_opts))
     return 0;
 
   ppc_cpu |= *sticky;
@@ -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,22 @@ 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;
+  FOR_EACH_DISASSEMBLER_OPTION (opt, 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 (disassembler_options_cmp (opt, "32") == 0)
        dialect &= ~(ppc_cpu_t) PPC_OPCODE_64;
-      else if (strcmp (arg, "64") == 0)
+      else if (disassembler_options_cmp (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 +764,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 = ARRAY_SIZE (ppc_opts);
+      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)
 {
@@ -776,7 +793,7 @@ print_ppc_disassembler_options (FILE *stream)
 The following PPC specific disassembler options are supported for use with\n\
 the -M switch:\n"));
 
-  for (col = 0, i = 0; i < sizeof (ppc_opts) / sizeof (ppc_opts[0]); i++)
+  for (col = 0, i = 0; i < ARRAY_SIZE (ppc_opts); i++)
     {
       col += fprintf (stream, " %s,", ppc_opts[i].opt);
       if (col > 66)
@@ -785,5 +802,5 @@ the -M switch:\n"));
          col = 0;
        }
     }
-  fprintf (stream, " 32, 64\n");
+  fprintf (stream, "\n");
 }
index 328ba2d7db0dcbae4efcf13c514b43eea5bba81a..2d97a2aa7055763e11aeb66aeb0c6c7b00a57f81 100644 (file)
 #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 = ARRAY_SIZE (options);
+      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 < ARRAY_SIZE (options); i++)
+    {
+      unsigned int len = strlen (options[i].name);
+      if (max_len < len)
+       max_len = len;
+    }
+
+  for (i = 0, max_len++; i < ARRAY_SIZE (options); i++)
+    fprintf (stream, "  %s%*c %s\n",
+            options[i].name,
+            (int)(max_len - strlen (options[i].name)), ' ',
+            _(options[i].description));
 }