]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
Add instruction-set tests for ppc32 (integer, FP, altivec).
authorJulian Seward <jseward@acm.org>
Thu, 10 Nov 2005 19:33:56 +0000 (19:33 +0000)
committerJulian Seward <jseward@acm.org>
Thu, 10 Nov 2005 19:33:56 +0000 (19:33 +0000)
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@5075

none/tests/ppc32/Makefile.am
none/tests/ppc32/jm-insns.c [new file with mode: 0644]
none/tests/ppc32/jm-insns.stderr.exp [new file with mode: 0644]
none/tests/ppc32/jm-insns.stdout.exp [new file with mode: 0644]
none/tests/ppc32/jm-insns.vgtest [new file with mode: 0644]
none/tests/ppc32/jm-vmx.stderr.exp [new file with mode: 0644]
none/tests/ppc32/jm-vmx.stdout.exp [new file with mode: 0644]
none/tests/ppc32/jm-vmx.vgtest [new file with mode: 0644]

index 561c2940d2329e44de523515b96120a4a707be7b..9b9758081af78ca2e5433d9fbfec873fe60554dd 100644 (file)
@@ -2,10 +2,14 @@
 noinst_SCRIPTS = filter_stderr
 
 EXTRA_DIST = $(noinst_SCRIPTS) \
-       lsw.stderr.exp lsw.stdout.exp lsw.vgtest
+       lsw.stderr.exp lsw.stdout.exp lsw.vgtest \
+       jm-insns.stderr.exp jm-insns.stdout.exp jm-insns.vgtest
+       jm-vmx.stderr.exp   jm-vmx.stdout.exp   jm-vmx.vgtest
 
 check_PROGRAMS = \
-       lsw
+       lsw jm-insns
 
 AM_CFLAGS   = $(WERROR) -Winline -Wall -Wshadow -g -I$(top_srcdir)/include
 AM_CXXFLAGS = $(AM_CFLAGS)
+
+jm_insns_CFLAGS  =  -Winline -Wall -O -mregnames -DHAS_ALTIVEC -maltivec 
diff --git a/none/tests/ppc32/jm-insns.c b/none/tests/ppc32/jm-insns.c
new file mode 100644 (file)
index 0000000..80bc54d
--- /dev/null
@@ -0,0 +1,6433 @@
+
+/* HOW TO COMPILE:
+
+gcc -Winline -Wall -O -mregnames -DHAS_ALTIVEC -maltivec 
+
+This program is useful, but the register usage conventions in
+it are a complete dog.  In particular, _patch_op_imm has to
+be inlined, else you wind up with it segfaulting in
+completely different places due to corruption (of r20 in the
+case I chased).
+*/
+
+/*
+ * test-ppc.c:
+ * PPC tests for qemu-PPC CPU emulation checks
+ * 
+ * Copyright (c) 2005 Jocelyn Mayer
+ * 
+ *   This program is free software; you can redistribute it and/or
+ *   modify it under the terms of the GNU General Public License V2
+ *   as published by the Free Software Foundation
+ *
+ *   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
+ */
+
+/*
+ * Theory of operations:
+ * a few registers are reserved for the test program:
+ * r14 => r18
+ * f14 => f18
+ * I do preload test values in r14 thru r17 (or less, depending on the number
+ * of register operands needed), patch the test opcode if any immediate
+ * operands are required, execute the tested opcode.
+ * XER, CCR and FPSCR are cleared before every test.
+ * I always get the result in r17 and also save XER and CCR for fixed-point
+ * operations. I also check FPSCR for floating points operations.
+ *
+ * Improvments:
+ * a more clever FPSCR management is needed: for now, I always test
+ * the round-to-zero case. Other rounding modes also need to be tested.
+ */
+
+/*
+ * Operation details:
+ *
+ * The 'test' functions (via all_tests[]) are wrappers of single asm instns
+ *
+ * The 'loops' (e.g. int_loops) do the actual work:
+ *  - loops over as many arguments as the instn needs (regs | imms)
+ *     - sets up the environment (reset cr,xer, assign src regs...)
+ *     - maybe modifies the asm instn to test different imm args
+ *     - calls the test function
+ *     - retrieves relevant register data (rD,cr,xer,...)
+ *     - prints argument and result data.
+ *
+ * More specifically...
+ *
+ * all_tests[i] holds insn tests
+ *  - of which each holds: {instn_test_arr[], description, flags}
+ *
+ * flags hold 3 instn classifiers: {family, type, arg_type}
+ *
+ * // The main test loop:
+ * do_tests( user_ctl_flags ) {
+ *    foreach(curr_test = all_test[i]) {
+ *
+ *       // flags are used to control what tests are run:
+ *       if (curr_test->flags && !user_ctl_flags)
+ *          continue;
+ *
+ *       // a 'loop_family_arr' is chosen based on the 'family' flag...
+ *       switch(curr_test->flags->family) {
+ *       case x: loop_family_arr = int_loops;
+ *      ...
+ *       }
+ *
+ *       // ...and the actual test_loop to run is found by indexing into
+ *       // the loop_family_arr with the 'arg_type' flag:
+ *       test_loop = loop_family[curr_test->flags->arg_type]
+ *
+ *       // finally, loop over all instn tests for this test:
+ *       foreach (instn_test = curr_test->instn_test_arr[i]) {
+ *
+ *          // and call the test_loop with the current instn_test function,name
+ *          test_loop( instn_test->func, instn_test->name )
+ *       }
+ *    }
+ * }
+*/
+
+#include <stdint.h>
+
+register double f14 __asm__ ("f14");
+register double f15 __asm__ ("f15");
+register double f16 __asm__ ("f16");
+register double f17 __asm__ ("f17");
+register double f18 __asm__ ("f18");
+register uint32_t r14 __asm__ ("r14");
+register uint32_t r15 __asm__ ("r15");
+register uint32_t r16 __asm__ ("r16");
+register uint32_t r17 __asm__ ("r17");
+register uint32_t r18 __asm__ ("r18");
+
+#if defined (HAS_ALTIVEC)
+#   include <altivec.h>
+#endif
+#include <assert.h>
+#include <ctype.h>
+#include <fcntl.h>
+//#include <fenv.h>
+//#include <math.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include <malloc.h>
+
+/* -------------- BEGIN #include "test-ppc.h" -------------- */
+/*
+ * test-ppc.h:
+ * PPC tests for qemu-PPC CPU emulation checks - definitions
+ * 
+ * Copyright (c) 2005 Jocelyn Mayer
+ * 
+ *   This program is free software; you can redistribute it and/or
+ *   modify it under the terms of the GNU General Public License V2
+ *   as published by the Free Software Foundation
+ *
+ *   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
+ */
+
+#if !defined (__TEST_PPC_H__)
+#define __TEST_PPC_H__
+
+#include <stdint.h>
+
+typedef void (*test_func_t) (void);
+typedef struct test_t test_t;
+typedef struct test_table_t test_table_t;
+struct test_t {
+    test_func_t func;
+    const unsigned char *name;
+};
+
+struct test_table_t {
+    test_t *tests;
+    const unsigned char *name;
+    uint32_t flags;
+};
+
+typedef void (*test_loop_t) (const unsigned char *name, test_func_t func,
+                             uint32_t flags);
+
+enum test_flags {
+    /* Nb arguments */
+    PPC_ONE_ARG    = 0x00000001,
+    PPC_TWO_ARGS   = 0x00000002,
+    PPC_THREE_ARGS = 0x00000003,
+    PPC_CMP_ARGS   = 0x00000004,  // family: compare
+    PPC_CMPI_ARGS  = 0x00000005,  // family: compare
+    PPC_TWO_I16    = 0x00000006,  // family: arith/logical
+    PPC_SPECIAL    = 0x00000007,  // family: logical
+    PPC_LD_ARGS    = 0x00000008,  // family: ldst
+    PPC_LDX_ARGS   = 0x00000009,  // family: ldst
+    PPC_ST_ARGS    = 0x0000000A,  // family: ldst
+    PPC_STX_ARGS   = 0x0000000B,  // family: ldst
+    PPC_NB_ARGS    = 0x0000000F,
+    /* Type */
+    PPC_ARITH      = 0x00000100,
+    PPC_LOGICAL    = 0x00000200,
+    PPC_COMPARE    = 0x00000300,
+    PPC_CROP       = 0x00000400,
+    PPC_LDST       = 0x00000500,
+    PPC_TYPE       = 0x00000F00,
+    /* Family */
+    PPC_INTEGER    = 0x00010000,
+    PPC_FLOAT      = 0x00020000,
+    PPC_405        = 0x00030000,
+    PPC_ALTIVEC    = 0x00040000,
+    PPC_FALTIVEC   = 0x00050000,
+    PPC_FAMILY     = 0x000F0000,
+    /* Flags: these may be combined, so use separate bitfields. */
+    PPC_CR         = 0x01000000,
+    PPC_XER_CA     = 0x02000000,
+};
+
+#endif /* !defined (__TEST_PPC_H__) */
+
+/* -------------- END #include "test-ppc.h" -------------- */
+
+
+#define USAGE_SIMPLE
+//#define ALTIVEC_ARGS_LARGE
+
+
+//#define DEBUG_ARGS_BUILD
+#if defined (DEBUG_ARGS_BUILD)
+#define AB_DPRINTF(fmt, args...) do { fprintf(stderr, fmt , ##args); } while (0)
+#else
+#define AB_DPRINTF(fmt, args...) do { } while (0)
+#endif
+
+//#define DEBUG_FILTER
+#if defined (DEBUG_FILTER)
+#define FDPRINTF(fmt, args...) do { fprintf(stderr, fmt , ##args); } while (0)
+#else
+#define FDPRINTF(fmt, args...) do { } while (0)
+#endif
+
+
+#define unused __attribute__ (( unused ))
+
+/* -------------- BEGIN #include "ops-ppc.c" -------------- */
+/*
+ * WARNING:
+ * This file has been auto-generated by './gen-ppc' program
+ * Please don't edit by hand
+ */
+
+
+/* #include "test-ppc.h" */
+
+static void test_add (void)
+{
+    __asm__ __volatile__ ("add          17, 14, 15");
+}
+
+static void test_addo (void)
+{
+    __asm__ __volatile__ ("addo         17, 14, 15");
+}
+
+static void test_addc (void)
+{
+    __asm__ __volatile__ ("addc         17, 14, 15");
+}
+
+static void test_addco (void)
+{
+    __asm__ __volatile__ ("addco        17, 14, 15");
+}
+
+static void test_divw (void)
+{
+    __asm__ __volatile__ ("divw         17, 14, 15");
+}
+
+static void test_divwo (void)
+{
+    __asm__ __volatile__ ("divwo        17, 14, 15");
+}
+
+static void test_divwu (void)
+{
+    __asm__ __volatile__ ("divwu        17, 14, 15");
+}
+
+static void test_divwuo (void)
+{
+    __asm__ __volatile__ ("divwuo       17, 14, 15");
+}
+
+static void test_mulhw (void)
+{
+    __asm__ __volatile__ ("mulhw        17, 14, 15");
+}
+
+static void test_mulhwu (void)
+{
+    __asm__ __volatile__ ("mulhwu       17, 14, 15");
+}
+
+static void test_mullw (void)
+{
+    __asm__ __volatile__ ("mullw        17, 14, 15");
+}
+
+static void test_mullwo (void)
+{
+    __asm__ __volatile__ ("mullwo       17, 14, 15");
+}
+
+static void test_subf (void)
+{
+    __asm__ __volatile__ ("subf         17, 14, 15");
+}
+
+static void test_subfo (void)
+{
+    __asm__ __volatile__ ("subfo        17, 14, 15");
+}
+
+static void test_subfc (void)
+{
+    __asm__ __volatile__ ("subfc        17, 14, 15");
+}
+
+static void test_subfco (void)
+{
+    __asm__ __volatile__ ("subfco       17, 14, 15");
+}
+
+static test_t tests_ia_ops_two[] = {
+    { &test_add             , "         add", },
+    { &test_addo            , "        addo", },
+    { &test_addc            , "        addc", },
+    { &test_addco           , "       addco", },
+    { &test_divw            , "        divw", },
+    { &test_divwo           , "       divwo", },
+    { &test_divwu           , "       divwu", },
+    { &test_divwuo          , "      divwuo", },
+    { &test_mulhw           , "       mulhw", },
+    { &test_mulhwu          , "      mulhwu", },
+    { &test_mullw           , "       mullw", },
+    { &test_mullwo          , "      mullwo", },
+    { &test_subf            , "        subf", },
+    { &test_subfo           , "       subfo", },
+    { &test_subfc           , "       subfc", },
+    { &test_subfco          , "      subfco", },
+    { NULL,                   NULL,           },
+};
+
+static void test_add_ (void)
+{
+    __asm__ __volatile__ ("add.         17, 14, 15");
+}
+
+static void test_addo_ (void)
+{
+    __asm__ __volatile__ ("addo.        17, 14, 15");
+}
+
+static void test_addc_ (void)
+{
+    __asm__ __volatile__ ("addc.        17, 14, 15");
+}
+
+static void test_addco_ (void)
+{
+    __asm__ __volatile__ ("addco.       17, 14, 15");
+}
+
+static void test_divw_ (void)
+{
+    __asm__ __volatile__ ("divw.        17, 14, 15");
+}
+
+static void test_divwo_ (void)
+{
+    __asm__ __volatile__ ("divwo.       17, 14, 15");
+}
+
+static void test_divwu_ (void)
+{
+    __asm__ __volatile__ ("divwu.       17, 14, 15");
+}
+
+static void test_divwuo_ (void)
+{
+    __asm__ __volatile__ ("divwuo.      17, 14, 15");
+}
+
+static void test_mulhw_ (void)
+{
+    __asm__ __volatile__ ("mulhw.       17, 14, 15");
+}
+
+static void test_mulhwu_ (void)
+{
+    __asm__ __volatile__ ("mulhwu.      17, 14, 15");
+}
+
+static void test_mullw_ (void)
+{
+    __asm__ __volatile__ ("mullw.       17, 14, 15");
+}
+
+static void test_mullwo_ (void)
+{
+    __asm__ __volatile__ ("mullwo.      17, 14, 15");
+}
+
+static void test_subf_ (void)
+{
+    __asm__ __volatile__ ("subf.        17, 14, 15");
+}
+
+static void test_subfo_ (void)
+{
+    __asm__ __volatile__ ("subfo.       17, 14, 15");
+}
+
+static void test_subfc_ (void)
+{
+    __asm__ __volatile__ ("subfc.       17, 14, 15");
+}
+
+static void test_subfco_ (void)
+{
+    __asm__ __volatile__ ("subfco.      17, 14, 15");
+}
+
+static test_t tests_iar_ops_two[] = {
+    { &test_add_            , "        add.", },
+    { &test_addo_           , "       addo.", },
+    { &test_addc_           , "       addc.", },
+    { &test_addco_          , "      addco.", },
+    { &test_divw_           , "       divw.", },
+    { &test_divwo_          , "      divwo.", },
+    { &test_divwu_          , "      divwu.", },
+    { &test_divwuo_         , "     divwuo.", },
+    { &test_mulhw_          , "      mulhw.", },
+    { &test_mulhwu_         , "     mulhwu.", },
+    { &test_mullw_          , "      mullw.", },
+    { &test_mullwo_         , "     mullwo.", },
+    { &test_subf_           , "       subf.", },
+    { &test_subfo_          , "      subfo.", },
+    { &test_subfc_          , "      subfc.", },
+    { &test_subfco_         , "     subfco.", },
+    { NULL,                   NULL,           },
+};
+
+static void test_adde (void)
+{
+    __asm__ __volatile__ ("adde         17, 14, 15");
+}
+
+static void test_addeo (void)
+{
+    __asm__ __volatile__ ("addeo        17, 14, 15");
+}
+
+static void test_subfe (void)
+{
+    __asm__ __volatile__ ("subfe        17, 14, 15");
+}
+
+static void test_subfeo (void)
+{
+    __asm__ __volatile__ ("subfeo       17, 14, 15");
+}
+
+static test_t tests_iac_ops_two[] = {
+    { &test_adde            , "        adde", },
+    { &test_addeo           , "       addeo", },
+    { &test_subfe           , "       subfe", },
+    { &test_subfeo          , "      subfeo", },
+    { NULL,                   NULL,           },
+};
+
+static void test_adde_ (void)
+{
+    __asm__ __volatile__ ("adde.        17, 14, 15");
+}
+
+static void test_addeo_ (void)
+{
+    __asm__ __volatile__ ("addeo.       17, 14, 15");
+}
+
+static void test_subfe_ (void)
+{
+    __asm__ __volatile__ ("subfe.       17, 14, 15");
+}
+
+static void test_subfeo_ (void)
+{
+    __asm__ __volatile__ ("subfeo.      17, 14, 15");
+}
+
+static test_t tests_iacr_ops_two[] = {
+    { &test_adde_           , "       adde.", },
+    { &test_addeo_          , "      addeo.", },
+    { &test_subfe_          , "      subfe.", },
+    { &test_subfeo_         , "     subfeo.", },
+    { NULL,                   NULL,           },
+};
+
+static void test_and (void)
+{
+    __asm__ __volatile__ ("and          17, 14, 15");
+}
+
+static void test_andc (void)
+{
+    __asm__ __volatile__ ("andc         17, 14, 15");
+}
+
+static void test_eqv (void)
+{
+    __asm__ __volatile__ ("eqv          17, 14, 15");
+}
+
+static void test_nand (void)
+{
+    __asm__ __volatile__ ("nand         17, 14, 15");
+}
+
+static void test_nor (void)
+{
+    __asm__ __volatile__ ("nor          17, 14, 15");
+}
+
+static void test_or (void)
+{
+    __asm__ __volatile__ ("or           17, 14, 15");
+}
+
+static void test_orc (void)
+{
+    __asm__ __volatile__ ("orc          17, 14, 15");
+}
+
+static void test_xor (void)
+{
+    __asm__ __volatile__ ("xor          17, 14, 15");
+}
+
+static void test_slw (void)
+{
+    __asm__ __volatile__ ("slw          17, 14, 15");
+}
+
+static void test_sraw (void)
+{
+    __asm__ __volatile__ ("sraw         17, 14, 15");
+}
+
+static void test_srw (void)
+{
+    __asm__ __volatile__ ("srw          17, 14, 15");
+}
+
+static test_t tests_il_ops_two[] = {
+    { &test_and             , "         and", },
+    { &test_andc            , "        andc", },
+    { &test_eqv             , "         eqv", },
+    { &test_nand            , "        nand", },
+    { &test_nor             , "         nor", },
+    { &test_or              , "          or", },
+    { &test_orc             , "         orc", },
+    { &test_xor             , "         xor", },
+    { &test_slw             , "         slw", },
+    { &test_sraw            , "        sraw", },
+    { &test_srw             , "         srw", },
+    { NULL,                   NULL,           },
+};
+
+static void test_and_ (void)
+{
+    __asm__ __volatile__ ("and.         17, 14, 15");
+}
+
+static void test_andc_ (void)
+{
+    __asm__ __volatile__ ("andc.        17, 14, 15");
+}
+
+static void test_eqv_ (void)
+{
+    __asm__ __volatile__ ("eqv.         17, 14, 15");
+}
+
+static void test_nand_ (void)
+{
+    __asm__ __volatile__ ("nand.        17, 14, 15");
+}
+
+static void test_nor_ (void)
+{
+    __asm__ __volatile__ ("nor.         17, 14, 15");
+}
+
+static void test_or_ (void)
+{
+    __asm__ __volatile__ ("or.          17, 14, 15");
+}
+
+static void test_orc_ (void)
+{
+    __asm__ __volatile__ ("orc.         17, 14, 15");
+}
+
+static void test_xor_ (void)
+{
+    __asm__ __volatile__ ("xor.         17, 14, 15");
+}
+
+static void test_slw_ (void)
+{
+    __asm__ __volatile__ ("slw.         17, 14, 15");
+}
+
+static void test_sraw_ (void)
+{
+    __asm__ __volatile__ ("sraw.        17, 14, 15");
+}
+
+static void test_srw_ (void)
+{
+    __asm__ __volatile__ ("srw.         17, 14, 15");
+}
+
+static test_t tests_ilr_ops_two[] = {
+    { &test_and_            , "        and.", },
+    { &test_andc_           , "       andc.", },
+    { &test_eqv_            , "        eqv.", },
+    { &test_nand_           , "       nand.", },
+    { &test_nor_            , "        nor.", },
+    { &test_or_             , "         or.", },
+    { &test_orc_            , "        orc.", },
+    { &test_xor_            , "        xor.", },
+    { &test_slw_            , "        slw.", },
+    { &test_sraw_           , "       sraw.", },
+    { &test_srw_            , "        srw.", },
+    { NULL,                   NULL,           },
+};
+
+static void test_cmp (void)
+{
+    __asm__ __volatile__ ("cmp          2, 14, 15");
+}
+
+static void test_cmpl (void)
+{
+    __asm__ __volatile__ ("cmpl         2, 14, 15");
+}
+
+static test_t tests_icr_ops_two[] = {
+    { &test_cmp             , "         cmp", },
+    { &test_cmpl            , "        cmpl", },
+    { NULL,                   NULL,           },
+};
+
+static void test_cmpi (void)
+{
+    __asm__ __volatile__ ("cmpi         2, 14, 15");
+}
+
+static void test_cmpli (void)
+{
+    __asm__ __volatile__ ("cmpli        2, 14, 15");
+}
+
+static test_t tests_icr_ops_two_i16[] = {
+    { &test_cmpi            , "        cmpi", },
+    { &test_cmpli           , "       cmpli", },
+    { NULL,                   NULL,           },
+};
+
+static void test_addi (void)
+{
+    __asm__ __volatile__ ("addi         17, 14, 0");
+}
+
+static void test_addic (void)
+{
+    __asm__ __volatile__ ("addic        17, 14, 0");
+}
+
+static void test_addis (void)
+{
+    __asm__ __volatile__ ("addis        17, 14, 0");
+}
+
+static void test_mulli (void)
+{
+    __asm__ __volatile__ ("mulli        17, 14, 0");
+}
+
+static void test_subfic (void)
+{
+    __asm__ __volatile__ ("subfic       17, 14, 0");
+}
+
+static test_t tests_ia_ops_two_i16[] = {
+    { &test_addi            , "        addi", },
+    { &test_addic           , "       addic", },
+    { &test_addis           , "       addis", },
+    { &test_mulli           , "       mulli", },
+    { &test_subfic          , "      subfic", },
+    { NULL,                   NULL,           },
+};
+
+static void test_addic_ (void)
+{
+    __asm__ __volatile__ ("addic.       17, 14, 0");
+}
+
+static test_t tests_iar_ops_two_i16[] = {
+    { &test_addic_          , "      addic.", },
+    { NULL,                   NULL,           },
+};
+
+static void test_ori (void)
+{
+    __asm__ __volatile__ ("ori          17, 14, 0");
+}
+
+static void test_oris (void)
+{
+    __asm__ __volatile__ ("oris         17, 14, 0");
+}
+
+static void test_xori (void)
+{
+    __asm__ __volatile__ ("xori         17, 14, 0");
+}
+
+static void test_xoris (void)
+{
+    __asm__ __volatile__ ("xoris        17, 14, 0");
+}
+
+static test_t tests_il_ops_two_i16[] = {
+    { &test_ori             , "         ori", },
+    { &test_oris            , "        oris", },
+    { &test_xori            , "        xori", },
+    { &test_xoris           , "       xoris", },
+    { NULL,                   NULL,           },
+};
+
+static void test_andi_ (void)
+{
+    __asm__ __volatile__ ("andi.        17, 14, 0");
+}
+
+static void test_andis_ (void)
+{
+    __asm__ __volatile__ ("andis.       17, 14, 0");
+}
+
+static test_t tests_ilr_ops_two_i16[] = {
+    { &test_andi_           , "       andi.", },
+    { &test_andis_          , "      andis.", },
+    { NULL,                   NULL,           },
+};
+
+static void test_crand (void)
+{
+    __asm__ __volatile__ ("crand        17, 14, 15");
+}
+
+static void test_crandc (void)
+{
+    __asm__ __volatile__ ("crandc       17, 14, 15");
+}
+
+static void test_creqv (void)
+{
+    __asm__ __volatile__ ("creqv        17, 14, 15");
+}
+
+static void test_crnand (void)
+{
+    __asm__ __volatile__ ("crnand       17, 14, 15");
+}
+
+static void test_crnor (void)
+{
+    __asm__ __volatile__ ("crnor        17, 14, 15");
+}
+
+static void test_cror (void)
+{
+    __asm__ __volatile__ ("cror         17, 14, 15");
+}
+
+static void test_crorc (void)
+{
+    __asm__ __volatile__ ("crorc        17, 14, 15");
+}
+
+static void test_crxor (void)
+{
+    __asm__ __volatile__ ("crxor        17, 14, 15");
+}
+
+static test_t tests_crl_ops_two[] = {
+    { &test_crand           , "       crand", },
+    { &test_crandc          , "      crandc", },
+    { &test_creqv           , "       creqv", },
+    { &test_crnand          , "      crnand", },
+    { &test_crnor           , "       crnor", },
+    { &test_cror            , "        cror", },
+    { &test_crorc           , "       crorc", },
+    { &test_crxor           , "       crxor", },
+    { NULL,                   NULL,           },
+};
+
+static void test_addme (void)
+{
+    __asm__ __volatile__ ("addme        17, 14");
+}
+
+static void test_addmeo (void)
+{
+    __asm__ __volatile__ ("addmeo       17, 14");
+}
+
+static void test_addze (void)
+{
+    __asm__ __volatile__ ("addze        17, 14");
+}
+
+static void test_addzeo (void)
+{
+    __asm__ __volatile__ ("addzeo       17, 14");
+}
+
+static void test_subfme (void)
+{
+    __asm__ __volatile__ ("subfme       17, 14");
+}
+
+static void test_subfmeo (void)
+{
+    __asm__ __volatile__ ("subfmeo      17, 14");
+}
+
+static void test_subfze (void)
+{
+    __asm__ __volatile__ ("subfze       17, 14");
+}
+
+static void test_subfzeo (void)
+{
+    __asm__ __volatile__ ("subfzeo      17, 14");
+}
+
+static test_t tests_iac_ops_one[] = {
+    { &test_addme           , "       addme", },
+    { &test_addmeo          , "      addmeo", },
+    { &test_addze           , "       addze", },
+    { &test_addzeo          , "      addzeo", },
+    { &test_subfme          , "      subfme", },
+    { &test_subfmeo         , "     subfmeo", },
+    { &test_subfze          , "      subfze", },
+    { &test_subfzeo         , "     subfzeo", },
+    { NULL,                   NULL,           },
+};
+
+static void test_addme_ (void)
+{
+    __asm__ __volatile__ ("addme.       17, 14");
+}
+
+static void test_addmeo_ (void)
+{
+    __asm__ __volatile__ ("addmeo.      17, 14");
+}
+
+static void test_addze_ (void)
+{
+    __asm__ __volatile__ ("addze.       17, 14");
+}
+
+static void test_addzeo_ (void)
+{
+    __asm__ __volatile__ ("addzeo.      17, 14");
+}
+
+static void test_subfme_ (void)
+{
+    __asm__ __volatile__ ("subfme.      17, 14");
+}
+
+static void test_subfmeo_ (void)
+{
+    __asm__ __volatile__ ("subfmeo.     17, 14");
+}
+
+static void test_subfze_ (void)
+{
+    __asm__ __volatile__ ("subfze.      17, 14");
+}
+
+static void test_subfzeo_ (void)
+{
+    __asm__ __volatile__ ("subfzeo.     17, 14");
+}
+
+static test_t tests_iacr_ops_one[] = {
+    { &test_addme_          , "      addme.", },
+    { &test_addmeo_         , "     addmeo.", },
+    { &test_addze_          , "      addze.", },
+    { &test_addzeo_         , "     addzeo.", },
+    { &test_subfme_         , "     subfme.", },
+    { &test_subfmeo_        , "    subfmeo.", },
+    { &test_subfze_         , "     subfze.", },
+    { &test_subfzeo_        , "    subfzeo.", },
+    { NULL,                   NULL,           },
+};
+
+static void test_cntlzw (void)
+{
+    __asm__ __volatile__ ("cntlzw       17, 14");
+}
+
+static void test_extsb (void)
+{
+    __asm__ __volatile__ ("extsb        17, 14");
+}
+
+static void test_extsh (void)
+{
+    __asm__ __volatile__ ("extsh        17, 14");
+}
+
+static void test_neg (void)
+{
+    __asm__ __volatile__ ("neg          17, 14");
+}
+
+static void test_nego (void)
+{
+    __asm__ __volatile__ ("nego         17, 14");
+}
+
+static test_t tests_il_ops_one[] = {
+    { &test_cntlzw          , "      cntlzw", },
+    { &test_extsb           , "       extsb", },
+    { &test_extsh           , "       extsh", },
+    { &test_neg             , "         neg", },
+    { &test_nego            , "        nego", },
+    { NULL,                   NULL,           },
+};
+
+static void test_cntlzw_ (void)
+{
+    __asm__ __volatile__ ("cntlzw.      17, 14");
+}
+
+static void test_extsb_ (void)
+{
+    __asm__ __volatile__ ("extsb.       17, 14");
+}
+
+static void test_extsh_ (void)
+{
+    __asm__ __volatile__ ("extsh.       17, 14");
+}
+
+static void test_neg_ (void)
+{
+    __asm__ __volatile__ ("neg.         17, 14");
+}
+
+static void test_nego_ (void)
+{
+    __asm__ __volatile__ ("nego.        17, 14");
+}
+
+static test_t tests_ilr_ops_one[] = {
+    { &test_cntlzw_         , "     cntlzw.", },
+    { &test_extsb_          , "      extsb.", },
+    { &test_extsh_          , "      extsh.", },
+    { &test_neg_            , "        neg.", },
+    { &test_nego_           , "       nego.", },
+    { NULL,                   NULL,           },
+};
+
+static void test_rlwimi (void)
+{
+    __asm__ __volatile__ ("rlwimi       17, 14, 0, 0, 0");
+}
+
+static void test_rlwinm (void)
+{
+    __asm__ __volatile__ ("rlwinm       17, 14, 0, 0, 0");
+}
+
+static void test_rlwnm (void)
+{
+    __asm__ __volatile__ ("rlwnm        17, 14, 15, 0, 0");
+}
+
+static void test_srawi (void)
+{
+    __asm__ __volatile__ ("srawi        17, 14, 0");
+}
+
+static void test_mfcr (void)
+{
+    __asm__ __volatile__ ("mfcr         17");
+}
+
+static void test_mfspr (void)
+{
+    __asm__ __volatile__ ("mfspr        17, 1");
+}
+
+static void test_mtspr (void)
+{
+    __asm__ __volatile__ ("mtspr        1, 14");
+}
+
+static test_t tests_il_ops_spe[] = {
+    { &test_rlwimi          , "      rlwimi", },
+    { &test_rlwinm          , "      rlwinm", },
+    { &test_rlwnm           , "       rlwnm", },
+    { &test_srawi           , "       srawi", },
+    { &test_mfcr            , "        mfcr", },
+    { &test_mfspr           , "       mfspr", },
+    { &test_mtspr           , "       mtspr", },
+    { NULL,                   NULL,           },
+};
+
+static void test_rlwimi_ (void)
+{
+    __asm__ __volatile__ ("rlwimi.      17, 14, 0, 0, 0");
+}
+
+static void test_rlwinm_ (void)
+{
+    __asm__ __volatile__ ("rlwinm.      17, 14, 0, 0, 0");
+}
+
+static void test_rlwnm_ (void)
+{
+    __asm__ __volatile__ ("rlwnm.       17, 14, 15, 0, 0");
+}
+
+static void test_srawi_ (void)
+{
+    __asm__ __volatile__ ("srawi.       17, 14, 0");
+}
+
+static void test_mcrf (void)
+{
+    __asm__ __volatile__ ("mcrf         0, 0");
+}
+
+static void test_mcrxr (void)
+{
+    __asm__ __volatile__ ("mcrxr        0");
+}
+
+static void test_mtcrf (void)
+{
+    __asm__ __volatile__ ("mtcrf        0, 14");
+}
+
+static test_t tests_ilr_ops_spe[] = {
+    { &test_rlwimi_         , "     rlwimi.", },
+    { &test_rlwinm_         , "     rlwinm.", },
+    { &test_rlwnm_          , "      rlwnm.", },
+    { &test_srawi_          , "      srawi.", },
+    { &test_mcrf            , "        mcrf", },
+    { &test_mcrxr           , "       mcrxr", },
+    { &test_mtcrf           , "       mtcrf", },
+    { NULL,                   NULL,           },
+};
+
+static void test_lbz (void)
+{
+    __asm__ __volatile__ ("lbz          17,0(14)");
+}
+
+static void test_lbzu (void)
+{
+    __asm__ __volatile__ ("lbzu         17,0(14)");
+}
+
+static void test_lha (void)
+{
+    __asm__ __volatile__ ("lha          17,0(14)");
+}
+
+static void test_lhau (void)
+{
+    __asm__ __volatile__ ("lhau         17,0(14)");
+}
+
+static void test_lhz (void)
+{
+    __asm__ __volatile__ ("lhz          17,0(14)");
+}
+
+static void test_lhzu (void)
+{
+    __asm__ __volatile__ ("lhzu         17,0(14)");
+}
+
+static void test_lwz (void)
+{
+    __asm__ __volatile__ ("lwz          17,0(14)");
+}
+
+static void test_lwzu (void)
+{
+    __asm__ __volatile__ ("lwzu         17,0(14)");
+}
+
+static test_t tests_ild_ops_two_i16[] = {
+    { &test_lbz             , "         lbz", },
+    { &test_lbzu            , "        lbzu", },
+    { &test_lha             , "         lha", },
+    { &test_lhau            , "        lhau", },
+    { &test_lhz             , "         lhz", },
+    { &test_lhzu            , "        lhzu", },
+    { &test_lwz             , "         lwz", },
+    { &test_lwzu            , "        lwzu", },
+    { NULL,                   NULL,           },
+};
+
+static void test_lbzx (void)
+{
+    __asm__ __volatile__ ("lbzx         17,14,15");
+}
+
+static void test_lbzux (void)
+{
+    __asm__ __volatile__ ("lbzux        17,14,15");
+}
+
+static void test_lhax (void)
+{
+    __asm__ __volatile__ ("lhax         17,14,15");
+}
+
+static void test_lhaux (void)
+{
+    __asm__ __volatile__ ("lhaux        17,14,15");
+}
+
+static void test_lhzx (void)
+{
+    __asm__ __volatile__ ("lhzx         17,14,15");
+}
+
+static void test_lhzux (void)
+{
+    __asm__ __volatile__ ("lhzux        17,14,15");
+}
+
+static void test_lwzx (void)
+{
+    __asm__ __volatile__ ("lwzx         17,14,15");
+}
+
+static void test_lwzux (void)
+{
+    __asm__ __volatile__ ("lwzux        17,14,15");
+}
+
+static test_t tests_ild_ops_two[] = {
+    { &test_lbzx            , "        lbzx", },
+    { &test_lbzux           , "       lbzux", },
+    { &test_lhax            , "        lhax", },
+    { &test_lhaux           , "       lhaux", },
+    { &test_lhzx            , "        lhzx", },
+    { &test_lhzux           , "       lhzux", },
+    { &test_lwzx            , "        lwzx", },
+    { &test_lwzux           , "       lwzux", },
+    { NULL,                   NULL,           },
+};
+
+static void test_stb (void)
+{
+    __asm__ __volatile__ ("stb          14,0(15)");
+}
+
+static void test_stbu (void)
+{
+    __asm__ __volatile__ ("stbu         14,0(15)");
+}
+
+static void test_sth (void)
+{
+    __asm__ __volatile__ ("sth          14,0(15)");
+}
+
+static void test_sthu (void)
+{
+    __asm__ __volatile__ ("sthu         14,0(15)");
+}
+
+static void test_stw (void)
+{
+    __asm__ __volatile__ ("stw          14,0(15)");
+}
+
+static void test_stwu (void)
+{
+    __asm__ __volatile__ ("stwu         14,0(15)");
+}
+
+static test_t tests_ist_ops_three_i16[] = {
+    { &test_stb             , "         stb", },
+    { &test_stbu            , "        stbu", },
+    { &test_sth             , "         sth", },
+    { &test_sthu            , "        sthu", },
+    { &test_stw             , "         stw", },
+    { &test_stwu            , "        stwu", },
+    { NULL,                   NULL,           },
+};
+
+static void test_stbx (void)
+{
+    __asm__ __volatile__ ("stbx         14,15,16");
+}
+
+static void test_stbux (void)
+{
+    __asm__ __volatile__ ("stbux        14,15,16");
+}
+
+static void test_sthx (void)
+{
+    __asm__ __volatile__ ("sthx         14,15,16");
+}
+
+static void test_sthux (void)
+{
+    __asm__ __volatile__ ("sthux        14,15,16");
+}
+
+static void test_stwx (void)
+{
+    __asm__ __volatile__ ("stwx         14,15,16");
+}
+
+static void test_stwux (void)
+{
+    __asm__ __volatile__ ("stwux        14,15,16");
+}
+
+static test_t tests_ist_ops_three[] = {
+    { &test_stbx            , "        stbx", },
+    { &test_stbux           , "       stbux", },
+    { &test_sthx            , "        sthx", },
+    { &test_sthux           , "       sthux", },
+    { &test_stwx            , "        stwx", },
+    { &test_stwux           , "       stwux", },
+    { NULL,                   NULL,           },
+};
+
+#if !defined (NO_FLOAT)
+static void test_fsel (void)
+{
+    __asm__ __volatile__ ("fsel         17, 14, 15, 16");
+}
+
+static void test_fmadd (void)
+{
+    __asm__ __volatile__ ("fmadd        17, 14, 15, 16");
+}
+
+static void test_fmadds (void)
+{
+    __asm__ __volatile__ ("fmadds       17, 14, 15, 16");
+}
+
+static void test_fmsub (void)
+{
+    __asm__ __volatile__ ("fmsub        17, 14, 15, 16");
+}
+
+static void test_fmsubs (void)
+{
+    __asm__ __volatile__ ("fmsubs       17, 14, 15, 16");
+}
+
+static void test_fnmadd (void)
+{
+    __asm__ __volatile__ ("fnmadd       17, 14, 15, 16");
+}
+
+static void test_fnmadds (void)
+{
+    __asm__ __volatile__ ("fnmadds      17, 14, 15, 16");
+}
+
+static void test_fnmsub (void)
+{
+    __asm__ __volatile__ ("fnmsub       17, 14, 15, 16");
+}
+
+static void test_fnmsubs (void)
+{
+    __asm__ __volatile__ ("fnmsubs      17, 14, 15, 16");
+}
+
+static test_t tests_fa_ops_three[] = {
+    { &test_fsel            , "        fsel", },
+    { &test_fmadd           , "       fmadd", },
+    { &test_fmadds          , "      fmadds", },
+    { &test_fmsub           , "       fmsub", },
+    { &test_fmsubs          , "      fmsubs", },
+    { &test_fnmadd          , "      fnmadd", },
+    { &test_fnmadds         , "     fnmadds", },
+    { &test_fnmsub          , "      fnmsub", },
+    { &test_fnmsubs         , "     fnmsubs", },
+    { NULL,                   NULL,           },
+};
+#endif /* !defined (NO_FLOAT) */
+
+#if !defined (NO_FLOAT)
+static void test_fsel_ (void)
+{
+    __asm__ __volatile__ ("fsel.        17, 14, 15, 16");
+}
+
+static void test_fmadd_ (void)
+{
+    __asm__ __volatile__ ("fmadd.       17, 14, 15, 16");
+}
+
+static void test_fmadds_ (void)
+{
+    __asm__ __volatile__ ("fmadds.      17, 14, 15, 16");
+}
+
+static void test_fmsub_ (void)
+{
+    __asm__ __volatile__ ("fmsub.       17, 14, 15, 16");
+}
+
+static void test_fmsubs_ (void)
+{
+    __asm__ __volatile__ ("fmsubs.      17, 14, 15, 16");
+}
+
+static void test_fnmadd_ (void)
+{
+    __asm__ __volatile__ ("fnmadd.      17, 14, 15, 16");
+}
+
+static void test_fnmadds_ (void)
+{
+    __asm__ __volatile__ ("fnmadds.     17, 14, 15, 16");
+}
+
+static void test_fnmsub_ (void)
+{
+    __asm__ __volatile__ ("fnmsub.      17, 14, 15, 16");
+}
+
+static void test_fnmsubs_ (void)
+{
+    __asm__ __volatile__ ("fnmsubs.     17, 14, 15, 16");
+}
+
+static test_t tests_far_ops_three[] = {
+    { &test_fsel_           , "       fsel.", },
+    { &test_fmadd_          , "      fmadd.", },
+    { &test_fmadds_         , "     fmadds.", },
+    { &test_fmsub_          , "      fmsub.", },
+    { &test_fmsubs_         , "     fmsubs.", },
+    { &test_fnmadd_         , "     fnmadd.", },
+    { &test_fnmadds_        , "    fnmadds.", },
+    { &test_fnmsub_         , "     fnmsub.", },
+    { &test_fnmsubs_        , "    fnmsubs.", },
+    { NULL,                   NULL,           },
+};
+#endif /* !defined (NO_FLOAT) */
+
+#if !defined (NO_FLOAT)
+static void test_fadd (void)
+{
+    __asm__ __volatile__ ("fadd         17, 14, 15");
+}
+
+static void test_fadds (void)
+{
+    __asm__ __volatile__ ("fadds        17, 14, 15");
+}
+
+static void test_fsub (void)
+{
+    __asm__ __volatile__ ("fsub         17, 14, 15");
+}
+
+static void test_fsubs (void)
+{
+    __asm__ __volatile__ ("fsubs        17, 14, 15");
+}
+
+static void test_fmul (void)
+{
+    __asm__ __volatile__ ("fmul         17, 14, 15");
+}
+
+static void test_fmuls (void)
+{
+    __asm__ __volatile__ ("fmuls        17, 14, 15");
+}
+
+static void test_fdiv (void)
+{
+    __asm__ __volatile__ ("fdiv         17, 14, 15");
+}
+
+static void test_fdivs (void)
+{
+    __asm__ __volatile__ ("fdivs        17, 14, 15");
+}
+
+static test_t tests_fa_ops_two[] = {
+    { &test_fadd            , "        fadd", },
+    { &test_fadds           , "       fadds", },
+    { &test_fsub            , "        fsub", },
+    { &test_fsubs           , "       fsubs", },
+    { &test_fmul            , "        fmul", },
+    { &test_fmuls           , "       fmuls", },
+    { &test_fdiv            , "        fdiv", },
+    { &test_fdivs           , "       fdivs", },
+    { NULL,                   NULL,           },
+};
+#endif /* !defined (NO_FLOAT) */
+
+#if !defined (NO_FLOAT)
+static void test_fadd_ (void)
+{
+    __asm__ __volatile__ ("fadd.        17, 14, 15");
+}
+
+static void test_fadds_ (void)
+{
+    __asm__ __volatile__ ("fadds.       17, 14, 15");
+}
+
+static void test_fsub_ (void)
+{
+    __asm__ __volatile__ ("fsub.        17, 14, 15");
+}
+
+static void test_fsubs_ (void)
+{
+    __asm__ __volatile__ ("fsubs.       17, 14, 15");
+}
+
+static void test_fmul_ (void)
+{
+    __asm__ __volatile__ ("fmul.        17, 14, 15");
+}
+
+static void test_fmuls_ (void)
+{
+    __asm__ __volatile__ ("fmuls.       17, 14, 15");
+}
+
+static void test_fdiv_ (void)
+{
+    __asm__ __volatile__ ("fdiv.        17, 14, 15");
+}
+
+static void test_fdivs_ (void)
+{
+    __asm__ __volatile__ ("fdivs.       17, 14, 15");
+}
+
+static test_t tests_far_ops_two[] = {
+    { &test_fadd_           , "       fadd.", },
+    { &test_fadds_          , "      fadds.", },
+    { &test_fsub_           , "       fsub.", },
+    { &test_fsubs_          , "      fsubs.", },
+    { &test_fmul_           , "       fmul.", },
+    { &test_fmuls_          , "      fmuls.", },
+    { &test_fdiv_           , "       fdiv.", },
+    { &test_fdivs_          , "      fdivs.", },
+    { NULL,                   NULL,           },
+};
+#endif /* !defined (NO_FLOAT) */
+
+#if !defined (NO_FLOAT)
+static void test_fcmpo (void)
+{
+    __asm__ __volatile__ ("fcmpo        2, 14, 15");
+}
+
+static void test_fcmpu (void)
+{
+    __asm__ __volatile__ ("fcmpu        2, 14, 15");
+}
+
+static test_t tests_fcr_ops_two[] = {
+    { &test_fcmpo           , "       fcmpo", },
+    { &test_fcmpu           , "       fcmpu", },
+    { NULL,                   NULL,           },
+};
+#endif /* !defined (NO_FLOAT) */
+
+#if !defined (NO_FLOAT)
+static void test_fres (void)
+{
+    __asm__ __volatile__ ("fres         17, 14");
+}
+
+static void test_frsqrte (void)
+{
+    __asm__ __volatile__ ("frsqrte      17, 14");
+}
+
+static void test_frsp (void)
+{
+    __asm__ __volatile__ ("frsp         17, 14");
+}
+
+static void test_fctiw (void)
+{
+    __asm__ __volatile__ ("fctiw        17, 14");
+}
+
+static void test_fctiwz (void)
+{
+    __asm__ __volatile__ ("fctiwz       17, 14");
+}
+
+static void test_fmr (void)
+{
+    __asm__ __volatile__ ("fmr          17, 14");
+}
+
+static void test_fneg (void)
+{
+    __asm__ __volatile__ ("fneg         17, 14");
+}
+
+static void test_fabs (void)
+{
+    __asm__ __volatile__ ("fabs         17, 14");
+}
+
+static void test_fnabs (void)
+{
+    __asm__ __volatile__ ("fnabs        17, 14");
+}
+
+static test_t tests_fa_ops_one[] = {
+    { &test_fres            , "        fres", },
+    { &test_frsqrte         , "     frsqrte", },
+    { &test_frsp            , "        frsp", },
+    { &test_fctiw           , "       fctiw", },
+    { &test_fctiwz          , "      fctiwz", },
+    { &test_fmr             , "         fmr", },
+    { &test_fneg            , "        fneg", },
+    { &test_fabs            , "        fabs", },
+    { &test_fnabs           , "       fnabs", },
+    { NULL,                   NULL,           },
+};
+#endif /* !defined (NO_FLOAT) */
+
+#if !defined (NO_FLOAT)
+static void test_fres_ (void)
+{
+    __asm__ __volatile__ ("fres.        17, 14");
+}
+
+static void test_frsqrte_ (void)
+{
+    __asm__ __volatile__ ("frsqrte.     17, 14");
+}
+
+static void test_frsp_ (void)
+{
+    __asm__ __volatile__ ("frsp.        17, 14");
+}
+
+static void test_fctiw_ (void)
+{
+    __asm__ __volatile__ ("fctiw.       17, 14");
+}
+
+static void test_fctiwz_ (void)
+{
+    __asm__ __volatile__ ("fctiwz.      17, 14");
+}
+
+static void test_fmr_ (void)
+{
+    __asm__ __volatile__ ("fmr.         17, 14");
+}
+
+static void test_fneg_ (void)
+{
+    __asm__ __volatile__ ("fneg.        17, 14");
+}
+
+static void test_fabs_ (void)
+{
+    __asm__ __volatile__ ("fabs.        17, 14");
+}
+
+static void test_fnabs_ (void)
+{
+    __asm__ __volatile__ ("fnabs.       17, 14");
+}
+
+static test_t tests_far_ops_one[] = {
+    { &test_fres_           , "       fres.", },
+    { &test_frsqrte_        , "    frsqrte.", },
+    { &test_frsp_           , "       frsp.", },
+    { &test_fctiw_          , "      fctiw.", },
+    { &test_fctiwz_         , "     fctiwz.", },
+    { &test_fmr_            , "        fmr.", },
+    { &test_fneg_           , "       fneg.", },
+    { &test_fabs_           , "       fabs.", },
+    { &test_fnabs_          , "      fnabs.", },
+    { NULL,                   NULL,           },
+};
+#endif /* !defined (NO_FLOAT) */
+
+#if !defined (NO_FLOAT)
+static test_t tests_fl_ops_spe[] = {
+    { NULL,                   NULL,           },
+};
+#endif /* !defined (NO_FLOAT) */
+
+#if !defined (NO_FLOAT)
+static test_t tests_flr_ops_spe[] = {
+    { NULL,                   NULL,           },
+};
+#endif /* !defined (NO_FLOAT) */
+
+#if defined (HAS_ALTIVEC)
+static void test_vmhaddshs (void)
+{
+    __asm__ __volatile__ ("vmhaddshs    17, 14, 15, 16");
+}
+
+static void test_vmhraddshs (void)
+{
+    __asm__ __volatile__ ("vmhraddshs   17, 14, 15, 16");
+}
+
+static void test_vmladduhm (void)
+{
+    __asm__ __volatile__ ("vmladduhm    17, 14, 15, 16");
+}
+
+static void test_vmsumubm (void)
+{
+    __asm__ __volatile__ ("vmsumubm     17, 14, 15, 16");
+}
+
+static void test_vmsumuhm (void)
+{
+    __asm__ __volatile__ ("vmsumuhm     17, 14, 15, 16");
+}
+
+static void test_vmsumshs (void)
+{
+    __asm__ __volatile__ ("vmsumshs     17, 14, 15, 16");
+}
+
+static void test_vmsumuhs (void)
+{
+    __asm__ __volatile__ ("vmsumuhs     17, 14, 15, 16");
+}
+
+static void test_vmsummbm (void)
+{
+    __asm__ __volatile__ ("vmsummbm     17, 14, 15, 16");
+}
+
+static void test_vmsumshm (void)
+{
+    __asm__ __volatile__ ("vmsumshm     17, 14, 15, 16");
+}
+
+static test_t tests_aa_ops_three[] = {
+    { &test_vmhaddshs       , "   vmhaddshs", },
+    { &test_vmhraddshs      , "  vmhraddshs", },
+    { &test_vmladduhm       , "   vmladduhm", },
+    { &test_vmsumubm        , "    vmsumubm", },
+    { &test_vmsumuhm        , "    vmsumuhm", },
+    { &test_vmsumshs        , "    vmsumshs", },
+    { &test_vmsumuhs        , "    vmsumuhs", },
+    { &test_vmsummbm        , "    vmsummbm", },
+    { &test_vmsumshm        , "    vmsumshm", },
+    { NULL,                   NULL,           },
+};
+#endif /* defined (HAS_ALTIVEC) */
+
+#if defined (HAS_ALTIVEC)
+static void test_vperm (void)
+{
+    __asm__ __volatile__ ("vperm        17, 14, 15, 16");
+}
+
+static void test_vsel (void)
+{
+    __asm__ __volatile__ ("vsel         17, 14, 15, 16");
+}
+
+static test_t tests_al_ops_three[] = {
+    { &test_vperm           , "       vperm", },
+    { &test_vsel            , "        vsel", },
+    { NULL,                   NULL,           },
+};
+#endif /* defined (HAS_ALTIVEC) */
+
+#if defined (HAS_ALTIVEC)
+static void test_vaddubm (void)
+{
+    __asm__ __volatile__ ("vaddubm      17, 14, 15");
+}
+
+static void test_vadduhm (void)
+{
+    __asm__ __volatile__ ("vadduhm      17, 14, 15");
+}
+
+static void test_vadduwm (void)
+{
+    __asm__ __volatile__ ("vadduwm      17, 14, 15");
+}
+
+static void test_vaddubs (void)
+{
+    __asm__ __volatile__ ("vaddubs      17, 14, 15");
+}
+
+static void test_vadduhs (void)
+{
+    __asm__ __volatile__ ("vadduhs      17, 14, 15");
+}
+
+static void test_vadduws (void)
+{
+    __asm__ __volatile__ ("vadduws      17, 14, 15");
+}
+
+static void test_vaddsbs (void)
+{
+    __asm__ __volatile__ ("vaddsbs      17, 14, 15");
+}
+
+static void test_vaddshs (void)
+{
+    __asm__ __volatile__ ("vaddshs      17, 14, 15");
+}
+
+static void test_vaddsws (void)
+{
+    __asm__ __volatile__ ("vaddsws      17, 14, 15");
+}
+
+static void test_vaddcuw (void)
+{
+    __asm__ __volatile__ ("vaddcuw      17, 14, 15");
+}
+
+static void test_vsububm (void)
+{
+    __asm__ __volatile__ ("vsububm      17, 14, 15");
+}
+
+static void test_vsubuhm (void)
+{
+    __asm__ __volatile__ ("vsubuhm      17, 14, 15");
+}
+
+static void test_vsubuwm (void)
+{
+    __asm__ __volatile__ ("vsubuwm      17, 14, 15");
+}
+
+static void test_vsububs (void)
+{
+    __asm__ __volatile__ ("vsububs      17, 14, 15");
+}
+
+static void test_vsubuhs (void)
+{
+    __asm__ __volatile__ ("vsubuhs      17, 14, 15");
+}
+
+static void test_vsubuws (void)
+{
+    __asm__ __volatile__ ("vsubuws      17, 14, 15");
+}
+
+static void test_vsubsbs (void)
+{
+    __asm__ __volatile__ ("vsubsbs      17, 14, 15");
+}
+
+static void test_vsubshs (void)
+{
+    __asm__ __volatile__ ("vsubshs      17, 14, 15");
+}
+
+static void test_vsubsws (void)
+{
+    __asm__ __volatile__ ("vsubsws      17, 14, 15");
+}
+
+static void test_vsubcuw (void)
+{
+    __asm__ __volatile__ ("vsubcuw      17, 14, 15");
+}
+
+static void test_vmuloub (void)
+{
+    __asm__ __volatile__ ("vmuloub      17, 14, 15");
+}
+
+static void test_vmulouh (void)
+{
+    __asm__ __volatile__ ("vmulouh      17, 14, 15");
+}
+
+static void test_vmulosb (void)
+{
+    __asm__ __volatile__ ("vmulosb      17, 14, 15");
+}
+
+static void test_vmulosh (void)
+{
+    __asm__ __volatile__ ("vmulosh      17, 14, 15");
+}
+
+static void test_vmuleub (void)
+{
+    __asm__ __volatile__ ("vmuleub      17, 14, 15");
+}
+
+static void test_vmuleuh (void)
+{
+    __asm__ __volatile__ ("vmuleuh      17, 14, 15");
+}
+
+static void test_vmulesb (void)
+{
+    __asm__ __volatile__ ("vmulesb      17, 14, 15");
+}
+
+static void test_vmulesh (void)
+{
+    __asm__ __volatile__ ("vmulesh      17, 14, 15");
+}
+
+static void test_vsumsws (void)
+{
+    __asm__ __volatile__ ("vsumsws      17, 14, 15");
+}
+
+static void test_vsum2sws (void)
+{
+    __asm__ __volatile__ ("vsum2sws     17, 14, 15");
+}
+
+static void test_vsum4ubs (void)
+{
+    __asm__ __volatile__ ("vsum4ubs     17, 14, 15");
+}
+
+static void test_vsum4sbs (void)
+{
+    __asm__ __volatile__ ("vsum4sbs     17, 14, 15");
+}
+
+static void test_vsum4shs (void)
+{
+    __asm__ __volatile__ ("vsum4shs     17, 14, 15");
+}
+
+static void test_vavgub (void)
+{
+    __asm__ __volatile__ ("vavgub       17, 14, 15");
+}
+
+static void test_vavguh (void)
+{
+    __asm__ __volatile__ ("vavguh       17, 14, 15");
+}
+
+static void test_vavguw (void)
+{
+    __asm__ __volatile__ ("vavguw       17, 14, 15");
+}
+
+static void test_vavgsb (void)
+{
+    __asm__ __volatile__ ("vavgsb       17, 14, 15");
+}
+
+static void test_vavgsh (void)
+{
+    __asm__ __volatile__ ("vavgsh       17, 14, 15");
+}
+
+static void test_vavgsw (void)
+{
+    __asm__ __volatile__ ("vavgsw       17, 14, 15");
+}
+
+static void test_vmaxub (void)
+{
+    __asm__ __volatile__ ("vmaxub       17, 14, 15");
+}
+
+static void test_vmaxuh (void)
+{
+    __asm__ __volatile__ ("vmaxuh       17, 14, 15");
+}
+
+static void test_vmaxuw (void)
+{
+    __asm__ __volatile__ ("vmaxuw       17, 14, 15");
+}
+
+static void test_vmaxsb (void)
+{
+    __asm__ __volatile__ ("vmaxsb       17, 14, 15");
+}
+
+static void test_vmaxsh (void)
+{
+    __asm__ __volatile__ ("vmaxsh       17, 14, 15");
+}
+
+static void test_vmaxsw (void)
+{
+    __asm__ __volatile__ ("vmaxsw       17, 14, 15");
+}
+
+static void test_vminub (void)
+{
+    __asm__ __volatile__ ("vminub       17, 14, 15");
+}
+
+static void test_vminuh (void)
+{
+    __asm__ __volatile__ ("vminuh       17, 14, 15");
+}
+
+static void test_vminuw (void)
+{
+    __asm__ __volatile__ ("vminuw       17, 14, 15");
+}
+
+static void test_vminsb (void)
+{
+    __asm__ __volatile__ ("vminsb       17, 14, 15");
+}
+
+static void test_vminsh (void)
+{
+    __asm__ __volatile__ ("vminsh       17, 14, 15");
+}
+
+static void test_vminsw (void)
+{
+    __asm__ __volatile__ ("vminsw       17, 14, 15");
+}
+
+static test_t tests_aa_ops_two[] = {
+    { &test_vaddubm         , "     vaddubm", },
+    { &test_vadduhm         , "     vadduhm", },
+    { &test_vadduwm         , "     vadduwm", },
+    { &test_vaddubs         , "     vaddubs", },
+    { &test_vadduhs         , "     vadduhs", },
+    { &test_vadduws         , "     vadduws", },
+    { &test_vaddsbs         , "     vaddsbs", },
+    { &test_vaddshs         , "     vaddshs", },
+    { &test_vaddsws         , "     vaddsws", },
+    { &test_vaddcuw         , "     vaddcuw", },
+    { &test_vsububm         , "     vsububm", },
+    { &test_vsubuhm         , "     vsubuhm", },
+    { &test_vsubuwm         , "     vsubuwm", },
+    { &test_vsububs         , "     vsububs", },
+    { &test_vsubuhs         , "     vsubuhs", },
+    { &test_vsubuws         , "     vsubuws", },
+    { &test_vsubsbs         , "     vsubsbs", },
+    { &test_vsubshs         , "     vsubshs", },
+    { &test_vsubsws         , "     vsubsws", },
+    { &test_vsubcuw         , "     vsubcuw", },
+    { &test_vmuloub         , "     vmuloub", },
+    { &test_vmulouh         , "     vmulouh", },
+    { &test_vmulosb         , "     vmulosb", },
+    { &test_vmulosh         , "     vmulosh", },
+    { &test_vmuleub         , "     vmuleub", },
+    { &test_vmuleuh         , "     vmuleuh", },
+    { &test_vmulesb         , "     vmulesb", },
+    { &test_vmulesh         , "     vmulesh", },
+    { &test_vsumsws         , "     vsumsws", },
+    { &test_vsum2sws        , "    vsum2sws", },
+    { &test_vsum4ubs        , "    vsum4ubs", },
+    { &test_vsum4sbs        , "    vsum4sbs", },
+    { &test_vsum4shs        , "    vsum4shs", },
+    { &test_vavgub          , "      vavgub", },
+    { &test_vavguh          , "      vavguh", },
+    { &test_vavguw          , "      vavguw", },
+    { &test_vavgsb          , "      vavgsb", },
+    { &test_vavgsh          , "      vavgsh", },
+    { &test_vavgsw          , "      vavgsw", },
+    { &test_vmaxub          , "      vmaxub", },
+    { &test_vmaxuh          , "      vmaxuh", },
+    { &test_vmaxuw          , "      vmaxuw", },
+    { &test_vmaxsb          , "      vmaxsb", },
+    { &test_vmaxsh          , "      vmaxsh", },
+    { &test_vmaxsw          , "      vmaxsw", },
+    { &test_vminub          , "      vminub", },
+    { &test_vminuh          , "      vminuh", },
+    { &test_vminuw          , "      vminuw", },
+    { &test_vminsb          , "      vminsb", },
+    { &test_vminsh          , "      vminsh", },
+    { &test_vminsw          , "      vminsw", },
+    { NULL,                   NULL,           },
+};
+#endif /* defined (HAS_ALTIVEC) */
+
+#if defined (HAS_ALTIVEC)
+static void test_vand (void)
+{
+    __asm__ __volatile__ ("vand         17, 14, 15");
+}
+
+static void test_vor (void)
+{
+    __asm__ __volatile__ ("vor          17, 14, 15");
+}
+
+static void test_vxor (void)
+{
+    __asm__ __volatile__ ("vxor         17, 14, 15");
+}
+
+static void test_vandc (void)
+{
+    __asm__ __volatile__ ("vandc        17, 14, 15");
+}
+
+static void test_vnor (void)
+{
+    __asm__ __volatile__ ("vnor         17, 14, 15");
+}
+
+static void test_vrlb (void)
+{
+    __asm__ __volatile__ ("vrlb         17, 14, 15");
+}
+
+static void test_vrlh (void)
+{
+    __asm__ __volatile__ ("vrlh         17, 14, 15");
+}
+
+static void test_vrlw (void)
+{
+    __asm__ __volatile__ ("vrlw         17, 14, 15");
+}
+
+static void test_vslb (void)
+{
+    __asm__ __volatile__ ("vslb         17, 14, 15");
+}
+
+static void test_vslh (void)
+{
+    __asm__ __volatile__ ("vslh         17, 14, 15");
+}
+
+static void test_vslw (void)
+{
+    __asm__ __volatile__ ("vslw         17, 14, 15");
+}
+
+static void test_vsrb (void)
+{
+    __asm__ __volatile__ ("vsrb         17, 14, 15");
+}
+
+static void test_vsrh (void)
+{
+    __asm__ __volatile__ ("vsrh         17, 14, 15");
+}
+
+static void test_vsrw (void)
+{
+    __asm__ __volatile__ ("vsrw         17, 14, 15");
+}
+
+static void test_vsrab (void)
+{
+    __asm__ __volatile__ ("vsrab        17, 14, 15");
+}
+
+static void test_vsrah (void)
+{
+    __asm__ __volatile__ ("vsrah        17, 14, 15");
+}
+
+static void test_vsraw (void)
+{
+    __asm__ __volatile__ ("vsraw        17, 14, 15");
+}
+
+static void test_vpkuhum (void)
+{
+    __asm__ __volatile__ ("vpkuhum      17, 14, 15");
+}
+
+static void test_vpkuwum (void)
+{
+    __asm__ __volatile__ ("vpkuwum      17, 14, 15");
+}
+
+static void test_vpkuhus (void)
+{
+    __asm__ __volatile__ ("vpkuhus      17, 14, 15");
+}
+
+static void test_vpkuwus (void)
+{
+    __asm__ __volatile__ ("vpkuwus      17, 14, 15");
+}
+
+static void test_vpkshus (void)
+{
+    __asm__ __volatile__ ("vpkshus      17, 14, 15");
+}
+
+static void test_vpkswus (void)
+{
+    __asm__ __volatile__ ("vpkswus      17, 14, 15");
+}
+
+static void test_vpkshss (void)
+{
+    __asm__ __volatile__ ("vpkshss      17, 14, 15");
+}
+
+static void test_vpkswss (void)
+{
+    __asm__ __volatile__ ("vpkswss      17, 14, 15");
+}
+
+static void test_vpkpx (void)
+{
+    __asm__ __volatile__ ("vpkpx        17, 14, 15");
+}
+
+static void test_vmrghb (void)
+{
+    __asm__ __volatile__ ("vmrghb       17, 14, 15");
+}
+
+static void test_vmrghh (void)
+{
+    __asm__ __volatile__ ("vmrghh       17, 14, 15");
+}
+
+static void test_vmrghw (void)
+{
+    __asm__ __volatile__ ("vmrghw       17, 14, 15");
+}
+
+static void test_vmrglb (void)
+{
+    __asm__ __volatile__ ("vmrglb       17, 14, 15");
+}
+
+static void test_vmrglh (void)
+{
+    __asm__ __volatile__ ("vmrglh       17, 14, 15");
+}
+
+static void test_vmrglw (void)
+{
+    __asm__ __volatile__ ("vmrglw       17, 14, 15");
+}
+
+static void test_vslo (void)
+{
+    __asm__ __volatile__ ("vslo         17, 14, 15");
+}
+
+static void test_vsro (void)
+{
+    __asm__ __volatile__ ("vsro         17, 14, 15");
+}
+
+static test_t tests_al_ops_two[] = {
+    { &test_vand            , "        vand", },
+    { &test_vor             , "         vor", },
+    { &test_vxor            , "        vxor", },
+    { &test_vandc           , "       vandc", },
+    { &test_vnor            , "        vnor", },
+    { &test_vrlb            , "        vrlb", },
+    { &test_vrlh            , "        vrlh", },
+    { &test_vrlw            , "        vrlw", },
+    { &test_vslb            , "        vslb", },
+    { &test_vslh            , "        vslh", },
+    { &test_vslw            , "        vslw", },
+    { &test_vsrb            , "        vsrb", },
+    { &test_vsrh            , "        vsrh", },
+    { &test_vsrw            , "        vsrw", },
+    { &test_vsrab           , "       vsrab", },
+    { &test_vsrah           , "       vsrah", },
+    { &test_vsraw           , "       vsraw", },
+    { &test_vpkuhum         , "     vpkuhum", },
+    { &test_vpkuwum         , "     vpkuwum", },
+    { &test_vpkuhus         , "     vpkuhus", },
+    { &test_vpkuwus         , "     vpkuwus", },
+    { &test_vpkshus         , "     vpkshus", },
+    { &test_vpkswus         , "     vpkswus", },
+    { &test_vpkshss         , "     vpkshss", },
+    { &test_vpkswss         , "     vpkswss", },
+    { &test_vpkpx           , "       vpkpx", },
+    { &test_vmrghb          , "      vmrghb", },
+    { &test_vmrghh          , "      vmrghh", },
+    { &test_vmrghw          , "      vmrghw", },
+    { &test_vmrglb          , "      vmrglb", },
+    { &test_vmrglh          , "      vmrglh", },
+    { &test_vmrglw          , "      vmrglw", },
+    { &test_vslo            , "        vslo", },
+    { &test_vsro            , "        vsro", },
+    { NULL,                   NULL,           },
+};
+#endif /* defined (HAS_ALTIVEC) */
+
+#if defined (HAS_ALTIVEC)
+static void test_vupkhsb (void)
+{
+    __asm__ __volatile__ ("vupkhsb      17, 14");
+}
+
+static void test_vupkhsh (void)
+{
+    __asm__ __volatile__ ("vupkhsh      17, 14");
+}
+
+static void test_vupkhpx (void)
+{
+    __asm__ __volatile__ ("vupkhpx      17, 14");
+}
+
+static void test_vupklsb (void)
+{
+    __asm__ __volatile__ ("vupklsb      17, 14");
+}
+
+static void test_vupklsh (void)
+{
+    __asm__ __volatile__ ("vupklsh      17, 14");
+}
+
+static void test_vupklpx (void)
+{
+    __asm__ __volatile__ ("vupklpx      17, 14");
+}
+
+static test_t tests_al_ops_one[] = {
+    { &test_vupkhsb         , "     vupkhsb", },
+    { &test_vupkhsh         , "     vupkhsh", },
+    { &test_vupkhpx         , "     vupkhpx", },
+    { &test_vupklsb         , "     vupklsb", },
+    { &test_vupklsh         , "     vupklsh", },
+    { &test_vupklpx         , "     vupklpx", },
+    { NULL,                   NULL,           },
+};
+#endif /* defined (HAS_ALTIVEC) */
+
+#if defined (HAS_ALTIVEC)
+static void test_vcmpgtub (void)
+{
+    __asm__ __volatile__ ("vcmpgtub     17, 14, 15");
+}
+
+static void test_vcmpgtuh (void)
+{
+    __asm__ __volatile__ ("vcmpgtuh     17, 14, 15");
+}
+
+static void test_vcmpgtuw (void)
+{
+    __asm__ __volatile__ ("vcmpgtuw     17, 14, 15");
+}
+
+static void test_vcmpgtsb (void)
+{
+    __asm__ __volatile__ ("vcmpgtsb     17, 14, 15");
+}
+
+static void test_vcmpgtsh (void)
+{
+    __asm__ __volatile__ ("vcmpgtsh     17, 14, 15");
+}
+
+static void test_vcmpgtsw (void)
+{
+    __asm__ __volatile__ ("vcmpgtsw     17, 14, 15");
+}
+
+static void test_vcmpequb (void)
+{
+    __asm__ __volatile__ ("vcmpequb     17, 14, 15");
+}
+
+static void test_vcmpequh (void)
+{
+    __asm__ __volatile__ ("vcmpequh     17, 14, 15");
+}
+
+static void test_vcmpequw (void)
+{
+    __asm__ __volatile__ ("vcmpequw     17, 14, 15");
+}
+
+static test_t tests_ac_ops_two[] = {
+    { &test_vcmpgtub        , "    vcmpgtub", },
+    { &test_vcmpgtuh        , "    vcmpgtuh", },
+    { &test_vcmpgtuw        , "    vcmpgtuw", },
+    { &test_vcmpgtsb        , "    vcmpgtsb", },
+    { &test_vcmpgtsh        , "    vcmpgtsh", },
+    { &test_vcmpgtsw        , "    vcmpgtsw", },
+    { &test_vcmpequb        , "    vcmpequb", },
+    { &test_vcmpequh        , "    vcmpequh", },
+    { &test_vcmpequw        , "    vcmpequw", },
+    { NULL,                   NULL,           },
+};
+#endif /* defined (HAS_ALTIVEC) */
+
+#if defined (HAS_ALTIVEC)
+static void test_vcmpgtub_ (void)
+{
+    __asm__ __volatile__ ("vcmpgtub.    17, 14, 15");
+}
+
+static void test_vcmpgtuh_ (void)
+{
+    __asm__ __volatile__ ("vcmpgtuh.    17, 14, 15");
+}
+
+static void test_vcmpgtuw_ (void)
+{
+    __asm__ __volatile__ ("vcmpgtuw.    17, 14, 15");
+}
+
+static void test_vcmpgtsb_ (void)
+{
+    __asm__ __volatile__ ("vcmpgtsb.    17, 14, 15");
+}
+
+static void test_vcmpgtsh_ (void)
+{
+    __asm__ __volatile__ ("vcmpgtsh.    17, 14, 15");
+}
+
+static void test_vcmpgtsw_ (void)
+{
+    __asm__ __volatile__ ("vcmpgtsw.    17, 14, 15");
+}
+
+static void test_vcmpequb_ (void)
+{
+    __asm__ __volatile__ ("vcmpequb.    17, 14, 15");
+}
+
+static void test_vcmpequh_ (void)
+{
+    __asm__ __volatile__ ("vcmpequh.    17, 14, 15");
+}
+
+static void test_vcmpequw_ (void)
+{
+    __asm__ __volatile__ ("vcmpequw.    17, 14, 15");
+}
+
+static test_t tests_acr_ops_two[] = {
+    { &test_vcmpgtub_       , "   vcmpgtub.", },
+    { &test_vcmpgtuh_       , "   vcmpgtuh.", },
+    { &test_vcmpgtuw_       , "   vcmpgtuw.", },
+    { &test_vcmpgtsb_       , "   vcmpgtsb.", },
+    { &test_vcmpgtsh_       , "   vcmpgtsh.", },
+    { &test_vcmpgtsw_       , "   vcmpgtsw.", },
+    { &test_vcmpequb_       , "   vcmpequb.", },
+    { &test_vcmpequh_       , "   vcmpequh.", },
+    { &test_vcmpequw_       , "   vcmpequw.", },
+    { NULL,                   NULL,           },
+};
+#endif /* defined (HAS_ALTIVEC) */
+
+#if defined (HAS_ALTIVEC)
+static void test_vsl (void)
+{
+    __asm__ __volatile__ ("vsl          17, 14, 15");
+}
+
+static void test_vsr (void)
+{
+    __asm__ __volatile__ ("vsr          17, 14, 15");
+}
+
+static void test_vspltb (void)
+{
+    __asm__ __volatile__ ("vspltb       17, 14, 0");
+}
+
+static void test_vsplth (void)
+{
+    __asm__ __volatile__ ("vsplth       17, 14, 0");
+}
+
+static void test_vspltw (void)
+{
+    __asm__ __volatile__ ("vspltw       17, 14, 0");
+}
+
+static void test_vspltisb (void)
+{
+    __asm__ __volatile__ ("vspltisb     17, 0");
+}
+
+static void test_vspltish (void)
+{
+    __asm__ __volatile__ ("vspltish     17, 0");
+}
+
+static void test_vspltisw (void)
+{
+    __asm__ __volatile__ ("vspltisw     17, 0");
+}
+
+static void test_vsldoi (void)
+{
+    __asm__ __volatile__ ("vsldoi       17, 14, 15, 0");
+}
+
+static test_t tests_av_int_ops_spe[] = {
+    { &test_vsl             , "         vsl", },
+    { &test_vsr             , "         vsr", },
+    { &test_vspltb          , "      vspltb", },
+    { &test_vsplth          , "      vsplth", },
+    { &test_vspltw          , "      vspltw", },
+    { &test_vspltisb        , "    vspltisb", },
+    { &test_vspltish        , "    vspltish", },
+    { &test_vspltisw        , "    vspltisw", },
+    { &test_vsldoi          , "      vsldoi", },
+    { NULL,                   NULL,           },
+};
+#endif /* defined (HAS_ALTIVEC) */
+
+#if defined (HAS_ALTIVEC)
+static void test_vmaddfp (void)
+{
+    __asm__ __volatile__ ("vmaddfp      17, 14, 15, 16");
+}
+
+static void test_vnmsubfp (void)
+{
+    __asm__ __volatile__ ("vnmsubfp     17, 14, 15, 16");
+}
+
+static test_t tests_afa_ops_three[] = {
+    { &test_vmaddfp         , "     vmaddfp", },
+    { &test_vnmsubfp        , "    vnmsubfp", },
+    { NULL,                   NULL,           },
+};
+#endif /* defined (HAS_ALTIVEC) */
+
+#if defined (HAS_ALTIVEC)
+static void test_vaddfp (void)
+{
+    __asm__ __volatile__ ("vaddfp       17, 14, 15");
+}
+
+static void test_vsubfp (void)
+{
+    __asm__ __volatile__ ("vsubfp       17, 14, 15");
+}
+
+static void test_vmaxfp (void)
+{
+    __asm__ __volatile__ ("vmaxfp       17, 14, 15");
+}
+
+static void test_vminfp (void)
+{
+    __asm__ __volatile__ ("vminfp       17, 14, 15");
+}
+
+static test_t tests_afa_ops_two[] = {
+    { &test_vaddfp          , "      vaddfp", },
+    { &test_vsubfp          , "      vsubfp", },
+    { &test_vmaxfp          , "      vmaxfp", },
+    { &test_vminfp          , "      vminfp", },
+    { NULL,                   NULL,           },
+};
+#endif /* defined (HAS_ALTIVEC) */
+
+#if defined (HAS_ALTIVEC)
+static void test_vrfin (void)
+{
+    __asm__ __volatile__ ("vrfin        17, 14");
+}
+
+static void test_vrfiz (void)
+{
+    __asm__ __volatile__ ("vrfiz        17, 14");
+}
+
+static void test_vrfip (void)
+{
+    __asm__ __volatile__ ("vrfip        17, 14");
+}
+
+static void test_vrfim (void)
+{
+    __asm__ __volatile__ ("vrfim        17, 14");
+}
+
+static void test_vrefp (void)
+{
+    __asm__ __volatile__ ("vrefp        17, 14");
+}
+
+static void test_vrsqrtefp (void)
+{
+    __asm__ __volatile__ ("vrsqrtefp    17, 14");
+}
+
+static void test_vlogefp (void)
+{
+    __asm__ __volatile__ ("vlogefp      17, 14");
+}
+
+static void test_vexptefp (void)
+{
+    __asm__ __volatile__ ("vexptefp     17, 14");
+}
+
+static test_t tests_afa_ops_one[] = {
+    { &test_vrfin           , "       vrfin", },
+    { &test_vrfiz           , "       vrfiz", },
+    { &test_vrfip           , "       vrfip", },
+    { &test_vrfim           , "       vrfim", },
+    { &test_vrefp           , "       vrefp", },
+    { &test_vrsqrtefp       , "   vrsqrtefp", },
+    { &test_vlogefp         , "     vlogefp", },
+    { &test_vexptefp        , "    vexptefp", },
+    { NULL,                   NULL,           },
+};
+#endif /* defined (HAS_ALTIVEC) */
+
+#if defined (HAS_ALTIVEC)
+static void test_vcmpgtfp (void)
+{
+    __asm__ __volatile__ ("vcmpgtfp     17, 14, 15");
+}
+
+static void test_vcmpeqfp (void)
+{
+    __asm__ __volatile__ ("vcmpeqfp     17, 14, 15");
+}
+
+static void test_vcmpgefp (void)
+{
+    __asm__ __volatile__ ("vcmpgefp     17, 14, 15");
+}
+
+static void test_vcmpbfp (void)
+{
+    __asm__ __volatile__ ("vcmpbfp      17, 14, 15");
+}
+
+static test_t tests_afc_ops_two[] = {
+    { &test_vcmpgtfp        , "    vcmpgtfp", },
+    { &test_vcmpeqfp        , "    vcmpeqfp", },
+    { &test_vcmpgefp        , "    vcmpgefp", },
+    { &test_vcmpbfp         , "     vcmpbfp", },
+    { NULL,                   NULL,           },
+};
+#endif /* defined (HAS_ALTIVEC) */
+
+#if defined (HAS_ALTIVEC)
+static void test_vcmpgtfp_ (void)
+{
+    __asm__ __volatile__ ("vcmpgtfp.    17, 14, 15");
+}
+
+static void test_vcmpeqfp_ (void)
+{
+    __asm__ __volatile__ ("vcmpeqfp.    17, 14, 15");
+}
+
+static void test_vcmpgefp_ (void)
+{
+    __asm__ __volatile__ ("vcmpgefp.    17, 14, 15");
+}
+
+static void test_vcmpbfp_ (void)
+{
+    __asm__ __volatile__ ("vcmpbfp.     17, 14, 15");
+}
+
+static test_t tests_afcr_ops_two[] = {
+    { &test_vcmpgtfp_       , "   vcmpgtfp.", },
+    { &test_vcmpeqfp_       , "   vcmpeqfp.", },
+    { &test_vcmpgefp_       , "   vcmpgefp.", },
+    { &test_vcmpbfp_        , "    vcmpbfp.", },
+    { NULL,                   NULL,           },
+};
+#endif /* defined (HAS_ALTIVEC) */
+
+#if defined (IS_PPC405)
+static void test_macchw (void)
+{
+    __asm__ __volatile__ ("macchw       17, 14, 15");
+}
+
+static void test_macchwo (void)
+{
+    __asm__ __volatile__ ("macchwo      17, 14, 15");
+}
+
+static void test_macchws (void)
+{
+    __asm__ __volatile__ ("macchws      17, 14, 15");
+}
+
+static void test_macchwso (void)
+{
+    __asm__ __volatile__ ("macchwso     17, 14, 15");
+}
+
+static void test_macchwsu (void)
+{
+    __asm__ __volatile__ ("macchwsu     17, 14, 15");
+}
+
+static void test_macchwsuo (void)
+{
+    __asm__ __volatile__ ("macchwsuo    17, 14, 15");
+}
+
+static void test_macchwu (void)
+{
+    __asm__ __volatile__ ("macchwu      17, 14, 15");
+}
+
+static void test_macchwuo (void)
+{
+    __asm__ __volatile__ ("macchwuo     17, 14, 15");
+}
+
+static void test_machhw (void)
+{
+    __asm__ __volatile__ ("machhw       17, 14, 15");
+}
+
+static void test_machhwo (void)
+{
+    __asm__ __volatile__ ("machhwo      17, 14, 15");
+}
+
+static void test_machhws (void)
+{
+    __asm__ __volatile__ ("machhws      17, 14, 15");
+}
+
+static void test_machhwso (void)
+{
+    __asm__ __volatile__ ("machhwso     17, 14, 15");
+}
+
+static void test_machhwsu (void)
+{
+    __asm__ __volatile__ ("machhwsu     17, 14, 15");
+}
+
+static void test_machhwsuo (void)
+{
+    __asm__ __volatile__ ("machhwsuo    17, 14, 15");
+}
+
+static void test_machhwu (void)
+{
+    __asm__ __volatile__ ("machhwu      17, 14, 15");
+}
+
+static void test_machhwuo (void)
+{
+    __asm__ __volatile__ ("machhwuo     17, 14, 15");
+}
+
+static void test_maclhw (void)
+{
+    __asm__ __volatile__ ("maclhw       17, 14, 15");
+}
+
+static void test_maclhwo (void)
+{
+    __asm__ __volatile__ ("maclhwo      17, 14, 15");
+}
+
+static void test_maclhws (void)
+{
+    __asm__ __volatile__ ("maclhws      17, 14, 15");
+}
+
+static void test_maclhwso (void)
+{
+    __asm__ __volatile__ ("maclhwso     17, 14, 15");
+}
+
+static void test_maclhwsu (void)
+{
+    __asm__ __volatile__ ("maclhwsu     17, 14, 15");
+}
+
+static void test_maclhwsuo (void)
+{
+    __asm__ __volatile__ ("maclhwsuo    17, 14, 15");
+}
+
+static void test_maclhwu (void)
+{
+    __asm__ __volatile__ ("maclhwu      17, 14, 15");
+}
+
+static void test_maclhwuo (void)
+{
+    __asm__ __volatile__ ("maclhwuo     17, 14, 15");
+}
+
+static void test_mulchw (void)
+{
+    __asm__ __volatile__ ("mulchw       17, 14, 15");
+}
+
+static void test_mulchwu (void)
+{
+    __asm__ __volatile__ ("mulchwu      17, 14, 15");
+}
+
+static void test_mulhhw (void)
+{
+    __asm__ __volatile__ ("mulhhw       17, 14, 15");
+}
+
+static void test_mulhhwu (void)
+{
+    __asm__ __volatile__ ("mulhhwu      17, 14, 15");
+}
+
+static void test_mullhw (void)
+{
+    __asm__ __volatile__ ("mullhw       17, 14, 15");
+}
+
+static void test_mullhwu (void)
+{
+    __asm__ __volatile__ ("mullhwu      17, 14, 15");
+}
+
+static void test_nmacchw (void)
+{
+    __asm__ __volatile__ ("nmacchw      17, 14, 15");
+}
+
+static void test_nmacchwo (void)
+{
+    __asm__ __volatile__ ("nmacchwo     17, 14, 15");
+}
+
+static void test_nmacchws (void)
+{
+    __asm__ __volatile__ ("nmacchws     17, 14, 15");
+}
+
+static void test_nmacchwso (void)
+{
+    __asm__ __volatile__ ("nmacchwso    17, 14, 15");
+}
+
+static void test_nmachhw (void)
+{
+    __asm__ __volatile__ ("nmachhw      17, 14, 15");
+}
+
+static void test_nmachhwo (void)
+{
+    __asm__ __volatile__ ("nmachhwo     17, 14, 15");
+}
+
+static void test_nmachhws (void)
+{
+    __asm__ __volatile__ ("nmachhws     17, 14, 15");
+}
+
+static void test_nmachhwso (void)
+{
+    __asm__ __volatile__ ("nmachhwso    17, 14, 15");
+}
+
+static void test_nmaclhw (void)
+{
+    __asm__ __volatile__ ("nmaclhw      17, 14, 15");
+}
+
+static void test_nmaclhwo (void)
+{
+    __asm__ __volatile__ ("nmaclhwo     17, 14, 15");
+}
+
+static void test_nmaclhws (void)
+{
+    __asm__ __volatile__ ("nmaclhws     17, 14, 15");
+}
+
+static void test_nmaclhwso (void)
+{
+    __asm__ __volatile__ ("nmaclhwso    17, 14, 15");
+}
+
+static test_t tests_p4m_ops_two[] = {
+    { &test_macchw          , "      macchw", },
+    { &test_macchwo         , "     macchwo", },
+    { &test_macchws         , "     macchws", },
+    { &test_macchwso        , "    macchwso", },
+    { &test_macchwsu        , "    macchwsu", },
+    { &test_macchwsuo       , "   macchwsuo", },
+    { &test_macchwu         , "     macchwu", },
+    { &test_macchwuo        , "    macchwuo", },
+    { &test_machhw          , "      machhw", },
+    { &test_machhwo         , "     machhwo", },
+    { &test_machhws         , "     machhws", },
+    { &test_machhwso        , "    machhwso", },
+    { &test_machhwsu        , "    machhwsu", },
+    { &test_machhwsuo       , "   machhwsuo", },
+    { &test_machhwu         , "     machhwu", },
+    { &test_machhwuo        , "    machhwuo", },
+    { &test_maclhw          , "      maclhw", },
+    { &test_maclhwo         , "     maclhwo", },
+    { &test_maclhws         , "     maclhws", },
+    { &test_maclhwso        , "    maclhwso", },
+    { &test_maclhwsu        , "    maclhwsu", },
+    { &test_maclhwsuo       , "   maclhwsuo", },
+    { &test_maclhwu         , "     maclhwu", },
+    { &test_maclhwuo        , "    maclhwuo", },
+    { &test_mulchw          , "      mulchw", },
+    { &test_mulchwu         , "     mulchwu", },
+    { &test_mulhhw          , "      mulhhw", },
+    { &test_mulhhwu         , "     mulhhwu", },
+    { &test_mullhw          , "      mullhw", },
+    { &test_mullhwu         , "     mullhwu", },
+    { &test_nmacchw         , "     nmacchw", },
+    { &test_nmacchwo        , "    nmacchwo", },
+    { &test_nmacchws        , "    nmacchws", },
+    { &test_nmacchwso       , "   nmacchwso", },
+    { &test_nmachhw         , "     nmachhw", },
+    { &test_nmachhwo        , "    nmachhwo", },
+    { &test_nmachhws        , "    nmachhws", },
+    { &test_nmachhwso       , "   nmachhwso", },
+    { &test_nmaclhw         , "     nmaclhw", },
+    { &test_nmaclhwo        , "    nmaclhwo", },
+    { &test_nmaclhws        , "    nmaclhws", },
+    { &test_nmaclhwso       , "   nmaclhwso", },
+    { NULL,                   NULL,           },
+};
+#endif /* defined (IS_PPC405) */
+
+#if defined (IS_PPC405)
+static void test_macchw_ (void)
+{
+    __asm__ __volatile__ ("macchw.      17, 14, 15");
+}
+
+static void test_macchwo_ (void)
+{
+    __asm__ __volatile__ ("macchwo.     17, 14, 15");
+}
+
+static void test_macchws_ (void)
+{
+    __asm__ __volatile__ ("macchws.     17, 14, 15");
+}
+
+static void test_macchwso_ (void)
+{
+    __asm__ __volatile__ ("macchwso.    17, 14, 15");
+}
+
+static void test_macchwsu_ (void)
+{
+    __asm__ __volatile__ ("macchwsu.    17, 14, 15");
+}
+
+static void test_macchwsuo_ (void)
+{
+    __asm__ __volatile__ ("macchwsuo.   17, 14, 15");
+}
+
+static void test_macchwu_ (void)
+{
+    __asm__ __volatile__ ("macchwu.     17, 14, 15");
+}
+
+static void test_macchwuo_ (void)
+{
+    __asm__ __volatile__ ("macchwuo.    17, 14, 15");
+}
+
+static void test_machhw_ (void)
+{
+    __asm__ __volatile__ ("machhw.      17, 14, 15");
+}
+
+static void test_machhwo_ (void)
+{
+    __asm__ __volatile__ ("machhwo.     17, 14, 15");
+}
+
+static void test_machhws_ (void)
+{
+    __asm__ __volatile__ ("machhws.     17, 14, 15");
+}
+
+static void test_machhwso_ (void)
+{
+    __asm__ __volatile__ ("machhwso.    17, 14, 15");
+}
+
+static void test_machhwsu_ (void)
+{
+    __asm__ __volatile__ ("machhwsu.    17, 14, 15");
+}
+
+static void test_machhwsuo_ (void)
+{
+    __asm__ __volatile__ ("machhwsuo.   17, 14, 15");
+}
+
+static void test_machhwu_ (void)
+{
+    __asm__ __volatile__ ("machhwu.     17, 14, 15");
+}
+
+static void test_machhwuo_ (void)
+{
+    __asm__ __volatile__ ("machhwuo.    17, 14, 15");
+}
+
+static void test_maclhw_ (void)
+{
+    __asm__ __volatile__ ("maclhw.      17, 14, 15");
+}
+
+static void test_maclhwo_ (void)
+{
+    __asm__ __volatile__ ("maclhwo.     17, 14, 15");
+}
+
+static void test_maclhws_ (void)
+{
+    __asm__ __volatile__ ("maclhws.     17, 14, 15");
+}
+
+static void test_maclhwso_ (void)
+{
+    __asm__ __volatile__ ("maclhwso.    17, 14, 15");
+}
+
+static void test_maclhwsu_ (void)
+{
+    __asm__ __volatile__ ("maclhwsu.    17, 14, 15");
+}
+
+static void test_maclhwsuo_ (void)
+{
+    __asm__ __volatile__ ("maclhwsuo.   17, 14, 15");
+}
+
+static void test_maclhwu_ (void)
+{
+    __asm__ __volatile__ ("maclhwu.     17, 14, 15");
+}
+
+static void test_maclhwuo_ (void)
+{
+    __asm__ __volatile__ ("maclhwuo.    17, 14, 15");
+}
+
+static void test_mulchw_ (void)
+{
+    __asm__ __volatile__ ("mulchw.      17, 14, 15");
+}
+
+static void test_mulchwu_ (void)
+{
+    __asm__ __volatile__ ("mulchwu.     17, 14, 15");
+}
+
+static void test_mulhhw_ (void)
+{
+    __asm__ __volatile__ ("mulhhw.      17, 14, 15");
+}
+
+static void test_mulhhwu_ (void)
+{
+    __asm__ __volatile__ ("mulhhwu.     17, 14, 15");
+}
+
+static void test_mullhw_ (void)
+{
+    __asm__ __volatile__ ("mullhw.      17, 14, 15");
+}
+
+static void test_mullhwu_ (void)
+{
+    __asm__ __volatile__ ("mullhwu.     17, 14, 15");
+}
+
+static void test_nmacchw_ (void)
+{
+    __asm__ __volatile__ ("nmacchw.     17, 14, 15");
+}
+
+static void test_nmacchwo_ (void)
+{
+    __asm__ __volatile__ ("nmacchwo.    17, 14, 15");
+}
+
+static void test_nmacchws_ (void)
+{
+    __asm__ __volatile__ ("nmacchws.    17, 14, 15");
+}
+
+static void test_nmacchwso_ (void)
+{
+    __asm__ __volatile__ ("nmacchwso.   17, 14, 15");
+}
+
+static void test_nmachhw_ (void)
+{
+    __asm__ __volatile__ ("nmachhw.     17, 14, 15");
+}
+
+static void test_nmachhwo_ (void)
+{
+    __asm__ __volatile__ ("nmachhwo.    17, 14, 15");
+}
+
+static void test_nmachhws_ (void)
+{
+    __asm__ __volatile__ ("nmachhws.    17, 14, 15");
+}
+
+static void test_nmachhwso_ (void)
+{
+    __asm__ __volatile__ ("nmachhwso.   17, 14, 15");
+}
+
+static void test_nmaclhw_ (void)
+{
+    __asm__ __volatile__ ("nmaclhw.     17, 14, 15");
+}
+
+static void test_nmaclhwo_ (void)
+{
+    __asm__ __volatile__ ("nmaclhwo.    17, 14, 15");
+}
+
+static void test_nmaclhws_ (void)
+{
+    __asm__ __volatile__ ("nmaclhws.    17, 14, 15");
+}
+
+static void test_nmaclhwso_ (void)
+{
+    __asm__ __volatile__ ("nmaclhwso.   17, 14, 15");
+}
+
+static test_t tests_p4mc_ops_two[] = {
+    { &test_macchw_         , "     macchw.", },
+    { &test_macchwo_        , "    macchwo.", },
+    { &test_macchws_        , "    macchws.", },
+    { &test_macchwso_       , "   macchwso.", },
+    { &test_macchwsu_       , "   macchwsu.", },
+    { &test_macchwsuo_      , "  macchwsuo.", },
+    { &test_macchwu_        , "    macchwu.", },
+    { &test_macchwuo_       , "   macchwuo.", },
+    { &test_machhw_         , "     machhw.", },
+    { &test_machhwo_        , "    machhwo.", },
+    { &test_machhws_        , "    machhws.", },
+    { &test_machhwso_       , "   machhwso.", },
+    { &test_machhwsu_       , "   machhwsu.", },
+    { &test_machhwsuo_      , "  machhwsuo.", },
+    { &test_machhwu_        , "    machhwu.", },
+    { &test_machhwuo_       , "   machhwuo.", },
+    { &test_maclhw_         , "     maclhw.", },
+    { &test_maclhwo_        , "    maclhwo.", },
+    { &test_maclhws_        , "    maclhws.", },
+    { &test_maclhwso_       , "   maclhwso.", },
+    { &test_maclhwsu_       , "   maclhwsu.", },
+    { &test_maclhwsuo_      , "  maclhwsuo.", },
+    { &test_maclhwu_        , "    maclhwu.", },
+    { &test_maclhwuo_       , "   maclhwuo.", },
+    { &test_mulchw_         , "     mulchw.", },
+    { &test_mulchwu_        , "    mulchwu.", },
+    { &test_mulhhw_         , "     mulhhw.", },
+    { &test_mulhhwu_        , "    mulhhwu.", },
+    { &test_mullhw_         , "     mullhw.", },
+    { &test_mullhwu_        , "    mullhwu.", },
+    { &test_nmacchw_        , "    nmacchw.", },
+    { &test_nmacchwo_       , "   nmacchwo.", },
+    { &test_nmacchws_       , "   nmacchws.", },
+    { &test_nmacchwso_      , "  nmacchwso.", },
+    { &test_nmachhw_        , "    nmachhw.", },
+    { &test_nmachhwo_       , "   nmachhwo.", },
+    { &test_nmachhws_       , "   nmachhws.", },
+    { &test_nmachhwso_      , "  nmachhwso.", },
+    { &test_nmaclhw_        , "    nmaclhw.", },
+    { &test_nmaclhwo_       , "   nmaclhwo.", },
+    { &test_nmaclhws_       , "   nmaclhws.", },
+    { &test_nmaclhwso_      , "  nmaclhwso.", },
+    { NULL,                   NULL,           },
+};
+#endif /* defined (IS_PPC405) */
+
+static test_table_t all_tests[] = {
+    {
+        tests_ia_ops_two      ,
+        "PPC integer arith insns with two args",
+        0x00010102,
+    },
+    {
+        tests_iar_ops_two     ,
+        "PPC integer arith insns with two args with flags update",
+        0x01010102,
+    },
+    {
+        tests_iac_ops_two     ,
+        "PPC integer arith insns with two args and carry",
+        0x02010102,
+    },
+    {
+        tests_iacr_ops_two    ,
+        "PPC integer arith insns with two args and carry with flags update",
+        0x03010102,
+    },
+    {
+        tests_il_ops_two      ,
+        "PPC integer logical insns with two args",
+        0x00010202,
+    },
+    {
+        tests_ilr_ops_two     ,
+        "PPC integer logical insns with two args with flags update",
+        0x01010202,
+    },
+    {
+        tests_icr_ops_two     ,
+        "PPC integer compare insns (two args)",
+        0x01010304,
+    },
+    {
+        tests_icr_ops_two_i16 ,
+        "PPC integer compare with immediate insns (two args)",
+        0x01010305,
+    },
+    {
+        tests_ia_ops_two_i16  ,
+        "PPC integer arith insns\n    with one register + one 16 bits immediate args",
+        0x00010106,
+    },
+    {
+        tests_iar_ops_two_i16 ,
+        "PPC integer arith insns\n    with one register + one 16 bits immediate args with flags update",
+        0x01010106,
+    },
+    {
+        tests_il_ops_two_i16  ,
+        "PPC integer logical insns\n    with one register + one 16 bits immediate args",
+        0x00010206,
+    },
+    {
+        tests_ilr_ops_two_i16 ,
+        "PPC integer logical insns\n    with one register + one 16 bits immediate args with flags update",
+        0x01010206,
+    },
+    {
+        tests_crl_ops_two     ,
+        "PPC condition register logical insns - two operands",
+        0x01010202,
+    },
+    {
+        tests_iac_ops_one     ,
+        "PPC integer arith insns with one arg and carry",
+        0x02010101,
+    },
+    {
+        tests_iacr_ops_one    ,
+        "PPC integer arith insns with one arg and carry with flags update",
+        0x03010101,
+    },
+    {
+        tests_il_ops_one      ,
+        "PPC integer logical insns with one arg",
+        0x00010201,
+    },
+    {
+        tests_ilr_ops_one     ,
+        "PPC integer logical insns with one arg with flags update",
+        0x01010201,
+    },
+    {
+        tests_il_ops_spe      ,
+        "PPC logical insns with special forms",
+        0x00010207,
+    },
+    {
+        tests_ilr_ops_spe     ,
+        "PPC logical insns with special forms with flags update",
+        0x01010207,
+    },
+    {
+        tests_ild_ops_two_i16 ,
+        "PPC integer load insns\n    with one register + one 16 bits immediate args with flags update",
+        0x00010508,
+    },
+    {
+        tests_ild_ops_two     ,
+        "PPC integer load insns with two register args",
+        0x00010509,
+    },
+    {
+        tests_ist_ops_three_i16,
+        "PPC integer store insns\n    with one register + one 16 bits immediate args with flags update",
+        0x0001050a,
+    },
+    {
+        tests_ist_ops_three   ,
+        "PPC integer store insns with three register args",
+        0x0001050b,
+    },
+#if !defined (NO_FLOAT)
+    {
+        tests_fa_ops_three    ,
+        "PPC floating point arith insns with three args",
+        0x00020103,
+    },
+#endif /* !defined (NO_FLOAT) */
+#if !defined (NO_FLOAT)
+    {
+        tests_far_ops_three   ,
+        "PPC floating point arith insns\n    with three args with flags update",
+        0x01020103,
+    },
+#endif /* !defined (NO_FLOAT) */
+#if !defined (NO_FLOAT)
+    {
+        tests_fa_ops_two      ,
+        "PPC floating point arith insns with two args",
+        0x00020102,
+    },
+#endif /* !defined (NO_FLOAT) */
+#if !defined (NO_FLOAT)
+    {
+        tests_far_ops_two     ,
+        "PPC floating point arith insns\n    with two args with flags update",
+        0x01020102,
+    },
+#endif /* !defined (NO_FLOAT) */
+#if !defined (NO_FLOAT)
+    {
+        tests_fcr_ops_two     ,
+        "PPC floating point compare insns (two args)",
+        0x01020304,
+    },
+#endif /* !defined (NO_FLOAT) */
+#if !defined (NO_FLOAT)
+    {
+        tests_fa_ops_one      ,
+        "PPC floating point arith insns with one arg",
+        0x00020101,
+    },
+#endif /* !defined (NO_FLOAT) */
+#if !defined (NO_FLOAT)
+    {
+        tests_far_ops_one     ,
+        "PPC floating point arith insns\n    with one arg with flags update",
+        0x01020101,
+    },
+#endif /* !defined (NO_FLOAT) */
+#if !defined (NO_FLOAT)
+    {
+        tests_fl_ops_spe      ,
+        "PPC floating point status register manipulation insns",
+        0x00020207,
+    },
+#endif /* !defined (NO_FLOAT) */
+#if !defined (NO_FLOAT)
+    {
+        tests_flr_ops_spe     ,
+        "PPC floating point status register manipulation insns\n  with flags update",
+        0x01020207,
+    },
+#endif /* !defined (NO_FLOAT) */
+#if defined (HAS_ALTIVEC)
+    {
+        tests_aa_ops_three    ,
+        "PPC altivec integer arith insns with three args",
+        0x00040103,
+    },
+#endif /* defined (HAS_ALTIVEC) */
+#if defined (HAS_ALTIVEC)
+    {
+        tests_al_ops_three    ,
+        "PPC altivec integer logical insns with three args",
+        0x00040203,
+    },
+#endif /* defined (HAS_ALTIVEC) */
+#if defined (HAS_ALTIVEC)
+    {
+        tests_aa_ops_two      ,
+        "PPC altivec integer arith insns with two args",
+        0x00040102,
+    },
+#endif /* defined (HAS_ALTIVEC) */
+#if defined (HAS_ALTIVEC)
+    {
+        tests_al_ops_two      ,
+        "PPC altivec integer logical insns with two args",
+        0x00040202,
+    },
+#endif /* defined (HAS_ALTIVEC) */
+#if defined (HAS_ALTIVEC)
+    {
+        tests_al_ops_one      ,
+        "PPC altivec integer logical insns with one arg",
+        0x00040201,
+    },
+#endif /* defined (HAS_ALTIVEC) */
+#if defined (HAS_ALTIVEC)
+    {
+        tests_ac_ops_two      ,
+        "Altivec integer compare insns",
+        0x00040302,
+    },
+#endif /* defined (HAS_ALTIVEC) */
+#if defined (HAS_ALTIVEC)
+    {
+        tests_acr_ops_two     ,
+        "Altivec integer compare insns with flags update",
+        0x01040302,
+    },
+#endif /* defined (HAS_ALTIVEC) */
+#if defined (HAS_ALTIVEC)
+    {
+        tests_av_int_ops_spe  ,
+        "Altivec integer special insns",
+        0x00040207,
+    },
+#endif /* defined (HAS_ALTIVEC) */
+#if defined (HAS_ALTIVEC)
+    {
+        tests_afa_ops_three   ,
+        "Altivec floating point arith insns with three args",
+        0x00050103,
+    },
+#endif /* defined (HAS_ALTIVEC) */
+#if defined (HAS_ALTIVEC)
+    {
+        tests_afa_ops_two     ,
+        "Altivec floating point arith insns with two args",
+        0x00050102,
+    },
+#endif /* defined (HAS_ALTIVEC) */
+#if defined (HAS_ALTIVEC)
+    {
+        tests_afa_ops_one     ,
+        "Altivec floating point arith insns with one arg",
+        0x00050101,
+    },
+#endif /* defined (HAS_ALTIVEC) */
+#if defined (HAS_ALTIVEC)
+    {
+        tests_afc_ops_two     ,
+        "Altivec floating point compare insns",
+        0x00050302,
+    },
+#endif /* defined (HAS_ALTIVEC) */
+#if defined (HAS_ALTIVEC)
+    {
+        tests_afcr_ops_two    ,
+        "Altivec floating point compare insns with flags update",
+        0x01050302,
+    },
+#endif /* defined (HAS_ALTIVEC) */
+#if defined (IS_PPC405)
+    {
+        tests_p4m_ops_two     ,
+        "PPC 405 mac insns with three args",
+        0x00030102,
+    },
+#endif /* defined (IS_PPC405) */
+#if defined (IS_PPC405)
+    {
+        tests_p4mc_ops_two    ,
+        "PPC 405 mac insns with three args with flags update",
+        0x01030102,
+    },
+#endif /* defined (IS_PPC405) */
+    { NULL,                   NULL,               0x00000000, },
+};
+
+/* -------------- END #include "ops-ppc.c" -------------- */
+
+static int verbose = 0;
+static int arg_list_size = 0;
+
+static double *fargs;
+static int nb_fargs;
+static uint32_t *iargs;
+static int nb_iargs;
+static uint16_t *ii16;
+static int nb_ii16;
+#if defined (HAS_ALTIVEC)
+static vector unsigned int* viargs;
+static int nb_viargs;
+static vector float* vfargs;
+static int nb_vfargs;
+
+//#define TEST_VSCR_SAT
+#endif
+
+static inline void register_farg (void *farg,
+                                  int s, uint16_t exp, uint64_t mant)
+{
+   uint64_t tmp;
+   
+   tmp = ((uint64_t)s << 63) | ((uint64_t)exp << 52) | mant;
+   *(uint64_t *)farg = tmp;
+   AB_DPRINTF("%d %03x %013llx => %016llx %0e\n",
+              s, exp, mant, *(uint64_t *)farg, *(double *)farg);
+}
+
+static void build_fargs_table (void)
+{
+   /* Sign goes from zero to one
+    * Exponent goes from 0 to ((1 << 12) - 1)
+    * Mantissa goes from 1 to ((1 << 52) - 1)
+    * + special values:
+    * +0.0      : 0 0x000 0x0000000000000
+    * -0.0      : 1 0x000 0x0000000000000
+    * +infinity : 0 0x7FF 0x0000000000000
+    * -infinity : 1 0x7FF 0x0000000000000
+    * +SNaN     : 0 0x7FF 0x7FFFFFFFFFFFF
+    * -SNaN     : 1 0x7FF 0x7FFFFFFFFFFFF
+    * +QNaN     : 0 0x7FF 0x8000000000000
+    * -QNaN     : 1 0x7FF 0x8000000000000
+    * (8 values)
+    */
+   uint64_t mant;
+   uint16_t exp, e0, e1;
+   int s;
+   int i=0;
+   
+   if ( arg_list_size == 1 ) {   // Large
+      fargs = malloc(200 * sizeof(double));
+      for (s=0; s<2; s++) {
+         for (e0=0; e0<2; e0++) {
+            for (e1=0x000; ; e1 = ((e1 + 1) << 2) + 6) {
+               if (e1 >= 0x400)
+                  e1 = 0x3fe;
+               exp = (e0 << 10) | e1;
+               for (mant = 0x0000000000001ULL; mant < (1ULL << 52);
+                    /* Add 'random' bits */
+                    mant = ((mant + 0x4A6) << 13) + 0x359) {
+                  register_farg(&fargs[i++], s, exp, mant);
+               }
+               if (e1 == 0x3fe)
+                  break;
+            }
+         }
+      }
+   } else {                      // Default
+      fargs = malloc(16 * sizeof(double));
+      for (s=0; s<2; s++) {                                // x2
+//       for (e0=0; e0<2; e0++) {
+            for (e1=0x001; ; e1 = ((e1 + 1) << 13) + 7) {  // x2
+//          for (e1=0x000; ; e1 = ((e1 + 1) << 5) + 7) {   // x3
+               if (e1 >= 0x400)
+                  e1 = 0x3fe;
+//             exp = (e0 << 10) | e1;
+               exp = e1;
+               for (mant = 0x0000000000001ULL; mant < (1ULL << 52);
+                    /* Add 'random' bits */
+                    mant = ((mant + 0x4A6) << 29) + 0x359) {  // x2
+                  register_farg(&fargs[i++], s, exp, mant);
+               }
+               if (e1 == 0x3fe)
+                  break;
+            }
+//       }
+      }
+   }
+
+   /* Special values */
+   /* +0.0      : 0 0x000 0x0000000000000 */
+   s = 0;
+   exp = 0x000;
+   mant = 0x0000000000000ULL;
+   register_farg(&fargs[i++], s, exp, mant);
+   /* -0.0      : 1 0x000 0x0000000000000 */
+   s = 1;
+   exp = 0x000;
+   mant = 0x0000000000000ULL;
+   register_farg(&fargs[i++], s, exp, mant);
+   /* +infinity : 0 0x7FF 0x0000000000000  */
+   s = 0;
+   exp = 0x7FF;
+   mant = 0x0000000000000ULL;
+   register_farg(&fargs[i++], s, exp, mant);
+   /* -infinity : 1 0x7FF 0x0000000000000 */
+   s = 1;
+   exp = 0x7FF;
+   mant = 0x0000000000000ULL;
+   register_farg(&fargs[i++], s, exp, mant);
+   /* +SNaN     : 0 0x7FF 0x7FFFFFFFFFFFF */
+   s = 0;
+   exp = 0x7FF;
+   mant = 0x7FFFFFFFFFFFFULL;
+   register_farg(&fargs[i++], s, exp, mant);
+   /* -SNaN     : 1 0x7FF 0x7FFFFFFFFFFFF */
+   s = 1;
+   exp = 0x7FF;
+   mant = 0x7FFFFFFFFFFFFULL;
+   register_farg(&fargs[i++], s, exp, mant);
+   /* +QNaN     : 0 0x7FF 0x8000000000000 */
+   s = 0;
+   exp = 0x7FF;
+   mant = 0x8000000000000ULL;
+   register_farg(&fargs[i++], s, exp, mant);
+   /* -QNaN     : 1 0x7FF 0x8000000000000 */
+   s = 1;
+   exp = 0x7FF;
+   mant = 0x8000000000000ULL;
+   register_farg(&fargs[i++], s, exp, mant);
+   AB_DPRINTF("Registered %d fargs values\n", i);
+   nb_fargs = i;
+}
+
+static void build_iargs_table (void)
+{
+   uint64_t tmp;
+   int i=0;
+   
+   if (arg_list_size == 1) {                   // Large
+      iargs = malloc(400 * sizeof(uint32_t));
+      for (tmp=0; ; tmp = tmp + 1 + (tmp >> 1)) {
+         if (tmp >= 0x100000000ULL)
+            tmp = 0xFFFFFFFF;
+         iargs[i++] = tmp;
+         AB_DPRINTF("val %08llx\n", tmp);
+         if (tmp == 0xFFFFFFFF)
+            break;
+      }
+   } else {                                    // Default
+      iargs = malloc(10 * sizeof(uint32_t));
+      // for (tmp = 0; ; tmp = 71*tmp + 1 + (tmp>>1)) {  // gives 8
+      // for (tmp = 0; ; tmp = 100000*tmp + 1 + (tmp>>1)) {  // gives 4
+      for (tmp=0; ; tmp = 999999*tmp + 999999) {  // gives 3
+         if (tmp >= 0x100000000ULL)
+            tmp = 0xFFFFFFFF;
+         iargs[i++] = tmp;
+         AB_DPRINTF("val %08llx\n", tmp);
+         if (tmp == 0xFFFFFFFF)
+            break;
+      }
+   }
+   AB_DPRINTF("Registered %d iargs values\n", i);
+   nb_iargs = i;
+}
+
+static void build_ii16_table (void)
+{
+   uint32_t tmp;
+   int i=0;
+   
+   if (arg_list_size == 1) {                   // Large
+      ii16 = malloc(200 * sizeof(uint32_t));
+      for (tmp=0; ; tmp = tmp + 1 + (tmp >> 2)) {
+         if (tmp >= 0x10000)
+            tmp = 0xFFFF;
+         ii16[i++] = tmp;
+         AB_DPRINTF("val %08x\n", tmp);
+         if (tmp == 0xFFFF)
+            break;
+      }
+   } else {                                    // Default
+      ii16 = malloc(10 * sizeof(uint32_t));
+      for (tmp=0; ; tmp = 999*tmp + 999) {  // gives 3
+         if (tmp >= 0x10000)
+            tmp = 0xFFFF;
+         ii16[i++] = tmp;
+         AB_DPRINTF("val %08x\n", tmp);
+         if (tmp == 0xFFFF)
+            break;
+      }
+   }
+   AB_DPRINTF("Registered %d ii16 values\n", i);
+   nb_ii16 = i;
+}
+
+#if defined (HAS_ALTIVEC)
+static void build_viargs_table (void)
+{
+   unsigned int i=0;
+   
+#if !defined (ALTIVEC_ARGS_LARGE)
+   i=2;
+   viargs = memalign(16, i * sizeof(vector unsigned int));
+   viargs[0] = (vector unsigned int) { 0x01020304,0x05060708,0x090A0B0C,0x0E0D0E0F };
+   viargs[1] = (vector unsigned int) { 0xF1F2F3F4,0xF5F6F7F8,0xF9FAFBFC,0xFEFDFEFF };
+#else
+   // build from iargs table (large/default already set)
+   viargs = malloc(nb_iargs * sizeof(vector unsigned int));
+   for (i=0; i<nb_iargs; i++) {
+      unsigned int j = iargs[i];
+      viargs[i] = (vector unsigned int){ j, j*2, j*3, j*4 };
+   }
+#endif
+   AB_DPRINTF("Registered %d viargs values\n", i);
+   nb_viargs = i;
+}
+
+static inline void register_vfarg (vector float* vfarg,
+                                  int s, uint8_t exp, uint32_t mant)
+{
+   uint32_t tmp;
+   
+   tmp = ((uint64_t)s << 31) | ((uint64_t)exp << 23) | mant;
+   float f = *(float*)&tmp;
+   *vfarg = (vector float){ f,f,f,f };
+   AB_DPRINTF("%d %02x %06x => %08x %0e\n",
+              s, exp, mant, *((uint32_t*)&tmp), f);
+}
+
+static void build_vfargs_table (void)
+{
+   /* Sign goes from zero to one
+    * Exponent goes from 0 to ((1 << 9) - 1)
+    * Mantissa goes from 1 to ((1 << 24) - 1)
+    * + special values:
+    * +0.0      : 0 0x00 0x00000000
+    * -0.0      : 1 0x00 0x00000000
+    * +infinity : 0 0xFF 0x00000000
+    * -infinity : 1 0xFF 0x00000000
+    * +SNaN     : 0 0xFF 0x7FFFFFFF
+    * -SNaN     : 1 0xFF 0x7FFFFFFF
+    * +QNaN     : 0 0xFF 0x80000000
+    * -QNaN     : 1 0xFF 0x80000000
+    * (8 values)
+    */
+   uint32_t mant;
+   uint8_t exp;
+   int s;
+   int i=0;
+   
+   nb_vfargs = 8;
+
+   vfargs = memalign(16, nb_vfargs * sizeof(vector float));
+
+   /* Special values */
+   /* +0.0      : 0 0x00 0x000000 */
+   s = 0;
+   exp = 0x00;
+   mant = 0x000000;
+   register_vfarg(&vfargs[i++], s, exp, mant);
+   /* -0.0      : 1 0x00 0x000000 */
+   s = 1;
+   exp = 0x00;
+   mant = 0x000000;
+   register_vfarg(&vfargs[i++], s, exp, mant);
+
+   /* +infinity : 0 0xFF 0x000000  */
+   s = 0;
+   exp = 0xFF;
+   mant = 0x000000;
+   register_vfarg(&vfargs[i++], s, exp, mant);
+   /* -infinity : 1 0xFF 0x000000 */
+   s = 1;
+   exp = 0xFF;
+   mant = 0x000000;
+   register_vfarg(&vfargs[i++], s, exp, mant);
+
+   /* NaN: exponent all 1s, non-zero fraction */
+   /* SNaN is a NaN with the most significant fraction bit clear.*/
+   /* +SNaN     : 0 0xFF 0x3FFFFF */
+   s = 0;
+   exp = 0xFF;
+   mant = 0x3FFFFF;
+   register_vfarg(&vfargs[i++], s, exp, mant);
+   /* -SNaN     : 1 0xFF 0x3FFFFF */
+   s = 1;
+   exp = 0xFF;
+   mant = 0x3FFFFF;
+   register_vfarg(&vfargs[i++], s, exp, mant);
+
+   /* QNaN is a NaN with the most significant fraction bit set */
+   /* +QNaN     : 0 0xFF 0x400000 */
+   s = 0;
+   exp = 0xFF;
+   mant = 0x400000;
+   register_vfarg(&vfargs[i++], s, exp, mant);
+   /* -QNaN     : 1 0xFF 0x400000 */
+   s = 1;
+   exp = 0xFF;
+   mant = 0x400000;
+   register_vfarg(&vfargs[i++], s, exp, mant);
+   AB_DPRINTF("Registered %d vfargs values\n", i);
+
+   assert(i == nb_vfargs);
+}
+#endif
+
+#if 0
+static void dump_iargs (void)
+{
+   int i;
+   for (i = 0; i < nb_iargs; i++) {
+      printf("iarg %d: %08x %08x %08x\n", i, iargs[i],
+             (unsigned int)&iargs[i], (unsigned int)iargs);
+   }
+}
+
+static void dump_iargs16 (void)
+{
+   int i;
+   for (i = 0; i < nb_ii16; i++) {
+      printf("iarg16 %d: %08x %08x %08x\n", i, ii16[i],
+             (unsigned int)&ii16[i], (unsigned int)ii16);
+   }
+}
+
+static void dump_vfargs (void)
+{
+   int i=0;
+   for (i=0; i<nb_vfargs; i++) {
+      vector float vf = (vector float)vfargs[i];
+      float f = ((float*)&vf)[0];
+      printf("vfarg %3d: %24f : %08x\n", i, f, ((unsigned int*)&f)[0]);
+   }
+}
+#endif
+
+static void test_int_three_args (const unsigned char *name, test_func_t func,
+                                 unused uint32_t test_flags)
+{
+   volatile uint32_t res, flags, xer, tmpcr, tmpxer;
+   int i, j, k;
+   
+   for (i=0; i<nb_iargs; i++) {
+      for (j=0; j<nb_iargs; j++) {
+         for (k=0; k<nb_iargs; k++) {
+            r14 = iargs[i];
+            r15 = iargs[j];
+            r16 = iargs[k];
+            /* Save flags */
+            __asm__ __volatile__ ("mfcr 18");
+            tmpcr = r18;
+            __asm__ __volatile__ ("mfxer 18");
+            tmpxer = r18;
+            /* Set up flags for test */
+            r18 = 0;
+            __asm__ __volatile__ ("mtcr 18");
+            __asm__ __volatile__ ("mtxer 18");
+            (*func)();
+            __asm__ __volatile__ ("mfcr 18");
+            flags = r18;
+            __asm__ __volatile__ ("mfxer 18");
+            xer = r18;
+            res = r17;
+            /* Restore flags */
+            r18 = tmpcr;
+            __asm__ __volatile__ ("mtcr 18");
+            r18 = tmpxer;
+            __asm__ __volatile__ ("mtxer 18");
+            printf("%s %08x, %08x, %08x => %08x (%08x %08x)\n",
+                   name, iargs[i], iargs[j], iargs[k], res, flags, xer);
+         }
+         if (verbose) printf("\n");
+      }
+   }
+}
+
+static void test_int_two_args (const unsigned char *name, test_func_t func,
+                               uint32_t test_flags)
+{
+   volatile uint32_t res, flags, xer, xer_orig, tmpcr, tmpxer;
+   int i, j;
+   
+   xer_orig = 0x00000000;
+ redo:
+   for (i=0; i<nb_iargs; i++) {
+      for (j=0; j<nb_iargs; j++) {
+         r14 = iargs[i];
+         r15 = iargs[j];
+         /* Save flags */
+         __asm__ __volatile__ ("mfcr 18");
+         tmpcr = r18;
+         __asm__ __volatile__ ("mfxer 18");
+         tmpxer = r18;
+         /* Set up flags for test */
+         r18 = 0;
+         __asm__ __volatile__ ("mtcr 18");
+         r18 = xer_orig;
+         __asm__ __volatile__ ("mtxer 18");
+         (*func)();
+         __asm__ __volatile__ ("mfcr 18");
+         flags = r18;
+         __asm__ __volatile__ ("mfxer 18");
+         xer = r18;
+         res = r17;
+         /* Restore flags */
+         r18 = tmpcr;
+         __asm__ __volatile__ ("mtcr 18");
+         r18 = tmpxer;
+         __asm__ __volatile__ ("mtxer 18");
+         printf("%s %08x, %08x => %08x (%08x %08x)\n",
+                name, iargs[i], iargs[j], res, flags, xer);
+      }
+      if (verbose) printf("\n");
+   }
+   if (test_flags & PPC_XER_CA && xer_orig == 0x00000000) {
+      xer_orig = 0x20000000;
+      goto redo;
+   }
+}
+
+static void test_int_one_arg (const unsigned char *name, test_func_t func,
+                               uint32_t test_flags)
+{
+   volatile uint32_t res, flags, xer, xer_orig, tmpcr, tmpxer;
+   int i;
+   
+   xer_orig = 0x00000000;
+ redo:
+   for (i=0; i<nb_iargs; i++) {
+      r14 = iargs[i];
+      /* Save flags */
+      __asm__ __volatile__ ("mfcr 18");
+      tmpcr = r18;
+      __asm__ __volatile__ ("mfxer 18");
+      tmpxer = r18;
+      /* Set up flags for test */
+      r18 = 0;
+      __asm__ __volatile__ ("mtcr 18");
+      r18 = xer_orig;
+      __asm__ __volatile__ ("mtxer 18");
+      (*func)();
+      res = r17;
+      __asm__ __volatile__ ("mfcr 18");
+      flags = r18;
+      __asm__ __volatile__ ("mfxer 18");
+      xer = r18;
+      /* Restore flags */
+      r18 = tmpcr;
+      __asm__ __volatile__ ("mtcr 18");
+      r18 = tmpxer;
+      __asm__ __volatile__ ("mtxer 18");
+      printf("%s %08x => %08x (%08x %08x)\n",
+             name, iargs[i], res, flags, xer);
+   }
+   if (test_flags & PPC_XER_CA && xer_orig == 0x00000000) {
+      xer_orig = 0x20000000;
+      goto redo;
+   }
+}
+
+static inline void invalidate_icache ( void *ptr, int nbytes )
+{
+   unsigned int startaddr = (unsigned int) ptr;
+   unsigned int endaddr   = startaddr + nbytes;
+   unsigned int cls       = 32; /*VG_(cache_line_size_ppc32);*/
+   unsigned int addr;
+
+   startaddr &= ~(cls - 1);
+   for (addr = startaddr; addr < endaddr; addr += cls)
+      asm volatile("dcbst 0,%0" : : "r" (addr));
+   asm volatile("sync");
+   for (addr = startaddr; addr < endaddr; addr += cls)
+      asm volatile("icbi 0,%0" : : "r" (addr));
+   asm volatile("sync; isync");
+}
+
+/* for god knows what reason, if this isn't inlined, the
+   program segfaults. */
+static inline void _patch_op_imm (void *out, void *in,
+                                  uint16_t imm, int sh, int len)
+{
+   volatile uint32_t *p, *q;
+   
+   p = out;
+   q = in;
+   *p = (*q & ~(((1 << len) - 1) << sh)) | ((imm & ((1 << len) - 1)) << sh);
+}
+
+static inline void patch_op_imm (void *out, void *in,
+                                 uint16_t imm, int sh, int len)
+{
+   volatile uint32_t *p;
+   
+   p = out;
+   _patch_op_imm(out, in, imm, sh, len);
+   invalidate_icache(out, 4);
+}
+
+static inline void patch_op_imm16 (void *out, void *in, uint16_t imm)
+{
+   patch_op_imm(out, in, imm, 0, 16);
+}
+
+static void test_int_one_reg_imm16 (const unsigned char *name,
+                                    test_func_t func,
+                                    unused uint32_t test_flags)
+{
+   uint32_t func_buf[2], *p;
+   volatile uint32_t res, flags, xer, tmpcr, tmpxer;
+   int i, j;
+   
+   for (i=0; i<nb_iargs; i++) {
+      for (j=0; j<nb_ii16; j++) {
+         p = (void *)func;
+#if 0
+         printf("copy func %s from %p to %p (%08x %08x)\n",
+                name, func, func_buf, p[0], p[1]);
+#endif
+         func_buf[1] = p[1];
+         patch_op_imm16(func_buf, p, ii16[j]);
+         func = (void *)func_buf;
+#if 0
+         printf(" =>  func %s from %p to %p (%08x %08x)\n",
+                name, func, func_buf, func_buf[0], func_buf[1]);
+#endif
+         r14 = iargs[i];
+         /* Save flags */
+         __asm__ __volatile__ ("mfcr 18");
+         tmpcr = r18;
+         __asm__ __volatile__ ("mfxer 18");
+         tmpxer = r18;
+         /* Set up flags for test */
+         r18 = 0;
+         __asm__ __volatile__ ("mtcr 18");
+         __asm__ __volatile__ ("mtxer 18");
+         (*func)();
+         __asm__ __volatile__ ("mfcr 18");
+         flags = r18;
+         __asm__ __volatile__ ("mfxer 18");
+         xer = r18;
+         res = r17;
+         /* Restore flags */
+         r18 = tmpcr;
+         __asm__ __volatile__ ("mtcr 18");
+         r18 = tmpxer;
+         __asm__ __volatile__ ("mtxer 18");
+         printf("%s %08x, %08x => %08x (%08x %08x)\n",
+                name, iargs[i], ii16[j], res, flags, xer);
+      }
+      if (verbose) printf("\n");
+   }
+}
+
+/* Special test cases for:
+ * rlwimi
+ * rlwinm
+ * rlwnm
+ * srawi
+ * mcrf
+ * mcrfs
+ * mcrxr_cb
+ * mfcr_cb
+ * mfspr_cb
+ * mftb_cb
+ * mtcrf_cb
+ * mtspr_cb
+ */
+
+static void rlwi_cb (const unsigned char *name, test_func_t func,
+                     unused uint32_t test_flags)
+{
+   uint32_t func_buf[2], *p;
+   volatile uint32_t res, flags, xer, tmpcr, tmpxer;
+   int i, j, k, l;
+   
+   int arg_step = (arg_list_size == 0) ? 31 : 3;
+   
+   for (i=0; i<nb_iargs; i++) {
+      for (j=0; j<32; j+=arg_step) {
+         for (k=0; k<32; k+=arg_step) {
+            for (l=0; l<32; l+=arg_step) {
+               p = (void *)func;
+               func_buf[1] = p[1];
+               _patch_op_imm(func_buf, p, j, 11, 5);
+               _patch_op_imm(func_buf, p, k, 6, 5);
+               patch_op_imm(func_buf, p, l, 1, 5);
+               func = (void *)func_buf;
+               r14 = iargs[i];
+               /* Save flags */
+               __asm__ __volatile__ ("mfcr 18");
+               tmpcr = r18;
+               __asm__ __volatile__ ("mfxer 18");
+               tmpxer = r18;
+               /* Set up flags for test */
+               r18 = 0;
+               __asm__ __volatile__ ("mtcr 18");
+               __asm__ __volatile__ ("mtxer 18");
+               (*func)();
+               __asm__ __volatile__ ("mfcr 18");
+               flags = r18;
+               __asm__ __volatile__ ("mfxer 18");
+               xer = r18;
+               res = r17;
+               /* Restore flags */
+               r18 = tmpcr;
+               __asm__ __volatile__ ("mtcr 18");
+               r18 = tmpxer;
+               __asm__ __volatile__ ("mtxer 18");
+               printf("%s %08x, %d, %d, %d => %08x (%08x %08x)\n",
+                      name, iargs[i], j, k, l, res, flags, xer);
+            }
+            if (verbose) printf("\n");
+         }
+      }
+   }
+}
+
+static void rlwnm_cb (const unsigned char *name, test_func_t func,
+                      unused uint32_t test_flags)
+{
+   uint32_t func_buf[2], *p;
+   volatile uint32_t res, flags, xer, tmpcr, tmpxer;
+   int i, j, k, l;
+   
+   int arg_step = (arg_list_size == 0) ? 31 : 3;
+   
+   for (i=0; i<nb_iargs; i++) {
+      for (j=0; j<nb_iargs; j++) {
+         for (k=0; k<32; k+=arg_step) {
+            for (l=0; l<32; l+=arg_step) {
+               p = (void *)func;
+               func_buf[1] = p[1];
+               _patch_op_imm(func_buf, p, k, 6, 5);
+               patch_op_imm(func_buf, p, l, 1, 5);
+               func = (void *)func_buf;
+               r14 = iargs[i];
+               r15 = iargs[j];
+               /* Save flags */
+               __asm__ __volatile__ ("mfcr 18");
+               tmpcr = r18;
+               __asm__ __volatile__ ("mfxer 18");
+               tmpxer = r18;
+               /* Set up flags for test */
+               r18 = 0;
+               __asm__ __volatile__ ("mtcr 18");
+               __asm__ __volatile__ ("mtxer 18");
+               (*func)();
+               __asm__ __volatile__ ("mfcr 18");
+               flags = r18;
+               __asm__ __volatile__ ("mfxer 18");
+               xer = r18;
+               res = r17;
+               /* Restore flags */
+               r18 = tmpcr;
+               __asm__ __volatile__ ("mtcr 18");
+               r18 = tmpxer;
+               __asm__ __volatile__ ("mtxer 18");
+               printf("%s %08x, %08x, %d, %d => %08x (%08x %08x)\n",
+                      name, iargs[i], iargs[j], k, l, res, flags, xer);
+            }
+            if (verbose) printf("\n");
+         }
+      }
+   }
+}
+
+static void srawi_cb (const unsigned char *name, test_func_t func,
+                      unused uint32_t test_flags)
+{
+   uint32_t func_buf[2], *p;
+   volatile uint32_t res, flags, xer, tmpcr, tmpxer;
+   int i, j;
+   
+   int arg_step = (arg_list_size == 0) ? 31 : 1;
+   
+   for (i=0; i<nb_iargs; i++) {
+      for (j=0; j<32; j+=arg_step) {
+         p = (void *)func;
+         func_buf[1] = p[1];
+         patch_op_imm(func_buf, p, j, 11, 5);
+         func = (void *)func_buf;
+         r14 = iargs[i];
+         /* Save flags */
+         __asm__ __volatile__ ("mfcr 18");
+         tmpcr = r18;
+         __asm__ __volatile__ ("mfxer 18");
+         tmpxer = r18;
+         /* Set up flags for test */
+         r18 = 0;
+         __asm__ __volatile__ ("mtcr 18");
+         __asm__ __volatile__ ("mtxer 18");
+         (*func)();
+         __asm__ __volatile__ ("mfcr 18");
+         flags = r18;
+         __asm__ __volatile__ ("mfxer 18");
+         xer = r18;
+         res = r17;
+         /* Restore flags */
+         r18 = tmpcr;
+         __asm__ __volatile__ ("mtcr 18");
+         r18 = tmpxer;
+         __asm__ __volatile__ ("mtxer 18");
+         printf("%s %08x, %d => %08x (%08x %08x)\n",
+                name, iargs[i], j, res, flags, xer);
+      }
+      if (verbose) printf("\n");
+   }
+}
+
+static void mcrf_cb (const unsigned char *name, test_func_t func,
+                      unused uint32_t test_flags)
+{
+   uint32_t func_buf[2], *p;
+   volatile uint32_t flags, xer, tmpcr, tmpxer;
+   int i, j, k;
+   
+   int arg_step = (arg_list_size == 0) ? 7 : 1;
+   
+   for (i=0; i<nb_iargs; i++) {
+      for (j=0; j<8; j+=arg_step) {
+         for (k=0; k<8; k+=arg_step) {
+            p = (void *)func;
+            func_buf[1] = p[1];
+            _patch_op_imm(func_buf, p, j, 23, 3);
+            patch_op_imm(func_buf, p, k, 18, 3);
+            func = (void *)func_buf;
+            r14 = iargs[i];
+            /* Save flags */
+            __asm__ __volatile__ ("mfcr 18");
+            tmpcr = r18;
+            __asm__ __volatile__ ("mfxer 18");
+            tmpxer = r18;
+            /* Set up flags for test */
+            r18 = 0;
+            __asm__ __volatile__ ("mtcr 14");
+            __asm__ __volatile__ ("mtxer 18");
+            (*func)();
+            __asm__ __volatile__ ("mfcr 18");
+            flags = r18;
+            __asm__ __volatile__ ("mfxer 18");
+            xer = r18;
+            /* Restore flags */
+            r18 = tmpcr;
+            __asm__ __volatile__ ("mtcr 18");
+            r18 = tmpxer;
+            __asm__ __volatile__ ("mtxer 18");
+            printf("%s %d, %d (%08x) => (%08x %08x)\n",
+                   name, j, k, iargs[i], flags, xer);
+         }
+         if (verbose) printf("\n");
+      }
+   }
+}
+
+#if 0
+static void mcrfs_cb (const unsigned char *name, test_func_t func,
+                      unused uint32_t test_flags)
+{}
+#endif
+
+
+static void mcrxr_cb (const unsigned char *name, test_func_t func,
+                      unused uint32_t test_flags)
+{
+   uint32_t func_buf[2], *p;
+   volatile uint32_t flags, xer, tmpcr, tmpxer;
+   int i, j, k;
+   
+   int arg_step = 1; //(arg_list_size == 0) ? 7 : 1;
+   
+   for (i=0; i<16; i+=arg_step) {
+      j = i << 28;
+      for (k=0; k<8; k+=arg_step) {
+         p = (void *)func;
+         func_buf[1] = p[1];
+         patch_op_imm(func_buf, p, k, 23, 3);
+         func = (void *)func_buf;
+         r14 = j;
+         /* Save flags */
+         __asm__ __volatile__ ("mfcr 18");
+         tmpcr = r18;
+         __asm__ __volatile__ ("mfxer 18");
+         tmpxer = r18;
+         /* Set up flags for test */
+         r18 = 0;
+         __asm__ __volatile__ ("mtcr 18");
+         __asm__ __volatile__ ("mtxer 14");
+         (*func)();
+         __asm__ __volatile__ ("mfcr 18");
+         flags = r18;
+         __asm__ __volatile__ ("mfxer 18");
+         xer = r18;
+         /* Restore flags */
+         r18 = tmpcr;
+         __asm__ __volatile__ ("mtcr 18");
+         r18 = tmpxer;
+         __asm__ __volatile__ ("mtxer 18");
+         printf("%s %d (%08x) => (%08x %08x)\n",
+                name, k, j, flags, xer);
+      }
+      if (verbose) printf("\n");
+   }
+}
+
+static void mfcr_cb (const unsigned char *name, test_func_t func,
+                     unused uint32_t test_flags)
+{
+   volatile uint32_t res, flags, xer, tmpcr, tmpxer;
+   int i;
+   
+   for (i=0; i<nb_iargs; i++) {
+      r14 = iargs[i];
+      /* Save flags */
+      __asm__ __volatile__ ("mfcr 18");
+      tmpcr = r18;
+      __asm__ __volatile__ ("mfxer 18");
+      tmpxer = r18;
+      /* Set up flags for test */
+      r18 = 0;
+      __asm__ __volatile__ ("mtcr 14");
+      __asm__ __volatile__ ("mtxer 18");
+      (*func)();
+      __asm__ __volatile__ ("mfcr 18");
+      flags = r18;
+      __asm__ __volatile__ ("mfxer 18");
+      xer = r18;
+      res = r17;
+      /* Restore flags */
+      r18 = tmpcr;
+      __asm__ __volatile__ ("mtcr 18");
+      r18 = tmpxer;
+      __asm__ __volatile__ ("mtxer 18");
+      printf("%s (%08x) => %08x (%08x %08x)\n",
+             name, iargs[i], res, flags, xer);
+   }
+}
+
+// NOTE: Not using func: calling function kills lr
+static void mfspr_cb (const unsigned char *name, test_func_t func,
+                      unused uint32_t test_flags)
+{
+   volatile uint32_t res, flags, xer, ctr, lr, tmpcr, tmpxer;
+   int j, k;
+   
+   // Call func, just to stop compiler complaining
+   (*func)();
+   // mfxer
+   j = 1;
+   for (k=0; k<nb_iargs; k++) {
+      r14 = iargs[k];
+      /* Save flags */
+      __asm__ __volatile__ ("mfcr 18");
+      tmpcr = r18;
+      __asm__ __volatile__ ("mfxer 18");
+      tmpxer = r18;
+
+      /* Set up flags for test */
+      r18 = 0;
+      // Only valid bits of xer: 0xE000007F
+      __asm__ __volatile__ ("lis  15,0xE000");
+      __asm__ __volatile__ ("addi 15,15,0x007F");
+      __asm__ __volatile__ ("and  16,15,14");
+      
+      __asm__ __volatile__ ("mtcr  18");
+      __asm__ __volatile__ ("mtxer 16");
+      __asm__ __volatile__ ("mtlr  18");
+      __asm__ __volatile__ ("mtctr 18");
+      
+      __asm__ __volatile__ ("mfspr 17, 1");   // func()
+      
+      __asm__ __volatile__ ("mfxer 18");
+      xer = r18;
+      __asm__ __volatile__ ("mfcr  18");
+      flags = r18;
+      __asm__ __volatile__ ("mflr  18");
+      lr = r18;
+      __asm__ __volatile__ ("mfctr 18");
+      ctr = r18;
+      res = r17;
+
+      /* Restore flags */
+      r18 = tmpcr;
+      __asm__ __volatile__ ("mtcr 18");
+      r18 = tmpxer;
+      __asm__ __volatile__ ("mtxer 18");
+
+      printf("%s %d (%08x) => %08x (%08x %08x, %08x, %08x)\n",
+             name, j, iargs[k], res, flags, xer, lr, ctr);
+   }
+   if (verbose) printf("\n");
+   
+   // mflr
+   j = 8;
+   for (k=0; k<nb_iargs; k++) {
+      r14 = iargs[k];
+
+      /* Save flags */
+      __asm__ __volatile__ ("mfcr 18");
+      tmpcr = r18;
+      __asm__ __volatile__ ("mfxer 18");
+      tmpxer = r18;
+
+      /* Set up flags for test */
+      r18 = 0;
+      __asm__ __volatile__ ("mtcr  18");
+      __asm__ __volatile__ ("mtlr  14");
+      __asm__ __volatile__ ("mtctr 18");
+      __asm__ __volatile__ ("mtxer 18");
+
+      __asm__ __volatile__ ("mfspr 17, 8");   // func()
+      
+      __asm__ __volatile__ ("mfxer 18");
+      xer = r18;
+      __asm__ __volatile__ ("mfcr  18");
+      flags = r18;
+      __asm__ __volatile__ ("mflr  18");
+      lr = r18;
+      __asm__ __volatile__ ("mfctr 18");
+      ctr = r18;
+      res = r17;
+
+      /* Restore flags */
+      r18 = tmpcr;
+      __asm__ __volatile__ ("mtcr 18");
+      r18 = tmpxer;
+      __asm__ __volatile__ ("mtxer 18");
+
+      printf("%s %d (%08x) => %08x (%08x %08x, %08x, %08x)\n",
+             name, j, iargs[k], res, flags, xer, lr, ctr);
+   }
+   if (verbose) printf("\n");
+
+   // mfctr
+   j = 9;
+   for (k=0; k<nb_iargs; k++) {
+      r14 = iargs[k];
+
+      /* Save flags */
+      __asm__ __volatile__ ("mfcr 18");
+      tmpcr = r18;
+      __asm__ __volatile__ ("mfxer 18");
+      tmpxer = r18;
+
+      /* Set up flags for test */
+      r18 = 0;
+      __asm__ __volatile__ ("mtcr  18");
+      __asm__ __volatile__ ("mtctr 14");
+      __asm__ __volatile__ ("mtxer 18");
+      __asm__ __volatile__ ("mtlr  18");
+      
+      __asm__ __volatile__ ("mfspr 17, 9");   // func()
+      
+      __asm__ __volatile__ ("mfcr  18");
+      flags = r18;
+      __asm__ __volatile__ ("mfxer 18");
+      xer = r18;
+      __asm__ __volatile__ ("mflr  18");
+      lr = r18;
+      __asm__ __volatile__ ("mfctr 18");
+      ctr = r18;
+      res = r17;
+
+      /* Restore flags */
+      r18 = tmpcr;
+      __asm__ __volatile__ ("mtcr 18");
+      r18 = tmpxer;
+      __asm__ __volatile__ ("mtxer 18");
+
+      printf("%s %d (%08x) => %08x (%08x %08x, %08x, %08x)\n",
+             name, 9, iargs[k], res, flags, xer, lr, ctr);
+   }
+}
+
+#if 0
+static void mftb_cb (const unsigned char *name, test_func_t func,
+                     unused uint32_t test_flags)
+{
+// How to test this?
+// 1) TBU won't change for a while
+// 2) TBL will have changed every loop iter
+
+   volatile uint32_t res, flags, xer, tmpcr, tmpxer;
+   int i, j;
+   
+   i = 269;
+   for (j=0; j<16; j++) {
+      /* Save flags */
+      __asm__ __volatile__ ("mfcr 18");
+      tmpcr = r18;
+      __asm__ __volatile__ ("mfxer 18");
+      tmpxer = r18;
+      /* Set up flags for test */
+      r18 = 0;
+      __asm__ __volatile__ ("mtcr 18");
+      __asm__ __volatile__ ("mtxer 18");
+      
+      __asm__ __volatile__ ("mftb 17, 269");  // func
+      
+      __asm__ __volatile__ ("mfcr 18");
+      flags = r18;
+      __asm__ __volatile__ ("mfxer 18");
+      xer = r18;
+      res = r17;
+      /* Restore flags */
+      r18 = tmpcr;
+      __asm__ __volatile__ ("mtcr 18");
+      r18 = tmpxer;
+      __asm__ __volatile__ ("mtxer 18");
+      printf("%s %d => %08x (%08x %08x)\n",
+             name, i, res, flags, xer);
+   }
+   if (verbose) printf("\n");
+   
+   i = 268;
+   for (j=0; j<16; j++) {
+      /* Save flags */
+      __asm__ __volatile__ ("mfcr 18");
+      tmpcr = r18;
+      __asm__ __volatile__ ("mfxer 18");
+      tmpxer = r18;
+      /* Set up flags for test */
+      r18 = 0;
+      __asm__ __volatile__ ("mtcr 18");
+      __asm__ __volatile__ ("mtxer 18");
+      
+      __asm__ __volatile__ ("mftb 17, 268");  // func
+      
+      __asm__ __volatile__ ("mfcr 18");
+      flags = r18;
+      __asm__ __volatile__ ("mfxer 18");
+      xer = r18;
+      res = r17;
+      /* Restore flags */
+      r18 = tmpcr;
+      __asm__ __volatile__ ("mtcr 18");
+      r18 = tmpxer;
+      __asm__ __volatile__ ("mtxer 18");
+      printf("%s %d => %08x (%08x %08x)\n",
+             name, i, res, flags, xer);
+   }
+}
+#endif
+
+static void mtcrf_cb (const unsigned char *name, test_func_t func,
+                      unused uint32_t test_flags)
+{
+   uint32_t func_buf[2], *p;
+   volatile uint32_t flags, xer, tmpcr, tmpxer;
+   int i, j;
+   
+   int arg_step = (arg_list_size == 0) ? 99 : 1;
+   
+   for (i=0; i<nb_iargs; i++) {
+      for (j=0; j<256; j+=arg_step) {
+         p = (void *)func;
+         func_buf[1] = p[1];
+         patch_op_imm(func_buf, p, j, 12, 8);
+         func = (void *)func_buf;
+         r14 = iargs[i];
+         /* Save flags */
+         __asm__ __volatile__ ("mfcr 18");
+         tmpcr = r18;
+         __asm__ __volatile__ ("mfxer 18");
+         tmpxer = r18;
+         /* Set up flags for test */
+         r18 = 0;
+         __asm__ __volatile__ ("mtcr 18");
+         __asm__ __volatile__ ("mtxer 18");
+         (*func)();
+         __asm__ __volatile__ ("mfcr 18");
+         flags = r18;
+         __asm__ __volatile__ ("mfxer 18");
+         xer = r18;
+         /* Restore flags */
+         r18 = tmpcr;
+         __asm__ __volatile__ ("mtcr 18");
+         r18 = tmpxer;
+         __asm__ __volatile__ ("mtxer 18");
+         printf("%s %d, %08x => (%08x %08x)\n",
+                name, j, iargs[i], flags, xer);
+      }
+      if (verbose) printf("\n");
+   }
+}
+
+// NOTE: Not using func: calling function kills lr
+static void mtspr_cb (const unsigned char *name, test_func_t func,
+                      unused uint32_t test_flags)
+{
+   volatile uint32_t flags, xer, ctr, lr, tmpcr, tmpxer;
+   int j, k;
+   
+   // Call func, just to stop compiler complaining
+   (*func)();
+   
+   // mtxer
+   j = 1;
+   for (k=0; k<nb_iargs; k++) {
+      r14 = iargs[k];
+
+      /* Save flags */
+      __asm__ __volatile__ ("mfcr 18");
+      tmpcr = r18;
+      __asm__ __volatile__ ("mfxer 18");
+      tmpxer = r18;
+
+      /* Set up flags for test */
+      r18 = 0;
+      
+      // Only valid bits of xer: 0xE000007F
+      // VEX masks these (maybe it shouldn't?), so let's do it first:
+      __asm__ __volatile__ ("lis  15,0xE000");
+      __asm__ __volatile__ ("addi 15,15,0x007F");
+      __asm__ __volatile__ ("and  16,15,14");
+      
+      __asm__ __volatile__ ("mtcr  18");
+      __asm__ __volatile__ ("mtxer 18");
+      __asm__ __volatile__ ("mtlr  18");
+      __asm__ __volatile__ ("mtctr 18");
+      
+      __asm__ __volatile__ ("mtxer 16");   // func()
+      
+      __asm__ __volatile__ ("mfxer 18");
+      xer = r18;
+      __asm__ __volatile__ ("mfcr  18");
+      flags = r18;
+      __asm__ __volatile__ ("mflr  18");
+      lr = r18;
+      __asm__ __volatile__ ("mfctr 18");
+      ctr = r18;
+
+      /* Restore flags */
+      r18 = tmpcr;
+      __asm__ __volatile__ ("mtcr 18");
+      r18 = tmpxer;
+      __asm__ __volatile__ ("mtxer 18");
+
+      printf("%s %d, %08x => (%08x %08x, %08x, %08x)\n",
+             name, j, iargs[k], flags, xer, lr, ctr);
+   }
+   if (verbose) printf("\n");
+   
+   // mtlr
+   j = 8;
+   for (k=0; k<nb_iargs; k++) {
+      r14 = iargs[k];
+
+      /* Save flags */
+      __asm__ __volatile__ ("mfcr 18");
+      tmpcr = r18;
+      __asm__ __volatile__ ("mfxer 18");
+      tmpxer = r18;
+
+      /* Set up flags for test */
+      r18 = 0x0;
+      __asm__ __volatile__ ("mtcr  18");
+      __asm__ __volatile__ ("mtlr  18");
+      __asm__ __volatile__ ("mtctr 18");
+      __asm__ __volatile__ ("mtxer 18");
+      
+      __asm__ __volatile__ ("mtlr  14");   // func()
+      
+      __asm__ __volatile__ ("mfxer 18");
+      xer = r18;
+      __asm__ __volatile__ ("mfcr  18");
+      flags = r18;
+      __asm__ __volatile__ ("mflr  18");
+      lr = r18;
+      __asm__ __volatile__ ("mfctr 17");  // CAB: if 18, bashes lr - bad gcc opt?
+      ctr = r17;
+
+      /* Restore flags */
+      r18 = tmpcr;
+      __asm__ __volatile__ ("mtcr 18");
+      r18 = tmpxer;
+      __asm__ __volatile__ ("mtxer 18");
+
+      printf("%s %d, %08x => (%08x %08x, %08x, %08x)\n",
+             name, j, iargs[k], flags, xer, lr, ctr);
+   }
+   if (verbose) printf("\n");
+   
+   // mtctr
+   j = 9;
+   for (k=0; k<nb_iargs; k++) {
+      r14 = iargs[k];
+
+      /* Save flags */
+      __asm__ __volatile__ ("mfcr 18");
+      tmpcr = r18;
+      __asm__ __volatile__ ("mfxer 18");
+      tmpxer = r18;
+
+      /* Set up flags for test */
+      r18 = 0;
+      __asm__ __volatile__ ("mtcr  18");
+      __asm__ __volatile__ ("mtctr 18");
+      __asm__ __volatile__ ("mtxer 18");
+      __asm__ __volatile__ ("mtlr  18");
+      
+      __asm__ __volatile__ ("mtctr 14");   // func()
+      
+      __asm__ __volatile__ ("mfxer 18");
+      xer = r18;
+      __asm__ __volatile__ ("mfcr  18");
+      flags = r18;
+      __asm__ __volatile__ ("mflr  18");
+      lr = r18;
+      __asm__ __volatile__ ("mfctr 17");
+      ctr = r17;
+
+      /* Restore flags */
+      r18 = tmpcr;
+      __asm__ __volatile__ ("mtcr 18");
+      r18 = tmpxer;
+      __asm__ __volatile__ ("mtxer 18");
+
+      printf("%s %d, %08x => (%08x %08x, %08x, %08x)\n",
+             name, j, iargs[k], flags, xer, lr, ctr);
+   }
+}
+
+
+
+typedef struct special_t special_t;
+
+struct special_t {
+   const unsigned char *name;
+   void (*test_cb)(const unsigned char *name, test_func_t func,
+                   unused uint32_t test_flags);
+};
+
+static void test_special (special_t *table,
+                          const unsigned char *name, test_func_t func,
+                          unused uint32_t test_flags)
+{
+   const unsigned char *tmp;
+   int i;
+   
+   for (tmp = name; isspace(*tmp); tmp++)
+      continue;
+   for (i=0; table[i].name != NULL; i++) {
+#if 0
+      fprintf(stderr, "look for handler for '%s' (%s)\n", name,
+              table[i].name);
+#endif
+      if (strcmp(table[i].name, tmp) == 0) {
+         (*table[i].test_cb)(name, func, test_flags);
+         return;
+      }
+   }
+   fprintf(stderr, "ERROR: no test found for op '%s'\n", name);
+}
+
+static special_t special_int_ops[] = {
+   {
+      "rlwimi", /* One register + 3 5 bits immediate arguments */
+      &rlwi_cb,
+   },
+   {
+      "rlwimi.", /* One register + 3 5 bits immediate arguments */
+      &rlwi_cb,
+   },
+   {
+      "rlwinm", /* One register + 3 5 bits immediate arguments */
+      &rlwi_cb,
+   },
+   {
+      "rlwinm.", /* One register + 3 5 bits immediate arguments */
+      &rlwi_cb,
+   },
+   {
+      "rlwnm",  /* Two registers + 2 5 bits immediate arguments */
+      &rlwnm_cb,
+   },
+   {
+      "rlwnm.",  /* Two registers + 2 5 bits immediate arguments */
+      &rlwnm_cb,
+   },
+   {
+      "srawi",  /* One register + 1 5 bits immediate arguments */
+      &srawi_cb,
+   },
+   {
+      "srawi.",  /* One register + 1 5 bits immediate arguments */
+      &srawi_cb,
+   },
+   {
+      "mcrf",  /* 2 3 bits immediate arguments */
+      &mcrf_cb,
+   },
+#if 0
+   {
+      "mcrfs",  /* 2 3 bits immediate arguments */
+      &mcrfs_cb,
+   },
+#endif
+   {
+      "mcrxr",  /* 1 3 bits immediate argument */
+      &mcrxr_cb,
+   },
+   {
+      "mfcr",  /* No arguments */
+      &mfcr_cb,
+   },
+   {
+      "mfspr",  /* 1 10 bits immediate argument */
+      &mfspr_cb,
+   },
+#if 0
+   {   // Move from time base
+      "mftb",  /* 1 10 bits immediate arguments */
+      &mftb_cb,
+   },
+#endif
+   {
+      "mtcrf",  /* One register + 1 8 bits immediate arguments */
+      &mtcrf_cb,
+   },
+   {
+      "mtspr",  /* One register + 1 10 bits immediate arguments */
+      &mtspr_cb,
+   },
+   {
+      NULL,
+      NULL,
+   },
+};
+
+static void test_int_special (const unsigned char *name, test_func_t func,
+                              uint32_t test_flags)
+{
+   test_special(special_int_ops, name, func, test_flags);
+}
+
+
+static void test_int_ld_one_reg_imm16 (const unsigned char *name,
+                                       test_func_t func,
+                                       unused uint32_t test_flags)
+{
+   uint32_t func_buf[2], *p;
+   volatile uint32_t res, rA, flags, xer, tmpcr, tmpxer;
+   int i, j;
+   
+   // +ve d
+   for (i=0; i<nb_iargs; i++) {
+      j = i * 4;          // sizeof(uint32_t)
+      p = (void *)func;
+      func_buf[1] = p[1];
+      patch_op_imm16(func_buf, p, j);
+      func = (void *)func_buf;
+      r14 = (uint32_t)&iargs[0];
+
+      /* Save flags */
+      __asm__ __volatile__ ("mfcr 18");
+      tmpcr = r18;
+      __asm__ __volatile__ ("mfxer 18");
+      tmpxer = r18;
+      
+      /* Set up flags for test */
+      r18 = 0;
+      __asm__ __volatile__ ("mtcr 18");
+      __asm__ __volatile__ ("mtxer 18");
+      (*func)();
+      __asm__ __volatile__ ("mfcr 18");
+      flags = r18;
+      __asm__ __volatile__ ("mfxer 18");
+      xer = r18;
+      res = r17;
+      rA = r14;
+
+      /* Restore flags */
+      r18 = tmpcr;
+      __asm__ __volatile__ ("mtcr 18");
+      r18 = tmpxer;
+      __asm__ __volatile__ ("mtxer 18");
+
+      printf("%s %d, (%08x) => %08x, (%08x %08x)\n",
+             name, j, /*&iargs[0], */ iargs[i], res, /*rA, */ flags, xer);
+   }
+   if (verbose) printf("\n");
+   
+   // -ve d
+   for (i = -nb_iargs+1; i<=0; i++) {
+      j = i * 4;          // sizeof(uint32_t)
+      p = (void *)func;
+      func_buf[1] = p[1];
+      patch_op_imm16(func_buf, p, j);
+      func = (void *)func_buf;
+      r14 = (uint32_t)&iargs[nb_iargs-1];
+
+      /* Save flags */
+      __asm__ __volatile__ ("mfcr 18");
+      tmpcr = r18;
+      __asm__ __volatile__ ("mfxer 18");
+      tmpxer = r18;
+      
+      /* Set up flags for test */
+      r18 = 0;
+      __asm__ __volatile__ ("mtcr 18");
+      __asm__ __volatile__ ("mtxer 18");
+      (*func)();
+      __asm__ __volatile__ ("mfcr 18");
+      flags = r18;
+      __asm__ __volatile__ ("mfxer 18");
+      xer = r18;
+      res = r17;
+      rA = r14;
+
+      /* Restore flags */
+      r18 = tmpcr;
+      __asm__ __volatile__ ("mtcr 18");
+      r18 = tmpxer;
+      __asm__ __volatile__ ("mtxer 18");
+
+      printf("%s %d, (%08x) => %08x (%08x %08x)\n",
+             name, j, /*&iargs[nb_iargs-1], */ iargs[nb_iargs-1+i], res, /*rA, */ flags, xer);
+   }
+}
+
+static void test_int_ld_two_regs (const unsigned char *name,
+                                  test_func_t func,
+                                  unused uint32_t test_flags)
+{
+   volatile uint32_t res, rA, flags, xer, tmpcr, tmpxer;
+   int i, j;
+   
+   // +ve d
+   for (i=0; i<nb_iargs; i++) {
+      j = i * 4;          // sizeof(uint32_t)
+      r14 = (uint32_t)&iargs[0];
+      r15 = j;
+
+      /* Save flags */
+      __asm__ __volatile__ ("mfcr 18");
+      tmpcr = r18;
+      __asm__ __volatile__ ("mfxer 18");
+      tmpxer = r18;
+      
+      /* Set up flags for test */
+      r18 = 0;
+      __asm__ __volatile__ ("mtcr 18");
+      __asm__ __volatile__ ("mtxer 18");
+      (*func)();
+      __asm__ __volatile__ ("mfcr 18");
+      flags = r18;
+      __asm__ __volatile__ ("mfxer 18");
+      xer = r18;
+      res = r17;
+      rA = r14;
+
+      /* Restore flags */
+      r18 = tmpcr;
+      __asm__ __volatile__ ("mtcr 18");
+      r18 = tmpxer;
+      __asm__ __volatile__ ("mtxer 18");
+
+      printf("%s %d (%08x) => %08x (%08x %08x)\n",
+             name, /*&iargs[0], */ j, iargs[i], res, /*rA, */ flags, xer);
+   }
+}
+
+static void test_int_st_two_regs_imm16 (const unsigned char *name,
+                                        test_func_t func,
+                                        unused uint32_t test_flags)
+{
+   uint32_t func_buf[2], *p;
+   volatile uint32_t rA, flags, xer, tmpcr, tmpxer;
+   int i, j;
+   uint32_t *iargs_priv;
+   
+   // private iargs table to store to
+   iargs_priv = malloc(nb_iargs * sizeof(uint32_t));
+   for (i=0; i<nb_iargs; i++)
+      iargs_priv[i] = 0;
+   
+   //     __asm__ __volatile__ ("stwu         14,0(15)");
+   
+   // +ve d
+   for (i=0; i<nb_iargs; i++) {
+      j = i * 4;          // sizeof(uint32_t)
+      p = (void *)func;
+      func_buf[1] = p[1];
+      patch_op_imm16(func_buf, p, j);
+      func = (void *)func_buf;
+      r14 = iargs[i];                      // read from iargs
+      r15 = (uint32_t)&iargs_priv[0];      // store to r15 + j
+
+      /* Save flags */
+      __asm__ __volatile__ ("mfcr 18");
+      tmpcr = r18;
+      __asm__ __volatile__ ("mfxer 18");
+      tmpxer = r18;
+      
+      /* Set up flags for test */
+      r18 = 0;
+      __asm__ __volatile__ ("mtcr 18");
+      __asm__ __volatile__ ("mtxer 18");
+      (*func)();
+      __asm__ __volatile__ ("mfcr 18");
+      flags = r18;
+      __asm__ __volatile__ ("mfxer 18");
+      xer = r18;
+      rA = r15;
+
+      /* Restore flags */
+      r18 = tmpcr;
+      __asm__ __volatile__ ("mtcr 18");
+      r18 = tmpxer;
+      __asm__ __volatile__ ("mtxer 18");
+
+      printf("%s %08x, %d => %08x, (%08x %08x)\n",
+             name, iargs[i], j, /*&iargs_priv[0], */ iargs_priv[i], /*rA, */ flags, xer);
+   }
+   if (verbose) printf("\n");
+   
+   // -ve d
+   for (i = -nb_iargs+1; i<=0; i++) {
+      j = i * 4;          // sizeof(uint32_t)
+      p = (void *)func;
+      func_buf[1] = p[1];
+      patch_op_imm16(func_buf, p, j);
+      func = (void *)func_buf;
+      r14 = iargs[nb_iargs-1+i];                // read from iargs
+      r15 = (uint32_t)&iargs_priv[nb_iargs-1];  // store to r15 + j
+
+      /* Save flags */
+      __asm__ __volatile__ ("mfcr 18");
+      tmpcr = r18;
+      __asm__ __volatile__ ("mfxer 18");
+      tmpxer = r18;
+      
+      /* Set up flags for test */
+      r18 = 0;
+      __asm__ __volatile__ ("mtcr 18");
+      __asm__ __volatile__ ("mtxer 18");
+      (*func)();
+      __asm__ __volatile__ ("mfcr 18");
+      flags = r18;
+      __asm__ __volatile__ ("mfxer 18");
+      xer = r18;
+      rA = r15;
+
+      /* Restore flags */
+      r18 = tmpcr;
+      __asm__ __volatile__ ("mtcr 18");
+      r18 = tmpxer;
+      __asm__ __volatile__ ("mtxer 18");
+
+      printf("%s %08x, %d => %08x, (%08x %08x)\n",
+             name, iargs[nb_iargs-1+i], j, /*&iargs_priv[nb_iargs-1], */ iargs_priv[nb_iargs-1+i], /*rA, */ flags, xer);
+   }
+   free(iargs_priv);
+}
+
+static void test_int_st_three_regs (const unsigned char *name,
+                                    test_func_t func,
+                                    unused uint32_t test_flags)
+{
+   volatile uint32_t rA, flags, xer, tmpcr, tmpxer;
+   int i, j;
+   uint32_t *iargs_priv;
+   
+   // private iargs table to store to
+   iargs_priv = malloc(nb_iargs * sizeof(uint32_t));
+   for (i=0; i<nb_iargs; i++)
+      iargs_priv[i] = 0;
+   
+   for (i=0; i<nb_iargs; i++) {
+      j = i * 4;          // sizeof(uint32_t)
+      r14 = iargs[i];                      // read from iargs
+      r15 = (uint32_t)&iargs_priv[0];      // store to r15 + j
+      r16 = j;
+
+      /* Save flags */
+      __asm__ __volatile__ ("mfcr 18");
+      tmpcr = r18;
+      __asm__ __volatile__ ("mfxer 18");
+      tmpxer = r18;
+      
+      /* Set up flags for test */
+      r18 = 0;
+      __asm__ __volatile__ ("mtcr 18");
+      __asm__ __volatile__ ("mtxer 18");
+      (*func)();
+      __asm__ __volatile__ ("mfcr 18");
+      flags = r18;
+      __asm__ __volatile__ ("mfxer 18");
+      xer = r18;
+      rA = r15;
+
+      /* Restore flags */
+      r18 = tmpcr;
+      __asm__ __volatile__ ("mtcr 18");
+      r18 = tmpxer;
+      __asm__ __volatile__ ("mtxer 18");
+
+      printf("%s %08x, %d => %08x, (%08x %08x)\n",
+             name, iargs[i], /*&iargs_priv[0], */ j, iargs_priv[i], /*rA, */ flags, xer);
+   }
+   free(iargs_priv);
+}
+
+
+/* Used in do_tests, indexed by flags->nb_args
+   Elements correspond to enum test_flags::num args
+*/
+static test_loop_t int_loops[] = {
+   &test_int_one_arg,
+   &test_int_two_args,
+   &test_int_three_args,
+   &test_int_two_args,
+   &test_int_one_reg_imm16,
+   &test_int_one_reg_imm16,
+   &test_int_special,
+   &test_int_ld_one_reg_imm16,
+   &test_int_ld_two_regs,
+   &test_int_st_two_regs_imm16,
+   &test_int_st_three_regs,
+};
+
+#if !defined (NO_FLOAT)
+static void test_float_three_args (const unsigned char *name, test_func_t func,
+                                   unused uint32_t test_flags)
+{
+   double res;
+   uint64_t u0, u1, u2, ur;
+   volatile uint32_t flags, tmpcr, tmpxer;
+   int i, j, k;
+   
+   for (i=0; i<nb_fargs; i+=3) {
+      for (j=0; j<nb_fargs; j+=5) {
+         for (k=0; k<nb_fargs; k+=7) {
+            u0 = *(uint64_t *)(&fargs[i]);
+            u1 = *(uint64_t *)(&fargs[j]);
+            u2 = *(uint64_t *)(&fargs[k]);
+            f14 = fargs[i];
+            f15 = fargs[j];
+            f16 = fargs[k];
+            /* Save flags */
+            __asm__ __volatile__ ("mfcr 18");
+            tmpcr = r18;
+            __asm__ __volatile__ ("mfxer 18");
+            tmpxer = r18;
+            /* Set up flags for test */
+            r18 = 0;
+            __asm__ __volatile__ ("mtcr 18");
+            __asm__ __volatile__ ("mtxer 18");
+            f18 = +0.0;
+            __asm__ __volatile__ ("mtfsf 0xFF, 18");
+            (*func)();
+            __asm__ __volatile__ ("mfcr 18");
+            flags = r18;
+            res = f17;
+            ur = *(uint64_t *)(&res);
+            /* Restore flags */
+            r18 = tmpcr;
+            __asm__ __volatile__ ("mtcr 18");
+            r18 = tmpxer;
+            __asm__ __volatile__ ("mtxer 18");
+            printf("%s %016llx, %016llx, %016llx => %016llx (%08x)\n",
+                   name, u0, u1, u2, ur, flags);
+         }
+         if (verbose) printf("\n");
+      }
+   }
+}
+
+static void test_float_two_args (const unsigned char *name, test_func_t func,
+                                 unused uint32_t test_flags)
+{
+   double res;
+   uint64_t u0, u1, ur;
+   volatile uint32_t flags, tmpcr, tmpxer;
+   int i, j;
+   
+   for (i=0; i<nb_fargs; i+=3) {
+      for (j=0; j<nb_fargs; j+=5) {
+         u0 = *(uint64_t *)(&fargs[i]);
+         u1 = *(uint64_t *)(&fargs[j]);
+         f14 = fargs[i];
+         f15 = fargs[j];
+         /* Save flags */
+         __asm__ __volatile__ ("mfcr 18");
+         tmpcr = r18;
+         __asm__ __volatile__ ("mfxer 18");
+         tmpxer = r18;
+         /* Set up flags for test */
+         r18 = 0;
+         __asm__ __volatile__ ("mtcr 18");
+         __asm__ __volatile__ ("mtxer 18");
+         f18 = +0.0;
+         __asm__ __volatile__ ("mtfsf 0xFF, 18");
+         (*func)();
+         __asm__ __volatile__ ("mfcr 18");
+         flags = r18;
+         res = f17;
+         ur = *(uint64_t *)(&res);
+         /* Restore flags */
+         r18 = tmpcr;
+         __asm__ __volatile__ ("mtcr 18");
+         r18 = tmpxer;
+         __asm__ __volatile__ ("mtxer 18");
+         printf("%s %016llx, %016llx => %016llx (%08x)\n",
+                name, u0, u1, ur, flags);
+      }
+      if (verbose) printf("\n");
+   }
+}
+
+static void test_float_one_arg (const unsigned char *name, test_func_t func,
+                                unused uint32_t test_flags)
+{
+   double res;
+   uint64_t u0, ur;
+   volatile uint32_t flags, tmpcr, tmpxer;
+   int i;
+   
+   for (i=0; i<nb_fargs; i++) {
+      u0 = *(uint64_t *)(&fargs[i]);
+      f14 = fargs[i];
+      /* Save flags */
+      __asm__ __volatile__ ("mfcr 18");
+      tmpcr = r18;
+      __asm__ __volatile__ ("mfxer 18");
+      tmpxer = r18;
+      /* Set up flags for test */
+      r18 = 0;
+      __asm__ __volatile__ ("mtcr 18");
+      __asm__ __volatile__ ("mtxer 18");
+      f18 = +0.0;
+      __asm__ __volatile__ ("mtfsf 0xFF, 18");
+      (*func)();
+      __asm__ __volatile__ ("mfcr 18");
+      flags = r18;
+      res = f17;
+      ur = *(uint64_t *)(&res);
+      /* Restore flags */
+      r18 = tmpcr;
+      __asm__ __volatile__ ("mtcr 18");
+      r18 = tmpxer;
+      __asm__ __volatile__ ("mtxer 18");
+      printf("%s %016llx => %016llx (%08x)\n", name, u0, ur, flags);
+    }
+}
+
+/* Special test cases for:
+ * mffs
+ * mtfsb0
+ * mtfsb1
+ */
+static special_t special_float_ops[] = {
+#if 0
+   {
+      "mffs",   /* One 5 bits immediate argument */
+      &mffs_cb,
+   },
+   {
+      "mffs.",   /* One 5 bits immediate argument */
+      &mffs_cb,
+   },
+   {
+      "mtfsb0", /* One 5 bits immediate argument */
+      &mffs_cb,
+   },
+   {
+      "mtfsb0.", /* One 5 bits immediate argument */
+      &mffs_cb,
+   },
+   {
+      "mtfsb1", /* One 5 bits immediate argument */
+      &mffs_cb,
+   },
+   {
+      "mtfsb1.", /* One 5 bits immediate argument */
+      &mffs_cb,
+   },
+   {
+      "mtfsf",  /* One register + 1 8 bits immediate argument */
+      &mtfsf_cb,
+   },
+   {
+      "mtfsf.",  /* One register + 1 8 bits immediate argument */
+      &mtfsf_cb,
+   },
+   {
+      "mtfsfi", /* One 5 bits argument + 1 5 bits argument */
+      &mtfsfi_cb,
+   },
+   {
+      "mtfsfi.", /* One 5 bits argument + 1 5 bits argument */
+      &mtfsfi_cb,
+   },
+#endif
+   {
+      NULL,
+      NULL,
+   },
+};
+
+static void test_float_special (const unsigned char *name, test_func_t func,
+                                uint32_t test_flags)
+{
+   test_special(special_float_ops, name, func, test_flags);
+}
+
+/* Used in do_tests, indexed by flags->nb_args
+   Elements correspond to enum test_flags::num args
+*/
+static test_loop_t float_loops[] = {
+   &test_float_one_arg,
+   &test_float_two_args,
+   &test_float_three_args,
+   &test_float_two_args,
+   NULL,
+   NULL,
+   &test_float_special,
+   NULL,
+   NULL,
+   NULL,
+   NULL,
+};
+#endif /* !defined (NO_FLOAT) */
+
+
+#if defined (HAS_ALTIVEC)
+
+/* Ref: vector insns to test setting CR, VSCR:
+         volatile vector unsigned int v1 =
+            //            (vector unsigned int){ 0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF };
+            (vector unsigned int){ 0x80808080,0x80808080,0x80808080,0x80808080 };
+         volatile vector unsigned int v2 =
+            //            (vector unsigned int){ 0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF };
+            (vector unsigned int){ 0x01010101,0x01010101,0x01010101,0x01010101 };
+         //__asm__ __volatile__ ("vcmpequw. 31,%0,%1" : : "vr" (v1), "vr" (v2));   // sets CR[6]
+         //__asm__ __volatile__ ("vpkswss 31,%0,%1" : : "vr" (v1), "vr" (v2));     // sets VSCR[SAT]
+         __asm__ __volatile__ ("vsubsbs 31,%0,%1" : : "vr" (v1), "vr" (v2));       // sets VSCR[SAT]
+*/
+
+#define DEFAULT_VSCR 0x00010000
+
+static void test_av_int_one_arg (const unsigned char *name, test_func_t func,
+                                 unused uint32_t test_flags)
+{
+   volatile uint32_t flags, tmpcr;
+   volatile vector unsigned int tmpvscr;
+   int i;
+
+   for (i=0; i<nb_viargs; i++) {
+      /* Save flags */
+      __asm__ __volatile__ ("mfcr   %0" : "=r"  (tmpcr));
+      __asm__ __volatile__ ("mfvscr %0" : "=vr" (tmpvscr));
+
+      vector unsigned int vec_in  = (vector unsigned int)viargs[i];
+      vector unsigned int vec_out = (vector unsigned int){ 0,0,0,0 };
+      
+      // reset VSCR and CR
+      vector unsigned int vscr = (vector unsigned int){ 0,0,0,DEFAULT_VSCR };
+      flags = 0;
+      __asm__ __volatile__ ("mtvscr %0" : : "vr" (vscr) );
+      __asm__ __volatile__ ("mtcr   %0" : : "r" (flags));
+
+      // load input -> r14
+      __asm__ __volatile__ ("vor 14,%0,%0" : : "vr" (vec_in));
+      
+      // do stuff
+      (*func)();
+      
+      // retrieve output <- r17
+      __asm__ __volatile__ ("vor %0,17,17" : "=vr" (vec_out));
+
+      // get CR,VSCR flags
+      __asm__ __volatile__ ("mfcr   %0" : "=r" (flags));
+      __asm__ __volatile__ ("mfvscr %0" : "=vr" (vscr));
+      
+      /* Restore flags */
+      __asm__ __volatile__ ("mtcr   %0" : : "r"  (tmpcr));
+      __asm__ __volatile__ ("mtvscr %0" : : "vr" (tmpvscr));
+
+      unsigned int* src = (unsigned int*)&vec_in;
+      unsigned int* dst = (unsigned int*)&vec_out;
+      printf("%s: %08x %08x %08x %08x\n", name,
+             src[0], src[1], src[2], src[3]);
+      printf("%s:  => %08x %08x %08x %08x ", name,
+             dst[0], dst[1], dst[2], dst[3]);
+#if defined TEST_VSCR_SAT
+      unsigned int* p_vscr = (unsigned int*)&vscr;
+      printf("(%08x, %08x)\n", flags, p_vscr[3]);
+#else
+      printf("(%08x)\n", flags);
+#endif
+   }
+}
+
+static void test_av_int_two_args (const unsigned char *name, test_func_t func,
+                                  unused uint32_t test_flags)
+{
+   volatile uint32_t flags, tmpcr;
+   volatile vector unsigned int tmpvscr;
+   int i,j;
+
+   for (i=0; i<nb_viargs; i++) {
+      volatile vector unsigned int vec_in1 = (vector unsigned int)viargs[i];
+      for (j=0; j<nb_viargs; j++) {
+         volatile vector unsigned int vec_in2 = (vector unsigned int)viargs[j];
+         volatile vector unsigned int vec_out = (vector unsigned int){ 0,0,0,0 };
+         
+         /* Save flags */
+         __asm__ __volatile__ ("mfcr   %0" : "=r"  (tmpcr));
+         __asm__ __volatile__ ("mfvscr %0" : "=vr" (tmpvscr));
+
+         // reset VSCR and CR
+         volatile vector unsigned int vscr = (vector unsigned int){ 0,0,0,DEFAULT_VSCR };
+         flags = 0;
+         __asm__ __volatile__ ("mtvscr %0" : : "vr" (vscr) );
+         __asm__ __volatile__ ("mtcr   %0" : : "r" (flags));
+
+         // load inputs -> r14,r15
+         __asm__ __volatile__ ("vor 14,%0,%0" : : "vr" (vec_in1));
+         __asm__ __volatile__ ("vor 15,%0,%0" : : "vr" (vec_in2));
+         
+         // do stuff
+         (*func)();
+
+         // retrieve output <- r17
+         __asm__ __volatile__ ("vor %0,17,17" : "=vr" (vec_out));
+         
+         // get CR,VSCR flags
+         __asm__ __volatile__ ("mfcr   %0" : "=r" (flags));
+         __asm__ __volatile__ ("mfvscr %0" : "=vr" (vscr));
+         
+         /* Restore flags */
+         __asm__ __volatile__ ("mtcr   %0" : : "r"  (tmpcr));
+         __asm__ __volatile__ ("mtvscr %0" : : "vr" (tmpvscr));
+
+         unsigned int* src1   = (unsigned int*)&vec_in1;
+         unsigned int* src2   = (unsigned int*)&vec_in2;
+         unsigned int* dst    = (unsigned int*)&vec_out;
+         printf("%s: ", name);
+         printf("%08x%08x%08x%08x, ", src1[0], src1[1], src1[2], src1[3]);
+         printf("%08x%08x%08x%08x\n", src2[0], src2[1], src2[2], src2[3]);
+         printf("%s:  => %08x %08x %08x %08x ", name,
+                dst[0], dst[1], dst[2], dst[3]);
+#if defined TEST_VSCR_SAT
+         unsigned int* p_vscr = (unsigned int*)&vscr;
+         printf("(%08x, %08x)\n", flags, p_vscr[3]);
+#else
+         printf("(%08x)\n", flags);
+#endif
+      }
+      if (verbose) printf("\n");
+   }
+}
+
+static void test_av_int_three_args (const unsigned char *name, test_func_t func,
+                                    unused uint32_t test_flags)
+{
+   volatile uint32_t flags, tmpcr;
+   volatile vector unsigned int tmpvscr;
+   int i,j,k;
+
+   for (i=0; i<nb_viargs; i++) {
+      vector unsigned int vec_in1 = (vector unsigned int)viargs[i];
+      for (j=0; j<nb_viargs; j++) {
+         vector unsigned int vec_in2 = (vector unsigned int)viargs[j];
+         for (k=0; k<nb_viargs; k++) {
+            vector unsigned int vec_in3 = (vector unsigned int)viargs[k];
+            vector unsigned int vec_out = (vector unsigned int){ 0,0,0,0 };
+            
+            /* Save flags */
+            __asm__ __volatile__ ("mfcr   %0" : "=r"  (tmpcr));
+            __asm__ __volatile__ ("mfvscr %0" : "=vr" (tmpvscr));
+
+            // reset VSCR and CR
+            vector unsigned int vscr = (vector unsigned int){ 0,0,0,DEFAULT_VSCR };
+            flags = 0;
+            __asm__ __volatile__ ("mtvscr %0" : : "vr" (vscr) );
+            __asm__ __volatile__ ("mtcr   %0" : : "r" (flags));
+            
+            // load inputs -> r14,r15,r16
+            __asm__ __volatile__ ("vor 14,%0,%0" : : "vr" (vec_in1));
+            __asm__ __volatile__ ("vor 15,%0,%0" : : "vr" (vec_in2));
+            __asm__ __volatile__ ("vor 16,%0,%0" : : "vr" (vec_in3));
+            
+            // do stuff
+            (*func)();
+            
+            // retrieve output <- r17
+            __asm__ __volatile__ ("vor %0,17,17" : "=vr" (vec_out));
+            
+            // get CR,VSCR flags
+            __asm__ __volatile__ ("mfcr   %0" : "=r" (flags));
+            __asm__ __volatile__ ("mfvscr %0" : "=vr" (vscr));
+            
+            /* Restore flags */
+            __asm__ __volatile__ ("mtcr   %0" : : "r"  (tmpcr));
+            __asm__ __volatile__ ("mtvscr %0" : : "vr" (tmpvscr));
+
+            unsigned int* src1 = (unsigned int*)&vec_in1;
+            unsigned int* src2 = (unsigned int*)&vec_in2;
+            unsigned int* src3 = (unsigned int*)&vec_in3;
+            unsigned int* dst = (unsigned int*)&vec_out;
+            printf("%s: %08x%08x%08x%08x, %08x%08x%08x%08x, %08x%08x%08x%08x\n", name,
+                   src1[0], src1[1], src1[2], src1[3],
+                   src2[0], src2[1], src2[2], src2[3],
+                   src3[0], src3[1], src3[2], src3[3]);
+
+            printf("%s:  => %08x%08x%08x%08x ", name,
+                   dst[0], dst[1], dst[2], dst[3]);
+#if defined TEST_VSCR_SAT
+            unsigned int* p_vscr = (unsigned int*)&vscr;
+            printf("(%08x, %08x)\n", flags, p_vscr[3]);
+#else
+            printf("(%08x)\n", flags);
+#endif
+         }
+         if (verbose) printf("\n");
+      }
+   }
+}
+
+
+static void vs128_cb (const unsigned char *name, test_func_t func,
+                      unused uint32_t test_flags)
+{
+   volatile uint32_t flags, tmpcr;
+   volatile vector unsigned int tmpvscr;
+   int i,j;
+
+   for (i=0; i<nb_viargs; i++) {
+      vector unsigned int vec_in1 = (vector unsigned int)viargs[i];
+      for (j=0; j<8; j++) {
+         /* low-order 3bits of every byte must be the same for the shift vector */
+         vector unsigned char vec_shft = (vector unsigned char) { j,j,j,j, j,j,j,j, j,j,j,j, j,j,j,j };
+         vector unsigned int vec_out = (vector unsigned int){ 0,0,0,0 };
+         
+         /* Save flags */
+         __asm__ __volatile__ ("mfcr   %0" : "=r"  (tmpcr));
+         __asm__ __volatile__ ("mfvscr %0" : "=vr" (tmpvscr));
+
+         // reset VSCR and CR
+         vector unsigned int vscr = (vector unsigned int){ 0,0,0,0x00010000 };
+         flags = 0;
+         __asm__ __volatile__ ("mtvscr %0" : : "vr" (vscr) );
+         __asm__ __volatile__ ("mtcr   %0" : : "r" (flags));
+         
+         // load inputs -> r14,r15
+         __asm__ __volatile__ ("vor 14,%0,%0" : : "vr" (vec_in1));
+         __asm__ __volatile__ ("vor 15,%0,%0" : : "vr" (vec_shft));
+         
+         // do stuff
+         (*func)();
+         
+         // retrieve output <- r17
+         __asm__ __volatile__ ("vor %0,17,17" : "=vr" (vec_out));
+         
+         // get CR,VSCR flags
+         __asm__ __volatile__ ("mfcr   %0" : "=r" (flags));
+         __asm__ __volatile__ ("mfvscr %0" : "=vr" (vscr));
+         
+         /* Restore flags */
+         __asm__ __volatile__ ("mtcr   %0" : : "r"  (tmpcr));
+         __asm__ __volatile__ ("mtvscr %0" : : "vr" (tmpvscr));
+
+         unsigned int* src1   = (unsigned int*)&vec_in1;
+         unsigned int* src2   = (unsigned int*)&vec_shft;
+         unsigned int* dst    = (unsigned int*)&vec_out;
+         printf("%s: ", name);
+         printf("%08x%08x%08x%08x, ", src1[0], src1[1], src1[2], src1[3]);
+         printf("%08x%08x%08x%08x\n", src2[0], src2[1], src2[2], src2[3]);
+
+         printf("%s:  => %08x %08x %08x %08x ", name,
+                dst[0], dst[1], dst[2], dst[3]);
+#if defined TEST_VSCR_SAT
+            unsigned int* p_vscr = (unsigned int*)&vscr;
+            printf("(%08x, %08x)\n", flags, p_vscr[3]);
+#else
+            printf("(%08x)\n", flags);
+#endif
+      }
+      if (verbose) printf("\n");
+   }
+}
+
+static void vsplt_cb (const unsigned char *name, test_func_t func,
+                      unused uint32_t test_flags)
+{
+   volatile uint32_t flags, tmpcr;
+   volatile vector unsigned int tmpvscr;
+   uint32_t func_buf[2], *p;
+   int i,j;
+
+   for (i=0; i<nb_viargs; i++) {
+      vector unsigned int vec_in1 = (vector unsigned int)viargs[i];
+
+      for (j=0; j<16; j+=3) {
+         vector unsigned int vec_out = (vector unsigned int){ 0,0,0,0 };
+
+         /* Patch up the instruction */
+         p = (void *)func;
+         func_buf[1] = p[1];
+         patch_op_imm(func_buf, p, j, 16, 5);
+         func = (void *)func_buf;
+         
+         /* Save flags */
+         __asm__ __volatile__ ("mfcr   %0" : "=r"  (tmpcr));
+         __asm__ __volatile__ ("mfvscr %0" : "=vr" (tmpvscr));
+
+         // reset VSCR and CR
+         vector unsigned int vscr = (vector unsigned int){ 0,0,0,0x00010000 };
+         flags = 0;
+         __asm__ __volatile__ ("mtvscr %0" : : "vr" (vscr) );
+         __asm__ __volatile__ ("mtcr   %0" : : "r" (flags));
+         
+         // load input -> r14
+         __asm__ __volatile__ ("vor 14,%0,%0" : : "vr" (vec_in1));
+         
+         // do stuff
+         (*func)();
+         
+         // retrieve output <- r17
+         __asm__ __volatile__ ("vor %0,17,17" : "=vr" (vec_out));
+         
+         // get CR,VSCR flags
+         __asm__ __volatile__ ("mfcr   %0" : "=r" (flags));
+         __asm__ __volatile__ ("mfvscr %0" : "=vr" (vscr));
+         
+         /* Restore flags */
+         __asm__ __volatile__ ("mtcr   %0" : : "r"  (tmpcr));
+         __asm__ __volatile__ ("mtvscr %0" : : "vr" (tmpvscr));
+
+         unsigned int* src1   = (unsigned int*)&vec_in1;
+         unsigned int* dst    = (unsigned int*)&vec_out;
+         printf("%s: ", name);
+         printf("%08x %08x %08x %08x, %u\n", src1[0], src1[1], src1[2], src1[3], j);
+
+         printf("%s:  => %08x %08x %08x %08x ", name,
+                dst[0], dst[1], dst[2], dst[3]);
+#if defined TEST_VSCR_SAT
+            unsigned int* p_vscr = (unsigned int*)&vscr;
+            printf("(%08x, %08x)\n", flags, p_vscr[3]);
+#else
+            printf("(%08x)\n", flags);
+#endif
+      }
+      if (verbose) printf("\n");
+   }
+}
+
+static void vspltis_cb (const unsigned char *name, test_func_t func,
+                      unused uint32_t test_flags)
+{
+   volatile uint32_t flags, tmpcr;
+   volatile vector unsigned int tmpvscr;
+   uint32_t func_buf[2], *p;
+   int i;
+
+   for (i=0; i<32; i++) {
+      vector unsigned int vec_out = (vector unsigned int){ 0,0,0,0 };
+      
+      /* Patch up the instruction */
+      p = (void *)func;
+      func_buf[1] = p[1];
+      patch_op_imm(func_buf, p, i, 16, 5);
+      func = (void *)func_buf;
+      
+      /* Save flags */
+      __asm__ __volatile__ ("mfcr   %0" : "=r"  (tmpcr));
+      __asm__ __volatile__ ("mfvscr %0" : "=vr" (tmpvscr));
+      
+      // reset VSCR and CR
+      vector unsigned int vscr = (vector unsigned int){ 0,0,0,0x00010000 };
+      flags = 0;
+      __asm__ __volatile__ ("mtvscr %0" : : "vr" (vscr) );
+      __asm__ __volatile__ ("mtcr   %0" : : "r" (flags));
+      
+      // do stuff
+      (*func)();
+      
+      // retrieve output <- r17
+      __asm__ __volatile__ ("vor %0,17,17" : "=vr" (vec_out));
+      
+      // get CR,VSCR flags
+      __asm__ __volatile__ ("mfcr   %0" : "=r" (flags));
+      __asm__ __volatile__ ("mfvscr %0" : "=vr" (vscr));
+      
+      /* Restore flags */
+      __asm__ __volatile__ ("mtcr   %0" : : "r"  (tmpcr));
+      __asm__ __volatile__ ("mtvscr %0" : : "vr" (tmpvscr));
+      
+      unsigned int* dst    = (unsigned int*)&vec_out;
+      printf("%s: %2d => ", name, i);
+
+      printf("%08x %08x %08x %08x ", dst[0], dst[1], dst[2], dst[3]);
+#if defined TEST_VSCR_SAT
+      unsigned int* p_vscr = (unsigned int*)&vscr;
+      printf("(%08x, %08x)\n", flags, p_vscr[3]);
+#else
+      printf("(%08x)\n", flags);
+#endif
+   }
+}
+
+static void vsldoi_cb (const unsigned char *name, test_func_t func,
+                       unused uint32_t test_flags)
+{
+   volatile uint32_t flags, tmpcr;
+   volatile vector unsigned int tmpvscr;
+   uint32_t func_buf[2], *p;
+   int i,j,k;
+
+   for (i=0; i<nb_viargs; i++) {
+      vector unsigned int vec_in1 = (vector unsigned int)viargs[i];
+      for (j=0; j<nb_viargs; j++) {
+         vector unsigned int vec_in2 = (vector unsigned int)viargs[j];
+         for (k=0; k<16; k+=14) {
+            vector unsigned int vec_out = (vector unsigned int){ 0,0,0,0 };
+
+            /* Patch up the instruction */
+            p = (void *)func;
+            func_buf[1] = p[1];
+            patch_op_imm(func_buf, p, k, 6, 4);
+            func = (void *)func_buf;
+            
+            /* Save flags */
+            __asm__ __volatile__ ("mfcr   %0" : "=r"  (tmpcr));
+            __asm__ __volatile__ ("mfvscr %0" : "=vr" (tmpvscr));
+            
+            // reset VSCR and CR
+            vector unsigned int vscr = (vector unsigned int){ 0,0,0,0x00010000 };
+            flags = 0;
+            __asm__ __volatile__ ("mtvscr %0" : : "vr" (vscr) );
+            __asm__ __volatile__ ("mtcr   %0" : : "r" (flags));
+            
+            // load inputs -> r14,r15
+            __asm__ __volatile__ ("vor 14,%0,%0" : : "vr" (vec_in1));
+            __asm__ __volatile__ ("vor 15,%0,%0" : : "vr" (vec_in2));
+            
+            // do stuff
+            (*func)();
+         
+            // retrieve output <- r17
+            __asm__ __volatile__ ("vor %0,17,17" : "=vr" (vec_out));
+            
+            // get CR,VSCR flags
+            __asm__ __volatile__ ("mfcr   %0" : "=r" (flags));
+            __asm__ __volatile__ ("mfvscr %0" : "=vr" (vscr));
+            
+            /* Restore flags */
+            __asm__ __volatile__ ("mtcr   %0" : : "r"  (tmpcr));
+            __asm__ __volatile__ ("mtvscr %0" : : "vr" (tmpvscr));
+            
+            unsigned int* src1   = (unsigned int*)&vec_in1;
+            unsigned int* src2   = (unsigned int*)&vec_in2;
+            unsigned int* dst    = (unsigned int*)&vec_out;
+            printf("%s: ", name);
+            printf("%08x%08x%08x%08x, %08x%08x%08x%08x, %u\n",
+                   src1[0], src1[1], src1[2], src1[3],
+                   src2[0], src2[1], src2[2], src2[3], k);
+
+            printf("%s:  => %08x %08x %08x %08x] ", name,
+                   dst[0], dst[1], dst[2], dst[3]);
+#if defined TEST_VSCR_SAT
+            unsigned int* p_vscr = (unsigned int*)&vscr;
+            printf("(%08x, %08x)\n", flags, p_vscr[3]);
+#else
+            printf("(%08x)\n", flags);
+#endif
+         }
+         if (verbose) printf("\n");
+      }
+   }
+}
+
+static special_t special_av_int_ops[] = {
+   {
+      "vsr", /* Two registers arguments */
+      &vs128_cb,
+   },
+   {
+      "vsl", /* Two registers arguments */
+      &vs128_cb,
+   },
+   {
+      "vspltb", /* One reg, one 5-bit uimm arguments */
+      &vsplt_cb,
+   },
+   {
+      "vsplth", /* One reg, one 5-bit uimm arguments */
+      &vsplt_cb,
+   },
+   {
+      "vspltw", /* One reg, one 5-bit uimm arguments */
+      &vsplt_cb,
+   },
+   {
+      "vspltisb", /* One reg, one 5-bit uimm arguments */
+      &vspltis_cb,
+   },
+   {
+      "vspltish", /* One reg, one 5-bit uimm arguments */
+      &vspltis_cb,
+   },
+   {
+      "vspltisw", /* One reg, one 5-bit uimm arguments */
+      &vspltis_cb,
+   },
+   {
+      "vsldoi", /* Two regs, one 4-bit uimm arguments */
+      &vsldoi_cb,
+   },
+};
+
+static void test_av_int_special (const unsigned char *name, test_func_t func,
+                                 uint32_t test_flags)
+{
+   test_special(special_av_int_ops, name, func, test_flags);
+}
+
+/* Used in do_tests, indexed by flags->nb_args
+   Elements correspond to enum test_flags::num args
+*/
+static test_loop_t altivec_int_loops[] = {
+   &test_av_int_one_arg,
+   &test_av_int_two_args,
+   &test_av_int_three_args,
+   &test_av_int_two_args,
+   NULL,
+   NULL,
+   &test_av_int_special,
+   NULL,
+   NULL,
+   NULL,
+   NULL,
+};
+
+
+static void test_av_float_one_arg (const unsigned char *name, test_func_t func,
+                                   unused uint32_t test_flags)
+{
+   volatile uint32_t flags, tmpcr;
+   volatile vector unsigned int tmpvscr;
+   int i;
+
+   for (i=0; i<nb_vfargs; i++) {
+      vector float vec_in  = (vector float)vfargs[i];
+      vector float vec_out = (vector float){ 0.0, 0.0, 0.0, 0.0 };
+      
+      /* Save flags */
+      __asm__ __volatile__ ("mfcr   %0" : "=r"  (tmpcr));
+      __asm__ __volatile__ ("mfvscr %0" : "=vr" (tmpvscr));
+
+      // reset VSCR and CR
+      vector unsigned int vscr = (vector unsigned int){ 0,0,0,0 };
+      flags = 0;
+      __asm__ __volatile__ ("mtvscr %0" : : "vr" (vscr) );
+      __asm__ __volatile__ ("mtcr   %0" : : "r" (flags));
+      
+      // load input -> r14
+      __asm__ __volatile__ ("vor 14,%0,%0" : : "vr" (vec_in));
+      
+      // do stuff
+      (*func)();
+      
+      // retrieve output <- r17
+      __asm__ __volatile__ ("vor %0,17,17" : "=vr" (vec_out));
+      
+      // get CR,VSCR flags
+      __asm__ __volatile__ ("mfcr   %0" : "=r" (flags));
+      __asm__ __volatile__ ("mfvscr %0" : "=vr" (vscr));
+      
+      /* Restore flags */
+      __asm__ __volatile__ ("mtcr   %0" : : "r"  (tmpcr));
+      __asm__ __volatile__ ("mtvscr %0" : : "vr" (tmpvscr));
+
+      unsigned int* src = (unsigned int*)&vec_in;
+      unsigned int* dst = (unsigned int*)&vec_out;
+      printf("%s: %08x %08x %08x %08x\n", name,
+             src[0], src[1], src[2], src[3]);
+
+      printf("%s:  => %08x %08x %08x %08x ", name,
+             dst[0], dst[1], dst[2], dst[3]);
+#if defined TEST_VSCR_SAT
+      unsigned int* p_vscr = (unsigned int*)&vscr;
+      printf("(%08x, %08x)\n", flags, p_vscr[3]);
+#else
+      printf("(%08x)\n", flags);
+#endif
+   }
+}
+
+static void test_av_float_two_args (const unsigned char *name, test_func_t func,
+                                    unused uint32_t test_flags)
+{
+   volatile uint32_t flags, tmpcr;
+   volatile vector unsigned int tmpvscr;
+   int i,j;
+
+   for (i=0; i<nb_vfargs; i++) {
+      for (j=0; j<nb_vfargs; j+=3) {
+         vector float vec_in1 = (vector float)vfargs[i];
+         vector float vec_in2 = (vector float)vfargs[j];
+         vector float vec_out = (vector float){ 0.0, 0.0, 0.0, 0.0 };
+
+         /* Save flags */
+         __asm__ __volatile__ ("mfcr   %0" : "=r"  (tmpcr));
+         __asm__ __volatile__ ("mfvscr %0" : "=vr" (tmpvscr));
+
+         // reset VSCR and CR
+         vector unsigned int vscr = (vector unsigned int){ 0,0,0,0 };
+         flags = 0;
+         __asm__ __volatile__ ("mtvscr %0" : : "vr" (vscr) );
+         __asm__ __volatile__ ("mtcr   %0" : : "r" (flags));
+
+         // load inputs -> r14,r15
+         __asm__ __volatile__ ("vor 14,%0,%0" : : "vr" (vec_in1));
+         __asm__ __volatile__ ("vor 15,%0,%0" : : "vr" (vec_in2));
+
+         // do stuff
+         (*func)();
+
+         // retrieve output <- r17
+         __asm__ __volatile__ ("vor %0,17,17" : "=vr" (vec_out));
+
+         // get CR,VSCR flags
+         __asm__ __volatile__ ("mfcr   %0" : "=r" (flags));
+         __asm__ __volatile__ ("mfvscr %0" : "=vr" (vscr));
+
+         /* Restore flags */
+         __asm__ __volatile__ ("mtcr   %0" : : "r"  (tmpcr));
+         __asm__ __volatile__ ("mtvscr %0" : : "vr" (tmpvscr));
+
+         unsigned int* src1 = (unsigned int*)&vec_in1;
+         unsigned int* src2 = (unsigned int*)&vec_in2;
+         unsigned int* dst = (unsigned int*)&vec_out;
+         printf("%s: %08x%08x%08x%08x, %08x%08x%08x%08x\n", name,
+                src1[0], src1[1], src1[2], src1[3],
+                src2[0], src2[1], src2[2], src2[3]);
+
+         printf("%s:  => %08x %08x %08x %08x ", name,
+                dst[0], dst[1], dst[2], dst[3]);
+#if defined TEST_VSCR_SAT
+         unsigned int* p_vscr = (unsigned int*)&vscr;
+         printf("(%08x, %08x)\n", flags, p_vscr[3]);
+#else
+         printf("(%08x)\n", flags);
+#endif
+      }
+      if (verbose) printf("\n");
+   }
+}
+
+static void test_av_float_three_args (const unsigned char *name, test_func_t func,
+                                      unused uint32_t test_flags)
+{
+   volatile uint32_t flags, tmpcr;
+   volatile vector unsigned int tmpvscr;
+   int i,j,k;
+
+   for (i=0; i<nb_vfargs; i++) {
+      for (j=0; j<nb_vfargs; j+=3) {
+         for (k=0; k<nb_vfargs; k+=5) {
+            vector float vec_in1 = (vector float)vfargs[i];
+            vector float vec_in2 = (vector float)vfargs[j];
+            vector float vec_in3 = (vector float)vfargs[k];
+            vector float vec_out = (vector float){ 0.0, 0.0, 0.0, 0.0 };
+            
+            /* Save flags */
+            __asm__ __volatile__ ("mfcr   %0" : "=r"  (tmpcr));
+            __asm__ __volatile__ ("mfvscr %0" : "=vr" (tmpvscr));
+
+            // reset VSCR and CR
+            vector unsigned int vscr = (vector unsigned int){ 0,0,0,0 };
+            flags = 0;
+            __asm__ __volatile__ ("mtvscr %0" : : "vr" (vscr) );
+            __asm__ __volatile__ ("mtcr   %0" : : "r" (flags));
+
+            // load inputs -> r14,r15,r16
+            __asm__ __volatile__ ("vor 14,%0,%0" : : "vr" (vec_in1));
+            __asm__ __volatile__ ("vor 15,%0,%0" : : "vr" (vec_in2));
+            __asm__ __volatile__ ("vor 16,%0,%0" : : "vr" (vec_in3));
+
+            // do stuff
+            (*func)();
+
+            // retrieve output <- r17
+            __asm__ __volatile__ ("vor %0,17,17" : "=vr" (vec_out));
+
+            // get CR,VSCR flags
+            __asm__ __volatile__ ("mfcr   %0" : "=r" (flags));
+            __asm__ __volatile__ ("mfvscr %0" : "=vr" (vscr));
+
+            /* Restore flags */
+            __asm__ __volatile__ ("mtcr   %0" : : "r"  (tmpcr));
+            __asm__ __volatile__ ("mtvscr %0" : : "vr" (tmpvscr));
+
+            unsigned int* src1 = (unsigned int*)&vec_in1;
+            unsigned int* src2 = (unsigned int*)&vec_in2;
+            unsigned int* src3 = (unsigned int*)&vec_in3;
+            unsigned int* dst = (unsigned int*)&vec_out;
+            printf("%s: %08x%08x%08x%08x, %08x%08x%08x%08x, %08x%08x%08x%08x\n", name,
+                   src1[0], src1[1], src1[2], src1[3],
+                   src2[0], src2[1], src2[2], src2[3],
+                   src3[0], src3[1], src3[2], src3[3]);
+
+            printf("%s:  => %08x %08x %08x %08x ", name,
+                   dst[0], dst[1], dst[2], dst[3]);
+#if defined TEST_VSCR_SAT
+            unsigned int* p_vscr = (unsigned int*)&vscr;
+            printf("(%08x, %08x)\n", flags, p_vscr[3]);
+#else
+            printf("(%08x)\n", flags);
+#endif
+         }
+         if (verbose) printf("\n");
+      }
+   }
+}
+
+/* Used in do_tests, indexed by flags->nb_args
+   Elements correspond to enum test_flags::num args
+*/
+static test_loop_t altivec_float_loops[] = {
+   &test_av_float_one_arg,
+   &test_av_float_two_args,
+   &test_av_float_three_args,
+   &test_av_float_two_args,
+   NULL,
+   NULL,
+   NULL,
+   NULL,
+   NULL,
+   NULL,
+   NULL,
+};
+
+#endif /* defined (HAS_ALTIVEC) */
+
+
+#if defined (IS_PPC405)
+static void test_ppc405 (const unsigned char *name, test_func_t func,
+                         unused uint32_t test_flags)
+{
+   volatile uint32_t res, flags, xer, tmpcr, tmpxer;
+   int i, j, k;
+   
+   for (i=0; i<nb_iargs; i++) {
+      for (j=0; j<nb_iargs; j++) {
+         for (k=0; k<nb_iargs; k++) {
+            r14 = iargs[i];
+            r15 = iargs[j];
+            /* Beware: the third argument and the result
+             * are in the same register
+             */
+            r17 = iargs[k];
+            /* Save flags */
+            __asm__ __volatile__ ("mfcr 18");
+            tmpcr = r18;
+            __asm__ __volatile__ ("mfxer 18");
+            tmpxer = r18;
+            /* Set up flags for test */
+            r18 = 0;
+            __asm__ __volatile__ ("mtcr 18");
+            __asm__ __volatile__ ("mtxer 18");
+            (*func)();
+            __asm__ __volatile__ ("mfcr 18");
+            flags = r18;
+            __asm__ __volatile__ ("mfxer 18");
+            xer = r18;
+            res = r17;
+            /* Restore flags */
+            r18 = tmpcr;
+            __asm__ __volatile__ ("mtcr 18");
+            r18 = tmpxer;
+            __asm__ __volatile__ ("mtxer 18");
+            printf("%s %08x, %08x, %08x => %08x (%08x %08x)\n",
+                   name, iargs[i], iargs[j], iargs[k], res, flags, xer);
+         }
+         if (verbose) printf("\n");
+      }
+   }
+}
+#endif /* defined (IS_PPC405) */
+
+static int check_filter (unsigned char *filter)
+{
+   unsigned char *c;
+   int ret = 1;
+   
+   if (filter != NULL) {
+      c = strchr(filter, '*');
+      if (c != NULL) {
+         *c = '\0';
+         ret = 0;
+      }
+   }
+   
+   return ret;
+}
+
+static int check_name (const unsigned char *name, const unsigned char *filter,
+                       int exact)
+{
+   int nlen, flen;
+   int ret = 0;
+   
+   if (filter != NULL) {
+      for (; isspace(*name); name++)
+         continue;
+      FDPRINTF("Check '%s' againt '%s' (%s match)\n",
+               name, filter, exact ? "exact" : "starting");
+      nlen = strlen(name);
+      flen = strlen(filter);
+      if (exact) {
+         if (nlen == flen && memcmp(name, filter, flen) == 0)
+            ret = 1;
+      } else {
+         if (flen <= nlen && memcmp(name, filter, flen) == 0)
+            ret = 1;
+      }
+   } else {
+      ret = 1;
+   }  
+   return ret;
+}
+
+
+
+typedef struct insn_sel_flags_t_struct {
+   int one_arg, two_args, three_args;
+   int arith, logical, compare, ldst;
+   int integer, floats, p405, altivec, faltivec;
+   int cr;
+} insn_sel_flags_t;
+
+static void do_tests ( insn_sel_flags_t seln_flags,
+                       unsigned char *filter)
+{
+#if defined (IS_PPC405)
+   test_loop_t tmpl;
+#endif
+   test_loop_t *loop;
+   test_t *tests;
+   int nb_args, type, family;
+   int i, j, n;
+   int exact;
+   
+   exact = check_filter(filter);
+   n = 0;
+   for (i=0; all_tests[i].name != NULL; i++) {
+      nb_args = all_tests[i].flags & PPC_NB_ARGS;
+      /* Check number of arguments */
+      if ((nb_args == 1 && !seln_flags.one_arg) ||
+          (nb_args == 2 && !seln_flags.two_args) ||
+          (nb_args == 3 && !seln_flags.three_args))
+         continue;
+      /* Check instruction type */
+      type = all_tests[i].flags & PPC_TYPE;
+      if ((type == PPC_ARITH   && !seln_flags.arith) ||
+          (type == PPC_LOGICAL && !seln_flags.logical) ||
+          (type == PPC_COMPARE && !seln_flags.compare) ||
+          (type == PPC_LDST && !seln_flags.ldst))
+         continue;
+      /* Check instruction family */
+      family = all_tests[i].flags & PPC_FAMILY;
+      if ((family == PPC_INTEGER  && !seln_flags.integer) ||
+          (family == PPC_FLOAT    && !seln_flags.floats) ||
+          (family == PPC_405      && !seln_flags.p405) ||
+          (family == PPC_ALTIVEC  && !seln_flags.altivec) ||
+          (family == PPC_FALTIVEC && !seln_flags.faltivec))
+         continue;
+      /* Check flags update */
+      if (((all_tests[i].flags & PPC_CR)  && seln_flags.cr == 0) ||
+          (!(all_tests[i].flags & PPC_CR) && seln_flags.cr == 1))
+         continue;
+      /* All passed, do the tests */
+      tests = all_tests[i].tests;
+      /* Select the test loop */
+      switch (family) {
+      case PPC_INTEGER:
+         loop = &int_loops[nb_args - 1];
+         break;
+      case PPC_FLOAT:
+#if !defined (NO_FLOAT)
+         loop = &float_loops[nb_args - 1];
+         break;
+#else
+         fprintf(stderr, "Sorry. "
+                 "PPC floating point instructions tests "
+                 "are disabled on your host\n");
+#endif /* !defined (NO_FLOAT) */
+         
+      case PPC_405:
+#if defined (IS_PPC405)
+         tmpl = &test_ppc405;
+         loop = &tmpl;
+         break;
+#else
+         fprintf(stderr, "Sorry. "
+                 "PPC405 instructions tests are disabled on your host\n");
+         continue;
+#endif /* defined (IS_PPC405) */
+      case PPC_ALTIVEC:
+#if defined (HAS_ALTIVEC)
+         loop = &altivec_int_loops[nb_args - 1];
+         break;
+#else
+         fprintf(stderr, "Sorry. "
+                 "Altivec instructions tests are disabled on your host\n");
+         continue;
+#endif
+      case PPC_FALTIVEC:
+#if defined (HAS_ALTIVEC)
+         loop = &altivec_float_loops[nb_args - 1];
+         break;
+#else
+         fprintf(stderr, "Sorry. "
+                 "Altivec float instructions tests "
+                 "are disabled on your host\n");
+#endif
+         continue;
+      default:
+         printf("ERROR: unknown insn family %08x\n", family);
+         continue;
+      }
+      if (1 || verbose > 0)
+         printf("%s:\n", all_tests[i].name);
+      for (j=0; tests[j].name != NULL; j++) {
+         if (check_name(tests[j].name, filter, exact)) {
+            if (verbose > 1)
+               printf("Test instruction %s\n", tests[j].name);
+            (*loop)(tests[j].name, tests[j].func, all_tests[i].flags);
+            printf("\n");
+            n++;
+         }
+        }
+      if (verbose) printf("\n");
+   }
+   printf("All done. Tested %d different instructions\n", n);
+}
+
+
+static void usage (void)
+{
+#if !defined (USAGE_SIMPLE)
+   fprintf(stderr,
+           "test-ppc [-1] [-2] [-3] [-*] [-t <type>] [-f <family>] [-u] "
+           "[-n <filter>] [-r <test_rigour>] [-h]\n"
+           "\t-1: test opcodes with one argument\n"
+           "\t-2: test opcodes with two arguments\n"
+           "\t-3: test opcodes with three arguments\n"
+           "\t-*: launch test without checking the number of arguments\n"
+           "\t-t: launch test for instructions of type <type>\n"
+           "\t    recognized types:\n"
+           "\t\tarith (or a)\n"
+           "\t\tlogical (or l)\n"
+           "\t\tcompare (or c)\n"
+           "\t\tstoreload (or s)\n"
+           "\t-f: launch test for instructions of family <family>\n"
+           "\t    recognized families:\n"
+           "\t\tinteger (or i)\n"
+           "\t\tfloat (or f)\n"
+           "\t\tppc405 (or mac)\n"
+           "\t\taltivec (or a)\n"
+           "\t-u: test instructions that update flags\n"
+           "\t-n: filter instructions with <filter>\n"
+           "\t    <filter> can be in two forms:\n"
+           "\t\tname  : filter functions that exactly match <name>\n"
+           "\t\tname* : filter functions that start with <name>\n"
+           "\t-r: set size of arg tables to use to define <test_rigour>\n"
+           "\t    recognized types:\n"
+           "\t\tlarge (or l)\n"
+           "\t\tsmall (or s) - default\n"
+           "\t-v: verbose (-v -v for more)\n"
+           "\t-h: print this help\n"
+           );
+#else
+   fprintf(stderr,
+           "test-ppc [-a]\n"
+           "\t-a: include tests for altivec instructions\n"
+           );
+#endif
+}
+
+int main (int argc, char **argv)
+{
+#if !defined (USAGE_SIMPLE)
+   unsigned char *tmp, *filter = NULL;
+   insn_sel_flags_t flags;
+   int c;
+
+   flags.one_arg    = 0;
+   flags.two_args   = 0;
+   flags.three_args = 0;
+   flags.arith      = 0;
+   flags.logical    = 0;
+   flags.compare    = 0;
+   flags.ldst       = 0;
+   flags.integer    = 0;
+   flags.floats     = 0;
+   flags.p405       = 0;
+   flags.altivec    = 0;
+   flags.faltivec   = 0;
+   flags.cr         = -1;
+   
+   while ((c = getopt(argc, argv, "123t:f:n:r:uvh")) != -1) {
+      switch (c) {
+      case '1':
+         flags.one_arg = 1;
+         break;
+      case '2':
+         flags.two_args = 1;
+         break;
+      case '3':
+         flags.three_args = 1;
+         break;
+      case 't':
+         tmp = optarg;
+         if (strcmp(tmp, "arith") == 0 || strcmp(tmp, "a") == 0) {
+            flags.arith = 1;
+         } else if (strcmp(tmp, "logical") == 0 || strcmp(tmp, "l") == 0) {
+            flags.logical = 1;
+         } else if (strcmp(tmp, "compare") == 0 || strcmp(tmp, "c") == 0) {
+            flags.compare = 1;
+         } else if (strcmp(tmp, "storeload") == 0 || strcmp(tmp, "s") == 0) {
+            flags.ldst = 1;
+         } else {
+            goto bad_arg;
+         }
+         break;
+      case 'f':
+         tmp = optarg;
+         if (strcmp(tmp, "integer") == 0 || strcmp(tmp, "i") == 0) {
+            flags.integer = 1;
+         } else if (strcmp(tmp, "float") == 0 || strcmp(tmp, "f") == 0) {
+            flags.floats = 1;
+         } else if (strcmp(tmp, "ppc405") == 0 || strcmp(tmp, "mac") == 0) {
+            flags.p405 = 1;
+         } else if (strcmp(tmp, "altivec") == 0 || strcmp(tmp, "a") == 0) {
+            flags.altivec = 1;
+            flags.faltivec = 1;
+         } else {
+            goto bad_arg;
+         }
+         break;
+      case 'n':
+         filter = optarg;
+         break;
+      case 'r':
+         tmp = optarg;
+         if (strcmp(tmp, "large") == 0 || strcmp(tmp, "l") == 0) {
+            arg_list_size = 1;
+         } else if (strcmp(tmp, "small") == 0 || strcmp(tmp, "s") == 0) {
+            arg_list_size = 0;
+         } else {
+            goto bad_arg;
+         }
+         break;
+         
+      case 'u':
+         flags.cr = 1;
+         break;
+      case 'h':
+         usage();
+         return 0;
+      case 'v':
+         verbose++;
+         break;
+      default:
+         usage();
+         fprintf(stderr, "Unknown argument: '%c'\n", c);
+         return 1;
+      bad_arg:
+         usage();
+         fprintf(stderr, "Bad argument for '%c': '%s'\n", c, tmp);
+         return 1;
+      }
+   }
+   if (argc != optind) {
+      usage();
+      fprintf(stderr, "Bad number of arguments\n");
+      return 1;
+   }
+   
+   // Default n_args
+   if (flags.one_arg == 0 && flags.two_args == 0 && flags.three_args == 0) {
+      flags.one_arg = 1;
+      flags.two_args = 1;
+      flags.three_args = 1;
+   }
+   // Default type
+   if (flags.arith == 0 && flags.logical == 0 &&
+       flags.compare == 0 && flags.ldst == 0) {
+      flags.arith   = 1;
+      flags.logical = 1;
+      flags.compare = 1;
+      flags.ldst    = 1;
+   }
+   // Default family
+   if (flags.integer == 0 && flags.floats == 0 &&
+       flags.p405 == 0 && flags.altivec == 0 && flags.faltivec == 0) {
+      flags.integer  = 1;
+      flags.floats   = 1;
+      flags.p405     = 1;
+      flags.altivec  = 1;
+      flags.faltivec = 1;
+   }
+   // Default cr update
+   if (flags.cr == -1)
+      flags.cr = 2;       // both
+
+#else
+   /* Simple usage:
+      ./test-ppc      => all insns, except AV
+      ./test-ppc -a   => all insns, including AV
+   */
+   unsigned char *filter = NULL;
+   insn_sel_flags_t flags;
+   int c;
+
+   // Args
+   flags.one_arg    = 1;
+   flags.two_args   = 1;
+   flags.three_args = 1;
+   // Type
+   flags.arith      = 1;
+   flags.logical    = 1;
+   flags.compare    = 1;
+   flags.ldst       = 1;
+   // Family
+   flags.integer    = 1;
+   flags.floats     = 0;
+   flags.p405       = 0;
+   flags.altivec    = 0;
+   flags.faltivec   = 0;
+   // Flags
+   flags.cr         = 2;
+
+   while ((c = getopt(argc, argv, "ahv")) != -1) {
+      switch (c) {
+      case 'a':
+         flags.altivec  = 1;
+//         flags.faltivec = 1;  // TODO: not yet supported
+         break;
+      case 'h':
+         usage();
+         return 0;
+      case 'v':
+         verbose++;
+         break;
+      default:
+         usage();
+         fprintf(stderr, "Unknown argument: '%c'\n", c);
+         return 1;
+      }
+   }
+
+   arg_list_size = 0;
+#endif
+   
+
+   // NO FLOAT ALTIVEC
+   flags.faltivec = 0;
+
+
+   build_iargs_table();
+   build_fargs_table();
+   build_ii16_table();
+#if defined (HAS_ALTIVEC)
+   build_viargs_table();
+   build_vfargs_table();
+#endif
+   // dump_iargs();
+   // dump_iargs16();
+   // dump_vfargs();
+
+   if (verbose > 1) {
+      printf("\nInstruction Selection:\n");
+      printf("  n_args: \n");
+      printf("    one_arg    = %d\n", flags.one_arg);
+      printf("    two_args   = %d\n", flags.two_args);
+      printf("    three_args = %d\n", flags.three_args);
+      printf("  type: \n");
+      printf("    arith      = %d\n", flags.arith);
+      printf("    logical    = %d\n", flags.logical);
+      printf("    compare    = %d\n", flags.compare);
+      printf("    ldst       = %d\n", flags.ldst);
+      printf("  family: \n");
+      printf("    integer    = %d\n", flags.integer);
+      printf("    floats     = %d\n", flags.floats);
+      printf("    p405       = %d\n", flags.p405);
+      printf("    altivec    = %d\n", flags.altivec);
+      printf("    faltivec   = %d\n", flags.faltivec);
+      printf("  cr update: \n");
+      printf("    cr         = %d\n", flags.cr);
+      printf("\n");
+      printf("  num args: \n");
+      printf("    iargs      - %d\n", nb_iargs);
+      printf("    fargs      - %d\n", nb_fargs);
+#if defined (HAS_ALTIVEC)
+      printf("    viargs     - %d\n", nb_viargs);
+      printf("    vfargs     - %d\n", nb_vfargs);
+#endif
+      printf("\n");
+   }
+   do_tests( flags, filter );
+   
+   return 0;
+}
diff --git a/none/tests/ppc32/jm-insns.stderr.exp b/none/tests/ppc32/jm-insns.stderr.exp
new file mode 100644 (file)
index 0000000..139597f
--- /dev/null
@@ -0,0 +1,2 @@
+
+
diff --git a/none/tests/ppc32/jm-insns.stdout.exp b/none/tests/ppc32/jm-insns.stdout.exp
new file mode 100644 (file)
index 0000000..5bed30d
--- /dev/null
@@ -0,0 +1,1632 @@
+PPC integer arith insns with two args:
+         add 00000000, 00000000 => 00000000 (00000000 00000000)
+         add 00000000, 000f423f => 000f423f (00000000 00000000)
+         add 00000000, ffffffff => ffffffff (00000000 00000000)
+         add 000f423f, 00000000 => 000f423f (00000000 00000000)
+         add 000f423f, 000f423f => 001e847e (00000000 00000000)
+         add 000f423f, ffffffff => 000f423e (00000000 00000000)
+         add ffffffff, 00000000 => ffffffff (00000000 00000000)
+         add ffffffff, 000f423f => 000f423e (00000000 00000000)
+         add ffffffff, ffffffff => fffffffe (00000000 00000000)
+
+        addo 00000000, 00000000 => 00000000 (00000000 00000000)
+        addo 00000000, 000f423f => 000f423f (00000000 00000000)
+        addo 00000000, ffffffff => ffffffff (00000000 00000000)
+        addo 000f423f, 00000000 => 000f423f (00000000 00000000)
+        addo 000f423f, 000f423f => 001e847e (00000000 00000000)
+        addo 000f423f, ffffffff => 000f423e (00000000 00000000)
+        addo ffffffff, 00000000 => ffffffff (00000000 00000000)
+        addo ffffffff, 000f423f => 000f423e (00000000 00000000)
+        addo ffffffff, ffffffff => fffffffe (00000000 00000000)
+
+        addc 00000000, 00000000 => 00000000 (00000000 00000000)
+        addc 00000000, 000f423f => 000f423f (00000000 00000000)
+        addc 00000000, ffffffff => ffffffff (00000000 00000000)
+        addc 000f423f, 00000000 => 000f423f (00000000 00000000)
+        addc 000f423f, 000f423f => 001e847e (00000000 00000000)
+        addc 000f423f, ffffffff => 000f423e (00000000 20000000)
+        addc ffffffff, 00000000 => ffffffff (00000000 00000000)
+        addc ffffffff, 000f423f => 000f423e (00000000 20000000)
+        addc ffffffff, ffffffff => fffffffe (00000000 20000000)
+
+       addco 00000000, 00000000 => 00000000 (00000000 00000000)
+       addco 00000000, 000f423f => 000f423f (00000000 00000000)
+       addco 00000000, ffffffff => ffffffff (00000000 00000000)
+       addco 000f423f, 00000000 => 000f423f (00000000 00000000)
+       addco 000f423f, 000f423f => 001e847e (00000000 00000000)
+       addco 000f423f, ffffffff => 000f423e (00000000 20000000)
+       addco ffffffff, 00000000 => ffffffff (00000000 00000000)
+       addco ffffffff, 000f423f => 000f423e (00000000 20000000)
+       addco ffffffff, ffffffff => fffffffe (00000000 20000000)
+
+        divw 00000000, 00000000 => 00000000 (00000000 00000000)
+        divw 00000000, 000f423f => 00000000 (00000000 00000000)
+        divw 00000000, ffffffff => 00000000 (00000000 00000000)
+        divw 000f423f, 00000000 => 00000000 (00000000 00000000)
+        divw 000f423f, 000f423f => 00000001 (00000000 00000000)
+        divw 000f423f, ffffffff => fff0bdc1 (00000000 00000000)
+        divw ffffffff, 00000000 => 00000000 (00000000 00000000)
+        divw ffffffff, 000f423f => 00000000 (00000000 00000000)
+        divw ffffffff, ffffffff => 00000001 (00000000 00000000)
+
+       divwo 00000000, 00000000 => 00000000 (00000000 c0000000)
+       divwo 00000000, 000f423f => 00000000 (00000000 00000000)
+       divwo 00000000, ffffffff => 00000000 (00000000 00000000)
+       divwo 000f423f, 00000000 => 00000000 (00000000 c0000000)
+       divwo 000f423f, 000f423f => 00000001 (00000000 00000000)
+       divwo 000f423f, ffffffff => fff0bdc1 (00000000 00000000)
+       divwo ffffffff, 00000000 => 00000000 (00000000 c0000000)
+       divwo ffffffff, 000f423f => 00000000 (00000000 00000000)
+       divwo ffffffff, ffffffff => 00000001 (00000000 00000000)
+
+       divwu 00000000, 00000000 => 00000000 (00000000 00000000)
+       divwu 00000000, 000f423f => 00000000 (00000000 00000000)
+       divwu 00000000, ffffffff => 00000000 (00000000 00000000)
+       divwu 000f423f, 00000000 => 00000000 (00000000 00000000)
+       divwu 000f423f, 000f423f => 00000001 (00000000 00000000)
+       divwu 000f423f, ffffffff => 00000000 (00000000 00000000)
+       divwu ffffffff, 00000000 => 00000000 (00000000 00000000)
+       divwu ffffffff, 000f423f => 000010c6 (00000000 00000000)
+       divwu ffffffff, ffffffff => 00000001 (00000000 00000000)
+
+      divwuo 00000000, 00000000 => 00000000 (00000000 c0000000)
+      divwuo 00000000, 000f423f => 00000000 (00000000 00000000)
+      divwuo 00000000, ffffffff => 00000000 (00000000 00000000)
+      divwuo 000f423f, 00000000 => 00000000 (00000000 c0000000)
+      divwuo 000f423f, 000f423f => 00000001 (00000000 00000000)
+      divwuo 000f423f, ffffffff => 00000000 (00000000 00000000)
+      divwuo ffffffff, 00000000 => 00000000 (00000000 c0000000)
+      divwuo ffffffff, 000f423f => 000010c6 (00000000 00000000)
+      divwuo ffffffff, ffffffff => 00000001 (00000000 00000000)
+
+       mulhw 00000000, 00000000 => 00000000 (00000000 00000000)
+       mulhw 00000000, 000f423f => 00000000 (00000000 00000000)
+       mulhw 00000000, ffffffff => 00000000 (00000000 00000000)
+       mulhw 000f423f, 00000000 => 00000000 (00000000 00000000)
+       mulhw 000f423f, 000f423f => 000000e8 (00000000 00000000)
+       mulhw 000f423f, ffffffff => ffffffff (00000000 00000000)
+       mulhw ffffffff, 00000000 => 00000000 (00000000 00000000)
+       mulhw ffffffff, 000f423f => ffffffff (00000000 00000000)
+       mulhw ffffffff, ffffffff => 00000000 (00000000 00000000)
+
+      mulhwu 00000000, 00000000 => 00000000 (00000000 00000000)
+      mulhwu 00000000, 000f423f => 00000000 (00000000 00000000)
+      mulhwu 00000000, ffffffff => 00000000 (00000000 00000000)
+      mulhwu 000f423f, 00000000 => 00000000 (00000000 00000000)
+      mulhwu 000f423f, 000f423f => 000000e8 (00000000 00000000)
+      mulhwu 000f423f, ffffffff => 000f423e (00000000 00000000)
+      mulhwu ffffffff, 00000000 => 00000000 (00000000 00000000)
+      mulhwu ffffffff, 000f423f => 000f423e (00000000 00000000)
+      mulhwu ffffffff, ffffffff => fffffffe (00000000 00000000)
+
+       mullw 00000000, 00000000 => 00000000 (00000000 00000000)
+       mullw 00000000, 000f423f => 00000000 (00000000 00000000)
+       mullw 00000000, ffffffff => 00000000 (00000000 00000000)
+       mullw 000f423f, 00000000 => 00000000 (00000000 00000000)
+       mullw 000f423f, 000f423f => d4868b81 (00000000 00000000)
+       mullw 000f423f, ffffffff => fff0bdc1 (00000000 00000000)
+       mullw ffffffff, 00000000 => 00000000 (00000000 00000000)
+       mullw ffffffff, 000f423f => fff0bdc1 (00000000 00000000)
+       mullw ffffffff, ffffffff => 00000001 (00000000 00000000)
+
+      mullwo 00000000, 00000000 => 00000000 (00000000 00000000)
+      mullwo 00000000, 000f423f => 00000000 (00000000 00000000)
+      mullwo 00000000, ffffffff => 00000000 (00000000 00000000)
+      mullwo 000f423f, 00000000 => 00000000 (00000000 00000000)
+      mullwo 000f423f, 000f423f => d4868b81 (00000000 c0000000)
+      mullwo 000f423f, ffffffff => fff0bdc1 (00000000 00000000)
+      mullwo ffffffff, 00000000 => 00000000 (00000000 00000000)
+      mullwo ffffffff, 000f423f => fff0bdc1 (00000000 00000000)
+      mullwo ffffffff, ffffffff => 00000001 (00000000 00000000)
+
+        subf 00000000, 00000000 => 00000000 (00000000 00000000)
+        subf 00000000, 000f423f => 000f423f (00000000 00000000)
+        subf 00000000, ffffffff => ffffffff (00000000 00000000)
+        subf 000f423f, 00000000 => fff0bdc1 (00000000 00000000)
+        subf 000f423f, 000f423f => 00000000 (00000000 00000000)
+        subf 000f423f, ffffffff => fff0bdc0 (00000000 00000000)
+        subf ffffffff, 00000000 => 00000001 (00000000 00000000)
+        subf ffffffff, 000f423f => 000f4240 (00000000 00000000)
+        subf ffffffff, ffffffff => 00000000 (00000000 00000000)
+
+       subfo 00000000, 00000000 => 00000000 (00000000 00000000)
+       subfo 00000000, 000f423f => 000f423f (00000000 00000000)
+       subfo 00000000, ffffffff => ffffffff (00000000 00000000)
+       subfo 000f423f, 00000000 => fff0bdc1 (00000000 00000000)
+       subfo 000f423f, 000f423f => 00000000 (00000000 00000000)
+       subfo 000f423f, ffffffff => fff0bdc0 (00000000 00000000)
+       subfo ffffffff, 00000000 => 00000001 (00000000 00000000)
+       subfo ffffffff, 000f423f => 000f4240 (00000000 00000000)
+       subfo ffffffff, ffffffff => 00000000 (00000000 00000000)
+
+       subfc 00000000, 00000000 => 00000000 (00000000 20000000)
+       subfc 00000000, 000f423f => 000f423f (00000000 20000000)
+       subfc 00000000, ffffffff => ffffffff (00000000 20000000)
+       subfc 000f423f, 00000000 => fff0bdc1 (00000000 00000000)
+       subfc 000f423f, 000f423f => 00000000 (00000000 20000000)
+       subfc 000f423f, ffffffff => fff0bdc0 (00000000 20000000)
+       subfc ffffffff, 00000000 => 00000001 (00000000 00000000)
+       subfc ffffffff, 000f423f => 000f4240 (00000000 00000000)
+       subfc ffffffff, ffffffff => 00000000 (00000000 20000000)
+
+      subfco 00000000, 00000000 => 00000000 (00000000 20000000)
+      subfco 00000000, 000f423f => 000f423f (00000000 20000000)
+      subfco 00000000, ffffffff => ffffffff (00000000 20000000)
+      subfco 000f423f, 00000000 => fff0bdc1 (00000000 00000000)
+      subfco 000f423f, 000f423f => 00000000 (00000000 20000000)
+      subfco 000f423f, ffffffff => fff0bdc0 (00000000 20000000)
+      subfco ffffffff, 00000000 => 00000001 (00000000 00000000)
+      subfco ffffffff, 000f423f => 000f4240 (00000000 00000000)
+      subfco ffffffff, ffffffff => 00000000 (00000000 20000000)
+
+PPC integer arith insns with two args with flags update:
+        add. 00000000, 00000000 => 00000000 (20000000 00000000)
+        add. 00000000, 000f423f => 000f423f (40000000 00000000)
+        add. 00000000, ffffffff => ffffffff (80000000 00000000)
+        add. 000f423f, 00000000 => 000f423f (40000000 00000000)
+        add. 000f423f, 000f423f => 001e847e (40000000 00000000)
+        add. 000f423f, ffffffff => 000f423e (40000000 00000000)
+        add. ffffffff, 00000000 => ffffffff (80000000 00000000)
+        add. ffffffff, 000f423f => 000f423e (40000000 00000000)
+        add. ffffffff, ffffffff => fffffffe (80000000 00000000)
+
+       addo. 00000000, 00000000 => 00000000 (20000000 00000000)
+       addo. 00000000, 000f423f => 000f423f (40000000 00000000)
+       addo. 00000000, ffffffff => ffffffff (80000000 00000000)
+       addo. 000f423f, 00000000 => 000f423f (40000000 00000000)
+       addo. 000f423f, 000f423f => 001e847e (40000000 00000000)
+       addo. 000f423f, ffffffff => 000f423e (40000000 00000000)
+       addo. ffffffff, 00000000 => ffffffff (80000000 00000000)
+       addo. ffffffff, 000f423f => 000f423e (40000000 00000000)
+       addo. ffffffff, ffffffff => fffffffe (80000000 00000000)
+
+       addc. 00000000, 00000000 => 00000000 (20000000 00000000)
+       addc. 00000000, 000f423f => 000f423f (40000000 00000000)
+       addc. 00000000, ffffffff => ffffffff (80000000 00000000)
+       addc. 000f423f, 00000000 => 000f423f (40000000 00000000)
+       addc. 000f423f, 000f423f => 001e847e (40000000 00000000)
+       addc. 000f423f, ffffffff => 000f423e (40000000 20000000)
+       addc. ffffffff, 00000000 => ffffffff (80000000 00000000)
+       addc. ffffffff, 000f423f => 000f423e (40000000 20000000)
+       addc. ffffffff, ffffffff => fffffffe (80000000 20000000)
+
+      addco. 00000000, 00000000 => 00000000 (20000000 00000000)
+      addco. 00000000, 000f423f => 000f423f (40000000 00000000)
+      addco. 00000000, ffffffff => ffffffff (80000000 00000000)
+      addco. 000f423f, 00000000 => 000f423f (40000000 00000000)
+      addco. 000f423f, 000f423f => 001e847e (40000000 00000000)
+      addco. 000f423f, ffffffff => 000f423e (40000000 20000000)
+      addco. ffffffff, 00000000 => ffffffff (80000000 00000000)
+      addco. ffffffff, 000f423f => 000f423e (40000000 20000000)
+      addco. ffffffff, ffffffff => fffffffe (80000000 20000000)
+
+       divw. 00000000, 00000000 => 00000000 (20000000 00000000)
+       divw. 00000000, 000f423f => 00000000 (20000000 00000000)
+       divw. 00000000, ffffffff => 00000000 (20000000 00000000)
+       divw. 000f423f, 00000000 => 00000000 (20000000 00000000)
+       divw. 000f423f, 000f423f => 00000001 (40000000 00000000)
+       divw. 000f423f, ffffffff => fff0bdc1 (80000000 00000000)
+       divw. ffffffff, 00000000 => 00000000 (20000000 00000000)
+       divw. ffffffff, 000f423f => 00000000 (20000000 00000000)
+       divw. ffffffff, ffffffff => 00000001 (40000000 00000000)
+
+      divwo. 00000000, 00000000 => 00000000 (30000000 c0000000)
+      divwo. 00000000, 000f423f => 00000000 (20000000 00000000)
+      divwo. 00000000, ffffffff => 00000000 (20000000 00000000)
+      divwo. 000f423f, 00000000 => 00000000 (30000000 c0000000)
+      divwo. 000f423f, 000f423f => 00000001 (40000000 00000000)
+      divwo. 000f423f, ffffffff => fff0bdc1 (80000000 00000000)
+      divwo. ffffffff, 00000000 => 00000000 (30000000 c0000000)
+      divwo. ffffffff, 000f423f => 00000000 (20000000 00000000)
+      divwo. ffffffff, ffffffff => 00000001 (40000000 00000000)
+
+      divwu. 00000000, 00000000 => 00000000 (20000000 00000000)
+      divwu. 00000000, 000f423f => 00000000 (20000000 00000000)
+      divwu. 00000000, ffffffff => 00000000 (20000000 00000000)
+      divwu. 000f423f, 00000000 => 00000000 (20000000 00000000)
+      divwu. 000f423f, 000f423f => 00000001 (40000000 00000000)
+      divwu. 000f423f, ffffffff => 00000000 (20000000 00000000)
+      divwu. ffffffff, 00000000 => 00000000 (20000000 00000000)
+      divwu. ffffffff, 000f423f => 000010c6 (40000000 00000000)
+      divwu. ffffffff, ffffffff => 00000001 (40000000 00000000)
+
+     divwuo. 00000000, 00000000 => 00000000 (30000000 c0000000)
+     divwuo. 00000000, 000f423f => 00000000 (20000000 00000000)
+     divwuo. 00000000, ffffffff => 00000000 (20000000 00000000)
+     divwuo. 000f423f, 00000000 => 00000000 (30000000 c0000000)
+     divwuo. 000f423f, 000f423f => 00000001 (40000000 00000000)
+     divwuo. 000f423f, ffffffff => 00000000 (20000000 00000000)
+     divwuo. ffffffff, 00000000 => 00000000 (30000000 c0000000)
+     divwuo. ffffffff, 000f423f => 000010c6 (40000000 00000000)
+     divwuo. ffffffff, ffffffff => 00000001 (40000000 00000000)
+
+      mulhw. 00000000, 00000000 => 00000000 (20000000 00000000)
+      mulhw. 00000000, 000f423f => 00000000 (20000000 00000000)
+      mulhw. 00000000, ffffffff => 00000000 (20000000 00000000)
+      mulhw. 000f423f, 00000000 => 00000000 (20000000 00000000)
+      mulhw. 000f423f, 000f423f => 000000e8 (40000000 00000000)
+      mulhw. 000f423f, ffffffff => ffffffff (80000000 00000000)
+      mulhw. ffffffff, 00000000 => 00000000 (20000000 00000000)
+      mulhw. ffffffff, 000f423f => ffffffff (80000000 00000000)
+      mulhw. ffffffff, ffffffff => 00000000 (20000000 00000000)
+
+     mulhwu. 00000000, 00000000 => 00000000 (20000000 00000000)
+     mulhwu. 00000000, 000f423f => 00000000 (20000000 00000000)
+     mulhwu. 00000000, ffffffff => 00000000 (20000000 00000000)
+     mulhwu. 000f423f, 00000000 => 00000000 (20000000 00000000)
+     mulhwu. 000f423f, 000f423f => 000000e8 (40000000 00000000)
+     mulhwu. 000f423f, ffffffff => 000f423e (40000000 00000000)
+     mulhwu. ffffffff, 00000000 => 00000000 (20000000 00000000)
+     mulhwu. ffffffff, 000f423f => 000f423e (40000000 00000000)
+     mulhwu. ffffffff, ffffffff => fffffffe (80000000 00000000)
+
+      mullw. 00000000, 00000000 => 00000000 (20000000 00000000)
+      mullw. 00000000, 000f423f => 00000000 (20000000 00000000)
+      mullw. 00000000, ffffffff => 00000000 (20000000 00000000)
+      mullw. 000f423f, 00000000 => 00000000 (20000000 00000000)
+      mullw. 000f423f, 000f423f => d4868b81 (80000000 00000000)
+      mullw. 000f423f, ffffffff => fff0bdc1 (80000000 00000000)
+      mullw. ffffffff, 00000000 => 00000000 (20000000 00000000)
+      mullw. ffffffff, 000f423f => fff0bdc1 (80000000 00000000)
+      mullw. ffffffff, ffffffff => 00000001 (40000000 00000000)
+
+     mullwo. 00000000, 00000000 => 00000000 (20000000 00000000)
+     mullwo. 00000000, 000f423f => 00000000 (20000000 00000000)
+     mullwo. 00000000, ffffffff => 00000000 (20000000 00000000)
+     mullwo. 000f423f, 00000000 => 00000000 (20000000 00000000)
+     mullwo. 000f423f, 000f423f => d4868b81 (90000000 c0000000)
+     mullwo. 000f423f, ffffffff => fff0bdc1 (80000000 00000000)
+     mullwo. ffffffff, 00000000 => 00000000 (20000000 00000000)
+     mullwo. ffffffff, 000f423f => fff0bdc1 (80000000 00000000)
+     mullwo. ffffffff, ffffffff => 00000001 (40000000 00000000)
+
+       subf. 00000000, 00000000 => 00000000 (20000000 00000000)
+       subf. 00000000, 000f423f => 000f423f (40000000 00000000)
+       subf. 00000000, ffffffff => ffffffff (80000000 00000000)
+       subf. 000f423f, 00000000 => fff0bdc1 (80000000 00000000)
+       subf. 000f423f, 000f423f => 00000000 (20000000 00000000)
+       subf. 000f423f, ffffffff => fff0bdc0 (80000000 00000000)
+       subf. ffffffff, 00000000 => 00000001 (40000000 00000000)
+       subf. ffffffff, 000f423f => 000f4240 (40000000 00000000)
+       subf. ffffffff, ffffffff => 00000000 (20000000 00000000)
+
+      subfo. 00000000, 00000000 => 00000000 (20000000 00000000)
+      subfo. 00000000, 000f423f => 000f423f (40000000 00000000)
+      subfo. 00000000, ffffffff => ffffffff (80000000 00000000)
+      subfo. 000f423f, 00000000 => fff0bdc1 (80000000 00000000)
+      subfo. 000f423f, 000f423f => 00000000 (20000000 00000000)
+      subfo. 000f423f, ffffffff => fff0bdc0 (80000000 00000000)
+      subfo. ffffffff, 00000000 => 00000001 (40000000 00000000)
+      subfo. ffffffff, 000f423f => 000f4240 (40000000 00000000)
+      subfo. ffffffff, ffffffff => 00000000 (20000000 00000000)
+
+      subfc. 00000000, 00000000 => 00000000 (20000000 20000000)
+      subfc. 00000000, 000f423f => 000f423f (40000000 20000000)
+      subfc. 00000000, ffffffff => ffffffff (80000000 20000000)
+      subfc. 000f423f, 00000000 => fff0bdc1 (80000000 00000000)
+      subfc. 000f423f, 000f423f => 00000000 (20000000 20000000)
+      subfc. 000f423f, ffffffff => fff0bdc0 (80000000 20000000)
+      subfc. ffffffff, 00000000 => 00000001 (40000000 00000000)
+      subfc. ffffffff, 000f423f => 000f4240 (40000000 00000000)
+      subfc. ffffffff, ffffffff => 00000000 (20000000 20000000)
+
+     subfco. 00000000, 00000000 => 00000000 (20000000 20000000)
+     subfco. 00000000, 000f423f => 000f423f (40000000 20000000)
+     subfco. 00000000, ffffffff => ffffffff (80000000 20000000)
+     subfco. 000f423f, 00000000 => fff0bdc1 (80000000 00000000)
+     subfco. 000f423f, 000f423f => 00000000 (20000000 20000000)
+     subfco. 000f423f, ffffffff => fff0bdc0 (80000000 20000000)
+     subfco. ffffffff, 00000000 => 00000001 (40000000 00000000)
+     subfco. ffffffff, 000f423f => 000f4240 (40000000 00000000)
+     subfco. ffffffff, ffffffff => 00000000 (20000000 20000000)
+
+PPC integer arith insns with two args and carry:
+        adde 00000000, 00000000 => 00000000 (00000000 00000000)
+        adde 00000000, 000f423f => 000f423f (00000000 00000000)
+        adde 00000000, ffffffff => ffffffff (00000000 00000000)
+        adde 000f423f, 00000000 => 000f423f (00000000 00000000)
+        adde 000f423f, 000f423f => 001e847e (00000000 00000000)
+        adde 000f423f, ffffffff => 000f423e (00000000 20000000)
+        adde ffffffff, 00000000 => ffffffff (00000000 00000000)
+        adde ffffffff, 000f423f => 000f423e (00000000 20000000)
+        adde ffffffff, ffffffff => fffffffe (00000000 20000000)
+        adde 00000000, 00000000 => 00000001 (00000000 00000000)
+        adde 00000000, 000f423f => 000f4240 (00000000 00000000)
+        adde 00000000, ffffffff => 00000000 (00000000 20000000)
+        adde 000f423f, 00000000 => 000f4240 (00000000 00000000)
+        adde 000f423f, 000f423f => 001e847f (00000000 00000000)
+        adde 000f423f, ffffffff => 000f423f (00000000 20000000)
+        adde ffffffff, 00000000 => 00000000 (00000000 20000000)
+        adde ffffffff, 000f423f => 000f423f (00000000 20000000)
+        adde ffffffff, ffffffff => ffffffff (00000000 20000000)
+
+       addeo 00000000, 00000000 => 00000000 (00000000 00000000)
+       addeo 00000000, 000f423f => 000f423f (00000000 00000000)
+       addeo 00000000, ffffffff => ffffffff (00000000 00000000)
+       addeo 000f423f, 00000000 => 000f423f (00000000 00000000)
+       addeo 000f423f, 000f423f => 001e847e (00000000 00000000)
+       addeo 000f423f, ffffffff => 000f423e (00000000 20000000)
+       addeo ffffffff, 00000000 => ffffffff (00000000 00000000)
+       addeo ffffffff, 000f423f => 000f423e (00000000 20000000)
+       addeo ffffffff, ffffffff => fffffffe (00000000 20000000)
+       addeo 00000000, 00000000 => 00000001 (00000000 00000000)
+       addeo 00000000, 000f423f => 000f4240 (00000000 00000000)
+       addeo 00000000, ffffffff => 00000000 (00000000 20000000)
+       addeo 000f423f, 00000000 => 000f4240 (00000000 00000000)
+       addeo 000f423f, 000f423f => 001e847f (00000000 00000000)
+       addeo 000f423f, ffffffff => 000f423f (00000000 20000000)
+       addeo ffffffff, 00000000 => 00000000 (00000000 20000000)
+       addeo ffffffff, 000f423f => 000f423f (00000000 20000000)
+       addeo ffffffff, ffffffff => ffffffff (00000000 20000000)
+
+       subfe 00000000, 00000000 => ffffffff (00000000 00000000)
+       subfe 00000000, 000f423f => 000f423e (00000000 20000000)
+       subfe 00000000, ffffffff => fffffffe (00000000 20000000)
+       subfe 000f423f, 00000000 => fff0bdc0 (00000000 00000000)
+       subfe 000f423f, 000f423f => ffffffff (00000000 00000000)
+       subfe 000f423f, ffffffff => fff0bdbf (00000000 20000000)
+       subfe ffffffff, 00000000 => 00000000 (00000000 00000000)
+       subfe ffffffff, 000f423f => 000f423f (00000000 00000000)
+       subfe ffffffff, ffffffff => ffffffff (00000000 00000000)
+       subfe 00000000, 00000000 => 00000000 (00000000 20000000)
+       subfe 00000000, 000f423f => 000f423f (00000000 20000000)
+       subfe 00000000, ffffffff => ffffffff (00000000 20000000)
+       subfe 000f423f, 00000000 => fff0bdc1 (00000000 00000000)
+       subfe 000f423f, 000f423f => 00000000 (00000000 20000000)
+       subfe 000f423f, ffffffff => fff0bdc0 (00000000 20000000)
+       subfe ffffffff, 00000000 => 00000001 (00000000 00000000)
+       subfe ffffffff, 000f423f => 000f4240 (00000000 00000000)
+       subfe ffffffff, ffffffff => 00000000 (00000000 20000000)
+
+      subfeo 00000000, 00000000 => ffffffff (00000000 00000000)
+      subfeo 00000000, 000f423f => 000f423e (00000000 20000000)
+      subfeo 00000000, ffffffff => fffffffe (00000000 20000000)
+      subfeo 000f423f, 00000000 => fff0bdc0 (00000000 00000000)
+      subfeo 000f423f, 000f423f => ffffffff (00000000 00000000)
+      subfeo 000f423f, ffffffff => fff0bdbf (00000000 20000000)
+      subfeo ffffffff, 00000000 => 00000000 (00000000 00000000)
+      subfeo ffffffff, 000f423f => 000f423f (00000000 00000000)
+      subfeo ffffffff, ffffffff => ffffffff (00000000 00000000)
+      subfeo 00000000, 00000000 => 00000000 (00000000 20000000)
+      subfeo 00000000, 000f423f => 000f423f (00000000 20000000)
+      subfeo 00000000, ffffffff => ffffffff (00000000 20000000)
+      subfeo 000f423f, 00000000 => fff0bdc1 (00000000 00000000)
+      subfeo 000f423f, 000f423f => 00000000 (00000000 20000000)
+      subfeo 000f423f, ffffffff => fff0bdc0 (00000000 20000000)
+      subfeo ffffffff, 00000000 => 00000001 (00000000 00000000)
+      subfeo ffffffff, 000f423f => 000f4240 (00000000 00000000)
+      subfeo ffffffff, ffffffff => 00000000 (00000000 20000000)
+
+PPC integer arith insns with two args and carry with flags update:
+       adde. 00000000, 00000000 => 00000000 (20000000 00000000)
+       adde. 00000000, 000f423f => 000f423f (40000000 00000000)
+       adde. 00000000, ffffffff => ffffffff (80000000 00000000)
+       adde. 000f423f, 00000000 => 000f423f (40000000 00000000)
+       adde. 000f423f, 000f423f => 001e847e (40000000 00000000)
+       adde. 000f423f, ffffffff => 000f423e (40000000 20000000)
+       adde. ffffffff, 00000000 => ffffffff (80000000 00000000)
+       adde. ffffffff, 000f423f => 000f423e (40000000 20000000)
+       adde. ffffffff, ffffffff => fffffffe (80000000 20000000)
+       adde. 00000000, 00000000 => 00000001 (40000000 00000000)
+       adde. 00000000, 000f423f => 000f4240 (40000000 00000000)
+       adde. 00000000, ffffffff => 00000000 (20000000 20000000)
+       adde. 000f423f, 00000000 => 000f4240 (40000000 00000000)
+       adde. 000f423f, 000f423f => 001e847f (40000000 00000000)
+       adde. 000f423f, ffffffff => 000f423f (40000000 20000000)
+       adde. ffffffff, 00000000 => 00000000 (20000000 20000000)
+       adde. ffffffff, 000f423f => 000f423f (40000000 20000000)
+       adde. ffffffff, ffffffff => ffffffff (80000000 20000000)
+
+      addeo. 00000000, 00000000 => 00000000 (20000000 00000000)
+      addeo. 00000000, 000f423f => 000f423f (40000000 00000000)
+      addeo. 00000000, ffffffff => ffffffff (80000000 00000000)
+      addeo. 000f423f, 00000000 => 000f423f (40000000 00000000)
+      addeo. 000f423f, 000f423f => 001e847e (40000000 00000000)
+      addeo. 000f423f, ffffffff => 000f423e (40000000 20000000)
+      addeo. ffffffff, 00000000 => ffffffff (80000000 00000000)
+      addeo. ffffffff, 000f423f => 000f423e (40000000 20000000)
+      addeo. ffffffff, ffffffff => fffffffe (80000000 20000000)
+      addeo. 00000000, 00000000 => 00000001 (40000000 00000000)
+      addeo. 00000000, 000f423f => 000f4240 (40000000 00000000)
+      addeo. 00000000, ffffffff => 00000000 (20000000 20000000)
+      addeo. 000f423f, 00000000 => 000f4240 (40000000 00000000)
+      addeo. 000f423f, 000f423f => 001e847f (40000000 00000000)
+      addeo. 000f423f, ffffffff => 000f423f (40000000 20000000)
+      addeo. ffffffff, 00000000 => 00000000 (20000000 20000000)
+      addeo. ffffffff, 000f423f => 000f423f (40000000 20000000)
+      addeo. ffffffff, ffffffff => ffffffff (80000000 20000000)
+
+      subfe. 00000000, 00000000 => ffffffff (80000000 00000000)
+      subfe. 00000000, 000f423f => 000f423e (40000000 20000000)
+      subfe. 00000000, ffffffff => fffffffe (80000000 20000000)
+      subfe. 000f423f, 00000000 => fff0bdc0 (80000000 00000000)
+      subfe. 000f423f, 000f423f => ffffffff (80000000 00000000)
+      subfe. 000f423f, ffffffff => fff0bdbf (80000000 20000000)
+      subfe. ffffffff, 00000000 => 00000000 (20000000 00000000)
+      subfe. ffffffff, 000f423f => 000f423f (40000000 00000000)
+      subfe. ffffffff, ffffffff => ffffffff (80000000 00000000)
+      subfe. 00000000, 00000000 => 00000000 (20000000 20000000)
+      subfe. 00000000, 000f423f => 000f423f (40000000 20000000)
+      subfe. 00000000, ffffffff => ffffffff (80000000 20000000)
+      subfe. 000f423f, 00000000 => fff0bdc1 (80000000 00000000)
+      subfe. 000f423f, 000f423f => 00000000 (20000000 20000000)
+      subfe. 000f423f, ffffffff => fff0bdc0 (80000000 20000000)
+      subfe. ffffffff, 00000000 => 00000001 (40000000 00000000)
+      subfe. ffffffff, 000f423f => 000f4240 (40000000 00000000)
+      subfe. ffffffff, ffffffff => 00000000 (20000000 20000000)
+
+     subfeo. 00000000, 00000000 => ffffffff (80000000 00000000)
+     subfeo. 00000000, 000f423f => 000f423e (40000000 20000000)
+     subfeo. 00000000, ffffffff => fffffffe (80000000 20000000)
+     subfeo. 000f423f, 00000000 => fff0bdc0 (80000000 00000000)
+     subfeo. 000f423f, 000f423f => ffffffff (80000000 00000000)
+     subfeo. 000f423f, ffffffff => fff0bdbf (80000000 20000000)
+     subfeo. ffffffff, 00000000 => 00000000 (20000000 00000000)
+     subfeo. ffffffff, 000f423f => 000f423f (40000000 00000000)
+     subfeo. ffffffff, ffffffff => ffffffff (80000000 00000000)
+     subfeo. 00000000, 00000000 => 00000000 (20000000 20000000)
+     subfeo. 00000000, 000f423f => 000f423f (40000000 20000000)
+     subfeo. 00000000, ffffffff => ffffffff (80000000 20000000)
+     subfeo. 000f423f, 00000000 => fff0bdc1 (80000000 00000000)
+     subfeo. 000f423f, 000f423f => 00000000 (20000000 20000000)
+     subfeo. 000f423f, ffffffff => fff0bdc0 (80000000 20000000)
+     subfeo. ffffffff, 00000000 => 00000001 (40000000 00000000)
+     subfeo. ffffffff, 000f423f => 000f4240 (40000000 00000000)
+     subfeo. ffffffff, ffffffff => 00000000 (20000000 20000000)
+
+PPC integer logical insns with two args:
+         and 00000000, 00000000 => 00000000 (00000000 00000000)
+         and 00000000, 000f423f => 00000000 (00000000 00000000)
+         and 00000000, ffffffff => 00000000 (00000000 00000000)
+         and 000f423f, 00000000 => 00000000 (00000000 00000000)
+         and 000f423f, 000f423f => 000f423f (00000000 00000000)
+         and 000f423f, ffffffff => 000f423f (00000000 00000000)
+         and ffffffff, 00000000 => 00000000 (00000000 00000000)
+         and ffffffff, 000f423f => 000f423f (00000000 00000000)
+         and ffffffff, ffffffff => ffffffff (00000000 00000000)
+
+        andc 00000000, 00000000 => 00000000 (00000000 00000000)
+        andc 00000000, 000f423f => 00000000 (00000000 00000000)
+        andc 00000000, ffffffff => 00000000 (00000000 00000000)
+        andc 000f423f, 00000000 => 000f423f (00000000 00000000)
+        andc 000f423f, 000f423f => 00000000 (00000000 00000000)
+        andc 000f423f, ffffffff => 00000000 (00000000 00000000)
+        andc ffffffff, 00000000 => ffffffff (00000000 00000000)
+        andc ffffffff, 000f423f => fff0bdc0 (00000000 00000000)
+        andc ffffffff, ffffffff => 00000000 (00000000 00000000)
+
+         eqv 00000000, 00000000 => ffffffff (00000000 00000000)
+         eqv 00000000, 000f423f => fff0bdc0 (00000000 00000000)
+         eqv 00000000, ffffffff => 00000000 (00000000 00000000)
+         eqv 000f423f, 00000000 => fff0bdc0 (00000000 00000000)
+         eqv 000f423f, 000f423f => ffffffff (00000000 00000000)
+         eqv 000f423f, ffffffff => 000f423f (00000000 00000000)
+         eqv ffffffff, 00000000 => 00000000 (00000000 00000000)
+         eqv ffffffff, 000f423f => 000f423f (00000000 00000000)
+         eqv ffffffff, ffffffff => ffffffff (00000000 00000000)
+
+        nand 00000000, 00000000 => ffffffff (00000000 00000000)
+        nand 00000000, 000f423f => ffffffff (00000000 00000000)
+        nand 00000000, ffffffff => ffffffff (00000000 00000000)
+        nand 000f423f, 00000000 => ffffffff (00000000 00000000)
+        nand 000f423f, 000f423f => fff0bdc0 (00000000 00000000)
+        nand 000f423f, ffffffff => fff0bdc0 (00000000 00000000)
+        nand ffffffff, 00000000 => ffffffff (00000000 00000000)
+        nand ffffffff, 000f423f => fff0bdc0 (00000000 00000000)
+        nand ffffffff, ffffffff => 00000000 (00000000 00000000)
+
+         nor 00000000, 00000000 => ffffffff (00000000 00000000)
+         nor 00000000, 000f423f => fff0bdc0 (00000000 00000000)
+         nor 00000000, ffffffff => 00000000 (00000000 00000000)
+         nor 000f423f, 00000000 => fff0bdc0 (00000000 00000000)
+         nor 000f423f, 000f423f => fff0bdc0 (00000000 00000000)
+         nor 000f423f, ffffffff => 00000000 (00000000 00000000)
+         nor ffffffff, 00000000 => 00000000 (00000000 00000000)
+         nor ffffffff, 000f423f => 00000000 (00000000 00000000)
+         nor ffffffff, ffffffff => 00000000 (00000000 00000000)
+
+          or 00000000, 00000000 => 00000000 (00000000 00000000)
+          or 00000000, 000f423f => 000f423f (00000000 00000000)
+          or 00000000, ffffffff => ffffffff (00000000 00000000)
+          or 000f423f, 00000000 => 000f423f (00000000 00000000)
+          or 000f423f, 000f423f => 000f423f (00000000 00000000)
+          or 000f423f, ffffffff => ffffffff (00000000 00000000)
+          or ffffffff, 00000000 => ffffffff (00000000 00000000)
+          or ffffffff, 000f423f => ffffffff (00000000 00000000)
+          or ffffffff, ffffffff => ffffffff (00000000 00000000)
+
+         orc 00000000, 00000000 => ffffffff (00000000 00000000)
+         orc 00000000, 000f423f => fff0bdc0 (00000000 00000000)
+         orc 00000000, ffffffff => 00000000 (00000000 00000000)
+         orc 000f423f, 00000000 => ffffffff (00000000 00000000)
+         orc 000f423f, 000f423f => ffffffff (00000000 00000000)
+         orc 000f423f, ffffffff => 000f423f (00000000 00000000)
+         orc ffffffff, 00000000 => ffffffff (00000000 00000000)
+         orc ffffffff, 000f423f => ffffffff (00000000 00000000)
+         orc ffffffff, ffffffff => ffffffff (00000000 00000000)
+
+         xor 00000000, 00000000 => 00000000 (00000000 00000000)
+         xor 00000000, 000f423f => 000f423f (00000000 00000000)
+         xor 00000000, ffffffff => ffffffff (00000000 00000000)
+         xor 000f423f, 00000000 => 000f423f (00000000 00000000)
+         xor 000f423f, 000f423f => 00000000 (00000000 00000000)
+         xor 000f423f, ffffffff => fff0bdc0 (00000000 00000000)
+         xor ffffffff, 00000000 => ffffffff (00000000 00000000)
+         xor ffffffff, 000f423f => fff0bdc0 (00000000 00000000)
+         xor ffffffff, ffffffff => 00000000 (00000000 00000000)
+
+         slw 00000000, 00000000 => 00000000 (00000000 00000000)
+         slw 00000000, 000f423f => 00000000 (00000000 00000000)
+         slw 00000000, ffffffff => 00000000 (00000000 00000000)
+         slw 000f423f, 00000000 => 000f423f (00000000 00000000)
+         slw 000f423f, 000f423f => 00000000 (00000000 00000000)
+         slw 000f423f, ffffffff => 00000000 (00000000 00000000)
+         slw ffffffff, 00000000 => ffffffff (00000000 00000000)
+         slw ffffffff, 000f423f => 00000000 (00000000 00000000)
+         slw ffffffff, ffffffff => 00000000 (00000000 00000000)
+
+        sraw 00000000, 00000000 => 00000000 (00000000 00000000)
+        sraw 00000000, 000f423f => 00000000 (00000000 00000000)
+        sraw 00000000, ffffffff => 00000000 (00000000 00000000)
+        sraw 000f423f, 00000000 => 000f423f (00000000 00000000)
+        sraw 000f423f, 000f423f => 00000000 (00000000 00000000)
+        sraw 000f423f, ffffffff => 00000000 (00000000 00000000)
+        sraw ffffffff, 00000000 => ffffffff (00000000 00000000)
+        sraw ffffffff, 000f423f => ffffffff (00000000 20000000)
+        sraw ffffffff, ffffffff => ffffffff (00000000 20000000)
+
+         srw 00000000, 00000000 => 00000000 (00000000 00000000)
+         srw 00000000, 000f423f => 00000000 (00000000 00000000)
+         srw 00000000, ffffffff => 00000000 (00000000 00000000)
+         srw 000f423f, 00000000 => 000f423f (00000000 00000000)
+         srw 000f423f, 000f423f => 00000000 (00000000 00000000)
+         srw 000f423f, ffffffff => 00000000 (00000000 00000000)
+         srw ffffffff, 00000000 => ffffffff (00000000 00000000)
+         srw ffffffff, 000f423f => 00000000 (00000000 00000000)
+         srw ffffffff, ffffffff => 00000000 (00000000 00000000)
+
+PPC integer logical insns with two args with flags update:
+        and. 00000000, 00000000 => 00000000 (20000000 00000000)
+        and. 00000000, 000f423f => 00000000 (20000000 00000000)
+        and. 00000000, ffffffff => 00000000 (20000000 00000000)
+        and. 000f423f, 00000000 => 00000000 (20000000 00000000)
+        and. 000f423f, 000f423f => 000f423f (40000000 00000000)
+        and. 000f423f, ffffffff => 000f423f (40000000 00000000)
+        and. ffffffff, 00000000 => 00000000 (20000000 00000000)
+        and. ffffffff, 000f423f => 000f423f (40000000 00000000)
+        and. ffffffff, ffffffff => ffffffff (80000000 00000000)
+
+       andc. 00000000, 00000000 => 00000000 (20000000 00000000)
+       andc. 00000000, 000f423f => 00000000 (20000000 00000000)
+       andc. 00000000, ffffffff => 00000000 (20000000 00000000)
+       andc. 000f423f, 00000000 => 000f423f (40000000 00000000)
+       andc. 000f423f, 000f423f => 00000000 (20000000 00000000)
+       andc. 000f423f, ffffffff => 00000000 (20000000 00000000)
+       andc. ffffffff, 00000000 => ffffffff (80000000 00000000)
+       andc. ffffffff, 000f423f => fff0bdc0 (80000000 00000000)
+       andc. ffffffff, ffffffff => 00000000 (20000000 00000000)
+
+        eqv. 00000000, 00000000 => ffffffff (80000000 00000000)
+        eqv. 00000000, 000f423f => fff0bdc0 (80000000 00000000)
+        eqv. 00000000, ffffffff => 00000000 (20000000 00000000)
+        eqv. 000f423f, 00000000 => fff0bdc0 (80000000 00000000)
+        eqv. 000f423f, 000f423f => ffffffff (80000000 00000000)
+        eqv. 000f423f, ffffffff => 000f423f (40000000 00000000)
+        eqv. ffffffff, 00000000 => 00000000 (20000000 00000000)
+        eqv. ffffffff, 000f423f => 000f423f (40000000 00000000)
+        eqv. ffffffff, ffffffff => ffffffff (80000000 00000000)
+
+       nand. 00000000, 00000000 => ffffffff (80000000 00000000)
+       nand. 00000000, 000f423f => ffffffff (80000000 00000000)
+       nand. 00000000, ffffffff => ffffffff (80000000 00000000)
+       nand. 000f423f, 00000000 => ffffffff (80000000 00000000)
+       nand. 000f423f, 000f423f => fff0bdc0 (80000000 00000000)
+       nand. 000f423f, ffffffff => fff0bdc0 (80000000 00000000)
+       nand. ffffffff, 00000000 => ffffffff (80000000 00000000)
+       nand. ffffffff, 000f423f => fff0bdc0 (80000000 00000000)
+       nand. ffffffff, ffffffff => 00000000 (20000000 00000000)
+
+        nor. 00000000, 00000000 => ffffffff (80000000 00000000)
+        nor. 00000000, 000f423f => fff0bdc0 (80000000 00000000)
+        nor. 00000000, ffffffff => 00000000 (20000000 00000000)
+        nor. 000f423f, 00000000 => fff0bdc0 (80000000 00000000)
+        nor. 000f423f, 000f423f => fff0bdc0 (80000000 00000000)
+        nor. 000f423f, ffffffff => 00000000 (20000000 00000000)
+        nor. ffffffff, 00000000 => 00000000 (20000000 00000000)
+        nor. ffffffff, 000f423f => 00000000 (20000000 00000000)
+        nor. ffffffff, ffffffff => 00000000 (20000000 00000000)
+
+         or. 00000000, 00000000 => 00000000 (20000000 00000000)
+         or. 00000000, 000f423f => 000f423f (40000000 00000000)
+         or. 00000000, ffffffff => ffffffff (80000000 00000000)
+         or. 000f423f, 00000000 => 000f423f (40000000 00000000)
+         or. 000f423f, 000f423f => 000f423f (40000000 00000000)
+         or. 000f423f, ffffffff => ffffffff (80000000 00000000)
+         or. ffffffff, 00000000 => ffffffff (80000000 00000000)
+         or. ffffffff, 000f423f => ffffffff (80000000 00000000)
+         or. ffffffff, ffffffff => ffffffff (80000000 00000000)
+
+        orc. 00000000, 00000000 => ffffffff (80000000 00000000)
+        orc. 00000000, 000f423f => fff0bdc0 (80000000 00000000)
+        orc. 00000000, ffffffff => 00000000 (20000000 00000000)
+        orc. 000f423f, 00000000 => ffffffff (80000000 00000000)
+        orc. 000f423f, 000f423f => ffffffff (80000000 00000000)
+        orc. 000f423f, ffffffff => 000f423f (40000000 00000000)
+        orc. ffffffff, 00000000 => ffffffff (80000000 00000000)
+        orc. ffffffff, 000f423f => ffffffff (80000000 00000000)
+        orc. ffffffff, ffffffff => ffffffff (80000000 00000000)
+
+        xor. 00000000, 00000000 => 00000000 (20000000 00000000)
+        xor. 00000000, 000f423f => 000f423f (40000000 00000000)
+        xor. 00000000, ffffffff => ffffffff (80000000 00000000)
+        xor. 000f423f, 00000000 => 000f423f (40000000 00000000)
+        xor. 000f423f, 000f423f => 00000000 (20000000 00000000)
+        xor. 000f423f, ffffffff => fff0bdc0 (80000000 00000000)
+        xor. ffffffff, 00000000 => ffffffff (80000000 00000000)
+        xor. ffffffff, 000f423f => fff0bdc0 (80000000 00000000)
+        xor. ffffffff, ffffffff => 00000000 (20000000 00000000)
+
+        slw. 00000000, 00000000 => 00000000 (20000000 00000000)
+        slw. 00000000, 000f423f => 00000000 (20000000 00000000)
+        slw. 00000000, ffffffff => 00000000 (20000000 00000000)
+        slw. 000f423f, 00000000 => 000f423f (40000000 00000000)
+        slw. 000f423f, 000f423f => 00000000 (20000000 00000000)
+        slw. 000f423f, ffffffff => 00000000 (20000000 00000000)
+        slw. ffffffff, 00000000 => ffffffff (80000000 00000000)
+        slw. ffffffff, 000f423f => 00000000 (20000000 00000000)
+        slw. ffffffff, ffffffff => 00000000 (20000000 00000000)
+
+       sraw. 00000000, 00000000 => 00000000 (20000000 00000000)
+       sraw. 00000000, 000f423f => 00000000 (20000000 00000000)
+       sraw. 00000000, ffffffff => 00000000 (20000000 00000000)
+       sraw. 000f423f, 00000000 => 000f423f (40000000 00000000)
+       sraw. 000f423f, 000f423f => 00000000 (20000000 00000000)
+       sraw. 000f423f, ffffffff => 00000000 (20000000 00000000)
+       sraw. ffffffff, 00000000 => ffffffff (80000000 00000000)
+       sraw. ffffffff, 000f423f => ffffffff (80000000 20000000)
+       sraw. ffffffff, ffffffff => ffffffff (80000000 20000000)
+
+        srw. 00000000, 00000000 => 00000000 (20000000 00000000)
+        srw. 00000000, 000f423f => 00000000 (20000000 00000000)
+        srw. 00000000, ffffffff => 00000000 (20000000 00000000)
+        srw. 000f423f, 00000000 => 000f423f (40000000 00000000)
+        srw. 000f423f, 000f423f => 00000000 (20000000 00000000)
+        srw. 000f423f, ffffffff => 00000000 (20000000 00000000)
+        srw. ffffffff, 00000000 => ffffffff (80000000 00000000)
+        srw. ffffffff, 000f423f => 00000000 (20000000 00000000)
+        srw. ffffffff, ffffffff => 00000000 (20000000 00000000)
+
+PPC integer compare insns (two args):
+         cmp 00000000, 00000000 => 00000000 (00200000 00000000)
+         cmp 00000000, 000f423f => 00000000 (00800000 00000000)
+         cmp 00000000, ffffffff => 00000000 (00400000 00000000)
+         cmp 000f423f, 00000000 => 00000000 (00400000 00000000)
+         cmp 000f423f, 000f423f => 00000000 (00200000 00000000)
+         cmp 000f423f, ffffffff => 00000000 (00400000 00000000)
+         cmp ffffffff, 00000000 => 00000000 (00800000 00000000)
+         cmp ffffffff, 000f423f => 00000000 (00800000 00000000)
+         cmp ffffffff, ffffffff => 00000000 (00200000 00000000)
+
+        cmpl 00000000, 00000000 => 00000000 (00200000 00000000)
+        cmpl 00000000, 000f423f => 00000000 (00800000 00000000)
+        cmpl 00000000, ffffffff => 00000000 (00800000 00000000)
+        cmpl 000f423f, 00000000 => 00000000 (00400000 00000000)
+        cmpl 000f423f, 000f423f => 00000000 (00200000 00000000)
+        cmpl 000f423f, ffffffff => 00000000 (00800000 00000000)
+        cmpl ffffffff, 00000000 => 00000000 (00400000 00000000)
+        cmpl ffffffff, 000f423f => 00000000 (00400000 00000000)
+        cmpl ffffffff, ffffffff => 00000000 (00200000 00000000)
+
+PPC integer compare with immediate insns (two args):
+        cmpi 00000000, 00000000 => 00000000 (00200000 00000000)
+        cmpi 00000000, 000003e7 => 00000000 (00800000 00000000)
+        cmpi 00000000, 0000ffff => 00000000 (00400000 00000000)
+        cmpi 000f423f, 00000000 => 00000000 (00400000 00000000)
+        cmpi 000f423f, 000003e7 => 00000000 (00400000 00000000)
+        cmpi 000f423f, 0000ffff => 00000000 (00400000 00000000)
+        cmpi ffffffff, 00000000 => 00000000 (00800000 00000000)
+        cmpi ffffffff, 000003e7 => 00000000 (00800000 00000000)
+        cmpi ffffffff, 0000ffff => 00000000 (00200000 00000000)
+
+       cmpli 00000000, 00000000 => 00000000 (00200000 00000000)
+       cmpli 00000000, 000003e7 => 00000000 (00800000 00000000)
+       cmpli 00000000, 0000ffff => 00000000 (00800000 00000000)
+       cmpli 000f423f, 00000000 => 00000000 (00400000 00000000)
+       cmpli 000f423f, 000003e7 => 00000000 (00400000 00000000)
+       cmpli 000f423f, 0000ffff => 00000000 (00400000 00000000)
+       cmpli ffffffff, 00000000 => 00000000 (00400000 00000000)
+       cmpli ffffffff, 000003e7 => 00000000 (00400000 00000000)
+       cmpli ffffffff, 0000ffff => 00000000 (00400000 00000000)
+
+PPC integer arith insns
+    with one register + one 16 bits immediate args:
+        addi 00000000, 00000000 => 00000000 (00000000 00000000)
+        addi 00000000, 000003e7 => 000003e7 (00000000 00000000)
+        addi 00000000, 0000ffff => ffffffff (00000000 00000000)
+        addi 000f423f, 00000000 => 000f423f (00000000 00000000)
+        addi 000f423f, 000003e7 => 000f4626 (00000000 00000000)
+        addi 000f423f, 0000ffff => 000f423e (00000000 00000000)
+        addi ffffffff, 00000000 => ffffffff (00000000 00000000)
+        addi ffffffff, 000003e7 => 000003e6 (00000000 00000000)
+        addi ffffffff, 0000ffff => fffffffe (00000000 00000000)
+
+       addic 00000000, 00000000 => 00000000 (00000000 00000000)
+       addic 00000000, 000003e7 => 000003e7 (00000000 00000000)
+       addic 00000000, 0000ffff => ffffffff (00000000 00000000)
+       addic 000f423f, 00000000 => 000f423f (00000000 00000000)
+       addic 000f423f, 000003e7 => 000f4626 (00000000 00000000)
+       addic 000f423f, 0000ffff => 000f423e (00000000 20000000)
+       addic ffffffff, 00000000 => ffffffff (00000000 00000000)
+       addic ffffffff, 000003e7 => 000003e6 (00000000 20000000)
+       addic ffffffff, 0000ffff => fffffffe (00000000 20000000)
+
+       addis 00000000, 00000000 => 00000000 (00000000 00000000)
+       addis 00000000, 000003e7 => 03e70000 (00000000 00000000)
+       addis 00000000, 0000ffff => ffff0000 (00000000 00000000)
+       addis 000f423f, 00000000 => 000f423f (00000000 00000000)
+       addis 000f423f, 000003e7 => 03f6423f (00000000 00000000)
+       addis 000f423f, 0000ffff => 000e423f (00000000 00000000)
+       addis ffffffff, 00000000 => ffffffff (00000000 00000000)
+       addis ffffffff, 000003e7 => 03e6ffff (00000000 00000000)
+       addis ffffffff, 0000ffff => fffeffff (00000000 00000000)
+
+       mulli 00000000, 00000000 => 00000000 (00000000 00000000)
+       mulli 00000000, 000003e7 => 00000000 (00000000 00000000)
+       mulli 00000000, 0000ffff => 00000000 (00000000 00000000)
+       mulli 000f423f, 00000000 => 00000000 (00000000 00000000)
+       mulli 000f423f, 000003e7 => 3b8b83d9 (00000000 00000000)
+       mulli 000f423f, 0000ffff => fff0bdc1 (00000000 00000000)
+       mulli ffffffff, 00000000 => 00000000 (00000000 00000000)
+       mulli ffffffff, 000003e7 => fffffc19 (00000000 00000000)
+       mulli ffffffff, 0000ffff => 00000001 (00000000 00000000)
+
+      subfic 00000000, 00000000 => 00000000 (00000000 20000000)
+      subfic 00000000, 000003e7 => 000003e7 (00000000 20000000)
+      subfic 00000000, 0000ffff => ffffffff (00000000 20000000)
+      subfic 000f423f, 00000000 => fff0bdc1 (00000000 00000000)
+      subfic 000f423f, 000003e7 => fff0c1a8 (00000000 00000000)
+      subfic 000f423f, 0000ffff => fff0bdc0 (00000000 20000000)
+      subfic ffffffff, 00000000 => 00000001 (00000000 00000000)
+      subfic ffffffff, 000003e7 => 000003e8 (00000000 00000000)
+      subfic ffffffff, 0000ffff => 00000000 (00000000 20000000)
+
+PPC integer arith insns
+    with one register + one 16 bits immediate args with flags update:
+      addic. 00000000, 00000000 => 00000000 (20000000 00000000)
+      addic. 00000000, 000003e7 => 000003e7 (40000000 00000000)
+      addic. 00000000, 0000ffff => ffffffff (80000000 00000000)
+      addic. 000f423f, 00000000 => 000f423f (40000000 00000000)
+      addic. 000f423f, 000003e7 => 000f4626 (40000000 00000000)
+      addic. 000f423f, 0000ffff => 000f423e (40000000 20000000)
+      addic. ffffffff, 00000000 => ffffffff (80000000 00000000)
+      addic. ffffffff, 000003e7 => 000003e6 (40000000 20000000)
+      addic. ffffffff, 0000ffff => fffffffe (80000000 20000000)
+
+PPC integer logical insns
+    with one register + one 16 bits immediate args:
+         ori 00000000, 00000000 => 00000000 (00000000 00000000)
+         ori 00000000, 000003e7 => 000003e7 (00000000 00000000)
+         ori 00000000, 0000ffff => 0000ffff (00000000 00000000)
+         ori 000f423f, 00000000 => 000f423f (00000000 00000000)
+         ori 000f423f, 000003e7 => 000f43ff (00000000 00000000)
+         ori 000f423f, 0000ffff => 000fffff (00000000 00000000)
+         ori ffffffff, 00000000 => ffffffff (00000000 00000000)
+         ori ffffffff, 000003e7 => ffffffff (00000000 00000000)
+         ori ffffffff, 0000ffff => ffffffff (00000000 00000000)
+
+        oris 00000000, 00000000 => 00000000 (00000000 00000000)
+        oris 00000000, 000003e7 => 03e70000 (00000000 00000000)
+        oris 00000000, 0000ffff => ffff0000 (00000000 00000000)
+        oris 000f423f, 00000000 => 000f423f (00000000 00000000)
+        oris 000f423f, 000003e7 => 03ef423f (00000000 00000000)
+        oris 000f423f, 0000ffff => ffff423f (00000000 00000000)
+        oris ffffffff, 00000000 => ffffffff (00000000 00000000)
+        oris ffffffff, 000003e7 => ffffffff (00000000 00000000)
+        oris ffffffff, 0000ffff => ffffffff (00000000 00000000)
+
+        xori 00000000, 00000000 => 00000000 (00000000 00000000)
+        xori 00000000, 000003e7 => 000003e7 (00000000 00000000)
+        xori 00000000, 0000ffff => 0000ffff (00000000 00000000)
+        xori 000f423f, 00000000 => 000f423f (00000000 00000000)
+        xori 000f423f, 000003e7 => 000f41d8 (00000000 00000000)
+        xori 000f423f, 0000ffff => 000fbdc0 (00000000 00000000)
+        xori ffffffff, 00000000 => ffffffff (00000000 00000000)
+        xori ffffffff, 000003e7 => fffffc18 (00000000 00000000)
+        xori ffffffff, 0000ffff => ffff0000 (00000000 00000000)
+
+       xoris 00000000, 00000000 => 00000000 (00000000 00000000)
+       xoris 00000000, 000003e7 => 03e70000 (00000000 00000000)
+       xoris 00000000, 0000ffff => ffff0000 (00000000 00000000)
+       xoris 000f423f, 00000000 => 000f423f (00000000 00000000)
+       xoris 000f423f, 000003e7 => 03e8423f (00000000 00000000)
+       xoris 000f423f, 0000ffff => fff0423f (00000000 00000000)
+       xoris ffffffff, 00000000 => ffffffff (00000000 00000000)
+       xoris ffffffff, 000003e7 => fc18ffff (00000000 00000000)
+       xoris ffffffff, 0000ffff => 0000ffff (00000000 00000000)
+
+PPC integer logical insns
+    with one register + one 16 bits immediate args with flags update:
+       andi. 00000000, 00000000 => 00000000 (20000000 00000000)
+       andi. 00000000, 000003e7 => 00000000 (20000000 00000000)
+       andi. 00000000, 0000ffff => 00000000 (20000000 00000000)
+       andi. 000f423f, 00000000 => 00000000 (20000000 00000000)
+       andi. 000f423f, 000003e7 => 00000227 (40000000 00000000)
+       andi. 000f423f, 0000ffff => 0000423f (40000000 00000000)
+       andi. ffffffff, 00000000 => 00000000 (20000000 00000000)
+       andi. ffffffff, 000003e7 => 000003e7 (40000000 00000000)
+       andi. ffffffff, 0000ffff => 0000ffff (40000000 00000000)
+
+      andis. 00000000, 00000000 => 00000000 (20000000 00000000)
+      andis. 00000000, 000003e7 => 00000000 (20000000 00000000)
+      andis. 00000000, 0000ffff => 00000000 (20000000 00000000)
+      andis. 000f423f, 00000000 => 00000000 (20000000 00000000)
+      andis. 000f423f, 000003e7 => 00070000 (40000000 00000000)
+      andis. 000f423f, 0000ffff => 000f0000 (40000000 00000000)
+      andis. ffffffff, 00000000 => 00000000 (20000000 00000000)
+      andis. ffffffff, 000003e7 => 03e70000 (40000000 00000000)
+      andis. ffffffff, 0000ffff => ffff0000 (80000000 00000000)
+
+PPC condition register logical insns - two operands:
+       crand 00000000, 00000000 => ffff0000 (00000000 00000000)
+       crand 00000000, 000f423f => ffff0000 (00000000 00000000)
+       crand 00000000, ffffffff => ffff0000 (00000000 00000000)
+       crand 000f423f, 00000000 => ffff0000 (00000000 00000000)
+       crand 000f423f, 000f423f => ffff0000 (00000000 00000000)
+       crand 000f423f, ffffffff => ffff0000 (00000000 00000000)
+       crand ffffffff, 00000000 => ffff0000 (00000000 00000000)
+       crand ffffffff, 000f423f => ffff0000 (00000000 00000000)
+       crand ffffffff, ffffffff => ffff0000 (00000000 00000000)
+
+      crandc 00000000, 00000000 => ffff0000 (00000000 00000000)
+      crandc 00000000, 000f423f => ffff0000 (00000000 00000000)
+      crandc 00000000, ffffffff => ffff0000 (00000000 00000000)
+      crandc 000f423f, 00000000 => ffff0000 (00000000 00000000)
+      crandc 000f423f, 000f423f => ffff0000 (00000000 00000000)
+      crandc 000f423f, ffffffff => ffff0000 (00000000 00000000)
+      crandc ffffffff, 00000000 => ffff0000 (00000000 00000000)
+      crandc ffffffff, 000f423f => ffff0000 (00000000 00000000)
+      crandc ffffffff, ffffffff => ffff0000 (00000000 00000000)
+
+       creqv 00000000, 00000000 => ffff0000 (00004000 00000000)
+       creqv 00000000, 000f423f => ffff0000 (00004000 00000000)
+       creqv 00000000, ffffffff => ffff0000 (00004000 00000000)
+       creqv 000f423f, 00000000 => ffff0000 (00004000 00000000)
+       creqv 000f423f, 000f423f => ffff0000 (00004000 00000000)
+       creqv 000f423f, ffffffff => ffff0000 (00004000 00000000)
+       creqv ffffffff, 00000000 => ffff0000 (00004000 00000000)
+       creqv ffffffff, 000f423f => ffff0000 (00004000 00000000)
+       creqv ffffffff, ffffffff => ffff0000 (00004000 00000000)
+
+      crnand 00000000, 00000000 => ffff0000 (00004000 00000000)
+      crnand 00000000, 000f423f => ffff0000 (00004000 00000000)
+      crnand 00000000, ffffffff => ffff0000 (00004000 00000000)
+      crnand 000f423f, 00000000 => ffff0000 (00004000 00000000)
+      crnand 000f423f, 000f423f => ffff0000 (00004000 00000000)
+      crnand 000f423f, ffffffff => ffff0000 (00004000 00000000)
+      crnand ffffffff, 00000000 => ffff0000 (00004000 00000000)
+      crnand ffffffff, 000f423f => ffff0000 (00004000 00000000)
+      crnand ffffffff, ffffffff => ffff0000 (00004000 00000000)
+
+       crnor 00000000, 00000000 => ffff0000 (00004000 00000000)
+       crnor 00000000, 000f423f => ffff0000 (00004000 00000000)
+       crnor 00000000, ffffffff => ffff0000 (00004000 00000000)
+       crnor 000f423f, 00000000 => ffff0000 (00004000 00000000)
+       crnor 000f423f, 000f423f => ffff0000 (00004000 00000000)
+       crnor 000f423f, ffffffff => ffff0000 (00004000 00000000)
+       crnor ffffffff, 00000000 => ffff0000 (00004000 00000000)
+       crnor ffffffff, 000f423f => ffff0000 (00004000 00000000)
+       crnor ffffffff, ffffffff => ffff0000 (00004000 00000000)
+
+        cror 00000000, 00000000 => ffff0000 (00000000 00000000)
+        cror 00000000, 000f423f => ffff0000 (00000000 00000000)
+        cror 00000000, ffffffff => ffff0000 (00000000 00000000)
+        cror 000f423f, 00000000 => ffff0000 (00000000 00000000)
+        cror 000f423f, 000f423f => ffff0000 (00000000 00000000)
+        cror 000f423f, ffffffff => ffff0000 (00000000 00000000)
+        cror ffffffff, 00000000 => ffff0000 (00000000 00000000)
+        cror ffffffff, 000f423f => ffff0000 (00000000 00000000)
+        cror ffffffff, ffffffff => ffff0000 (00000000 00000000)
+
+       crorc 00000000, 00000000 => ffff0000 (00004000 00000000)
+       crorc 00000000, 000f423f => ffff0000 (00004000 00000000)
+       crorc 00000000, ffffffff => ffff0000 (00004000 00000000)
+       crorc 000f423f, 00000000 => ffff0000 (00004000 00000000)
+       crorc 000f423f, 000f423f => ffff0000 (00004000 00000000)
+       crorc 000f423f, ffffffff => ffff0000 (00004000 00000000)
+       crorc ffffffff, 00000000 => ffff0000 (00004000 00000000)
+       crorc ffffffff, 000f423f => ffff0000 (00004000 00000000)
+       crorc ffffffff, ffffffff => ffff0000 (00004000 00000000)
+
+       crxor 00000000, 00000000 => ffff0000 (00000000 00000000)
+       crxor 00000000, 000f423f => ffff0000 (00000000 00000000)
+       crxor 00000000, ffffffff => ffff0000 (00000000 00000000)
+       crxor 000f423f, 00000000 => ffff0000 (00000000 00000000)
+       crxor 000f423f, 000f423f => ffff0000 (00000000 00000000)
+       crxor 000f423f, ffffffff => ffff0000 (00000000 00000000)
+       crxor ffffffff, 00000000 => ffff0000 (00000000 00000000)
+       crxor ffffffff, 000f423f => ffff0000 (00000000 00000000)
+       crxor ffffffff, ffffffff => ffff0000 (00000000 00000000)
+
+PPC integer arith insns with one arg and carry:
+       addme 00000000 => ffffffff (00000000 00000000)
+       addme 000f423f => 000f423e (00000000 20000000)
+       addme ffffffff => fffffffe (00000000 20000000)
+       addme 00000000 => 00000000 (00000000 20000000)
+       addme 000f423f => 000f423f (00000000 20000000)
+       addme ffffffff => ffffffff (00000000 20000000)
+
+      addmeo 00000000 => ffffffff (00000000 00000000)
+      addmeo 000f423f => 000f423e (00000000 20000000)
+      addmeo ffffffff => fffffffe (00000000 20000000)
+      addmeo 00000000 => 00000000 (00000000 20000000)
+      addmeo 000f423f => 000f423f (00000000 20000000)
+      addmeo ffffffff => ffffffff (00000000 20000000)
+
+       addze 00000000 => 00000000 (00000000 00000000)
+       addze 000f423f => 000f423f (00000000 00000000)
+       addze ffffffff => ffffffff (00000000 00000000)
+       addze 00000000 => 00000001 (00000000 00000000)
+       addze 000f423f => 000f4240 (00000000 00000000)
+       addze ffffffff => 00000000 (00000000 20000000)
+
+      addzeo 00000000 => 00000000 (00000000 00000000)
+      addzeo 000f423f => 000f423f (00000000 00000000)
+      addzeo ffffffff => ffffffff (00000000 00000000)
+      addzeo 00000000 => 00000001 (00000000 00000000)
+      addzeo 000f423f => 000f4240 (00000000 00000000)
+      addzeo ffffffff => 00000000 (00000000 20000000)
+
+      subfme 00000000 => fffffffe (00000000 20000000)
+      subfme 000f423f => fff0bdbf (00000000 20000000)
+      subfme ffffffff => ffffffff (00000000 00000000)
+      subfme 00000000 => ffffffff (00000000 20000000)
+      subfme 000f423f => fff0bdc0 (00000000 20000000)
+      subfme ffffffff => 00000000 (00000000 20000000)
+
+     subfmeo 00000000 => fffffffe (00000000 20000000)
+     subfmeo 000f423f => fff0bdbf (00000000 20000000)
+     subfmeo ffffffff => ffffffff (00000000 00000000)
+     subfmeo 00000000 => ffffffff (00000000 20000000)
+     subfmeo 000f423f => fff0bdc0 (00000000 20000000)
+     subfmeo ffffffff => 00000000 (00000000 20000000)
+
+      subfze 00000000 => ffffffff (00000000 00000000)
+      subfze 000f423f => fff0bdc0 (00000000 00000000)
+      subfze ffffffff => 00000000 (00000000 00000000)
+      subfze 00000000 => 00000000 (00000000 20000000)
+      subfze 000f423f => fff0bdc1 (00000000 00000000)
+      subfze ffffffff => 00000001 (00000000 00000000)
+
+     subfzeo 00000000 => ffffffff (00000000 00000000)
+     subfzeo 000f423f => fff0bdc0 (00000000 00000000)
+     subfzeo ffffffff => 00000000 (00000000 00000000)
+     subfzeo 00000000 => 00000000 (00000000 20000000)
+     subfzeo 000f423f => fff0bdc1 (00000000 00000000)
+     subfzeo ffffffff => 00000001 (00000000 00000000)
+
+PPC integer arith insns with one arg and carry with flags update:
+      addme. 00000000 => ffffffff (80000000 00000000)
+      addme. 000f423f => 000f423e (40000000 20000000)
+      addme. ffffffff => fffffffe (80000000 20000000)
+      addme. 00000000 => 00000000 (20000000 20000000)
+      addme. 000f423f => 000f423f (40000000 20000000)
+      addme. ffffffff => ffffffff (80000000 20000000)
+
+     addmeo. 00000000 => ffffffff (80000000 00000000)
+     addmeo. 000f423f => 000f423e (40000000 20000000)
+     addmeo. ffffffff => fffffffe (80000000 20000000)
+     addmeo. 00000000 => 00000000 (20000000 20000000)
+     addmeo. 000f423f => 000f423f (40000000 20000000)
+     addmeo. ffffffff => ffffffff (80000000 20000000)
+
+      addze. 00000000 => 00000000 (20000000 00000000)
+      addze. 000f423f => 000f423f (40000000 00000000)
+      addze. ffffffff => ffffffff (80000000 00000000)
+      addze. 00000000 => 00000001 (40000000 00000000)
+      addze. 000f423f => 000f4240 (40000000 00000000)
+      addze. ffffffff => 00000000 (20000000 20000000)
+
+     addzeo. 00000000 => 00000000 (20000000 00000000)
+     addzeo. 000f423f => 000f423f (40000000 00000000)
+     addzeo. ffffffff => ffffffff (80000000 00000000)
+     addzeo. 00000000 => 00000001 (40000000 00000000)
+     addzeo. 000f423f => 000f4240 (40000000 00000000)
+     addzeo. ffffffff => 00000000 (20000000 20000000)
+
+     subfme. 00000000 => fffffffe (80000000 20000000)
+     subfme. 000f423f => fff0bdbf (80000000 20000000)
+     subfme. ffffffff => ffffffff (80000000 00000000)
+     subfme. 00000000 => ffffffff (80000000 20000000)
+     subfme. 000f423f => fff0bdc0 (80000000 20000000)
+     subfme. ffffffff => 00000000 (20000000 20000000)
+
+    subfmeo. 00000000 => fffffffe (80000000 20000000)
+    subfmeo. 000f423f => fff0bdbf (80000000 20000000)
+    subfmeo. ffffffff => ffffffff (80000000 00000000)
+    subfmeo. 00000000 => ffffffff (80000000 20000000)
+    subfmeo. 000f423f => fff0bdc0 (80000000 20000000)
+    subfmeo. ffffffff => 00000000 (20000000 20000000)
+
+     subfze. 00000000 => ffffffff (80000000 00000000)
+     subfze. 000f423f => fff0bdc0 (80000000 00000000)
+     subfze. ffffffff => 00000000 (20000000 00000000)
+     subfze. 00000000 => 00000000 (20000000 20000000)
+     subfze. 000f423f => fff0bdc1 (80000000 00000000)
+     subfze. ffffffff => 00000001 (40000000 00000000)
+
+    subfzeo. 00000000 => ffffffff (80000000 00000000)
+    subfzeo. 000f423f => fff0bdc0 (80000000 00000000)
+    subfzeo. ffffffff => 00000000 (20000000 00000000)
+    subfzeo. 00000000 => 00000000 (20000000 20000000)
+    subfzeo. 000f423f => fff0bdc1 (80000000 00000000)
+    subfzeo. ffffffff => 00000001 (40000000 00000000)
+
+PPC integer logical insns with one arg:
+      cntlzw 00000000 => 00000020 (00000000 00000000)
+      cntlzw 000f423f => 0000000c (00000000 00000000)
+      cntlzw ffffffff => 00000000 (00000000 00000000)
+
+       extsb 00000000 => 00000000 (00000000 00000000)
+       extsb 000f423f => 0000003f (00000000 00000000)
+       extsb ffffffff => ffffffff (00000000 00000000)
+
+       extsh 00000000 => 00000000 (00000000 00000000)
+       extsh 000f423f => 0000423f (00000000 00000000)
+       extsh ffffffff => ffffffff (00000000 00000000)
+
+         neg 00000000 => 00000000 (00000000 00000000)
+         neg 000f423f => fff0bdc1 (00000000 00000000)
+         neg ffffffff => 00000001 (00000000 00000000)
+
+        nego 00000000 => 00000000 (00000000 00000000)
+        nego 000f423f => fff0bdc1 (00000000 00000000)
+        nego ffffffff => 00000001 (00000000 00000000)
+
+PPC integer logical insns with one arg with flags update:
+     cntlzw. 00000000 => 00000020 (40000000 00000000)
+     cntlzw. 000f423f => 0000000c (40000000 00000000)
+     cntlzw. ffffffff => 00000000 (20000000 00000000)
+
+      extsb. 00000000 => 00000000 (20000000 00000000)
+      extsb. 000f423f => 0000003f (40000000 00000000)
+      extsb. ffffffff => ffffffff (80000000 00000000)
+
+      extsh. 00000000 => 00000000 (20000000 00000000)
+      extsh. 000f423f => 0000423f (40000000 00000000)
+      extsh. ffffffff => ffffffff (80000000 00000000)
+
+        neg. 00000000 => 00000000 (20000000 00000000)
+        neg. 000f423f => fff0bdc1 (80000000 00000000)
+        neg. ffffffff => 00000001 (40000000 00000000)
+
+       nego. 00000000 => 00000000 (20000000 00000000)
+       nego. 000f423f => fff0bdc1 (80000000 00000000)
+       nego. ffffffff => 00000001 (40000000 00000000)
+
+PPC logical insns with special forms:
+      rlwimi 00000000, 0, 0, 0 => 00000001 (00000000 00000000)
+      rlwimi 00000000, 0, 0, 31 => 00000000 (00000000 00000000)
+      rlwimi 00000000, 0, 31, 0 => 00000000 (00000000 00000000)
+      rlwimi 00000000, 0, 31, 31 => 00000000 (00000000 00000000)
+      rlwimi 00000000, 31, 0, 0 => 00000000 (00000000 00000000)
+      rlwimi 00000000, 31, 0, 31 => 00000000 (00000000 00000000)
+      rlwimi 00000000, 31, 31, 0 => 00000000 (00000000 00000000)
+      rlwimi 00000000, 31, 31, 31 => 00000000 (00000000 00000000)
+      rlwimi 000f423f, 0, 0, 0 => 00000000 (00000000 00000000)
+      rlwimi 000f423f, 0, 0, 31 => 000f423f (00000000 00000000)
+      rlwimi 000f423f, 0, 31, 0 => 000f423f (00000000 00000000)
+      rlwimi 000f423f, 0, 31, 31 => 000f423f (00000000 00000000)
+      rlwimi 000f423f, 31, 0, 0 => 800f423f (00000000 00000000)
+      rlwimi 000f423f, 31, 0, 31 => 8007a11f (00000000 00000000)
+      rlwimi 000f423f, 31, 31, 0 => 8007a11f (00000000 00000000)
+      rlwimi 000f423f, 31, 31, 31 => 8007a11f (00000000 00000000)
+      rlwimi ffffffff, 0, 0, 0 => 8007a11f (00000000 00000000)
+      rlwimi ffffffff, 0, 0, 31 => ffffffff (00000000 00000000)
+      rlwimi ffffffff, 0, 31, 0 => ffffffff (00000000 00000000)
+      rlwimi ffffffff, 0, 31, 31 => ffffffff (00000000 00000000)
+      rlwimi ffffffff, 31, 0, 0 => ffffffff (00000000 00000000)
+      rlwimi ffffffff, 31, 0, 31 => ffffffff (00000000 00000000)
+      rlwimi ffffffff, 31, 31, 0 => ffffffff (00000000 00000000)
+      rlwimi ffffffff, 31, 31, 31 => ffffffff (00000000 00000000)
+
+      rlwinm 00000000, 0, 0, 0 => 00000000 (00000000 00000000)
+      rlwinm 00000000, 0, 0, 31 => 00000000 (00000000 00000000)
+      rlwinm 00000000, 0, 31, 0 => 00000000 (00000000 00000000)
+      rlwinm 00000000, 0, 31, 31 => 00000000 (00000000 00000000)
+      rlwinm 00000000, 31, 0, 0 => 00000000 (00000000 00000000)
+      rlwinm 00000000, 31, 0, 31 => 00000000 (00000000 00000000)
+      rlwinm 00000000, 31, 31, 0 => 00000000 (00000000 00000000)
+      rlwinm 00000000, 31, 31, 31 => 00000000 (00000000 00000000)
+      rlwinm 000f423f, 0, 0, 0 => 00000000 (00000000 00000000)
+      rlwinm 000f423f, 0, 0, 31 => 000f423f (00000000 00000000)
+      rlwinm 000f423f, 0, 31, 0 => 00000001 (00000000 00000000)
+      rlwinm 000f423f, 0, 31, 31 => 00000001 (00000000 00000000)
+      rlwinm 000f423f, 31, 0, 0 => 80000000 (00000000 00000000)
+      rlwinm 000f423f, 31, 0, 31 => 8007a11f (00000000 00000000)
+      rlwinm 000f423f, 31, 31, 0 => 80000001 (00000000 00000000)
+      rlwinm 000f423f, 31, 31, 31 => 00000001 (00000000 00000000)
+      rlwinm ffffffff, 0, 0, 0 => 80000000 (00000000 00000000)
+      rlwinm ffffffff, 0, 0, 31 => ffffffff (00000000 00000000)
+      rlwinm ffffffff, 0, 31, 0 => 80000001 (00000000 00000000)
+      rlwinm ffffffff, 0, 31, 31 => 00000001 (00000000 00000000)
+      rlwinm ffffffff, 31, 0, 0 => 80000000 (00000000 00000000)
+      rlwinm ffffffff, 31, 0, 31 => ffffffff (00000000 00000000)
+      rlwinm ffffffff, 31, 31, 0 => 80000001 (00000000 00000000)
+      rlwinm ffffffff, 31, 31, 31 => 00000001 (00000000 00000000)
+
+       rlwnm 00000000, 00000000, 0, 0 => 00000000 (00000000 00000000)
+       rlwnm 00000000, 00000000, 0, 31 => 00000000 (00000000 00000000)
+       rlwnm 00000000, 00000000, 31, 0 => 00000000 (00000000 00000000)
+       rlwnm 00000000, 00000000, 31, 31 => 00000000 (00000000 00000000)
+       rlwnm 00000000, 000f423f, 0, 0 => 00000000 (00000000 00000000)
+       rlwnm 00000000, 000f423f, 0, 31 => 00000000 (00000000 00000000)
+       rlwnm 00000000, 000f423f, 31, 0 => 00000000 (00000000 00000000)
+       rlwnm 00000000, 000f423f, 31, 31 => 00000000 (00000000 00000000)
+       rlwnm 00000000, ffffffff, 0, 0 => 00000000 (00000000 00000000)
+       rlwnm 00000000, ffffffff, 0, 31 => 00000000 (00000000 00000000)
+       rlwnm 00000000, ffffffff, 31, 0 => 00000000 (00000000 00000000)
+       rlwnm 00000000, ffffffff, 31, 31 => 00000000 (00000000 00000000)
+       rlwnm 000f423f, 00000000, 0, 0 => 00000000 (00000000 00000000)
+       rlwnm 000f423f, 00000000, 0, 31 => 000f423f (00000000 00000000)
+       rlwnm 000f423f, 00000000, 31, 0 => 00000001 (00000000 00000000)
+       rlwnm 000f423f, 00000000, 31, 31 => 00000001 (00000000 00000000)
+       rlwnm 000f423f, 000f423f, 0, 0 => 80000000 (00000000 00000000)
+       rlwnm 000f423f, 000f423f, 0, 31 => 8007a11f (00000000 00000000)
+       rlwnm 000f423f, 000f423f, 31, 0 => 80000001 (00000000 00000000)
+       rlwnm 000f423f, 000f423f, 31, 31 => 00000001 (00000000 00000000)
+       rlwnm 000f423f, ffffffff, 0, 0 => 80000000 (00000000 00000000)
+       rlwnm 000f423f, ffffffff, 0, 31 => 8007a11f (00000000 00000000)
+       rlwnm 000f423f, ffffffff, 31, 0 => 80000001 (00000000 00000000)
+       rlwnm 000f423f, ffffffff, 31, 31 => 00000001 (00000000 00000000)
+       rlwnm ffffffff, 00000000, 0, 0 => 80000000 (00000000 00000000)
+       rlwnm ffffffff, 00000000, 0, 31 => ffffffff (00000000 00000000)
+       rlwnm ffffffff, 00000000, 31, 0 => 80000001 (00000000 00000000)
+       rlwnm ffffffff, 00000000, 31, 31 => 00000001 (00000000 00000000)
+       rlwnm ffffffff, 000f423f, 0, 0 => 80000000 (00000000 00000000)
+       rlwnm ffffffff, 000f423f, 0, 31 => ffffffff (00000000 00000000)
+       rlwnm ffffffff, 000f423f, 31, 0 => 80000001 (00000000 00000000)
+       rlwnm ffffffff, 000f423f, 31, 31 => 00000001 (00000000 00000000)
+       rlwnm ffffffff, ffffffff, 0, 0 => 80000000 (00000000 00000000)
+       rlwnm ffffffff, ffffffff, 0, 31 => ffffffff (00000000 00000000)
+       rlwnm ffffffff, ffffffff, 31, 0 => 80000001 (00000000 00000000)
+       rlwnm ffffffff, ffffffff, 31, 31 => 00000001 (00000000 00000000)
+
+       srawi 00000000, 0 => 00000000 (00000000 00000000)
+       srawi 00000000, 31 => 00000000 (00000000 00000000)
+       srawi 000f423f, 0 => 000f423f (00000000 00000000)
+       srawi 000f423f, 31 => 00000000 (00000000 00000000)
+       srawi ffffffff, 0 => ffffffff (00000000 00000000)
+       srawi ffffffff, 31 => ffffffff (00000000 20000000)
+
+        mfcr (00000000) => 00000000 (00000000 00000000)
+        mfcr (000f423f) => 000f423f (000f423f 00000000)
+        mfcr (ffffffff) => ffffffff (ffffffff 00000000)
+
+       mfspr 1 (00000000) => 00000000 (00000000 00000000, 00000000, 00000000)
+       mfspr 1 (000f423f) => 0000003f (00000000 0000003f, 00000000, 00000000)
+       mfspr 1 (ffffffff) => e000007f (00000000 e000007f, 00000000, 00000000)
+       mfspr 8 (00000000) => 00000000 (00000000 00000000, 00000000, 00000000)
+       mfspr 8 (000f423f) => 000f423f (00000000 00000000, 000f423f, 00000000)
+       mfspr 8 (ffffffff) => ffffffff (00000000 00000000, ffffffff, 00000000)
+       mfspr 9 (00000000) => 00000000 (00000000 00000000, 00000000, 00000000)
+       mfspr 9 (000f423f) => 000f423f (00000000 00000000, 00000000, 000f423f)
+       mfspr 9 (ffffffff) => ffffffff (00000000 00000000, 00000000, ffffffff)
+
+       mtspr 1, 00000000 => (00000000 00000000, 00000000, 00000000)
+       mtspr 1, 000f423f => (00000000 0000003f, 00000000, 00000000)
+       mtspr 1, ffffffff => (00000000 e000007f, 00000000, 00000000)
+       mtspr 8, 00000000 => (00000000 00000000, 00000000, 00000000)
+       mtspr 8, 000f423f => (00000000 00000000, 000f423f, 00000000)
+       mtspr 8, ffffffff => (00000000 00000000, ffffffff, 00000000)
+       mtspr 9, 00000000 => (00000000 00000000, 00000000, 00000000)
+       mtspr 9, 000f423f => (00000000 00000000, 00000000, 000f423f)
+       mtspr 9, ffffffff => (00000000 00000000, 00000000, ffffffff)
+
+PPC logical insns with special forms with flags update:
+     rlwimi. 00000000, 0, 0, 0 => 7fffffff (40000000 00000000)
+     rlwimi. 00000000, 0, 0, 31 => 00000000 (20000000 00000000)
+     rlwimi. 00000000, 0, 31, 0 => 00000000 (20000000 00000000)
+     rlwimi. 00000000, 0, 31, 31 => 00000000 (20000000 00000000)
+     rlwimi. 00000000, 31, 0, 0 => 00000000 (20000000 00000000)
+     rlwimi. 00000000, 31, 0, 31 => 00000000 (20000000 00000000)
+     rlwimi. 00000000, 31, 31, 0 => 00000000 (20000000 00000000)
+     rlwimi. 00000000, 31, 31, 31 => 00000000 (20000000 00000000)
+     rlwimi. 000f423f, 0, 0, 0 => 00000000 (20000000 00000000)
+     rlwimi. 000f423f, 0, 0, 31 => 000f423f (40000000 00000000)
+     rlwimi. 000f423f, 0, 31, 0 => 000f423f (40000000 00000000)
+     rlwimi. 000f423f, 0, 31, 31 => 000f423f (40000000 00000000)
+     rlwimi. 000f423f, 31, 0, 0 => 800f423f (80000000 00000000)
+     rlwimi. 000f423f, 31, 0, 31 => 8007a11f (80000000 00000000)
+     rlwimi. 000f423f, 31, 31, 0 => 8007a11f (80000000 00000000)
+     rlwimi. 000f423f, 31, 31, 31 => 8007a11f (80000000 00000000)
+     rlwimi. ffffffff, 0, 0, 0 => 8007a11f (80000000 00000000)
+     rlwimi. ffffffff, 0, 0, 31 => ffffffff (80000000 00000000)
+     rlwimi. ffffffff, 0, 31, 0 => ffffffff (80000000 00000000)
+     rlwimi. ffffffff, 0, 31, 31 => ffffffff (80000000 00000000)
+     rlwimi. ffffffff, 31, 0, 0 => ffffffff (80000000 00000000)
+     rlwimi. ffffffff, 31, 0, 31 => ffffffff (80000000 00000000)
+     rlwimi. ffffffff, 31, 31, 0 => ffffffff (80000000 00000000)
+     rlwimi. ffffffff, 31, 31, 31 => ffffffff (80000000 00000000)
+
+     rlwinm. 00000000, 0, 0, 0 => 00000000 (20000000 00000000)
+     rlwinm. 00000000, 0, 0, 31 => 00000000 (20000000 00000000)
+     rlwinm. 00000000, 0, 31, 0 => 00000000 (20000000 00000000)
+     rlwinm. 00000000, 0, 31, 31 => 00000000 (20000000 00000000)
+     rlwinm. 00000000, 31, 0, 0 => 00000000 (20000000 00000000)
+     rlwinm. 00000000, 31, 0, 31 => 00000000 (20000000 00000000)
+     rlwinm. 00000000, 31, 31, 0 => 00000000 (20000000 00000000)
+     rlwinm. 00000000, 31, 31, 31 => 00000000 (20000000 00000000)
+     rlwinm. 000f423f, 0, 0, 0 => 00000000 (20000000 00000000)
+     rlwinm. 000f423f, 0, 0, 31 => 000f423f (40000000 00000000)
+     rlwinm. 000f423f, 0, 31, 0 => 00000001 (40000000 00000000)
+     rlwinm. 000f423f, 0, 31, 31 => 00000001 (40000000 00000000)
+     rlwinm. 000f423f, 31, 0, 0 => 80000000 (80000000 00000000)
+     rlwinm. 000f423f, 31, 0, 31 => 8007a11f (80000000 00000000)
+     rlwinm. 000f423f, 31, 31, 0 => 80000001 (80000000 00000000)
+     rlwinm. 000f423f, 31, 31, 31 => 00000001 (40000000 00000000)
+     rlwinm. ffffffff, 0, 0, 0 => 80000000 (80000000 00000000)
+     rlwinm. ffffffff, 0, 0, 31 => ffffffff (80000000 00000000)
+     rlwinm. ffffffff, 0, 31, 0 => 80000001 (80000000 00000000)
+     rlwinm. ffffffff, 0, 31, 31 => 00000001 (40000000 00000000)
+     rlwinm. ffffffff, 31, 0, 0 => 80000000 (80000000 00000000)
+     rlwinm. ffffffff, 31, 0, 31 => ffffffff (80000000 00000000)
+     rlwinm. ffffffff, 31, 31, 0 => 80000001 (80000000 00000000)
+     rlwinm. ffffffff, 31, 31, 31 => 00000001 (40000000 00000000)
+
+      rlwnm. 00000000, 00000000, 0, 0 => 00000000 (20000000 00000000)
+      rlwnm. 00000000, 00000000, 0, 31 => 00000000 (20000000 00000000)
+      rlwnm. 00000000, 00000000, 31, 0 => 00000000 (20000000 00000000)
+      rlwnm. 00000000, 00000000, 31, 31 => 00000000 (20000000 00000000)
+      rlwnm. 00000000, 000f423f, 0, 0 => 00000000 (20000000 00000000)
+      rlwnm. 00000000, 000f423f, 0, 31 => 00000000 (20000000 00000000)
+      rlwnm. 00000000, 000f423f, 31, 0 => 00000000 (20000000 00000000)
+      rlwnm. 00000000, 000f423f, 31, 31 => 00000000 (20000000 00000000)
+      rlwnm. 00000000, ffffffff, 0, 0 => 00000000 (20000000 00000000)
+      rlwnm. 00000000, ffffffff, 0, 31 => 00000000 (20000000 00000000)
+      rlwnm. 00000000, ffffffff, 31, 0 => 00000000 (20000000 00000000)
+      rlwnm. 00000000, ffffffff, 31, 31 => 00000000 (20000000 00000000)
+      rlwnm. 000f423f, 00000000, 0, 0 => 00000000 (20000000 00000000)
+      rlwnm. 000f423f, 00000000, 0, 31 => 000f423f (40000000 00000000)
+      rlwnm. 000f423f, 00000000, 31, 0 => 00000001 (40000000 00000000)
+      rlwnm. 000f423f, 00000000, 31, 31 => 00000001 (40000000 00000000)
+      rlwnm. 000f423f, 000f423f, 0, 0 => 80000000 (80000000 00000000)
+      rlwnm. 000f423f, 000f423f, 0, 31 => 8007a11f (80000000 00000000)
+      rlwnm. 000f423f, 000f423f, 31, 0 => 80000001 (80000000 00000000)
+      rlwnm. 000f423f, 000f423f, 31, 31 => 00000001 (40000000 00000000)
+      rlwnm. 000f423f, ffffffff, 0, 0 => 80000000 (80000000 00000000)
+      rlwnm. 000f423f, ffffffff, 0, 31 => 8007a11f (80000000 00000000)
+      rlwnm. 000f423f, ffffffff, 31, 0 => 80000001 (80000000 00000000)
+      rlwnm. 000f423f, ffffffff, 31, 31 => 00000001 (40000000 00000000)
+      rlwnm. ffffffff, 00000000, 0, 0 => 80000000 (80000000 00000000)
+      rlwnm. ffffffff, 00000000, 0, 31 => ffffffff (80000000 00000000)
+      rlwnm. ffffffff, 00000000, 31, 0 => 80000001 (80000000 00000000)
+      rlwnm. ffffffff, 00000000, 31, 31 => 00000001 (40000000 00000000)
+      rlwnm. ffffffff, 000f423f, 0, 0 => 80000000 (80000000 00000000)
+      rlwnm. ffffffff, 000f423f, 0, 31 => ffffffff (80000000 00000000)
+      rlwnm. ffffffff, 000f423f, 31, 0 => 80000001 (80000000 00000000)
+      rlwnm. ffffffff, 000f423f, 31, 31 => 00000001 (40000000 00000000)
+      rlwnm. ffffffff, ffffffff, 0, 0 => 80000000 (80000000 00000000)
+      rlwnm. ffffffff, ffffffff, 0, 31 => ffffffff (80000000 00000000)
+      rlwnm. ffffffff, ffffffff, 31, 0 => 80000001 (80000000 00000000)
+      rlwnm. ffffffff, ffffffff, 31, 31 => 00000001 (40000000 00000000)
+
+      srawi. 00000000, 0 => 00000000 (20000000 00000000)
+      srawi. 00000000, 31 => 00000000 (20000000 00000000)
+      srawi. 000f423f, 0 => 000f423f (40000000 00000000)
+      srawi. 000f423f, 31 => 00000000 (20000000 00000000)
+      srawi. ffffffff, 0 => ffffffff (80000000 00000000)
+      srawi. ffffffff, 31 => ffffffff (80000000 20000000)
+
+        mcrf 0, 0 (00000000) => (00000000 00000000)
+        mcrf 0, 7 (00000000) => (00000000 00000000)
+        mcrf 7, 0 (00000000) => (00000000 00000000)
+        mcrf 7, 7 (00000000) => (00000000 00000000)
+        mcrf 0, 0 (000f423f) => (000f423f 00000000)
+        mcrf 0, 7 (000f423f) => (f00f423f 00000000)
+        mcrf 7, 0 (000f423f) => (000f4230 00000000)
+        mcrf 7, 7 (000f423f) => (000f423f 00000000)
+        mcrf 0, 0 (ffffffff) => (ffffffff 00000000)
+        mcrf 0, 7 (ffffffff) => (ffffffff 00000000)
+        mcrf 7, 0 (ffffffff) => (ffffffff 00000000)
+        mcrf 7, 7 (ffffffff) => (ffffffff 00000000)
+
+       mcrxr 0 (00000000) => (00000000 00000000)
+       mcrxr 1 (00000000) => (00000000 00000000)
+       mcrxr 2 (00000000) => (00000000 00000000)
+       mcrxr 3 (00000000) => (00000000 00000000)
+       mcrxr 4 (00000000) => (00000000 00000000)
+       mcrxr 5 (00000000) => (00000000 00000000)
+       mcrxr 6 (00000000) => (00000000 00000000)
+       mcrxr 7 (00000000) => (00000000 00000000)
+       mcrxr 0 (10000000) => (00000000 00000000)
+       mcrxr 1 (10000000) => (00000000 00000000)
+       mcrxr 2 (10000000) => (00000000 00000000)
+       mcrxr 3 (10000000) => (00000000 00000000)
+       mcrxr 4 (10000000) => (00000000 00000000)
+       mcrxr 5 (10000000) => (00000000 00000000)
+       mcrxr 6 (10000000) => (00000000 00000000)
+       mcrxr 7 (10000000) => (00000000 00000000)
+       mcrxr 0 (20000000) => (20000000 00000000)
+       mcrxr 1 (20000000) => (02000000 00000000)
+       mcrxr 2 (20000000) => (00200000 00000000)
+       mcrxr 3 (20000000) => (00020000 00000000)
+       mcrxr 4 (20000000) => (00002000 00000000)
+       mcrxr 5 (20000000) => (00000200 00000000)
+       mcrxr 6 (20000000) => (00000020 00000000)
+       mcrxr 7 (20000000) => (00000002 00000000)
+       mcrxr 0 (30000000) => (20000000 00000000)
+       mcrxr 1 (30000000) => (02000000 00000000)
+       mcrxr 2 (30000000) => (00200000 00000000)
+       mcrxr 3 (30000000) => (00020000 00000000)
+       mcrxr 4 (30000000) => (00002000 00000000)
+       mcrxr 5 (30000000) => (00000200 00000000)
+       mcrxr 6 (30000000) => (00000020 00000000)
+       mcrxr 7 (30000000) => (00000002 00000000)
+       mcrxr 0 (40000000) => (40000000 00000000)
+       mcrxr 1 (40000000) => (04000000 00000000)
+       mcrxr 2 (40000000) => (00400000 00000000)
+       mcrxr 3 (40000000) => (00040000 00000000)
+       mcrxr 4 (40000000) => (00004000 00000000)
+       mcrxr 5 (40000000) => (00000400 00000000)
+       mcrxr 6 (40000000) => (00000040 00000000)
+       mcrxr 7 (40000000) => (00000004 00000000)
+       mcrxr 0 (50000000) => (40000000 00000000)
+       mcrxr 1 (50000000) => (04000000 00000000)
+       mcrxr 2 (50000000) => (00400000 00000000)
+       mcrxr 3 (50000000) => (00040000 00000000)
+       mcrxr 4 (50000000) => (00004000 00000000)
+       mcrxr 5 (50000000) => (00000400 00000000)
+       mcrxr 6 (50000000) => (00000040 00000000)
+       mcrxr 7 (50000000) => (00000004 00000000)
+       mcrxr 0 (60000000) => (60000000 00000000)
+       mcrxr 1 (60000000) => (06000000 00000000)
+       mcrxr 2 (60000000) => (00600000 00000000)
+       mcrxr 3 (60000000) => (00060000 00000000)
+       mcrxr 4 (60000000) => (00006000 00000000)
+       mcrxr 5 (60000000) => (00000600 00000000)
+       mcrxr 6 (60000000) => (00000060 00000000)
+       mcrxr 7 (60000000) => (00000006 00000000)
+       mcrxr 0 (70000000) => (60000000 00000000)
+       mcrxr 1 (70000000) => (06000000 00000000)
+       mcrxr 2 (70000000) => (00600000 00000000)
+       mcrxr 3 (70000000) => (00060000 00000000)
+       mcrxr 4 (70000000) => (00006000 00000000)
+       mcrxr 5 (70000000) => (00000600 00000000)
+       mcrxr 6 (70000000) => (00000060 00000000)
+       mcrxr 7 (70000000) => (00000006 00000000)
+       mcrxr 0 (80000000) => (80000000 00000000)
+       mcrxr 1 (80000000) => (08000000 00000000)
+       mcrxr 2 (80000000) => (00800000 00000000)
+       mcrxr 3 (80000000) => (00080000 00000000)
+       mcrxr 4 (80000000) => (00008000 00000000)
+       mcrxr 5 (80000000) => (00000800 00000000)
+       mcrxr 6 (80000000) => (00000080 00000000)
+       mcrxr 7 (80000000) => (00000008 00000000)
+       mcrxr 0 (90000000) => (80000000 00000000)
+       mcrxr 1 (90000000) => (08000000 00000000)
+       mcrxr 2 (90000000) => (00800000 00000000)
+       mcrxr 3 (90000000) => (00080000 00000000)
+       mcrxr 4 (90000000) => (00008000 00000000)
+       mcrxr 5 (90000000) => (00000800 00000000)
+       mcrxr 6 (90000000) => (00000080 00000000)
+       mcrxr 7 (90000000) => (00000008 00000000)
+       mcrxr 0 (a0000000) => (a0000000 00000000)
+       mcrxr 1 (a0000000) => (0a000000 00000000)
+       mcrxr 2 (a0000000) => (00a00000 00000000)
+       mcrxr 3 (a0000000) => (000a0000 00000000)
+       mcrxr 4 (a0000000) => (0000a000 00000000)
+       mcrxr 5 (a0000000) => (00000a00 00000000)
+       mcrxr 6 (a0000000) => (000000a0 00000000)
+       mcrxr 7 (a0000000) => (0000000a 00000000)
+       mcrxr 0 (b0000000) => (a0000000 00000000)
+       mcrxr 1 (b0000000) => (0a000000 00000000)
+       mcrxr 2 (b0000000) => (00a00000 00000000)
+       mcrxr 3 (b0000000) => (000a0000 00000000)
+       mcrxr 4 (b0000000) => (0000a000 00000000)
+       mcrxr 5 (b0000000) => (00000a00 00000000)
+       mcrxr 6 (b0000000) => (000000a0 00000000)
+       mcrxr 7 (b0000000) => (0000000a 00000000)
+       mcrxr 0 (c0000000) => (c0000000 00000000)
+       mcrxr 1 (c0000000) => (0c000000 00000000)
+       mcrxr 2 (c0000000) => (00c00000 00000000)
+       mcrxr 3 (c0000000) => (000c0000 00000000)
+       mcrxr 4 (c0000000) => (0000c000 00000000)
+       mcrxr 5 (c0000000) => (00000c00 00000000)
+       mcrxr 6 (c0000000) => (000000c0 00000000)
+       mcrxr 7 (c0000000) => (0000000c 00000000)
+       mcrxr 0 (d0000000) => (c0000000 00000000)
+       mcrxr 1 (d0000000) => (0c000000 00000000)
+       mcrxr 2 (d0000000) => (00c00000 00000000)
+       mcrxr 3 (d0000000) => (000c0000 00000000)
+       mcrxr 4 (d0000000) => (0000c000 00000000)
+       mcrxr 5 (d0000000) => (00000c00 00000000)
+       mcrxr 6 (d0000000) => (000000c0 00000000)
+       mcrxr 7 (d0000000) => (0000000c 00000000)
+       mcrxr 0 (e0000000) => (e0000000 00000000)
+       mcrxr 1 (e0000000) => (0e000000 00000000)
+       mcrxr 2 (e0000000) => (00e00000 00000000)
+       mcrxr 3 (e0000000) => (000e0000 00000000)
+       mcrxr 4 (e0000000) => (0000e000 00000000)
+       mcrxr 5 (e0000000) => (00000e00 00000000)
+       mcrxr 6 (e0000000) => (000000e0 00000000)
+       mcrxr 7 (e0000000) => (0000000e 00000000)
+       mcrxr 0 (f0000000) => (e0000000 00000000)
+       mcrxr 1 (f0000000) => (0e000000 00000000)
+       mcrxr 2 (f0000000) => (00e00000 00000000)
+       mcrxr 3 (f0000000) => (000e0000 00000000)
+       mcrxr 4 (f0000000) => (0000e000 00000000)
+       mcrxr 5 (f0000000) => (00000e00 00000000)
+       mcrxr 6 (f0000000) => (000000e0 00000000)
+       mcrxr 7 (f0000000) => (0000000e 00000000)
+
+       mtcrf 0, 00000000 => (00000000 00000000)
+       mtcrf 99, 00000000 => (00000000 00000000)
+       mtcrf 198, 00000000 => (00000000 00000000)
+       mtcrf 0, 000f423f => (00000000 00000000)
+       mtcrf 99, 000f423f => (0000003f 00000000)
+       mtcrf 198, 000f423f => (00000230 00000000)
+       mtcrf 0, ffffffff => (00000000 00000000)
+       mtcrf 99, ffffffff => (0ff000ff 00000000)
+       mtcrf 198, ffffffff => (ff000ff0 00000000)
+
+PPC integer load insns
+    with one register + one 16 bits immediate args with flags update:
+         lbz 0, (00000000) => 00000000, (00000000 00000000)
+         lbz 4, (000f423f) => 00000000, (00000000 00000000)
+         lbz 8, (ffffffff) => 000000ff, (00000000 00000000)
+         lbz -8, (00000000) => 00000000 (00000000 00000000)
+         lbz -4, (000f423f) => 00000000 (00000000 00000000)
+         lbz 0, (ffffffff) => 000000ff (00000000 00000000)
+
+        lbzu 0, (00000000) => 00000000, (00000000 00000000)
+        lbzu 4, (000f423f) => 00000000, (00000000 00000000)
+        lbzu 8, (ffffffff) => 000000ff, (00000000 00000000)
+        lbzu -8, (00000000) => 00000000 (00000000 00000000)
+        lbzu -4, (000f423f) => 00000000 (00000000 00000000)
+        lbzu 0, (ffffffff) => 000000ff (00000000 00000000)
+
+         lha 0, (00000000) => 00000000, (00000000 00000000)
+         lha 4, (000f423f) => 0000000f, (00000000 00000000)
+         lha 8, (ffffffff) => ffffffff, (00000000 00000000)
+         lha -8, (00000000) => 00000000 (00000000 00000000)
+         lha -4, (000f423f) => 0000000f (00000000 00000000)
+         lha 0, (ffffffff) => ffffffff (00000000 00000000)
+
+        lhau 0, (00000000) => 00000000, (00000000 00000000)
+        lhau 4, (000f423f) => 0000000f, (00000000 00000000)
+        lhau 8, (ffffffff) => ffffffff, (00000000 00000000)
+        lhau -8, (00000000) => 00000000 (00000000 00000000)
+        lhau -4, (000f423f) => 0000000f (00000000 00000000)
+        lhau 0, (ffffffff) => ffffffff (00000000 00000000)
+
+         lhz 0, (00000000) => 00000000, (00000000 00000000)
+         lhz 4, (000f423f) => 0000000f, (00000000 00000000)
+         lhz 8, (ffffffff) => 0000ffff, (00000000 00000000)
+         lhz -8, (00000000) => 00000000 (00000000 00000000)
+         lhz -4, (000f423f) => 0000000f (00000000 00000000)
+         lhz 0, (ffffffff) => 0000ffff (00000000 00000000)
+
+        lhzu 0, (00000000) => 00000000, (00000000 00000000)
+        lhzu 4, (000f423f) => 0000000f, (00000000 00000000)
+        lhzu 8, (ffffffff) => 0000ffff, (00000000 00000000)
+        lhzu -8, (00000000) => 00000000 (00000000 00000000)
+        lhzu -4, (000f423f) => 0000000f (00000000 00000000)
+        lhzu 0, (ffffffff) => 0000ffff (00000000 00000000)
+
+         lwz 0, (00000000) => 00000000, (00000000 00000000)
+         lwz 4, (000f423f) => 000f423f, (00000000 00000000)
+         lwz 8, (ffffffff) => ffffffff, (00000000 00000000)
+         lwz -8, (00000000) => 00000000 (00000000 00000000)
+         lwz -4, (000f423f) => 000f423f (00000000 00000000)
+         lwz 0, (ffffffff) => ffffffff (00000000 00000000)
+
+        lwzu 0, (00000000) => 00000000, (00000000 00000000)
+        lwzu 4, (000f423f) => 000f423f, (00000000 00000000)
+        lwzu 8, (ffffffff) => ffffffff, (00000000 00000000)
+        lwzu -8, (00000000) => 00000000 (00000000 00000000)
+        lwzu -4, (000f423f) => 000f423f (00000000 00000000)
+        lwzu 0, (ffffffff) => ffffffff (00000000 00000000)
+
+PPC integer load insns with two register args:
+        lbzx 0 (00000000) => 00000000 (00000000 00000000)
+        lbzx 4 (000f423f) => 00000000 (00000000 00000000)
+        lbzx 8 (ffffffff) => 000000ff (00000000 00000000)
+
+       lbzux 0 (00000000) => 00000000 (00000000 00000000)
+       lbzux 4 (000f423f) => 00000000 (00000000 00000000)
+       lbzux 8 (ffffffff) => 000000ff (00000000 00000000)
+
+        lhax 0 (00000000) => 00000000 (00000000 00000000)
+        lhax 4 (000f423f) => 0000000f (00000000 00000000)
+        lhax 8 (ffffffff) => ffffffff (00000000 00000000)
+
+       lhaux 0 (00000000) => 00000000 (00000000 00000000)
+       lhaux 4 (000f423f) => 0000000f (00000000 00000000)
+       lhaux 8 (ffffffff) => ffffffff (00000000 00000000)
+
+        lhzx 0 (00000000) => 00000000 (00000000 00000000)
+        lhzx 4 (000f423f) => 0000000f (00000000 00000000)
+        lhzx 8 (ffffffff) => 0000ffff (00000000 00000000)
+
+       lhzux 0 (00000000) => 00000000 (00000000 00000000)
+       lhzux 4 (000f423f) => 0000000f (00000000 00000000)
+       lhzux 8 (ffffffff) => 0000ffff (00000000 00000000)
+
+        lwzx 0 (00000000) => 00000000 (00000000 00000000)
+        lwzx 4 (000f423f) => 000f423f (00000000 00000000)
+        lwzx 8 (ffffffff) => ffffffff (00000000 00000000)
+
+       lwzux 0 (00000000) => 00000000 (00000000 00000000)
+       lwzux 4 (000f423f) => 000f423f (00000000 00000000)
+       lwzux 8 (ffffffff) => ffffffff (00000000 00000000)
+
+PPC integer store insns
+    with one register + one 16 bits immediate args with flags update:
+         stb 00000000, 0 => 00000000, (00000000 00000000)
+         stb 000f423f, 4 => 3f000000, (00000000 00000000)
+         stb ffffffff, 8 => ff000000, (00000000 00000000)
+         stb 00000000, -8 => 00000000, (00000000 00000000)
+         stb 000f423f, -4 => 3f000000, (00000000 00000000)
+         stb ffffffff, 0 => ff000000, (00000000 00000000)
+
+        stbu 00000000, 0 => 00000000, (00000000 00000000)
+        stbu 000f423f, 4 => 3f000000, (00000000 00000000)
+        stbu ffffffff, 8 => ff000000, (00000000 00000000)
+        stbu 00000000, -8 => 00000000, (00000000 00000000)
+        stbu 000f423f, -4 => 3f000000, (00000000 00000000)
+        stbu ffffffff, 0 => ff000000, (00000000 00000000)
+
+         sth 00000000, 0 => 00000000, (00000000 00000000)
+         sth 000f423f, 4 => 423f0000, (00000000 00000000)
+         sth ffffffff, 8 => ffff0000, (00000000 00000000)
+         sth 00000000, -8 => 00000000, (00000000 00000000)
+         sth 000f423f, -4 => 423f0000, (00000000 00000000)
+         sth ffffffff, 0 => ffff0000, (00000000 00000000)
+
+        sthu 00000000, 0 => 00000000, (00000000 00000000)
+        sthu 000f423f, 4 => 423f0000, (00000000 00000000)
+        sthu ffffffff, 8 => ffff0000, (00000000 00000000)
+        sthu 00000000, -8 => 00000000, (00000000 00000000)
+        sthu 000f423f, -4 => 423f0000, (00000000 00000000)
+        sthu ffffffff, 0 => ffff0000, (00000000 00000000)
+
+         stw 00000000, 0 => 00000000, (00000000 00000000)
+         stw 000f423f, 4 => 000f423f, (00000000 00000000)
+         stw ffffffff, 8 => ffffffff, (00000000 00000000)
+         stw 00000000, -8 => 00000000, (00000000 00000000)
+         stw 000f423f, -4 => 000f423f, (00000000 00000000)
+         stw ffffffff, 0 => ffffffff, (00000000 00000000)
+
+        stwu 00000000, 0 => 00000000, (00000000 00000000)
+        stwu 000f423f, 4 => 000f423f, (00000000 00000000)
+        stwu ffffffff, 8 => ffffffff, (00000000 00000000)
+        stwu 00000000, -8 => 00000000, (00000000 00000000)
+        stwu 000f423f, -4 => 000f423f, (00000000 00000000)
+        stwu ffffffff, 0 => ffffffff, (00000000 00000000)
+
+PPC integer store insns with three register args:
+        stbx 00000000, 0 => 00000000, (00000000 00000000)
+        stbx 000f423f, 4 => 3f000000, (00000000 00000000)
+        stbx ffffffff, 8 => ff000000, (00000000 00000000)
+
+       stbux 00000000, 0 => 00000000, (00000000 00000000)
+       stbux 000f423f, 4 => 3f000000, (00000000 00000000)
+       stbux ffffffff, 8 => ff000000, (00000000 00000000)
+
+        sthx 00000000, 0 => 00000000, (00000000 00000000)
+        sthx 000f423f, 4 => 423f0000, (00000000 00000000)
+        sthx ffffffff, 8 => ffff0000, (00000000 00000000)
+
+       sthux 00000000, 0 => 00000000, (00000000 00000000)
+       sthux 000f423f, 4 => 423f0000, (00000000 00000000)
+       sthux ffffffff, 8 => ffff0000, (00000000 00000000)
+
+        stwx 00000000, 0 => 00000000, (00000000 00000000)
+        stwx 000f423f, 4 => 000f423f, (00000000 00000000)
+        stwx ffffffff, 8 => ffffffff, (00000000 00000000)
+
+       stwux 00000000, 0 => 00000000, (00000000 00000000)
+       stwux 000f423f, 4 => 000f423f, (00000000 00000000)
+       stwux ffffffff, 8 => ffffffff, (00000000 00000000)
+
+All done. Tested 154 different instructions
diff --git a/none/tests/ppc32/jm-insns.vgtest b/none/tests/ppc32/jm-insns.vgtest
new file mode 100644 (file)
index 0000000..0a5c57a
--- /dev/null
@@ -0,0 +1 @@
+prog: jm-insns
diff --git a/none/tests/ppc32/jm-vmx.stderr.exp b/none/tests/ppc32/jm-vmx.stderr.exp
new file mode 100644 (file)
index 0000000..139597f
--- /dev/null
@@ -0,0 +1,2 @@
+
+
diff --git a/none/tests/ppc32/jm-vmx.stdout.exp b/none/tests/ppc32/jm-vmx.stdout.exp
new file mode 100644 (file)
index 0000000..b152b48
--- /dev/null
@@ -0,0 +1,3041 @@
+PPC integer arith insns with two args:
+         add 00000000, 00000000 => 00000000 (00000000 00000000)
+         add 00000000, 000f423f => 000f423f (00000000 00000000)
+         add 00000000, ffffffff => ffffffff (00000000 00000000)
+         add 000f423f, 00000000 => 000f423f (00000000 00000000)
+         add 000f423f, 000f423f => 001e847e (00000000 00000000)
+         add 000f423f, ffffffff => 000f423e (00000000 00000000)
+         add ffffffff, 00000000 => ffffffff (00000000 00000000)
+         add ffffffff, 000f423f => 000f423e (00000000 00000000)
+         add ffffffff, ffffffff => fffffffe (00000000 00000000)
+
+        addo 00000000, 00000000 => 00000000 (00000000 00000000)
+        addo 00000000, 000f423f => 000f423f (00000000 00000000)
+        addo 00000000, ffffffff => ffffffff (00000000 00000000)
+        addo 000f423f, 00000000 => 000f423f (00000000 00000000)
+        addo 000f423f, 000f423f => 001e847e (00000000 00000000)
+        addo 000f423f, ffffffff => 000f423e (00000000 00000000)
+        addo ffffffff, 00000000 => ffffffff (00000000 00000000)
+        addo ffffffff, 000f423f => 000f423e (00000000 00000000)
+        addo ffffffff, ffffffff => fffffffe (00000000 00000000)
+
+        addc 00000000, 00000000 => 00000000 (00000000 00000000)
+        addc 00000000, 000f423f => 000f423f (00000000 00000000)
+        addc 00000000, ffffffff => ffffffff (00000000 00000000)
+        addc 000f423f, 00000000 => 000f423f (00000000 00000000)
+        addc 000f423f, 000f423f => 001e847e (00000000 00000000)
+        addc 000f423f, ffffffff => 000f423e (00000000 20000000)
+        addc ffffffff, 00000000 => ffffffff (00000000 00000000)
+        addc ffffffff, 000f423f => 000f423e (00000000 20000000)
+        addc ffffffff, ffffffff => fffffffe (00000000 20000000)
+
+       addco 00000000, 00000000 => 00000000 (00000000 00000000)
+       addco 00000000, 000f423f => 000f423f (00000000 00000000)
+       addco 00000000, ffffffff => ffffffff (00000000 00000000)
+       addco 000f423f, 00000000 => 000f423f (00000000 00000000)
+       addco 000f423f, 000f423f => 001e847e (00000000 00000000)
+       addco 000f423f, ffffffff => 000f423e (00000000 20000000)
+       addco ffffffff, 00000000 => ffffffff (00000000 00000000)
+       addco ffffffff, 000f423f => 000f423e (00000000 20000000)
+       addco ffffffff, ffffffff => fffffffe (00000000 20000000)
+
+        divw 00000000, 00000000 => 00000000 (00000000 00000000)
+        divw 00000000, 000f423f => 00000000 (00000000 00000000)
+        divw 00000000, ffffffff => 00000000 (00000000 00000000)
+        divw 000f423f, 00000000 => 00000000 (00000000 00000000)
+        divw 000f423f, 000f423f => 00000001 (00000000 00000000)
+        divw 000f423f, ffffffff => fff0bdc1 (00000000 00000000)
+        divw ffffffff, 00000000 => 00000000 (00000000 00000000)
+        divw ffffffff, 000f423f => 00000000 (00000000 00000000)
+        divw ffffffff, ffffffff => 00000001 (00000000 00000000)
+
+       divwo 00000000, 00000000 => 00000000 (00000000 c0000000)
+       divwo 00000000, 000f423f => 00000000 (00000000 00000000)
+       divwo 00000000, ffffffff => 00000000 (00000000 00000000)
+       divwo 000f423f, 00000000 => 00000000 (00000000 c0000000)
+       divwo 000f423f, 000f423f => 00000001 (00000000 00000000)
+       divwo 000f423f, ffffffff => fff0bdc1 (00000000 00000000)
+       divwo ffffffff, 00000000 => 00000000 (00000000 c0000000)
+       divwo ffffffff, 000f423f => 00000000 (00000000 00000000)
+       divwo ffffffff, ffffffff => 00000001 (00000000 00000000)
+
+       divwu 00000000, 00000000 => 00000000 (00000000 00000000)
+       divwu 00000000, 000f423f => 00000000 (00000000 00000000)
+       divwu 00000000, ffffffff => 00000000 (00000000 00000000)
+       divwu 000f423f, 00000000 => 00000000 (00000000 00000000)
+       divwu 000f423f, 000f423f => 00000001 (00000000 00000000)
+       divwu 000f423f, ffffffff => 00000000 (00000000 00000000)
+       divwu ffffffff, 00000000 => 00000000 (00000000 00000000)
+       divwu ffffffff, 000f423f => 000010c6 (00000000 00000000)
+       divwu ffffffff, ffffffff => 00000001 (00000000 00000000)
+
+      divwuo 00000000, 00000000 => 00000000 (00000000 c0000000)
+      divwuo 00000000, 000f423f => 00000000 (00000000 00000000)
+      divwuo 00000000, ffffffff => 00000000 (00000000 00000000)
+      divwuo 000f423f, 00000000 => 00000000 (00000000 c0000000)
+      divwuo 000f423f, 000f423f => 00000001 (00000000 00000000)
+      divwuo 000f423f, ffffffff => 00000000 (00000000 00000000)
+      divwuo ffffffff, 00000000 => 00000000 (00000000 c0000000)
+      divwuo ffffffff, 000f423f => 000010c6 (00000000 00000000)
+      divwuo ffffffff, ffffffff => 00000001 (00000000 00000000)
+
+       mulhw 00000000, 00000000 => 00000000 (00000000 00000000)
+       mulhw 00000000, 000f423f => 00000000 (00000000 00000000)
+       mulhw 00000000, ffffffff => 00000000 (00000000 00000000)
+       mulhw 000f423f, 00000000 => 00000000 (00000000 00000000)
+       mulhw 000f423f, 000f423f => 000000e8 (00000000 00000000)
+       mulhw 000f423f, ffffffff => ffffffff (00000000 00000000)
+       mulhw ffffffff, 00000000 => 00000000 (00000000 00000000)
+       mulhw ffffffff, 000f423f => ffffffff (00000000 00000000)
+       mulhw ffffffff, ffffffff => 00000000 (00000000 00000000)
+
+      mulhwu 00000000, 00000000 => 00000000 (00000000 00000000)
+      mulhwu 00000000, 000f423f => 00000000 (00000000 00000000)
+      mulhwu 00000000, ffffffff => 00000000 (00000000 00000000)
+      mulhwu 000f423f, 00000000 => 00000000 (00000000 00000000)
+      mulhwu 000f423f, 000f423f => 000000e8 (00000000 00000000)
+      mulhwu 000f423f, ffffffff => 000f423e (00000000 00000000)
+      mulhwu ffffffff, 00000000 => 00000000 (00000000 00000000)
+      mulhwu ffffffff, 000f423f => 000f423e (00000000 00000000)
+      mulhwu ffffffff, ffffffff => fffffffe (00000000 00000000)
+
+       mullw 00000000, 00000000 => 00000000 (00000000 00000000)
+       mullw 00000000, 000f423f => 00000000 (00000000 00000000)
+       mullw 00000000, ffffffff => 00000000 (00000000 00000000)
+       mullw 000f423f, 00000000 => 00000000 (00000000 00000000)
+       mullw 000f423f, 000f423f => d4868b81 (00000000 00000000)
+       mullw 000f423f, ffffffff => fff0bdc1 (00000000 00000000)
+       mullw ffffffff, 00000000 => 00000000 (00000000 00000000)
+       mullw ffffffff, 000f423f => fff0bdc1 (00000000 00000000)
+       mullw ffffffff, ffffffff => 00000001 (00000000 00000000)
+
+      mullwo 00000000, 00000000 => 00000000 (00000000 00000000)
+      mullwo 00000000, 000f423f => 00000000 (00000000 00000000)
+      mullwo 00000000, ffffffff => 00000000 (00000000 00000000)
+      mullwo 000f423f, 00000000 => 00000000 (00000000 00000000)
+      mullwo 000f423f, 000f423f => d4868b81 (00000000 c0000000)
+      mullwo 000f423f, ffffffff => fff0bdc1 (00000000 00000000)
+      mullwo ffffffff, 00000000 => 00000000 (00000000 00000000)
+      mullwo ffffffff, 000f423f => fff0bdc1 (00000000 00000000)
+      mullwo ffffffff, ffffffff => 00000001 (00000000 00000000)
+
+        subf 00000000, 00000000 => 00000000 (00000000 00000000)
+        subf 00000000, 000f423f => 000f423f (00000000 00000000)
+        subf 00000000, ffffffff => ffffffff (00000000 00000000)
+        subf 000f423f, 00000000 => fff0bdc1 (00000000 00000000)
+        subf 000f423f, 000f423f => 00000000 (00000000 00000000)
+        subf 000f423f, ffffffff => fff0bdc0 (00000000 00000000)
+        subf ffffffff, 00000000 => 00000001 (00000000 00000000)
+        subf ffffffff, 000f423f => 000f4240 (00000000 00000000)
+        subf ffffffff, ffffffff => 00000000 (00000000 00000000)
+
+       subfo 00000000, 00000000 => 00000000 (00000000 00000000)
+       subfo 00000000, 000f423f => 000f423f (00000000 00000000)
+       subfo 00000000, ffffffff => ffffffff (00000000 00000000)
+       subfo 000f423f, 00000000 => fff0bdc1 (00000000 00000000)
+       subfo 000f423f, 000f423f => 00000000 (00000000 00000000)
+       subfo 000f423f, ffffffff => fff0bdc0 (00000000 00000000)
+       subfo ffffffff, 00000000 => 00000001 (00000000 00000000)
+       subfo ffffffff, 000f423f => 000f4240 (00000000 00000000)
+       subfo ffffffff, ffffffff => 00000000 (00000000 00000000)
+
+       subfc 00000000, 00000000 => 00000000 (00000000 20000000)
+       subfc 00000000, 000f423f => 000f423f (00000000 20000000)
+       subfc 00000000, ffffffff => ffffffff (00000000 20000000)
+       subfc 000f423f, 00000000 => fff0bdc1 (00000000 00000000)
+       subfc 000f423f, 000f423f => 00000000 (00000000 20000000)
+       subfc 000f423f, ffffffff => fff0bdc0 (00000000 20000000)
+       subfc ffffffff, 00000000 => 00000001 (00000000 00000000)
+       subfc ffffffff, 000f423f => 000f4240 (00000000 00000000)
+       subfc ffffffff, ffffffff => 00000000 (00000000 20000000)
+
+      subfco 00000000, 00000000 => 00000000 (00000000 20000000)
+      subfco 00000000, 000f423f => 000f423f (00000000 20000000)
+      subfco 00000000, ffffffff => ffffffff (00000000 20000000)
+      subfco 000f423f, 00000000 => fff0bdc1 (00000000 00000000)
+      subfco 000f423f, 000f423f => 00000000 (00000000 20000000)
+      subfco 000f423f, ffffffff => fff0bdc0 (00000000 20000000)
+      subfco ffffffff, 00000000 => 00000001 (00000000 00000000)
+      subfco ffffffff, 000f423f => 000f4240 (00000000 00000000)
+      subfco ffffffff, ffffffff => 00000000 (00000000 20000000)
+
+PPC integer arith insns with two args with flags update:
+        add. 00000000, 00000000 => 00000000 (20000000 00000000)
+        add. 00000000, 000f423f => 000f423f (40000000 00000000)
+        add. 00000000, ffffffff => ffffffff (80000000 00000000)
+        add. 000f423f, 00000000 => 000f423f (40000000 00000000)
+        add. 000f423f, 000f423f => 001e847e (40000000 00000000)
+        add. 000f423f, ffffffff => 000f423e (40000000 00000000)
+        add. ffffffff, 00000000 => ffffffff (80000000 00000000)
+        add. ffffffff, 000f423f => 000f423e (40000000 00000000)
+        add. ffffffff, ffffffff => fffffffe (80000000 00000000)
+
+       addo. 00000000, 00000000 => 00000000 (20000000 00000000)
+       addo. 00000000, 000f423f => 000f423f (40000000 00000000)
+       addo. 00000000, ffffffff => ffffffff (80000000 00000000)
+       addo. 000f423f, 00000000 => 000f423f (40000000 00000000)
+       addo. 000f423f, 000f423f => 001e847e (40000000 00000000)
+       addo. 000f423f, ffffffff => 000f423e (40000000 00000000)
+       addo. ffffffff, 00000000 => ffffffff (80000000 00000000)
+       addo. ffffffff, 000f423f => 000f423e (40000000 00000000)
+       addo. ffffffff, ffffffff => fffffffe (80000000 00000000)
+
+       addc. 00000000, 00000000 => 00000000 (20000000 00000000)
+       addc. 00000000, 000f423f => 000f423f (40000000 00000000)
+       addc. 00000000, ffffffff => ffffffff (80000000 00000000)
+       addc. 000f423f, 00000000 => 000f423f (40000000 00000000)
+       addc. 000f423f, 000f423f => 001e847e (40000000 00000000)
+       addc. 000f423f, ffffffff => 000f423e (40000000 20000000)
+       addc. ffffffff, 00000000 => ffffffff (80000000 00000000)
+       addc. ffffffff, 000f423f => 000f423e (40000000 20000000)
+       addc. ffffffff, ffffffff => fffffffe (80000000 20000000)
+
+      addco. 00000000, 00000000 => 00000000 (20000000 00000000)
+      addco. 00000000, 000f423f => 000f423f (40000000 00000000)
+      addco. 00000000, ffffffff => ffffffff (80000000 00000000)
+      addco. 000f423f, 00000000 => 000f423f (40000000 00000000)
+      addco. 000f423f, 000f423f => 001e847e (40000000 00000000)
+      addco. 000f423f, ffffffff => 000f423e (40000000 20000000)
+      addco. ffffffff, 00000000 => ffffffff (80000000 00000000)
+      addco. ffffffff, 000f423f => 000f423e (40000000 20000000)
+      addco. ffffffff, ffffffff => fffffffe (80000000 20000000)
+
+       divw. 00000000, 00000000 => 00000000 (20000000 00000000)
+       divw. 00000000, 000f423f => 00000000 (20000000 00000000)
+       divw. 00000000, ffffffff => 00000000 (20000000 00000000)
+       divw. 000f423f, 00000000 => 00000000 (20000000 00000000)
+       divw. 000f423f, 000f423f => 00000001 (40000000 00000000)
+       divw. 000f423f, ffffffff => fff0bdc1 (80000000 00000000)
+       divw. ffffffff, 00000000 => 00000000 (20000000 00000000)
+       divw. ffffffff, 000f423f => 00000000 (20000000 00000000)
+       divw. ffffffff, ffffffff => 00000001 (40000000 00000000)
+
+      divwo. 00000000, 00000000 => 00000000 (30000000 c0000000)
+      divwo. 00000000, 000f423f => 00000000 (20000000 00000000)
+      divwo. 00000000, ffffffff => 00000000 (20000000 00000000)
+      divwo. 000f423f, 00000000 => 00000000 (30000000 c0000000)
+      divwo. 000f423f, 000f423f => 00000001 (40000000 00000000)
+      divwo. 000f423f, ffffffff => fff0bdc1 (80000000 00000000)
+      divwo. ffffffff, 00000000 => 00000000 (30000000 c0000000)
+      divwo. ffffffff, 000f423f => 00000000 (20000000 00000000)
+      divwo. ffffffff, ffffffff => 00000001 (40000000 00000000)
+
+      divwu. 00000000, 00000000 => 00000000 (20000000 00000000)
+      divwu. 00000000, 000f423f => 00000000 (20000000 00000000)
+      divwu. 00000000, ffffffff => 00000000 (20000000 00000000)
+      divwu. 000f423f, 00000000 => 00000000 (20000000 00000000)
+      divwu. 000f423f, 000f423f => 00000001 (40000000 00000000)
+      divwu. 000f423f, ffffffff => 00000000 (20000000 00000000)
+      divwu. ffffffff, 00000000 => 00000000 (20000000 00000000)
+      divwu. ffffffff, 000f423f => 000010c6 (40000000 00000000)
+      divwu. ffffffff, ffffffff => 00000001 (40000000 00000000)
+
+     divwuo. 00000000, 00000000 => 00000000 (30000000 c0000000)
+     divwuo. 00000000, 000f423f => 00000000 (20000000 00000000)
+     divwuo. 00000000, ffffffff => 00000000 (20000000 00000000)
+     divwuo. 000f423f, 00000000 => 00000000 (30000000 c0000000)
+     divwuo. 000f423f, 000f423f => 00000001 (40000000 00000000)
+     divwuo. 000f423f, ffffffff => 00000000 (20000000 00000000)
+     divwuo. ffffffff, 00000000 => 00000000 (30000000 c0000000)
+     divwuo. ffffffff, 000f423f => 000010c6 (40000000 00000000)
+     divwuo. ffffffff, ffffffff => 00000001 (40000000 00000000)
+
+      mulhw. 00000000, 00000000 => 00000000 (20000000 00000000)
+      mulhw. 00000000, 000f423f => 00000000 (20000000 00000000)
+      mulhw. 00000000, ffffffff => 00000000 (20000000 00000000)
+      mulhw. 000f423f, 00000000 => 00000000 (20000000 00000000)
+      mulhw. 000f423f, 000f423f => 000000e8 (40000000 00000000)
+      mulhw. 000f423f, ffffffff => ffffffff (80000000 00000000)
+      mulhw. ffffffff, 00000000 => 00000000 (20000000 00000000)
+      mulhw. ffffffff, 000f423f => ffffffff (80000000 00000000)
+      mulhw. ffffffff, ffffffff => 00000000 (20000000 00000000)
+
+     mulhwu. 00000000, 00000000 => 00000000 (20000000 00000000)
+     mulhwu. 00000000, 000f423f => 00000000 (20000000 00000000)
+     mulhwu. 00000000, ffffffff => 00000000 (20000000 00000000)
+     mulhwu. 000f423f, 00000000 => 00000000 (20000000 00000000)
+     mulhwu. 000f423f, 000f423f => 000000e8 (40000000 00000000)
+     mulhwu. 000f423f, ffffffff => 000f423e (40000000 00000000)
+     mulhwu. ffffffff, 00000000 => 00000000 (20000000 00000000)
+     mulhwu. ffffffff, 000f423f => 000f423e (40000000 00000000)
+     mulhwu. ffffffff, ffffffff => fffffffe (80000000 00000000)
+
+      mullw. 00000000, 00000000 => 00000000 (20000000 00000000)
+      mullw. 00000000, 000f423f => 00000000 (20000000 00000000)
+      mullw. 00000000, ffffffff => 00000000 (20000000 00000000)
+      mullw. 000f423f, 00000000 => 00000000 (20000000 00000000)
+      mullw. 000f423f, 000f423f => d4868b81 (80000000 00000000)
+      mullw. 000f423f, ffffffff => fff0bdc1 (80000000 00000000)
+      mullw. ffffffff, 00000000 => 00000000 (20000000 00000000)
+      mullw. ffffffff, 000f423f => fff0bdc1 (80000000 00000000)
+      mullw. ffffffff, ffffffff => 00000001 (40000000 00000000)
+
+     mullwo. 00000000, 00000000 => 00000000 (20000000 00000000)
+     mullwo. 00000000, 000f423f => 00000000 (20000000 00000000)
+     mullwo. 00000000, ffffffff => 00000000 (20000000 00000000)
+     mullwo. 000f423f, 00000000 => 00000000 (20000000 00000000)
+     mullwo. 000f423f, 000f423f => d4868b81 (90000000 c0000000)
+     mullwo. 000f423f, ffffffff => fff0bdc1 (80000000 00000000)
+     mullwo. ffffffff, 00000000 => 00000000 (20000000 00000000)
+     mullwo. ffffffff, 000f423f => fff0bdc1 (80000000 00000000)
+     mullwo. ffffffff, ffffffff => 00000001 (40000000 00000000)
+
+       subf. 00000000, 00000000 => 00000000 (20000000 00000000)
+       subf. 00000000, 000f423f => 000f423f (40000000 00000000)
+       subf. 00000000, ffffffff => ffffffff (80000000 00000000)
+       subf. 000f423f, 00000000 => fff0bdc1 (80000000 00000000)
+       subf. 000f423f, 000f423f => 00000000 (20000000 00000000)
+       subf. 000f423f, ffffffff => fff0bdc0 (80000000 00000000)
+       subf. ffffffff, 00000000 => 00000001 (40000000 00000000)
+       subf. ffffffff, 000f423f => 000f4240 (40000000 00000000)
+       subf. ffffffff, ffffffff => 00000000 (20000000 00000000)
+
+      subfo. 00000000, 00000000 => 00000000 (20000000 00000000)
+      subfo. 00000000, 000f423f => 000f423f (40000000 00000000)
+      subfo. 00000000, ffffffff => ffffffff (80000000 00000000)
+      subfo. 000f423f, 00000000 => fff0bdc1 (80000000 00000000)
+      subfo. 000f423f, 000f423f => 00000000 (20000000 00000000)
+      subfo. 000f423f, ffffffff => fff0bdc0 (80000000 00000000)
+      subfo. ffffffff, 00000000 => 00000001 (40000000 00000000)
+      subfo. ffffffff, 000f423f => 000f4240 (40000000 00000000)
+      subfo. ffffffff, ffffffff => 00000000 (20000000 00000000)
+
+      subfc. 00000000, 00000000 => 00000000 (20000000 20000000)
+      subfc. 00000000, 000f423f => 000f423f (40000000 20000000)
+      subfc. 00000000, ffffffff => ffffffff (80000000 20000000)
+      subfc. 000f423f, 00000000 => fff0bdc1 (80000000 00000000)
+      subfc. 000f423f, 000f423f => 00000000 (20000000 20000000)
+      subfc. 000f423f, ffffffff => fff0bdc0 (80000000 20000000)
+      subfc. ffffffff, 00000000 => 00000001 (40000000 00000000)
+      subfc. ffffffff, 000f423f => 000f4240 (40000000 00000000)
+      subfc. ffffffff, ffffffff => 00000000 (20000000 20000000)
+
+     subfco. 00000000, 00000000 => 00000000 (20000000 20000000)
+     subfco. 00000000, 000f423f => 000f423f (40000000 20000000)
+     subfco. 00000000, ffffffff => ffffffff (80000000 20000000)
+     subfco. 000f423f, 00000000 => fff0bdc1 (80000000 00000000)
+     subfco. 000f423f, 000f423f => 00000000 (20000000 20000000)
+     subfco. 000f423f, ffffffff => fff0bdc0 (80000000 20000000)
+     subfco. ffffffff, 00000000 => 00000001 (40000000 00000000)
+     subfco. ffffffff, 000f423f => 000f4240 (40000000 00000000)
+     subfco. ffffffff, ffffffff => 00000000 (20000000 20000000)
+
+PPC integer arith insns with two args and carry:
+        adde 00000000, 00000000 => 00000000 (00000000 00000000)
+        adde 00000000, 000f423f => 000f423f (00000000 00000000)
+        adde 00000000, ffffffff => ffffffff (00000000 00000000)
+        adde 000f423f, 00000000 => 000f423f (00000000 00000000)
+        adde 000f423f, 000f423f => 001e847e (00000000 00000000)
+        adde 000f423f, ffffffff => 000f423e (00000000 20000000)
+        adde ffffffff, 00000000 => ffffffff (00000000 00000000)
+        adde ffffffff, 000f423f => 000f423e (00000000 20000000)
+        adde ffffffff, ffffffff => fffffffe (00000000 20000000)
+        adde 00000000, 00000000 => 00000001 (00000000 00000000)
+        adde 00000000, 000f423f => 000f4240 (00000000 00000000)
+        adde 00000000, ffffffff => 00000000 (00000000 20000000)
+        adde 000f423f, 00000000 => 000f4240 (00000000 00000000)
+        adde 000f423f, 000f423f => 001e847f (00000000 00000000)
+        adde 000f423f, ffffffff => 000f423f (00000000 20000000)
+        adde ffffffff, 00000000 => 00000000 (00000000 20000000)
+        adde ffffffff, 000f423f => 000f423f (00000000 20000000)
+        adde ffffffff, ffffffff => ffffffff (00000000 20000000)
+
+       addeo 00000000, 00000000 => 00000000 (00000000 00000000)
+       addeo 00000000, 000f423f => 000f423f (00000000 00000000)
+       addeo 00000000, ffffffff => ffffffff (00000000 00000000)
+       addeo 000f423f, 00000000 => 000f423f (00000000 00000000)
+       addeo 000f423f, 000f423f => 001e847e (00000000 00000000)
+       addeo 000f423f, ffffffff => 000f423e (00000000 20000000)
+       addeo ffffffff, 00000000 => ffffffff (00000000 00000000)
+       addeo ffffffff, 000f423f => 000f423e (00000000 20000000)
+       addeo ffffffff, ffffffff => fffffffe (00000000 20000000)
+       addeo 00000000, 00000000 => 00000001 (00000000 00000000)
+       addeo 00000000, 000f423f => 000f4240 (00000000 00000000)
+       addeo 00000000, ffffffff => 00000000 (00000000 20000000)
+       addeo 000f423f, 00000000 => 000f4240 (00000000 00000000)
+       addeo 000f423f, 000f423f => 001e847f (00000000 00000000)
+       addeo 000f423f, ffffffff => 000f423f (00000000 20000000)
+       addeo ffffffff, 00000000 => 00000000 (00000000 20000000)
+       addeo ffffffff, 000f423f => 000f423f (00000000 20000000)
+       addeo ffffffff, ffffffff => ffffffff (00000000 20000000)
+
+       subfe 00000000, 00000000 => ffffffff (00000000 00000000)
+       subfe 00000000, 000f423f => 000f423e (00000000 20000000)
+       subfe 00000000, ffffffff => fffffffe (00000000 20000000)
+       subfe 000f423f, 00000000 => fff0bdc0 (00000000 00000000)
+       subfe 000f423f, 000f423f => ffffffff (00000000 00000000)
+       subfe 000f423f, ffffffff => fff0bdbf (00000000 20000000)
+       subfe ffffffff, 00000000 => 00000000 (00000000 00000000)
+       subfe ffffffff, 000f423f => 000f423f (00000000 00000000)
+       subfe ffffffff, ffffffff => ffffffff (00000000 00000000)
+       subfe 00000000, 00000000 => 00000000 (00000000 20000000)
+       subfe 00000000, 000f423f => 000f423f (00000000 20000000)
+       subfe 00000000, ffffffff => ffffffff (00000000 20000000)
+       subfe 000f423f, 00000000 => fff0bdc1 (00000000 00000000)
+       subfe 000f423f, 000f423f => 00000000 (00000000 20000000)
+       subfe 000f423f, ffffffff => fff0bdc0 (00000000 20000000)
+       subfe ffffffff, 00000000 => 00000001 (00000000 00000000)
+       subfe ffffffff, 000f423f => 000f4240 (00000000 00000000)
+       subfe ffffffff, ffffffff => 00000000 (00000000 20000000)
+
+      subfeo 00000000, 00000000 => ffffffff (00000000 00000000)
+      subfeo 00000000, 000f423f => 000f423e (00000000 20000000)
+      subfeo 00000000, ffffffff => fffffffe (00000000 20000000)
+      subfeo 000f423f, 00000000 => fff0bdc0 (00000000 00000000)
+      subfeo 000f423f, 000f423f => ffffffff (00000000 00000000)
+      subfeo 000f423f, ffffffff => fff0bdbf (00000000 20000000)
+      subfeo ffffffff, 00000000 => 00000000 (00000000 00000000)
+      subfeo ffffffff, 000f423f => 000f423f (00000000 00000000)
+      subfeo ffffffff, ffffffff => ffffffff (00000000 00000000)
+      subfeo 00000000, 00000000 => 00000000 (00000000 20000000)
+      subfeo 00000000, 000f423f => 000f423f (00000000 20000000)
+      subfeo 00000000, ffffffff => ffffffff (00000000 20000000)
+      subfeo 000f423f, 00000000 => fff0bdc1 (00000000 00000000)
+      subfeo 000f423f, 000f423f => 00000000 (00000000 20000000)
+      subfeo 000f423f, ffffffff => fff0bdc0 (00000000 20000000)
+      subfeo ffffffff, 00000000 => 00000001 (00000000 00000000)
+      subfeo ffffffff, 000f423f => 000f4240 (00000000 00000000)
+      subfeo ffffffff, ffffffff => 00000000 (00000000 20000000)
+
+PPC integer arith insns with two args and carry with flags update:
+       adde. 00000000, 00000000 => 00000000 (20000000 00000000)
+       adde. 00000000, 000f423f => 000f423f (40000000 00000000)
+       adde. 00000000, ffffffff => ffffffff (80000000 00000000)
+       adde. 000f423f, 00000000 => 000f423f (40000000 00000000)
+       adde. 000f423f, 000f423f => 001e847e (40000000 00000000)
+       adde. 000f423f, ffffffff => 000f423e (40000000 20000000)
+       adde. ffffffff, 00000000 => ffffffff (80000000 00000000)
+       adde. ffffffff, 000f423f => 000f423e (40000000 20000000)
+       adde. ffffffff, ffffffff => fffffffe (80000000 20000000)
+       adde. 00000000, 00000000 => 00000001 (40000000 00000000)
+       adde. 00000000, 000f423f => 000f4240 (40000000 00000000)
+       adde. 00000000, ffffffff => 00000000 (20000000 20000000)
+       adde. 000f423f, 00000000 => 000f4240 (40000000 00000000)
+       adde. 000f423f, 000f423f => 001e847f (40000000 00000000)
+       adde. 000f423f, ffffffff => 000f423f (40000000 20000000)
+       adde. ffffffff, 00000000 => 00000000 (20000000 20000000)
+       adde. ffffffff, 000f423f => 000f423f (40000000 20000000)
+       adde. ffffffff, ffffffff => ffffffff (80000000 20000000)
+
+      addeo. 00000000, 00000000 => 00000000 (20000000 00000000)
+      addeo. 00000000, 000f423f => 000f423f (40000000 00000000)
+      addeo. 00000000, ffffffff => ffffffff (80000000 00000000)
+      addeo. 000f423f, 00000000 => 000f423f (40000000 00000000)
+      addeo. 000f423f, 000f423f => 001e847e (40000000 00000000)
+      addeo. 000f423f, ffffffff => 000f423e (40000000 20000000)
+      addeo. ffffffff, 00000000 => ffffffff (80000000 00000000)
+      addeo. ffffffff, 000f423f => 000f423e (40000000 20000000)
+      addeo. ffffffff, ffffffff => fffffffe (80000000 20000000)
+      addeo. 00000000, 00000000 => 00000001 (40000000 00000000)
+      addeo. 00000000, 000f423f => 000f4240 (40000000 00000000)
+      addeo. 00000000, ffffffff => 00000000 (20000000 20000000)
+      addeo. 000f423f, 00000000 => 000f4240 (40000000 00000000)
+      addeo. 000f423f, 000f423f => 001e847f (40000000 00000000)
+      addeo. 000f423f, ffffffff => 000f423f (40000000 20000000)
+      addeo. ffffffff, 00000000 => 00000000 (20000000 20000000)
+      addeo. ffffffff, 000f423f => 000f423f (40000000 20000000)
+      addeo. ffffffff, ffffffff => ffffffff (80000000 20000000)
+
+      subfe. 00000000, 00000000 => ffffffff (80000000 00000000)
+      subfe. 00000000, 000f423f => 000f423e (40000000 20000000)
+      subfe. 00000000, ffffffff => fffffffe (80000000 20000000)
+      subfe. 000f423f, 00000000 => fff0bdc0 (80000000 00000000)
+      subfe. 000f423f, 000f423f => ffffffff (80000000 00000000)
+      subfe. 000f423f, ffffffff => fff0bdbf (80000000 20000000)
+      subfe. ffffffff, 00000000 => 00000000 (20000000 00000000)
+      subfe. ffffffff, 000f423f => 000f423f (40000000 00000000)
+      subfe. ffffffff, ffffffff => ffffffff (80000000 00000000)
+      subfe. 00000000, 00000000 => 00000000 (20000000 20000000)
+      subfe. 00000000, 000f423f => 000f423f (40000000 20000000)
+      subfe. 00000000, ffffffff => ffffffff (80000000 20000000)
+      subfe. 000f423f, 00000000 => fff0bdc1 (80000000 00000000)
+      subfe. 000f423f, 000f423f => 00000000 (20000000 20000000)
+      subfe. 000f423f, ffffffff => fff0bdc0 (80000000 20000000)
+      subfe. ffffffff, 00000000 => 00000001 (40000000 00000000)
+      subfe. ffffffff, 000f423f => 000f4240 (40000000 00000000)
+      subfe. ffffffff, ffffffff => 00000000 (20000000 20000000)
+
+     subfeo. 00000000, 00000000 => ffffffff (80000000 00000000)
+     subfeo. 00000000, 000f423f => 000f423e (40000000 20000000)
+     subfeo. 00000000, ffffffff => fffffffe (80000000 20000000)
+     subfeo. 000f423f, 00000000 => fff0bdc0 (80000000 00000000)
+     subfeo. 000f423f, 000f423f => ffffffff (80000000 00000000)
+     subfeo. 000f423f, ffffffff => fff0bdbf (80000000 20000000)
+     subfeo. ffffffff, 00000000 => 00000000 (20000000 00000000)
+     subfeo. ffffffff, 000f423f => 000f423f (40000000 00000000)
+     subfeo. ffffffff, ffffffff => ffffffff (80000000 00000000)
+     subfeo. 00000000, 00000000 => 00000000 (20000000 20000000)
+     subfeo. 00000000, 000f423f => 000f423f (40000000 20000000)
+     subfeo. 00000000, ffffffff => ffffffff (80000000 20000000)
+     subfeo. 000f423f, 00000000 => fff0bdc1 (80000000 00000000)
+     subfeo. 000f423f, 000f423f => 00000000 (20000000 20000000)
+     subfeo. 000f423f, ffffffff => fff0bdc0 (80000000 20000000)
+     subfeo. ffffffff, 00000000 => 00000001 (40000000 00000000)
+     subfeo. ffffffff, 000f423f => 000f4240 (40000000 00000000)
+     subfeo. ffffffff, ffffffff => 00000000 (20000000 20000000)
+
+PPC integer logical insns with two args:
+         and 00000000, 00000000 => 00000000 (00000000 00000000)
+         and 00000000, 000f423f => 00000000 (00000000 00000000)
+         and 00000000, ffffffff => 00000000 (00000000 00000000)
+         and 000f423f, 00000000 => 00000000 (00000000 00000000)
+         and 000f423f, 000f423f => 000f423f (00000000 00000000)
+         and 000f423f, ffffffff => 000f423f (00000000 00000000)
+         and ffffffff, 00000000 => 00000000 (00000000 00000000)
+         and ffffffff, 000f423f => 000f423f (00000000 00000000)
+         and ffffffff, ffffffff => ffffffff (00000000 00000000)
+
+        andc 00000000, 00000000 => 00000000 (00000000 00000000)
+        andc 00000000, 000f423f => 00000000 (00000000 00000000)
+        andc 00000000, ffffffff => 00000000 (00000000 00000000)
+        andc 000f423f, 00000000 => 000f423f (00000000 00000000)
+        andc 000f423f, 000f423f => 00000000 (00000000 00000000)
+        andc 000f423f, ffffffff => 00000000 (00000000 00000000)
+        andc ffffffff, 00000000 => ffffffff (00000000 00000000)
+        andc ffffffff, 000f423f => fff0bdc0 (00000000 00000000)
+        andc ffffffff, ffffffff => 00000000 (00000000 00000000)
+
+         eqv 00000000, 00000000 => ffffffff (00000000 00000000)
+         eqv 00000000, 000f423f => fff0bdc0 (00000000 00000000)
+         eqv 00000000, ffffffff => 00000000 (00000000 00000000)
+         eqv 000f423f, 00000000 => fff0bdc0 (00000000 00000000)
+         eqv 000f423f, 000f423f => ffffffff (00000000 00000000)
+         eqv 000f423f, ffffffff => 000f423f (00000000 00000000)
+         eqv ffffffff, 00000000 => 00000000 (00000000 00000000)
+         eqv ffffffff, 000f423f => 000f423f (00000000 00000000)
+         eqv ffffffff, ffffffff => ffffffff (00000000 00000000)
+
+        nand 00000000, 00000000 => ffffffff (00000000 00000000)
+        nand 00000000, 000f423f => ffffffff (00000000 00000000)
+        nand 00000000, ffffffff => ffffffff (00000000 00000000)
+        nand 000f423f, 00000000 => ffffffff (00000000 00000000)
+        nand 000f423f, 000f423f => fff0bdc0 (00000000 00000000)
+        nand 000f423f, ffffffff => fff0bdc0 (00000000 00000000)
+        nand ffffffff, 00000000 => ffffffff (00000000 00000000)
+        nand ffffffff, 000f423f => fff0bdc0 (00000000 00000000)
+        nand ffffffff, ffffffff => 00000000 (00000000 00000000)
+
+         nor 00000000, 00000000 => ffffffff (00000000 00000000)
+         nor 00000000, 000f423f => fff0bdc0 (00000000 00000000)
+         nor 00000000, ffffffff => 00000000 (00000000 00000000)
+         nor 000f423f, 00000000 => fff0bdc0 (00000000 00000000)
+         nor 000f423f, 000f423f => fff0bdc0 (00000000 00000000)
+         nor 000f423f, ffffffff => 00000000 (00000000 00000000)
+         nor ffffffff, 00000000 => 00000000 (00000000 00000000)
+         nor ffffffff, 000f423f => 00000000 (00000000 00000000)
+         nor ffffffff, ffffffff => 00000000 (00000000 00000000)
+
+          or 00000000, 00000000 => 00000000 (00000000 00000000)
+          or 00000000, 000f423f => 000f423f (00000000 00000000)
+          or 00000000, ffffffff => ffffffff (00000000 00000000)
+          or 000f423f, 00000000 => 000f423f (00000000 00000000)
+          or 000f423f, 000f423f => 000f423f (00000000 00000000)
+          or 000f423f, ffffffff => ffffffff (00000000 00000000)
+          or ffffffff, 00000000 => ffffffff (00000000 00000000)
+          or ffffffff, 000f423f => ffffffff (00000000 00000000)
+          or ffffffff, ffffffff => ffffffff (00000000 00000000)
+
+         orc 00000000, 00000000 => ffffffff (00000000 00000000)
+         orc 00000000, 000f423f => fff0bdc0 (00000000 00000000)
+         orc 00000000, ffffffff => 00000000 (00000000 00000000)
+         orc 000f423f, 00000000 => ffffffff (00000000 00000000)
+         orc 000f423f, 000f423f => ffffffff (00000000 00000000)
+         orc 000f423f, ffffffff => 000f423f (00000000 00000000)
+         orc ffffffff, 00000000 => ffffffff (00000000 00000000)
+         orc ffffffff, 000f423f => ffffffff (00000000 00000000)
+         orc ffffffff, ffffffff => ffffffff (00000000 00000000)
+
+         xor 00000000, 00000000 => 00000000 (00000000 00000000)
+         xor 00000000, 000f423f => 000f423f (00000000 00000000)
+         xor 00000000, ffffffff => ffffffff (00000000 00000000)
+         xor 000f423f, 00000000 => 000f423f (00000000 00000000)
+         xor 000f423f, 000f423f => 00000000 (00000000 00000000)
+         xor 000f423f, ffffffff => fff0bdc0 (00000000 00000000)
+         xor ffffffff, 00000000 => ffffffff (00000000 00000000)
+         xor ffffffff, 000f423f => fff0bdc0 (00000000 00000000)
+         xor ffffffff, ffffffff => 00000000 (00000000 00000000)
+
+         slw 00000000, 00000000 => 00000000 (00000000 00000000)
+         slw 00000000, 000f423f => 00000000 (00000000 00000000)
+         slw 00000000, ffffffff => 00000000 (00000000 00000000)
+         slw 000f423f, 00000000 => 000f423f (00000000 00000000)
+         slw 000f423f, 000f423f => 00000000 (00000000 00000000)
+         slw 000f423f, ffffffff => 00000000 (00000000 00000000)
+         slw ffffffff, 00000000 => ffffffff (00000000 00000000)
+         slw ffffffff, 000f423f => 00000000 (00000000 00000000)
+         slw ffffffff, ffffffff => 00000000 (00000000 00000000)
+
+        sraw 00000000, 00000000 => 00000000 (00000000 00000000)
+        sraw 00000000, 000f423f => 00000000 (00000000 00000000)
+        sraw 00000000, ffffffff => 00000000 (00000000 00000000)
+        sraw 000f423f, 00000000 => 000f423f (00000000 00000000)
+        sraw 000f423f, 000f423f => 00000000 (00000000 00000000)
+        sraw 000f423f, ffffffff => 00000000 (00000000 00000000)
+        sraw ffffffff, 00000000 => ffffffff (00000000 00000000)
+        sraw ffffffff, 000f423f => ffffffff (00000000 20000000)
+        sraw ffffffff, ffffffff => ffffffff (00000000 20000000)
+
+         srw 00000000, 00000000 => 00000000 (00000000 00000000)
+         srw 00000000, 000f423f => 00000000 (00000000 00000000)
+         srw 00000000, ffffffff => 00000000 (00000000 00000000)
+         srw 000f423f, 00000000 => 000f423f (00000000 00000000)
+         srw 000f423f, 000f423f => 00000000 (00000000 00000000)
+         srw 000f423f, ffffffff => 00000000 (00000000 00000000)
+         srw ffffffff, 00000000 => ffffffff (00000000 00000000)
+         srw ffffffff, 000f423f => 00000000 (00000000 00000000)
+         srw ffffffff, ffffffff => 00000000 (00000000 00000000)
+
+PPC integer logical insns with two args with flags update:
+        and. 00000000, 00000000 => 00000000 (20000000 00000000)
+        and. 00000000, 000f423f => 00000000 (20000000 00000000)
+        and. 00000000, ffffffff => 00000000 (20000000 00000000)
+        and. 000f423f, 00000000 => 00000000 (20000000 00000000)
+        and. 000f423f, 000f423f => 000f423f (40000000 00000000)
+        and. 000f423f, ffffffff => 000f423f (40000000 00000000)
+        and. ffffffff, 00000000 => 00000000 (20000000 00000000)
+        and. ffffffff, 000f423f => 000f423f (40000000 00000000)
+        and. ffffffff, ffffffff => ffffffff (80000000 00000000)
+
+       andc. 00000000, 00000000 => 00000000 (20000000 00000000)
+       andc. 00000000, 000f423f => 00000000 (20000000 00000000)
+       andc. 00000000, ffffffff => 00000000 (20000000 00000000)
+       andc. 000f423f, 00000000 => 000f423f (40000000 00000000)
+       andc. 000f423f, 000f423f => 00000000 (20000000 00000000)
+       andc. 000f423f, ffffffff => 00000000 (20000000 00000000)
+       andc. ffffffff, 00000000 => ffffffff (80000000 00000000)
+       andc. ffffffff, 000f423f => fff0bdc0 (80000000 00000000)
+       andc. ffffffff, ffffffff => 00000000 (20000000 00000000)
+
+        eqv. 00000000, 00000000 => ffffffff (80000000 00000000)
+        eqv. 00000000, 000f423f => fff0bdc0 (80000000 00000000)
+        eqv. 00000000, ffffffff => 00000000 (20000000 00000000)
+        eqv. 000f423f, 00000000 => fff0bdc0 (80000000 00000000)
+        eqv. 000f423f, 000f423f => ffffffff (80000000 00000000)
+        eqv. 000f423f, ffffffff => 000f423f (40000000 00000000)
+        eqv. ffffffff, 00000000 => 00000000 (20000000 00000000)
+        eqv. ffffffff, 000f423f => 000f423f (40000000 00000000)
+        eqv. ffffffff, ffffffff => ffffffff (80000000 00000000)
+
+       nand. 00000000, 00000000 => ffffffff (80000000 00000000)
+       nand. 00000000, 000f423f => ffffffff (80000000 00000000)
+       nand. 00000000, ffffffff => ffffffff (80000000 00000000)
+       nand. 000f423f, 00000000 => ffffffff (80000000 00000000)
+       nand. 000f423f, 000f423f => fff0bdc0 (80000000 00000000)
+       nand. 000f423f, ffffffff => fff0bdc0 (80000000 00000000)
+       nand. ffffffff, 00000000 => ffffffff (80000000 00000000)
+       nand. ffffffff, 000f423f => fff0bdc0 (80000000 00000000)
+       nand. ffffffff, ffffffff => 00000000 (20000000 00000000)
+
+        nor. 00000000, 00000000 => ffffffff (80000000 00000000)
+        nor. 00000000, 000f423f => fff0bdc0 (80000000 00000000)
+        nor. 00000000, ffffffff => 00000000 (20000000 00000000)
+        nor. 000f423f, 00000000 => fff0bdc0 (80000000 00000000)
+        nor. 000f423f, 000f423f => fff0bdc0 (80000000 00000000)
+        nor. 000f423f, ffffffff => 00000000 (20000000 00000000)
+        nor. ffffffff, 00000000 => 00000000 (20000000 00000000)
+        nor. ffffffff, 000f423f => 00000000 (20000000 00000000)
+        nor. ffffffff, ffffffff => 00000000 (20000000 00000000)
+
+         or. 00000000, 00000000 => 00000000 (20000000 00000000)
+         or. 00000000, 000f423f => 000f423f (40000000 00000000)
+         or. 00000000, ffffffff => ffffffff (80000000 00000000)
+         or. 000f423f, 00000000 => 000f423f (40000000 00000000)
+         or. 000f423f, 000f423f => 000f423f (40000000 00000000)
+         or. 000f423f, ffffffff => ffffffff (80000000 00000000)
+         or. ffffffff, 00000000 => ffffffff (80000000 00000000)
+         or. ffffffff, 000f423f => ffffffff (80000000 00000000)
+         or. ffffffff, ffffffff => ffffffff (80000000 00000000)
+
+        orc. 00000000, 00000000 => ffffffff (80000000 00000000)
+        orc. 00000000, 000f423f => fff0bdc0 (80000000 00000000)
+        orc. 00000000, ffffffff => 00000000 (20000000 00000000)
+        orc. 000f423f, 00000000 => ffffffff (80000000 00000000)
+        orc. 000f423f, 000f423f => ffffffff (80000000 00000000)
+        orc. 000f423f, ffffffff => 000f423f (40000000 00000000)
+        orc. ffffffff, 00000000 => ffffffff (80000000 00000000)
+        orc. ffffffff, 000f423f => ffffffff (80000000 00000000)
+        orc. ffffffff, ffffffff => ffffffff (80000000 00000000)
+
+        xor. 00000000, 00000000 => 00000000 (20000000 00000000)
+        xor. 00000000, 000f423f => 000f423f (40000000 00000000)
+        xor. 00000000, ffffffff => ffffffff (80000000 00000000)
+        xor. 000f423f, 00000000 => 000f423f (40000000 00000000)
+        xor. 000f423f, 000f423f => 00000000 (20000000 00000000)
+        xor. 000f423f, ffffffff => fff0bdc0 (80000000 00000000)
+        xor. ffffffff, 00000000 => ffffffff (80000000 00000000)
+        xor. ffffffff, 000f423f => fff0bdc0 (80000000 00000000)
+        xor. ffffffff, ffffffff => 00000000 (20000000 00000000)
+
+        slw. 00000000, 00000000 => 00000000 (20000000 00000000)
+        slw. 00000000, 000f423f => 00000000 (20000000 00000000)
+        slw. 00000000, ffffffff => 00000000 (20000000 00000000)
+        slw. 000f423f, 00000000 => 000f423f (40000000 00000000)
+        slw. 000f423f, 000f423f => 00000000 (20000000 00000000)
+        slw. 000f423f, ffffffff => 00000000 (20000000 00000000)
+        slw. ffffffff, 00000000 => ffffffff (80000000 00000000)
+        slw. ffffffff, 000f423f => 00000000 (20000000 00000000)
+        slw. ffffffff, ffffffff => 00000000 (20000000 00000000)
+
+       sraw. 00000000, 00000000 => 00000000 (20000000 00000000)
+       sraw. 00000000, 000f423f => 00000000 (20000000 00000000)
+       sraw. 00000000, ffffffff => 00000000 (20000000 00000000)
+       sraw. 000f423f, 00000000 => 000f423f (40000000 00000000)
+       sraw. 000f423f, 000f423f => 00000000 (20000000 00000000)
+       sraw. 000f423f, ffffffff => 00000000 (20000000 00000000)
+       sraw. ffffffff, 00000000 => ffffffff (80000000 00000000)
+       sraw. ffffffff, 000f423f => ffffffff (80000000 20000000)
+       sraw. ffffffff, ffffffff => ffffffff (80000000 20000000)
+
+        srw. 00000000, 00000000 => 00000000 (20000000 00000000)
+        srw. 00000000, 000f423f => 00000000 (20000000 00000000)
+        srw. 00000000, ffffffff => 00000000 (20000000 00000000)
+        srw. 000f423f, 00000000 => 000f423f (40000000 00000000)
+        srw. 000f423f, 000f423f => 00000000 (20000000 00000000)
+        srw. 000f423f, ffffffff => 00000000 (20000000 00000000)
+        srw. ffffffff, 00000000 => ffffffff (80000000 00000000)
+        srw. ffffffff, 000f423f => 00000000 (20000000 00000000)
+        srw. ffffffff, ffffffff => 00000000 (20000000 00000000)
+
+PPC integer compare insns (two args):
+         cmp 00000000, 00000000 => 00000000 (00200000 00000000)
+         cmp 00000000, 000f423f => 00000000 (00800000 00000000)
+         cmp 00000000, ffffffff => 00000000 (00400000 00000000)
+         cmp 000f423f, 00000000 => 00000000 (00400000 00000000)
+         cmp 000f423f, 000f423f => 00000000 (00200000 00000000)
+         cmp 000f423f, ffffffff => 00000000 (00400000 00000000)
+         cmp ffffffff, 00000000 => 00000000 (00800000 00000000)
+         cmp ffffffff, 000f423f => 00000000 (00800000 00000000)
+         cmp ffffffff, ffffffff => 00000000 (00200000 00000000)
+
+        cmpl 00000000, 00000000 => 00000000 (00200000 00000000)
+        cmpl 00000000, 000f423f => 00000000 (00800000 00000000)
+        cmpl 00000000, ffffffff => 00000000 (00800000 00000000)
+        cmpl 000f423f, 00000000 => 00000000 (00400000 00000000)
+        cmpl 000f423f, 000f423f => 00000000 (00200000 00000000)
+        cmpl 000f423f, ffffffff => 00000000 (00800000 00000000)
+        cmpl ffffffff, 00000000 => 00000000 (00400000 00000000)
+        cmpl ffffffff, 000f423f => 00000000 (00400000 00000000)
+        cmpl ffffffff, ffffffff => 00000000 (00200000 00000000)
+
+PPC integer compare with immediate insns (two args):
+        cmpi 00000000, 00000000 => 00000000 (00200000 00000000)
+        cmpi 00000000, 000003e7 => 00000000 (00800000 00000000)
+        cmpi 00000000, 0000ffff => 00000000 (00400000 00000000)
+        cmpi 000f423f, 00000000 => 00000000 (00400000 00000000)
+        cmpi 000f423f, 000003e7 => 00000000 (00400000 00000000)
+        cmpi 000f423f, 0000ffff => 00000000 (00400000 00000000)
+        cmpi ffffffff, 00000000 => 00000000 (00800000 00000000)
+        cmpi ffffffff, 000003e7 => 00000000 (00800000 00000000)
+        cmpi ffffffff, 0000ffff => 00000000 (00200000 00000000)
+
+       cmpli 00000000, 00000000 => 00000000 (00200000 00000000)
+       cmpli 00000000, 000003e7 => 00000000 (00800000 00000000)
+       cmpli 00000000, 0000ffff => 00000000 (00800000 00000000)
+       cmpli 000f423f, 00000000 => 00000000 (00400000 00000000)
+       cmpli 000f423f, 000003e7 => 00000000 (00400000 00000000)
+       cmpli 000f423f, 0000ffff => 00000000 (00400000 00000000)
+       cmpli ffffffff, 00000000 => 00000000 (00400000 00000000)
+       cmpli ffffffff, 000003e7 => 00000000 (00400000 00000000)
+       cmpli ffffffff, 0000ffff => 00000000 (00400000 00000000)
+
+PPC integer arith insns
+    with one register + one 16 bits immediate args:
+        addi 00000000, 00000000 => 00000000 (00000000 00000000)
+        addi 00000000, 000003e7 => 000003e7 (00000000 00000000)
+        addi 00000000, 0000ffff => ffffffff (00000000 00000000)
+        addi 000f423f, 00000000 => 000f423f (00000000 00000000)
+        addi 000f423f, 000003e7 => 000f4626 (00000000 00000000)
+        addi 000f423f, 0000ffff => 000f423e (00000000 00000000)
+        addi ffffffff, 00000000 => ffffffff (00000000 00000000)
+        addi ffffffff, 000003e7 => 000003e6 (00000000 00000000)
+        addi ffffffff, 0000ffff => fffffffe (00000000 00000000)
+
+       addic 00000000, 00000000 => 00000000 (00000000 00000000)
+       addic 00000000, 000003e7 => 000003e7 (00000000 00000000)
+       addic 00000000, 0000ffff => ffffffff (00000000 00000000)
+       addic 000f423f, 00000000 => 000f423f (00000000 00000000)
+       addic 000f423f, 000003e7 => 000f4626 (00000000 00000000)
+       addic 000f423f, 0000ffff => 000f423e (00000000 20000000)
+       addic ffffffff, 00000000 => ffffffff (00000000 00000000)
+       addic ffffffff, 000003e7 => 000003e6 (00000000 20000000)
+       addic ffffffff, 0000ffff => fffffffe (00000000 20000000)
+
+       addis 00000000, 00000000 => 00000000 (00000000 00000000)
+       addis 00000000, 000003e7 => 03e70000 (00000000 00000000)
+       addis 00000000, 0000ffff => ffff0000 (00000000 00000000)
+       addis 000f423f, 00000000 => 000f423f (00000000 00000000)
+       addis 000f423f, 000003e7 => 03f6423f (00000000 00000000)
+       addis 000f423f, 0000ffff => 000e423f (00000000 00000000)
+       addis ffffffff, 00000000 => ffffffff (00000000 00000000)
+       addis ffffffff, 000003e7 => 03e6ffff (00000000 00000000)
+       addis ffffffff, 0000ffff => fffeffff (00000000 00000000)
+
+       mulli 00000000, 00000000 => 00000000 (00000000 00000000)
+       mulli 00000000, 000003e7 => 00000000 (00000000 00000000)
+       mulli 00000000, 0000ffff => 00000000 (00000000 00000000)
+       mulli 000f423f, 00000000 => 00000000 (00000000 00000000)
+       mulli 000f423f, 000003e7 => 3b8b83d9 (00000000 00000000)
+       mulli 000f423f, 0000ffff => fff0bdc1 (00000000 00000000)
+       mulli ffffffff, 00000000 => 00000000 (00000000 00000000)
+       mulli ffffffff, 000003e7 => fffffc19 (00000000 00000000)
+       mulli ffffffff, 0000ffff => 00000001 (00000000 00000000)
+
+      subfic 00000000, 00000000 => 00000000 (00000000 20000000)
+      subfic 00000000, 000003e7 => 000003e7 (00000000 20000000)
+      subfic 00000000, 0000ffff => ffffffff (00000000 20000000)
+      subfic 000f423f, 00000000 => fff0bdc1 (00000000 00000000)
+      subfic 000f423f, 000003e7 => fff0c1a8 (00000000 00000000)
+      subfic 000f423f, 0000ffff => fff0bdc0 (00000000 20000000)
+      subfic ffffffff, 00000000 => 00000001 (00000000 00000000)
+      subfic ffffffff, 000003e7 => 000003e8 (00000000 00000000)
+      subfic ffffffff, 0000ffff => 00000000 (00000000 20000000)
+
+PPC integer arith insns
+    with one register + one 16 bits immediate args with flags update:
+      addic. 00000000, 00000000 => 00000000 (20000000 00000000)
+      addic. 00000000, 000003e7 => 000003e7 (40000000 00000000)
+      addic. 00000000, 0000ffff => ffffffff (80000000 00000000)
+      addic. 000f423f, 00000000 => 000f423f (40000000 00000000)
+      addic. 000f423f, 000003e7 => 000f4626 (40000000 00000000)
+      addic. 000f423f, 0000ffff => 000f423e (40000000 20000000)
+      addic. ffffffff, 00000000 => ffffffff (80000000 00000000)
+      addic. ffffffff, 000003e7 => 000003e6 (40000000 20000000)
+      addic. ffffffff, 0000ffff => fffffffe (80000000 20000000)
+
+PPC integer logical insns
+    with one register + one 16 bits immediate args:
+         ori 00000000, 00000000 => 00000000 (00000000 00000000)
+         ori 00000000, 000003e7 => 000003e7 (00000000 00000000)
+         ori 00000000, 0000ffff => 0000ffff (00000000 00000000)
+         ori 000f423f, 00000000 => 000f423f (00000000 00000000)
+         ori 000f423f, 000003e7 => 000f43ff (00000000 00000000)
+         ori 000f423f, 0000ffff => 000fffff (00000000 00000000)
+         ori ffffffff, 00000000 => ffffffff (00000000 00000000)
+         ori ffffffff, 000003e7 => ffffffff (00000000 00000000)
+         ori ffffffff, 0000ffff => ffffffff (00000000 00000000)
+
+        oris 00000000, 00000000 => 00000000 (00000000 00000000)
+        oris 00000000, 000003e7 => 03e70000 (00000000 00000000)
+        oris 00000000, 0000ffff => ffff0000 (00000000 00000000)
+        oris 000f423f, 00000000 => 000f423f (00000000 00000000)
+        oris 000f423f, 000003e7 => 03ef423f (00000000 00000000)
+        oris 000f423f, 0000ffff => ffff423f (00000000 00000000)
+        oris ffffffff, 00000000 => ffffffff (00000000 00000000)
+        oris ffffffff, 000003e7 => ffffffff (00000000 00000000)
+        oris ffffffff, 0000ffff => ffffffff (00000000 00000000)
+
+        xori 00000000, 00000000 => 00000000 (00000000 00000000)
+        xori 00000000, 000003e7 => 000003e7 (00000000 00000000)
+        xori 00000000, 0000ffff => 0000ffff (00000000 00000000)
+        xori 000f423f, 00000000 => 000f423f (00000000 00000000)
+        xori 000f423f, 000003e7 => 000f41d8 (00000000 00000000)
+        xori 000f423f, 0000ffff => 000fbdc0 (00000000 00000000)
+        xori ffffffff, 00000000 => ffffffff (00000000 00000000)
+        xori ffffffff, 000003e7 => fffffc18 (00000000 00000000)
+        xori ffffffff, 0000ffff => ffff0000 (00000000 00000000)
+
+       xoris 00000000, 00000000 => 00000000 (00000000 00000000)
+       xoris 00000000, 000003e7 => 03e70000 (00000000 00000000)
+       xoris 00000000, 0000ffff => ffff0000 (00000000 00000000)
+       xoris 000f423f, 00000000 => 000f423f (00000000 00000000)
+       xoris 000f423f, 000003e7 => 03e8423f (00000000 00000000)
+       xoris 000f423f, 0000ffff => fff0423f (00000000 00000000)
+       xoris ffffffff, 00000000 => ffffffff (00000000 00000000)
+       xoris ffffffff, 000003e7 => fc18ffff (00000000 00000000)
+       xoris ffffffff, 0000ffff => 0000ffff (00000000 00000000)
+
+PPC integer logical insns
+    with one register + one 16 bits immediate args with flags update:
+       andi. 00000000, 00000000 => 00000000 (20000000 00000000)
+       andi. 00000000, 000003e7 => 00000000 (20000000 00000000)
+       andi. 00000000, 0000ffff => 00000000 (20000000 00000000)
+       andi. 000f423f, 00000000 => 00000000 (20000000 00000000)
+       andi. 000f423f, 000003e7 => 00000227 (40000000 00000000)
+       andi. 000f423f, 0000ffff => 0000423f (40000000 00000000)
+       andi. ffffffff, 00000000 => 00000000 (20000000 00000000)
+       andi. ffffffff, 000003e7 => 000003e7 (40000000 00000000)
+       andi. ffffffff, 0000ffff => 0000ffff (40000000 00000000)
+
+      andis. 00000000, 00000000 => 00000000 (20000000 00000000)
+      andis. 00000000, 000003e7 => 00000000 (20000000 00000000)
+      andis. 00000000, 0000ffff => 00000000 (20000000 00000000)
+      andis. 000f423f, 00000000 => 00000000 (20000000 00000000)
+      andis. 000f423f, 000003e7 => 00070000 (40000000 00000000)
+      andis. 000f423f, 0000ffff => 000f0000 (40000000 00000000)
+      andis. ffffffff, 00000000 => 00000000 (20000000 00000000)
+      andis. ffffffff, 000003e7 => 03e70000 (40000000 00000000)
+      andis. ffffffff, 0000ffff => ffff0000 (80000000 00000000)
+
+PPC condition register logical insns - two operands:
+       crand 00000000, 00000000 => ffff0000 (00000000 00000000)
+       crand 00000000, 000f423f => ffff0000 (00000000 00000000)
+       crand 00000000, ffffffff => ffff0000 (00000000 00000000)
+       crand 000f423f, 00000000 => ffff0000 (00000000 00000000)
+       crand 000f423f, 000f423f => ffff0000 (00000000 00000000)
+       crand 000f423f, ffffffff => ffff0000 (00000000 00000000)
+       crand ffffffff, 00000000 => ffff0000 (00000000 00000000)
+       crand ffffffff, 000f423f => ffff0000 (00000000 00000000)
+       crand ffffffff, ffffffff => ffff0000 (00000000 00000000)
+
+      crandc 00000000, 00000000 => ffff0000 (00000000 00000000)
+      crandc 00000000, 000f423f => ffff0000 (00000000 00000000)
+      crandc 00000000, ffffffff => ffff0000 (00000000 00000000)
+      crandc 000f423f, 00000000 => ffff0000 (00000000 00000000)
+      crandc 000f423f, 000f423f => ffff0000 (00000000 00000000)
+      crandc 000f423f, ffffffff => ffff0000 (00000000 00000000)
+      crandc ffffffff, 00000000 => ffff0000 (00000000 00000000)
+      crandc ffffffff, 000f423f => ffff0000 (00000000 00000000)
+      crandc ffffffff, ffffffff => ffff0000 (00000000 00000000)
+
+       creqv 00000000, 00000000 => ffff0000 (00004000 00000000)
+       creqv 00000000, 000f423f => ffff0000 (00004000 00000000)
+       creqv 00000000, ffffffff => ffff0000 (00004000 00000000)
+       creqv 000f423f, 00000000 => ffff0000 (00004000 00000000)
+       creqv 000f423f, 000f423f => ffff0000 (00004000 00000000)
+       creqv 000f423f, ffffffff => ffff0000 (00004000 00000000)
+       creqv ffffffff, 00000000 => ffff0000 (00004000 00000000)
+       creqv ffffffff, 000f423f => ffff0000 (00004000 00000000)
+       creqv ffffffff, ffffffff => ffff0000 (00004000 00000000)
+
+      crnand 00000000, 00000000 => ffff0000 (00004000 00000000)
+      crnand 00000000, 000f423f => ffff0000 (00004000 00000000)
+      crnand 00000000, ffffffff => ffff0000 (00004000 00000000)
+      crnand 000f423f, 00000000 => ffff0000 (00004000 00000000)
+      crnand 000f423f, 000f423f => ffff0000 (00004000 00000000)
+      crnand 000f423f, ffffffff => ffff0000 (00004000 00000000)
+      crnand ffffffff, 00000000 => ffff0000 (00004000 00000000)
+      crnand ffffffff, 000f423f => ffff0000 (00004000 00000000)
+      crnand ffffffff, ffffffff => ffff0000 (00004000 00000000)
+
+       crnor 00000000, 00000000 => ffff0000 (00004000 00000000)
+       crnor 00000000, 000f423f => ffff0000 (00004000 00000000)
+       crnor 00000000, ffffffff => ffff0000 (00004000 00000000)
+       crnor 000f423f, 00000000 => ffff0000 (00004000 00000000)
+       crnor 000f423f, 000f423f => ffff0000 (00004000 00000000)
+       crnor 000f423f, ffffffff => ffff0000 (00004000 00000000)
+       crnor ffffffff, 00000000 => ffff0000 (00004000 00000000)
+       crnor ffffffff, 000f423f => ffff0000 (00004000 00000000)
+       crnor ffffffff, ffffffff => ffff0000 (00004000 00000000)
+
+        cror 00000000, 00000000 => ffff0000 (00000000 00000000)
+        cror 00000000, 000f423f => ffff0000 (00000000 00000000)
+        cror 00000000, ffffffff => ffff0000 (00000000 00000000)
+        cror 000f423f, 00000000 => ffff0000 (00000000 00000000)
+        cror 000f423f, 000f423f => ffff0000 (00000000 00000000)
+        cror 000f423f, ffffffff => ffff0000 (00000000 00000000)
+        cror ffffffff, 00000000 => ffff0000 (00000000 00000000)
+        cror ffffffff, 000f423f => ffff0000 (00000000 00000000)
+        cror ffffffff, ffffffff => ffff0000 (00000000 00000000)
+
+       crorc 00000000, 00000000 => ffff0000 (00004000 00000000)
+       crorc 00000000, 000f423f => ffff0000 (00004000 00000000)
+       crorc 00000000, ffffffff => ffff0000 (00004000 00000000)
+       crorc 000f423f, 00000000 => ffff0000 (00004000 00000000)
+       crorc 000f423f, 000f423f => ffff0000 (00004000 00000000)
+       crorc 000f423f, ffffffff => ffff0000 (00004000 00000000)
+       crorc ffffffff, 00000000 => ffff0000 (00004000 00000000)
+       crorc ffffffff, 000f423f => ffff0000 (00004000 00000000)
+       crorc ffffffff, ffffffff => ffff0000 (00004000 00000000)
+
+       crxor 00000000, 00000000 => ffff0000 (00000000 00000000)
+       crxor 00000000, 000f423f => ffff0000 (00000000 00000000)
+       crxor 00000000, ffffffff => ffff0000 (00000000 00000000)
+       crxor 000f423f, 00000000 => ffff0000 (00000000 00000000)
+       crxor 000f423f, 000f423f => ffff0000 (00000000 00000000)
+       crxor 000f423f, ffffffff => ffff0000 (00000000 00000000)
+       crxor ffffffff, 00000000 => ffff0000 (00000000 00000000)
+       crxor ffffffff, 000f423f => ffff0000 (00000000 00000000)
+       crxor ffffffff, ffffffff => ffff0000 (00000000 00000000)
+
+PPC integer arith insns with one arg and carry:
+       addme 00000000 => ffffffff (00000000 00000000)
+       addme 000f423f => 000f423e (00000000 20000000)
+       addme ffffffff => fffffffe (00000000 20000000)
+       addme 00000000 => 00000000 (00000000 20000000)
+       addme 000f423f => 000f423f (00000000 20000000)
+       addme ffffffff => ffffffff (00000000 20000000)
+
+      addmeo 00000000 => ffffffff (00000000 00000000)
+      addmeo 000f423f => 000f423e (00000000 20000000)
+      addmeo ffffffff => fffffffe (00000000 20000000)
+      addmeo 00000000 => 00000000 (00000000 20000000)
+      addmeo 000f423f => 000f423f (00000000 20000000)
+      addmeo ffffffff => ffffffff (00000000 20000000)
+
+       addze 00000000 => 00000000 (00000000 00000000)
+       addze 000f423f => 000f423f (00000000 00000000)
+       addze ffffffff => ffffffff (00000000 00000000)
+       addze 00000000 => 00000001 (00000000 00000000)
+       addze 000f423f => 000f4240 (00000000 00000000)
+       addze ffffffff => 00000000 (00000000 20000000)
+
+      addzeo 00000000 => 00000000 (00000000 00000000)
+      addzeo 000f423f => 000f423f (00000000 00000000)
+      addzeo ffffffff => ffffffff (00000000 00000000)
+      addzeo 00000000 => 00000001 (00000000 00000000)
+      addzeo 000f423f => 000f4240 (00000000 00000000)
+      addzeo ffffffff => 00000000 (00000000 20000000)
+
+      subfme 00000000 => fffffffe (00000000 20000000)
+      subfme 000f423f => fff0bdbf (00000000 20000000)
+      subfme ffffffff => ffffffff (00000000 00000000)
+      subfme 00000000 => ffffffff (00000000 20000000)
+      subfme 000f423f => fff0bdc0 (00000000 20000000)
+      subfme ffffffff => 00000000 (00000000 20000000)
+
+     subfmeo 00000000 => fffffffe (00000000 20000000)
+     subfmeo 000f423f => fff0bdbf (00000000 20000000)
+     subfmeo ffffffff => ffffffff (00000000 00000000)
+     subfmeo 00000000 => ffffffff (00000000 20000000)
+     subfmeo 000f423f => fff0bdc0 (00000000 20000000)
+     subfmeo ffffffff => 00000000 (00000000 20000000)
+
+      subfze 00000000 => ffffffff (00000000 00000000)
+      subfze 000f423f => fff0bdc0 (00000000 00000000)
+      subfze ffffffff => 00000000 (00000000 00000000)
+      subfze 00000000 => 00000000 (00000000 20000000)
+      subfze 000f423f => fff0bdc1 (00000000 00000000)
+      subfze ffffffff => 00000001 (00000000 00000000)
+
+     subfzeo 00000000 => ffffffff (00000000 00000000)
+     subfzeo 000f423f => fff0bdc0 (00000000 00000000)
+     subfzeo ffffffff => 00000000 (00000000 00000000)
+     subfzeo 00000000 => 00000000 (00000000 20000000)
+     subfzeo 000f423f => fff0bdc1 (00000000 00000000)
+     subfzeo ffffffff => 00000001 (00000000 00000000)
+
+PPC integer arith insns with one arg and carry with flags update:
+      addme. 00000000 => ffffffff (80000000 00000000)
+      addme. 000f423f => 000f423e (40000000 20000000)
+      addme. ffffffff => fffffffe (80000000 20000000)
+      addme. 00000000 => 00000000 (20000000 20000000)
+      addme. 000f423f => 000f423f (40000000 20000000)
+      addme. ffffffff => ffffffff (80000000 20000000)
+
+     addmeo. 00000000 => ffffffff (80000000 00000000)
+     addmeo. 000f423f => 000f423e (40000000 20000000)
+     addmeo. ffffffff => fffffffe (80000000 20000000)
+     addmeo. 00000000 => 00000000 (20000000 20000000)
+     addmeo. 000f423f => 000f423f (40000000 20000000)
+     addmeo. ffffffff => ffffffff (80000000 20000000)
+
+      addze. 00000000 => 00000000 (20000000 00000000)
+      addze. 000f423f => 000f423f (40000000 00000000)
+      addze. ffffffff => ffffffff (80000000 00000000)
+      addze. 00000000 => 00000001 (40000000 00000000)
+      addze. 000f423f => 000f4240 (40000000 00000000)
+      addze. ffffffff => 00000000 (20000000 20000000)
+
+     addzeo. 00000000 => 00000000 (20000000 00000000)
+     addzeo. 000f423f => 000f423f (40000000 00000000)
+     addzeo. ffffffff => ffffffff (80000000 00000000)
+     addzeo. 00000000 => 00000001 (40000000 00000000)
+     addzeo. 000f423f => 000f4240 (40000000 00000000)
+     addzeo. ffffffff => 00000000 (20000000 20000000)
+
+     subfme. 00000000 => fffffffe (80000000 20000000)
+     subfme. 000f423f => fff0bdbf (80000000 20000000)
+     subfme. ffffffff => ffffffff (80000000 00000000)
+     subfme. 00000000 => ffffffff (80000000 20000000)
+     subfme. 000f423f => fff0bdc0 (80000000 20000000)
+     subfme. ffffffff => 00000000 (20000000 20000000)
+
+    subfmeo. 00000000 => fffffffe (80000000 20000000)
+    subfmeo. 000f423f => fff0bdbf (80000000 20000000)
+    subfmeo. ffffffff => ffffffff (80000000 00000000)
+    subfmeo. 00000000 => ffffffff (80000000 20000000)
+    subfmeo. 000f423f => fff0bdc0 (80000000 20000000)
+    subfmeo. ffffffff => 00000000 (20000000 20000000)
+
+     subfze. 00000000 => ffffffff (80000000 00000000)
+     subfze. 000f423f => fff0bdc0 (80000000 00000000)
+     subfze. ffffffff => 00000000 (20000000 00000000)
+     subfze. 00000000 => 00000000 (20000000 20000000)
+     subfze. 000f423f => fff0bdc1 (80000000 00000000)
+     subfze. ffffffff => 00000001 (40000000 00000000)
+
+    subfzeo. 00000000 => ffffffff (80000000 00000000)
+    subfzeo. 000f423f => fff0bdc0 (80000000 00000000)
+    subfzeo. ffffffff => 00000000 (20000000 00000000)
+    subfzeo. 00000000 => 00000000 (20000000 20000000)
+    subfzeo. 000f423f => fff0bdc1 (80000000 00000000)
+    subfzeo. ffffffff => 00000001 (40000000 00000000)
+
+PPC integer logical insns with one arg:
+      cntlzw 00000000 => 00000020 (00000000 00000000)
+      cntlzw 000f423f => 0000000c (00000000 00000000)
+      cntlzw ffffffff => 00000000 (00000000 00000000)
+
+       extsb 00000000 => 00000000 (00000000 00000000)
+       extsb 000f423f => 0000003f (00000000 00000000)
+       extsb ffffffff => ffffffff (00000000 00000000)
+
+       extsh 00000000 => 00000000 (00000000 00000000)
+       extsh 000f423f => 0000423f (00000000 00000000)
+       extsh ffffffff => ffffffff (00000000 00000000)
+
+         neg 00000000 => 00000000 (00000000 00000000)
+         neg 000f423f => fff0bdc1 (00000000 00000000)
+         neg ffffffff => 00000001 (00000000 00000000)
+
+        nego 00000000 => 00000000 (00000000 00000000)
+        nego 000f423f => fff0bdc1 (00000000 00000000)
+        nego ffffffff => 00000001 (00000000 00000000)
+
+PPC integer logical insns with one arg with flags update:
+     cntlzw. 00000000 => 00000020 (40000000 00000000)
+     cntlzw. 000f423f => 0000000c (40000000 00000000)
+     cntlzw. ffffffff => 00000000 (20000000 00000000)
+
+      extsb. 00000000 => 00000000 (20000000 00000000)
+      extsb. 000f423f => 0000003f (40000000 00000000)
+      extsb. ffffffff => ffffffff (80000000 00000000)
+
+      extsh. 00000000 => 00000000 (20000000 00000000)
+      extsh. 000f423f => 0000423f (40000000 00000000)
+      extsh. ffffffff => ffffffff (80000000 00000000)
+
+        neg. 00000000 => 00000000 (20000000 00000000)
+        neg. 000f423f => fff0bdc1 (80000000 00000000)
+        neg. ffffffff => 00000001 (40000000 00000000)
+
+       nego. 00000000 => 00000000 (20000000 00000000)
+       nego. 000f423f => fff0bdc1 (80000000 00000000)
+       nego. ffffffff => 00000001 (40000000 00000000)
+
+PPC logical insns with special forms:
+      rlwimi 00000000, 0, 0, 0 => 00000001 (00000000 00000000)
+      rlwimi 00000000, 0, 0, 31 => 00000000 (00000000 00000000)
+      rlwimi 00000000, 0, 31, 0 => 00000000 (00000000 00000000)
+      rlwimi 00000000, 0, 31, 31 => 00000000 (00000000 00000000)
+      rlwimi 00000000, 31, 0, 0 => 00000000 (00000000 00000000)
+      rlwimi 00000000, 31, 0, 31 => 00000000 (00000000 00000000)
+      rlwimi 00000000, 31, 31, 0 => 00000000 (00000000 00000000)
+      rlwimi 00000000, 31, 31, 31 => 00000000 (00000000 00000000)
+      rlwimi 000f423f, 0, 0, 0 => 00000000 (00000000 00000000)
+      rlwimi 000f423f, 0, 0, 31 => 000f423f (00000000 00000000)
+      rlwimi 000f423f, 0, 31, 0 => 000f423f (00000000 00000000)
+      rlwimi 000f423f, 0, 31, 31 => 000f423f (00000000 00000000)
+      rlwimi 000f423f, 31, 0, 0 => 800f423f (00000000 00000000)
+      rlwimi 000f423f, 31, 0, 31 => 8007a11f (00000000 00000000)
+      rlwimi 000f423f, 31, 31, 0 => 8007a11f (00000000 00000000)
+      rlwimi 000f423f, 31, 31, 31 => 8007a11f (00000000 00000000)
+      rlwimi ffffffff, 0, 0, 0 => 8007a11f (00000000 00000000)
+      rlwimi ffffffff, 0, 0, 31 => ffffffff (00000000 00000000)
+      rlwimi ffffffff, 0, 31, 0 => ffffffff (00000000 00000000)
+      rlwimi ffffffff, 0, 31, 31 => ffffffff (00000000 00000000)
+      rlwimi ffffffff, 31, 0, 0 => ffffffff (00000000 00000000)
+      rlwimi ffffffff, 31, 0, 31 => ffffffff (00000000 00000000)
+      rlwimi ffffffff, 31, 31, 0 => ffffffff (00000000 00000000)
+      rlwimi ffffffff, 31, 31, 31 => ffffffff (00000000 00000000)
+
+      rlwinm 00000000, 0, 0, 0 => 00000000 (00000000 00000000)
+      rlwinm 00000000, 0, 0, 31 => 00000000 (00000000 00000000)
+      rlwinm 00000000, 0, 31, 0 => 00000000 (00000000 00000000)
+      rlwinm 00000000, 0, 31, 31 => 00000000 (00000000 00000000)
+      rlwinm 00000000, 31, 0, 0 => 00000000 (00000000 00000000)
+      rlwinm 00000000, 31, 0, 31 => 00000000 (00000000 00000000)
+      rlwinm 00000000, 31, 31, 0 => 00000000 (00000000 00000000)
+      rlwinm 00000000, 31, 31, 31 => 00000000 (00000000 00000000)
+      rlwinm 000f423f, 0, 0, 0 => 00000000 (00000000 00000000)
+      rlwinm 000f423f, 0, 0, 31 => 000f423f (00000000 00000000)
+      rlwinm 000f423f, 0, 31, 0 => 00000001 (00000000 00000000)
+      rlwinm 000f423f, 0, 31, 31 => 00000001 (00000000 00000000)
+      rlwinm 000f423f, 31, 0, 0 => 80000000 (00000000 00000000)
+      rlwinm 000f423f, 31, 0, 31 => 8007a11f (00000000 00000000)
+      rlwinm 000f423f, 31, 31, 0 => 80000001 (00000000 00000000)
+      rlwinm 000f423f, 31, 31, 31 => 00000001 (00000000 00000000)
+      rlwinm ffffffff, 0, 0, 0 => 80000000 (00000000 00000000)
+      rlwinm ffffffff, 0, 0, 31 => ffffffff (00000000 00000000)
+      rlwinm ffffffff, 0, 31, 0 => 80000001 (00000000 00000000)
+      rlwinm ffffffff, 0, 31, 31 => 00000001 (00000000 00000000)
+      rlwinm ffffffff, 31, 0, 0 => 80000000 (00000000 00000000)
+      rlwinm ffffffff, 31, 0, 31 => ffffffff (00000000 00000000)
+      rlwinm ffffffff, 31, 31, 0 => 80000001 (00000000 00000000)
+      rlwinm ffffffff, 31, 31, 31 => 00000001 (00000000 00000000)
+
+       rlwnm 00000000, 00000000, 0, 0 => 00000000 (00000000 00000000)
+       rlwnm 00000000, 00000000, 0, 31 => 00000000 (00000000 00000000)
+       rlwnm 00000000, 00000000, 31, 0 => 00000000 (00000000 00000000)
+       rlwnm 00000000, 00000000, 31, 31 => 00000000 (00000000 00000000)
+       rlwnm 00000000, 000f423f, 0, 0 => 00000000 (00000000 00000000)
+       rlwnm 00000000, 000f423f, 0, 31 => 00000000 (00000000 00000000)
+       rlwnm 00000000, 000f423f, 31, 0 => 00000000 (00000000 00000000)
+       rlwnm 00000000, 000f423f, 31, 31 => 00000000 (00000000 00000000)
+       rlwnm 00000000, ffffffff, 0, 0 => 00000000 (00000000 00000000)
+       rlwnm 00000000, ffffffff, 0, 31 => 00000000 (00000000 00000000)
+       rlwnm 00000000, ffffffff, 31, 0 => 00000000 (00000000 00000000)
+       rlwnm 00000000, ffffffff, 31, 31 => 00000000 (00000000 00000000)
+       rlwnm 000f423f, 00000000, 0, 0 => 00000000 (00000000 00000000)
+       rlwnm 000f423f, 00000000, 0, 31 => 000f423f (00000000 00000000)
+       rlwnm 000f423f, 00000000, 31, 0 => 00000001 (00000000 00000000)
+       rlwnm 000f423f, 00000000, 31, 31 => 00000001 (00000000 00000000)
+       rlwnm 000f423f, 000f423f, 0, 0 => 80000000 (00000000 00000000)
+       rlwnm 000f423f, 000f423f, 0, 31 => 8007a11f (00000000 00000000)
+       rlwnm 000f423f, 000f423f, 31, 0 => 80000001 (00000000 00000000)
+       rlwnm 000f423f, 000f423f, 31, 31 => 00000001 (00000000 00000000)
+       rlwnm 000f423f, ffffffff, 0, 0 => 80000000 (00000000 00000000)
+       rlwnm 000f423f, ffffffff, 0, 31 => 8007a11f (00000000 00000000)
+       rlwnm 000f423f, ffffffff, 31, 0 => 80000001 (00000000 00000000)
+       rlwnm 000f423f, ffffffff, 31, 31 => 00000001 (00000000 00000000)
+       rlwnm ffffffff, 00000000, 0, 0 => 80000000 (00000000 00000000)
+       rlwnm ffffffff, 00000000, 0, 31 => ffffffff (00000000 00000000)
+       rlwnm ffffffff, 00000000, 31, 0 => 80000001 (00000000 00000000)
+       rlwnm ffffffff, 00000000, 31, 31 => 00000001 (00000000 00000000)
+       rlwnm ffffffff, 000f423f, 0, 0 => 80000000 (00000000 00000000)
+       rlwnm ffffffff, 000f423f, 0, 31 => ffffffff (00000000 00000000)
+       rlwnm ffffffff, 000f423f, 31, 0 => 80000001 (00000000 00000000)
+       rlwnm ffffffff, 000f423f, 31, 31 => 00000001 (00000000 00000000)
+       rlwnm ffffffff, ffffffff, 0, 0 => 80000000 (00000000 00000000)
+       rlwnm ffffffff, ffffffff, 0, 31 => ffffffff (00000000 00000000)
+       rlwnm ffffffff, ffffffff, 31, 0 => 80000001 (00000000 00000000)
+       rlwnm ffffffff, ffffffff, 31, 31 => 00000001 (00000000 00000000)
+
+       srawi 00000000, 0 => 00000000 (00000000 00000000)
+       srawi 00000000, 31 => 00000000 (00000000 00000000)
+       srawi 000f423f, 0 => 000f423f (00000000 00000000)
+       srawi 000f423f, 31 => 00000000 (00000000 00000000)
+       srawi ffffffff, 0 => ffffffff (00000000 00000000)
+       srawi ffffffff, 31 => ffffffff (00000000 20000000)
+
+        mfcr (00000000) => 00000000 (00000000 00000000)
+        mfcr (000f423f) => 000f423f (000f423f 00000000)
+        mfcr (ffffffff) => ffffffff (ffffffff 00000000)
+
+       mfspr 1 (00000000) => 00000000 (00000000 00000000, 00000000, 00000000)
+       mfspr 1 (000f423f) => 0000003f (00000000 0000003f, 00000000, 00000000)
+       mfspr 1 (ffffffff) => e000007f (00000000 e000007f, 00000000, 00000000)
+       mfspr 8 (00000000) => 00000000 (00000000 00000000, 00000000, 00000000)
+       mfspr 8 (000f423f) => 000f423f (00000000 00000000, 000f423f, 00000000)
+       mfspr 8 (ffffffff) => ffffffff (00000000 00000000, ffffffff, 00000000)
+       mfspr 9 (00000000) => 00000000 (00000000 00000000, 00000000, 00000000)
+       mfspr 9 (000f423f) => 000f423f (00000000 00000000, 00000000, 000f423f)
+       mfspr 9 (ffffffff) => ffffffff (00000000 00000000, 00000000, ffffffff)
+
+       mtspr 1, 00000000 => (00000000 00000000, 00000000, 00000000)
+       mtspr 1, 000f423f => (00000000 0000003f, 00000000, 00000000)
+       mtspr 1, ffffffff => (00000000 e000007f, 00000000, 00000000)
+       mtspr 8, 00000000 => (00000000 00000000, 00000000, 00000000)
+       mtspr 8, 000f423f => (00000000 00000000, 000f423f, 00000000)
+       mtspr 8, ffffffff => (00000000 00000000, ffffffff, 00000000)
+       mtspr 9, 00000000 => (00000000 00000000, 00000000, 00000000)
+       mtspr 9, 000f423f => (00000000 00000000, 00000000, 000f423f)
+       mtspr 9, ffffffff => (00000000 00000000, 00000000, ffffffff)
+
+PPC logical insns with special forms with flags update:
+     rlwimi. 00000000, 0, 0, 0 => 7fffffff (40000000 00000000)
+     rlwimi. 00000000, 0, 0, 31 => 00000000 (20000000 00000000)
+     rlwimi. 00000000, 0, 31, 0 => 00000000 (20000000 00000000)
+     rlwimi. 00000000, 0, 31, 31 => 00000000 (20000000 00000000)
+     rlwimi. 00000000, 31, 0, 0 => 00000000 (20000000 00000000)
+     rlwimi. 00000000, 31, 0, 31 => 00000000 (20000000 00000000)
+     rlwimi. 00000000, 31, 31, 0 => 00000000 (20000000 00000000)
+     rlwimi. 00000000, 31, 31, 31 => 00000000 (20000000 00000000)
+     rlwimi. 000f423f, 0, 0, 0 => 00000000 (20000000 00000000)
+     rlwimi. 000f423f, 0, 0, 31 => 000f423f (40000000 00000000)
+     rlwimi. 000f423f, 0, 31, 0 => 000f423f (40000000 00000000)
+     rlwimi. 000f423f, 0, 31, 31 => 000f423f (40000000 00000000)
+     rlwimi. 000f423f, 31, 0, 0 => 800f423f (80000000 00000000)
+     rlwimi. 000f423f, 31, 0, 31 => 8007a11f (80000000 00000000)
+     rlwimi. 000f423f, 31, 31, 0 => 8007a11f (80000000 00000000)
+     rlwimi. 000f423f, 31, 31, 31 => 8007a11f (80000000 00000000)
+     rlwimi. ffffffff, 0, 0, 0 => 8007a11f (80000000 00000000)
+     rlwimi. ffffffff, 0, 0, 31 => ffffffff (80000000 00000000)
+     rlwimi. ffffffff, 0, 31, 0 => ffffffff (80000000 00000000)
+     rlwimi. ffffffff, 0, 31, 31 => ffffffff (80000000 00000000)
+     rlwimi. ffffffff, 31, 0, 0 => ffffffff (80000000 00000000)
+     rlwimi. ffffffff, 31, 0, 31 => ffffffff (80000000 00000000)
+     rlwimi. ffffffff, 31, 31, 0 => ffffffff (80000000 00000000)
+     rlwimi. ffffffff, 31, 31, 31 => ffffffff (80000000 00000000)
+
+     rlwinm. 00000000, 0, 0, 0 => 00000000 (20000000 00000000)
+     rlwinm. 00000000, 0, 0, 31 => 00000000 (20000000 00000000)
+     rlwinm. 00000000, 0, 31, 0 => 00000000 (20000000 00000000)
+     rlwinm. 00000000, 0, 31, 31 => 00000000 (20000000 00000000)
+     rlwinm. 00000000, 31, 0, 0 => 00000000 (20000000 00000000)
+     rlwinm. 00000000, 31, 0, 31 => 00000000 (20000000 00000000)
+     rlwinm. 00000000, 31, 31, 0 => 00000000 (20000000 00000000)
+     rlwinm. 00000000, 31, 31, 31 => 00000000 (20000000 00000000)
+     rlwinm. 000f423f, 0, 0, 0 => 00000000 (20000000 00000000)
+     rlwinm. 000f423f, 0, 0, 31 => 000f423f (40000000 00000000)
+     rlwinm. 000f423f, 0, 31, 0 => 00000001 (40000000 00000000)
+     rlwinm. 000f423f, 0, 31, 31 => 00000001 (40000000 00000000)
+     rlwinm. 000f423f, 31, 0, 0 => 80000000 (80000000 00000000)
+     rlwinm. 000f423f, 31, 0, 31 => 8007a11f (80000000 00000000)
+     rlwinm. 000f423f, 31, 31, 0 => 80000001 (80000000 00000000)
+     rlwinm. 000f423f, 31, 31, 31 => 00000001 (40000000 00000000)
+     rlwinm. ffffffff, 0, 0, 0 => 80000000 (80000000 00000000)
+     rlwinm. ffffffff, 0, 0, 31 => ffffffff (80000000 00000000)
+     rlwinm. ffffffff, 0, 31, 0 => 80000001 (80000000 00000000)
+     rlwinm. ffffffff, 0, 31, 31 => 00000001 (40000000 00000000)
+     rlwinm. ffffffff, 31, 0, 0 => 80000000 (80000000 00000000)
+     rlwinm. ffffffff, 31, 0, 31 => ffffffff (80000000 00000000)
+     rlwinm. ffffffff, 31, 31, 0 => 80000001 (80000000 00000000)
+     rlwinm. ffffffff, 31, 31, 31 => 00000001 (40000000 00000000)
+
+      rlwnm. 00000000, 00000000, 0, 0 => 00000000 (20000000 00000000)
+      rlwnm. 00000000, 00000000, 0, 31 => 00000000 (20000000 00000000)
+      rlwnm. 00000000, 00000000, 31, 0 => 00000000 (20000000 00000000)
+      rlwnm. 00000000, 00000000, 31, 31 => 00000000 (20000000 00000000)
+      rlwnm. 00000000, 000f423f, 0, 0 => 00000000 (20000000 00000000)
+      rlwnm. 00000000, 000f423f, 0, 31 => 00000000 (20000000 00000000)
+      rlwnm. 00000000, 000f423f, 31, 0 => 00000000 (20000000 00000000)
+      rlwnm. 00000000, 000f423f, 31, 31 => 00000000 (20000000 00000000)
+      rlwnm. 00000000, ffffffff, 0, 0 => 00000000 (20000000 00000000)
+      rlwnm. 00000000, ffffffff, 0, 31 => 00000000 (20000000 00000000)
+      rlwnm. 00000000, ffffffff, 31, 0 => 00000000 (20000000 00000000)
+      rlwnm. 00000000, ffffffff, 31, 31 => 00000000 (20000000 00000000)
+      rlwnm. 000f423f, 00000000, 0, 0 => 00000000 (20000000 00000000)
+      rlwnm. 000f423f, 00000000, 0, 31 => 000f423f (40000000 00000000)
+      rlwnm. 000f423f, 00000000, 31, 0 => 00000001 (40000000 00000000)
+      rlwnm. 000f423f, 00000000, 31, 31 => 00000001 (40000000 00000000)
+      rlwnm. 000f423f, 000f423f, 0, 0 => 80000000 (80000000 00000000)
+      rlwnm. 000f423f, 000f423f, 0, 31 => 8007a11f (80000000 00000000)
+      rlwnm. 000f423f, 000f423f, 31, 0 => 80000001 (80000000 00000000)
+      rlwnm. 000f423f, 000f423f, 31, 31 => 00000001 (40000000 00000000)
+      rlwnm. 000f423f, ffffffff, 0, 0 => 80000000 (80000000 00000000)
+      rlwnm. 000f423f, ffffffff, 0, 31 => 8007a11f (80000000 00000000)
+      rlwnm. 000f423f, ffffffff, 31, 0 => 80000001 (80000000 00000000)
+      rlwnm. 000f423f, ffffffff, 31, 31 => 00000001 (40000000 00000000)
+      rlwnm. ffffffff, 00000000, 0, 0 => 80000000 (80000000 00000000)
+      rlwnm. ffffffff, 00000000, 0, 31 => ffffffff (80000000 00000000)
+      rlwnm. ffffffff, 00000000, 31, 0 => 80000001 (80000000 00000000)
+      rlwnm. ffffffff, 00000000, 31, 31 => 00000001 (40000000 00000000)
+      rlwnm. ffffffff, 000f423f, 0, 0 => 80000000 (80000000 00000000)
+      rlwnm. ffffffff, 000f423f, 0, 31 => ffffffff (80000000 00000000)
+      rlwnm. ffffffff, 000f423f, 31, 0 => 80000001 (80000000 00000000)
+      rlwnm. ffffffff, 000f423f, 31, 31 => 00000001 (40000000 00000000)
+      rlwnm. ffffffff, ffffffff, 0, 0 => 80000000 (80000000 00000000)
+      rlwnm. ffffffff, ffffffff, 0, 31 => ffffffff (80000000 00000000)
+      rlwnm. ffffffff, ffffffff, 31, 0 => 80000001 (80000000 00000000)
+      rlwnm. ffffffff, ffffffff, 31, 31 => 00000001 (40000000 00000000)
+
+      srawi. 00000000, 0 => 00000000 (20000000 00000000)
+      srawi. 00000000, 31 => 00000000 (20000000 00000000)
+      srawi. 000f423f, 0 => 000f423f (40000000 00000000)
+      srawi. 000f423f, 31 => 00000000 (20000000 00000000)
+      srawi. ffffffff, 0 => ffffffff (80000000 00000000)
+      srawi. ffffffff, 31 => ffffffff (80000000 20000000)
+
+        mcrf 0, 0 (00000000) => (00000000 00000000)
+        mcrf 0, 7 (00000000) => (00000000 00000000)
+        mcrf 7, 0 (00000000) => (00000000 00000000)
+        mcrf 7, 7 (00000000) => (00000000 00000000)
+        mcrf 0, 0 (000f423f) => (000f423f 00000000)
+        mcrf 0, 7 (000f423f) => (f00f423f 00000000)
+        mcrf 7, 0 (000f423f) => (000f4230 00000000)
+        mcrf 7, 7 (000f423f) => (000f423f 00000000)
+        mcrf 0, 0 (ffffffff) => (ffffffff 00000000)
+        mcrf 0, 7 (ffffffff) => (ffffffff 00000000)
+        mcrf 7, 0 (ffffffff) => (ffffffff 00000000)
+        mcrf 7, 7 (ffffffff) => (ffffffff 00000000)
+
+       mcrxr 0 (00000000) => (00000000 00000000)
+       mcrxr 1 (00000000) => (00000000 00000000)
+       mcrxr 2 (00000000) => (00000000 00000000)
+       mcrxr 3 (00000000) => (00000000 00000000)
+       mcrxr 4 (00000000) => (00000000 00000000)
+       mcrxr 5 (00000000) => (00000000 00000000)
+       mcrxr 6 (00000000) => (00000000 00000000)
+       mcrxr 7 (00000000) => (00000000 00000000)
+       mcrxr 0 (10000000) => (00000000 00000000)
+       mcrxr 1 (10000000) => (00000000 00000000)
+       mcrxr 2 (10000000) => (00000000 00000000)
+       mcrxr 3 (10000000) => (00000000 00000000)
+       mcrxr 4 (10000000) => (00000000 00000000)
+       mcrxr 5 (10000000) => (00000000 00000000)
+       mcrxr 6 (10000000) => (00000000 00000000)
+       mcrxr 7 (10000000) => (00000000 00000000)
+       mcrxr 0 (20000000) => (20000000 00000000)
+       mcrxr 1 (20000000) => (02000000 00000000)
+       mcrxr 2 (20000000) => (00200000 00000000)
+       mcrxr 3 (20000000) => (00020000 00000000)
+       mcrxr 4 (20000000) => (00002000 00000000)
+       mcrxr 5 (20000000) => (00000200 00000000)
+       mcrxr 6 (20000000) => (00000020 00000000)
+       mcrxr 7 (20000000) => (00000002 00000000)
+       mcrxr 0 (30000000) => (20000000 00000000)
+       mcrxr 1 (30000000) => (02000000 00000000)
+       mcrxr 2 (30000000) => (00200000 00000000)
+       mcrxr 3 (30000000) => (00020000 00000000)
+       mcrxr 4 (30000000) => (00002000 00000000)
+       mcrxr 5 (30000000) => (00000200 00000000)
+       mcrxr 6 (30000000) => (00000020 00000000)
+       mcrxr 7 (30000000) => (00000002 00000000)
+       mcrxr 0 (40000000) => (40000000 00000000)
+       mcrxr 1 (40000000) => (04000000 00000000)
+       mcrxr 2 (40000000) => (00400000 00000000)
+       mcrxr 3 (40000000) => (00040000 00000000)
+       mcrxr 4 (40000000) => (00004000 00000000)
+       mcrxr 5 (40000000) => (00000400 00000000)
+       mcrxr 6 (40000000) => (00000040 00000000)
+       mcrxr 7 (40000000) => (00000004 00000000)
+       mcrxr 0 (50000000) => (40000000 00000000)
+       mcrxr 1 (50000000) => (04000000 00000000)
+       mcrxr 2 (50000000) => (00400000 00000000)
+       mcrxr 3 (50000000) => (00040000 00000000)
+       mcrxr 4 (50000000) => (00004000 00000000)
+       mcrxr 5 (50000000) => (00000400 00000000)
+       mcrxr 6 (50000000) => (00000040 00000000)
+       mcrxr 7 (50000000) => (00000004 00000000)
+       mcrxr 0 (60000000) => (60000000 00000000)
+       mcrxr 1 (60000000) => (06000000 00000000)
+       mcrxr 2 (60000000) => (00600000 00000000)
+       mcrxr 3 (60000000) => (00060000 00000000)
+       mcrxr 4 (60000000) => (00006000 00000000)
+       mcrxr 5 (60000000) => (00000600 00000000)
+       mcrxr 6 (60000000) => (00000060 00000000)
+       mcrxr 7 (60000000) => (00000006 00000000)
+       mcrxr 0 (70000000) => (60000000 00000000)
+       mcrxr 1 (70000000) => (06000000 00000000)
+       mcrxr 2 (70000000) => (00600000 00000000)
+       mcrxr 3 (70000000) => (00060000 00000000)
+       mcrxr 4 (70000000) => (00006000 00000000)
+       mcrxr 5 (70000000) => (00000600 00000000)
+       mcrxr 6 (70000000) => (00000060 00000000)
+       mcrxr 7 (70000000) => (00000006 00000000)
+       mcrxr 0 (80000000) => (80000000 00000000)
+       mcrxr 1 (80000000) => (08000000 00000000)
+       mcrxr 2 (80000000) => (00800000 00000000)
+       mcrxr 3 (80000000) => (00080000 00000000)
+       mcrxr 4 (80000000) => (00008000 00000000)
+       mcrxr 5 (80000000) => (00000800 00000000)
+       mcrxr 6 (80000000) => (00000080 00000000)
+       mcrxr 7 (80000000) => (00000008 00000000)
+       mcrxr 0 (90000000) => (80000000 00000000)
+       mcrxr 1 (90000000) => (08000000 00000000)
+       mcrxr 2 (90000000) => (00800000 00000000)
+       mcrxr 3 (90000000) => (00080000 00000000)
+       mcrxr 4 (90000000) => (00008000 00000000)
+       mcrxr 5 (90000000) => (00000800 00000000)
+       mcrxr 6 (90000000) => (00000080 00000000)
+       mcrxr 7 (90000000) => (00000008 00000000)
+       mcrxr 0 (a0000000) => (a0000000 00000000)
+       mcrxr 1 (a0000000) => (0a000000 00000000)
+       mcrxr 2 (a0000000) => (00a00000 00000000)
+       mcrxr 3 (a0000000) => (000a0000 00000000)
+       mcrxr 4 (a0000000) => (0000a000 00000000)
+       mcrxr 5 (a0000000) => (00000a00 00000000)
+       mcrxr 6 (a0000000) => (000000a0 00000000)
+       mcrxr 7 (a0000000) => (0000000a 00000000)
+       mcrxr 0 (b0000000) => (a0000000 00000000)
+       mcrxr 1 (b0000000) => (0a000000 00000000)
+       mcrxr 2 (b0000000) => (00a00000 00000000)
+       mcrxr 3 (b0000000) => (000a0000 00000000)
+       mcrxr 4 (b0000000) => (0000a000 00000000)
+       mcrxr 5 (b0000000) => (00000a00 00000000)
+       mcrxr 6 (b0000000) => (000000a0 00000000)
+       mcrxr 7 (b0000000) => (0000000a 00000000)
+       mcrxr 0 (c0000000) => (c0000000 00000000)
+       mcrxr 1 (c0000000) => (0c000000 00000000)
+       mcrxr 2 (c0000000) => (00c00000 00000000)
+       mcrxr 3 (c0000000) => (000c0000 00000000)
+       mcrxr 4 (c0000000) => (0000c000 00000000)
+       mcrxr 5 (c0000000) => (00000c00 00000000)
+       mcrxr 6 (c0000000) => (000000c0 00000000)
+       mcrxr 7 (c0000000) => (0000000c 00000000)
+       mcrxr 0 (d0000000) => (c0000000 00000000)
+       mcrxr 1 (d0000000) => (0c000000 00000000)
+       mcrxr 2 (d0000000) => (00c00000 00000000)
+       mcrxr 3 (d0000000) => (000c0000 00000000)
+       mcrxr 4 (d0000000) => (0000c000 00000000)
+       mcrxr 5 (d0000000) => (00000c00 00000000)
+       mcrxr 6 (d0000000) => (000000c0 00000000)
+       mcrxr 7 (d0000000) => (0000000c 00000000)
+       mcrxr 0 (e0000000) => (e0000000 00000000)
+       mcrxr 1 (e0000000) => (0e000000 00000000)
+       mcrxr 2 (e0000000) => (00e00000 00000000)
+       mcrxr 3 (e0000000) => (000e0000 00000000)
+       mcrxr 4 (e0000000) => (0000e000 00000000)
+       mcrxr 5 (e0000000) => (00000e00 00000000)
+       mcrxr 6 (e0000000) => (000000e0 00000000)
+       mcrxr 7 (e0000000) => (0000000e 00000000)
+       mcrxr 0 (f0000000) => (e0000000 00000000)
+       mcrxr 1 (f0000000) => (0e000000 00000000)
+       mcrxr 2 (f0000000) => (00e00000 00000000)
+       mcrxr 3 (f0000000) => (000e0000 00000000)
+       mcrxr 4 (f0000000) => (0000e000 00000000)
+       mcrxr 5 (f0000000) => (00000e00 00000000)
+       mcrxr 6 (f0000000) => (000000e0 00000000)
+       mcrxr 7 (f0000000) => (0000000e 00000000)
+
+       mtcrf 0, 00000000 => (00000000 00000000)
+       mtcrf 99, 00000000 => (00000000 00000000)
+       mtcrf 198, 00000000 => (00000000 00000000)
+       mtcrf 0, 000f423f => (00000000 00000000)
+       mtcrf 99, 000f423f => (0000003f 00000000)
+       mtcrf 198, 000f423f => (00000230 00000000)
+       mtcrf 0, ffffffff => (00000000 00000000)
+       mtcrf 99, ffffffff => (0ff000ff 00000000)
+       mtcrf 198, ffffffff => (ff000ff0 00000000)
+
+PPC integer load insns
+    with one register + one 16 bits immediate args with flags update:
+         lbz 0, (00000000) => 00000000, (00000000 00000000)
+         lbz 4, (000f423f) => 00000000, (00000000 00000000)
+         lbz 8, (ffffffff) => 000000ff, (00000000 00000000)
+         lbz -8, (00000000) => 00000000 (00000000 00000000)
+         lbz -4, (000f423f) => 00000000 (00000000 00000000)
+         lbz 0, (ffffffff) => 000000ff (00000000 00000000)
+
+        lbzu 0, (00000000) => 00000000, (00000000 00000000)
+        lbzu 4, (000f423f) => 00000000, (00000000 00000000)
+        lbzu 8, (ffffffff) => 000000ff, (00000000 00000000)
+        lbzu -8, (00000000) => 00000000 (00000000 00000000)
+        lbzu -4, (000f423f) => 00000000 (00000000 00000000)
+        lbzu 0, (ffffffff) => 000000ff (00000000 00000000)
+
+         lha 0, (00000000) => 00000000, (00000000 00000000)
+         lha 4, (000f423f) => 0000000f, (00000000 00000000)
+         lha 8, (ffffffff) => ffffffff, (00000000 00000000)
+         lha -8, (00000000) => 00000000 (00000000 00000000)
+         lha -4, (000f423f) => 0000000f (00000000 00000000)
+         lha 0, (ffffffff) => ffffffff (00000000 00000000)
+
+        lhau 0, (00000000) => 00000000, (00000000 00000000)
+        lhau 4, (000f423f) => 0000000f, (00000000 00000000)
+        lhau 8, (ffffffff) => ffffffff, (00000000 00000000)
+        lhau -8, (00000000) => 00000000 (00000000 00000000)
+        lhau -4, (000f423f) => 0000000f (00000000 00000000)
+        lhau 0, (ffffffff) => ffffffff (00000000 00000000)
+
+         lhz 0, (00000000) => 00000000, (00000000 00000000)
+         lhz 4, (000f423f) => 0000000f, (00000000 00000000)
+         lhz 8, (ffffffff) => 0000ffff, (00000000 00000000)
+         lhz -8, (00000000) => 00000000 (00000000 00000000)
+         lhz -4, (000f423f) => 0000000f (00000000 00000000)
+         lhz 0, (ffffffff) => 0000ffff (00000000 00000000)
+
+        lhzu 0, (00000000) => 00000000, (00000000 00000000)
+        lhzu 4, (000f423f) => 0000000f, (00000000 00000000)
+        lhzu 8, (ffffffff) => 0000ffff, (00000000 00000000)
+        lhzu -8, (00000000) => 00000000 (00000000 00000000)
+        lhzu -4, (000f423f) => 0000000f (00000000 00000000)
+        lhzu 0, (ffffffff) => 0000ffff (00000000 00000000)
+
+         lwz 0, (00000000) => 00000000, (00000000 00000000)
+         lwz 4, (000f423f) => 000f423f, (00000000 00000000)
+         lwz 8, (ffffffff) => ffffffff, (00000000 00000000)
+         lwz -8, (00000000) => 00000000 (00000000 00000000)
+         lwz -4, (000f423f) => 000f423f (00000000 00000000)
+         lwz 0, (ffffffff) => ffffffff (00000000 00000000)
+
+        lwzu 0, (00000000) => 00000000, (00000000 00000000)
+        lwzu 4, (000f423f) => 000f423f, (00000000 00000000)
+        lwzu 8, (ffffffff) => ffffffff, (00000000 00000000)
+        lwzu -8, (00000000) => 00000000 (00000000 00000000)
+        lwzu -4, (000f423f) => 000f423f (00000000 00000000)
+        lwzu 0, (ffffffff) => ffffffff (00000000 00000000)
+
+PPC integer load insns with two register args:
+        lbzx 0 (00000000) => 00000000 (00000000 00000000)
+        lbzx 4 (000f423f) => 00000000 (00000000 00000000)
+        lbzx 8 (ffffffff) => 000000ff (00000000 00000000)
+
+       lbzux 0 (00000000) => 00000000 (00000000 00000000)
+       lbzux 4 (000f423f) => 00000000 (00000000 00000000)
+       lbzux 8 (ffffffff) => 000000ff (00000000 00000000)
+
+        lhax 0 (00000000) => 00000000 (00000000 00000000)
+        lhax 4 (000f423f) => 0000000f (00000000 00000000)
+        lhax 8 (ffffffff) => ffffffff (00000000 00000000)
+
+       lhaux 0 (00000000) => 00000000 (00000000 00000000)
+       lhaux 4 (000f423f) => 0000000f (00000000 00000000)
+       lhaux 8 (ffffffff) => ffffffff (00000000 00000000)
+
+        lhzx 0 (00000000) => 00000000 (00000000 00000000)
+        lhzx 4 (000f423f) => 0000000f (00000000 00000000)
+        lhzx 8 (ffffffff) => 0000ffff (00000000 00000000)
+
+       lhzux 0 (00000000) => 00000000 (00000000 00000000)
+       lhzux 4 (000f423f) => 0000000f (00000000 00000000)
+       lhzux 8 (ffffffff) => 0000ffff (00000000 00000000)
+
+        lwzx 0 (00000000) => 00000000 (00000000 00000000)
+        lwzx 4 (000f423f) => 000f423f (00000000 00000000)
+        lwzx 8 (ffffffff) => ffffffff (00000000 00000000)
+
+       lwzux 0 (00000000) => 00000000 (00000000 00000000)
+       lwzux 4 (000f423f) => 000f423f (00000000 00000000)
+       lwzux 8 (ffffffff) => ffffffff (00000000 00000000)
+
+PPC integer store insns
+    with one register + one 16 bits immediate args with flags update:
+         stb 00000000, 0 => 00000000, (00000000 00000000)
+         stb 000f423f, 4 => 3f000000, (00000000 00000000)
+         stb ffffffff, 8 => ff000000, (00000000 00000000)
+         stb 00000000, -8 => 00000000, (00000000 00000000)
+         stb 000f423f, -4 => 3f000000, (00000000 00000000)
+         stb ffffffff, 0 => ff000000, (00000000 00000000)
+
+        stbu 00000000, 0 => 00000000, (00000000 00000000)
+        stbu 000f423f, 4 => 3f000000, (00000000 00000000)
+        stbu ffffffff, 8 => ff000000, (00000000 00000000)
+        stbu 00000000, -8 => 00000000, (00000000 00000000)
+        stbu 000f423f, -4 => 3f000000, (00000000 00000000)
+        stbu ffffffff, 0 => ff000000, (00000000 00000000)
+
+         sth 00000000, 0 => 00000000, (00000000 00000000)
+         sth 000f423f, 4 => 423f0000, (00000000 00000000)
+         sth ffffffff, 8 => ffff0000, (00000000 00000000)
+         sth 00000000, -8 => 00000000, (00000000 00000000)
+         sth 000f423f, -4 => 423f0000, (00000000 00000000)
+         sth ffffffff, 0 => ffff0000, (00000000 00000000)
+
+        sthu 00000000, 0 => 00000000, (00000000 00000000)
+        sthu 000f423f, 4 => 423f0000, (00000000 00000000)
+        sthu ffffffff, 8 => ffff0000, (00000000 00000000)
+        sthu 00000000, -8 => 00000000, (00000000 00000000)
+        sthu 000f423f, -4 => 423f0000, (00000000 00000000)
+        sthu ffffffff, 0 => ffff0000, (00000000 00000000)
+
+         stw 00000000, 0 => 00000000, (00000000 00000000)
+         stw 000f423f, 4 => 000f423f, (00000000 00000000)
+         stw ffffffff, 8 => ffffffff, (00000000 00000000)
+         stw 00000000, -8 => 00000000, (00000000 00000000)
+         stw 000f423f, -4 => 000f423f, (00000000 00000000)
+         stw ffffffff, 0 => ffffffff, (00000000 00000000)
+
+        stwu 00000000, 0 => 00000000, (00000000 00000000)
+        stwu 000f423f, 4 => 000f423f, (00000000 00000000)
+        stwu ffffffff, 8 => ffffffff, (00000000 00000000)
+        stwu 00000000, -8 => 00000000, (00000000 00000000)
+        stwu 000f423f, -4 => 000f423f, (00000000 00000000)
+        stwu ffffffff, 0 => ffffffff, (00000000 00000000)
+
+PPC integer store insns with three register args:
+        stbx 00000000, 0 => 00000000, (00000000 00000000)
+        stbx 000f423f, 4 => 3f000000, (00000000 00000000)
+        stbx ffffffff, 8 => ff000000, (00000000 00000000)
+
+       stbux 00000000, 0 => 00000000, (00000000 00000000)
+       stbux 000f423f, 4 => 3f000000, (00000000 00000000)
+       stbux ffffffff, 8 => ff000000, (00000000 00000000)
+
+        sthx 00000000, 0 => 00000000, (00000000 00000000)
+        sthx 000f423f, 4 => 423f0000, (00000000 00000000)
+        sthx ffffffff, 8 => ffff0000, (00000000 00000000)
+
+       sthux 00000000, 0 => 00000000, (00000000 00000000)
+       sthux 000f423f, 4 => 423f0000, (00000000 00000000)
+       sthux ffffffff, 8 => ffff0000, (00000000 00000000)
+
+        stwx 00000000, 0 => 00000000, (00000000 00000000)
+        stwx 000f423f, 4 => 000f423f, (00000000 00000000)
+        stwx ffffffff, 8 => ffffffff, (00000000 00000000)
+
+       stwux 00000000, 0 => 00000000, (00000000 00000000)
+       stwux 000f423f, 4 => 000f423f, (00000000 00000000)
+       stwux ffffffff, 8 => ffffffff, (00000000 00000000)
+
+PPC altivec integer arith insns with three args:
+   vmhaddshs: 0102030405060708090a0b0c0e0d0e0f, 0102030405060708090a0b0c0e0d0e0f, 0102030405060708090a0b0c0e0d0e0f
+   vmhaddshs:  => 010403160538076a09ad0c000f970f9a (00000000)
+   vmhaddshs: 0102030405060708090a0b0c0e0d0e0f, 0102030405060708090a0b0c0e0d0e0f, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+   vmhaddshs:  => f1f4f406f628f85afa9dfcf00087008a (00000000)
+   vmhaddshs: 0102030405060708090a0b0c0e0d0e0f, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 0102030405060708090a0b0c0e0d0e0f
+   vmhaddshs:  => 00e502bb04a10697089d0ab30df00df2 (00000000)
+   vmhaddshs: 0102030405060708090a0b0c0e0d0e0f, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+   vmhaddshs:  => f1d5f3abf591f787f98dfba3fee0fee2 (00000000)
+   vmhaddshs: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 0102030405060708090a0b0c0e0d0e0f, 0102030405060708090a0b0c0e0d0e0f
+   vmhaddshs:  => 00e502bb04a10697089d0ab30df00df2 (00000000)
+   vmhaddshs: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 0102030405060708090a0b0c0e0d0e0f, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+   vmhaddshs:  => f1d5f3abf591f787f98dfba3fee0fee2 (00000000)
+   vmhaddshs: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 0102030405060708090a0b0c0e0d0e0f
+   vmhaddshs:  => 028d042605cf078909520b2c0e0f0e11 (00000000)
+   vmhaddshs: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+   vmhaddshs:  => f37df516f6bff879fa42fc1cfeffff01 (00000000)
+
+  vmhraddshs: 0102030405060708090a0b0c0e0d0e0f, 0102030405060708090a0b0c0e0d0e0f, 0102030405060708090a0b0c0e0d0e0f
+  vmhraddshs:  => 010403160538076b09ad0c000f980f9a (00000000)
+  vmhraddshs: 0102030405060708090a0b0c0e0d0e0f, 0102030405060708090a0b0c0e0d0e0f, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+  vmhraddshs:  => f1f4f406f628f85bfa9dfcf00088008a (00000000)
+  vmhraddshs: 0102030405060708090a0b0c0e0d0e0f, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 0102030405060708090a0b0c0e0d0e0f
+  vmhraddshs:  => 00e602bb04a10697089d0ab30df10df3 (00000000)
+  vmhraddshs: 0102030405060708090a0b0c0e0d0e0f, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+  vmhraddshs:  => f1d6f3abf591f787f98dfba3fee1fee3 (00000000)
+  vmhraddshs: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 0102030405060708090a0b0c0e0d0e0f, 0102030405060708090a0b0c0e0d0e0f
+  vmhraddshs:  => 00e602bb04a10697089d0ab30df10df3 (00000000)
+  vmhraddshs: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 0102030405060708090a0b0c0e0d0e0f, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+  vmhraddshs:  => f1d6f3abf591f787f98dfba3fee1fee3 (00000000)
+  vmhraddshs: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 0102030405060708090a0b0c0e0d0e0f
+  vmhraddshs:  => 028d042605d0078909530b2c0e0f0e11 (00000000)
+  vmhraddshs: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+  vmhraddshs:  => f37df516f6c0f879fa43fc1cfeffff01 (00000000)
+
+   vmladduhm: 0102030405060708090a0b0c0e0d0e0f, 0102030405060708090a0b0c0e0d0e0f, 0102030405060708090a0b0c0e0d0e0f
+   vmladduhm:  => 05061b14412a7748bd6e139c7ab6b2f0 (00000000)
+   vmladduhm: 0102030405060708090a0b0c0e0d0e0f, 0102030405060708090a0b0c0e0d0e0f, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+   vmladduhm:  => f5f60c04321a6838ae5e048c6ba6a3e0 (00000000)
+   vmladduhm: 0102030405060708090a0b0c0e0d0e0f, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 0102030405060708090a0b0c0e0d0e0f
+   vmladduhm:  => d6e6aed496ca8ec896ceaedcd6e6f100 (00000000)
+   vmladduhm: 0102030405060708090a0b0c0e0d0e0f, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+   vmladduhm:  => c7d69fc487ba7fb887be9fccc7d6e1f0 (00000000)
+   vmladduhm: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 0102030405060708090a0b0c0e0d0e0f, 0102030405060708090a0b0c0e0d0e0f
+   vmladduhm:  => d6e6aed496ca8ec896ceaedcd6e6f100 (00000000)
+   vmladduhm: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 0102030405060708090a0b0c0e0d0e0f, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+   vmladduhm:  => c7d69fc487ba7fb887be9fccc7d6e1f0 (00000000)
+   vmladduhm: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 0102030405060708090a0b0c0e0d0e0f
+   vmladduhm:  => 89c62394cd6a8748512e2b1c14161010 (00000000)
+   vmladduhm: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+   vmladduhm:  => 7ab61484be5a7838421e1c0c05060100 (00000000)
+
+    vmsumubm: 0102030405060708090a0b0c0e0d0e0f, 0102030405060708090a0b0c0e0d0e0f, 0102030405060708090a0b0c0e0d0e0f
+    vmsumubm:  => 01020322050607b6090a0cca0e0d1121 (00000000)
+    vmsumubm: 0102030405060708090a0b0c0e0d0e0f, 0102030405060708090a0b0c0e0d0e0f, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+    vmsumubm:  => f1f2f412f5f6f8a6f9fafdbafefe0211 (00000000)
+    vmsumubm: 0102030405060708090a0b0c0e0d0e0f, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 0102030405060708090a0b0c0e0d0e0f
+    vmsumubm:  => 01020c8205062016090a342a0e0d45a1 (00000000)
+    vmsumubm: 0102030405060708090a0b0c0e0d0e0f, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+    vmsumubm:  => f1f2fd72f5f71106f9fb251afefe3691 (00000000)
+    vmsumubm: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 0102030405060708090a0b0c0e0d0e0f, 0102030405060708090a0b0c0e0d0e0f
+    vmsumubm:  => 01020c8205062016090a342a0e0d45a1 (00000000)
+    vmsumubm: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 0102030405060708090a0b0c0e0d0e0f, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+    vmsumubm:  => f1f2fd72f5f71106f9fb251afefe3691 (00000000)
+    vmsumubm: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 0102030405060708090a0b0c0e0d0e0f
+    vmsumubm:  => 010599e20509bc76090ddf8a0e10fe21 (00000000)
+    vmsumubm: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+    vmsumubm:  => f1f68ad2f5faad66f9fed07aff01ef11 (00000000)
+
+    vmsumuhm: 0102030405060708090a0b0c0e0d0e0f, 0102030405060708090a0b0c0e0d0e0f, 0102030405060708090a0b0c0e0d0e0f
+    vmsumuhm:  => 010c1f180550b36c09d5c8000f981f99 (00000000)
+    vmsumuhm: 0102030405060708090a0b0c0e0d0e0f, 0102030405060708090a0b0c0e0d0e0f, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+    vmsumuhm:  => f1fd1008f641a45cfac6b8f000891089 (00000000)
+    vmsumuhm: 0102030405060708090a0b0c0e0d0e0f, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 0102030405060708090a0b0c0e0d0e0f
+    vmsumuhm:  => 04d584b810a9208c1cbd3ca02a0cb9d9 (00000000)
+    vmsumuhm: 0102030405060708090a0b0c0e0d0e0f, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+    vmsumuhm:  => f5c675a8019a117c0dae2d901afdaac9 (00000000)
+    vmsumuhm: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 0102030405060708090a0b0c0e0d0e0f, 0102030405060708090a0b0c0e0d0e0f
+    vmsumuhm:  => 04d584b810a9208c1cbd3ca02a0cb9d9 (00000000)
+    vmsumuhm: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 0102030405060708090a0b0c0e0d0e0f, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+    vmsumuhm:  => f5c675a8019a117c0dae2d901afdaac9 (00000000)
+    vmsumuhm: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 0102030405060708090a0b0c0e0d0e0f
+    vmsumuhm:  => ce24ac58e1874facf52a73400a071619 (00000000)
+    vmsumuhm: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+    vmsumuhm:  => bf159d48d278409ce61b6430faf80709 (00000000)
+
+    vmsumshs: 0102030405060708090a0b0c0e0d0e0f, 0102030405060708090a0b0c0e0d0e0f, 0102030405060708090a0b0c0e0d0e0f
+    vmsumshs:  => 010c1f180550b36c09d5c8000f981f99 (00000000)
+    vmsumshs: 0102030405060708090a0b0c0e0d0e0f, 0102030405060708090a0b0c0e0d0e0f, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+    vmsumshs:  => f1fd1008f641a45cfac6b8f000891089 (00000000)
+    vmsumshs: 0102030405060708090a0b0c0e0d0e0f, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 0102030405060708090a0b0c0e0d0e0f
+    vmsumshs:  => 00cf84b8049b208c08a73ca00df0b9d9 (00000000)
+    vmsumshs: 0102030405060708090a0b0c0e0d0e0f, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+    vmsumshs:  => f1c075a8f58c117cf9982d90fee1aac9 (00000000)
+    vmsumshs: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 0102030405060708090a0b0c0e0d0e0f, 0102030405060708090a0b0c0e0d0e0f
+    vmsumshs:  => 00cf84b8049b208c08a73ca00df0b9d9 (00000000)
+    vmsumshs: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 0102030405060708090a0b0c0e0d0e0f, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+    vmsumshs:  => f1c075a8f58c117cf9982d90fee1aac9 (00000000)
+    vmsumshs: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 0102030405060708090a0b0c0e0d0e0f
+    vmsumshs:  => 0258ac5805ab4fac093e73400e0f1619 (00000000)
+    vmsumshs: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+    vmsumshs:  => f3499d48f69c409cfa2f6430ff000709 (00000000)
+
+    vmsumuhs: 0102030405060708090a0b0c0e0d0e0f, 0102030405060708090a0b0c0e0d0e0f, 0102030405060708090a0b0c0e0d0e0f
+    vmsumuhs:  => 010c1f180550b36c09d5c8000f981f99 (00000000)
+    vmsumuhs: 0102030405060708090a0b0c0e0d0e0f, 0102030405060708090a0b0c0e0d0e0f, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+    vmsumuhs:  => f1fd1008f641a45cfac6b8f0ffffffff (00000000)
+    vmsumuhs: 0102030405060708090a0b0c0e0d0e0f, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 0102030405060708090a0b0c0e0d0e0f
+    vmsumuhs:  => 04d584b810a9208c1cbd3ca02a0cb9d9 (00000000)
+    vmsumuhs: 0102030405060708090a0b0c0e0d0e0f, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+    vmsumuhs:  => f5c675a8ffffffffffffffffffffffff (00000000)
+    vmsumuhs: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 0102030405060708090a0b0c0e0d0e0f, 0102030405060708090a0b0c0e0d0e0f
+    vmsumuhs:  => 04d584b810a9208c1cbd3ca02a0cb9d9 (00000000)
+    vmsumuhs: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 0102030405060708090a0b0c0e0d0e0f, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+    vmsumuhs:  => f5c675a8ffffffffffffffffffffffff (00000000)
+    vmsumuhs: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 0102030405060708090a0b0c0e0d0e0f
+    vmsumuhs:  => ffffffffffffffffffffffffffffffff (00000000)
+    vmsumuhs: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+    vmsumuhs:  => ffffffffffffffffffffffffffffffff (00000000)
+
+    vmsummbm: 0102030405060708090a0b0c0e0d0e0f, 0102030405060708090a0b0c0e0d0e0f, 0102030405060708090a0b0c0e0d0e0f
+    vmsummbm:  => 01020322050607b6090a0cca0e0d1121 (00000000)
+    vmsummbm: 0102030405060708090a0b0c0e0d0e0f, 0102030405060708090a0b0c0e0d0e0f, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+    vmsummbm:  => f1f2f412f5f6f8a6f9fafdbafefe0211 (00000000)
+    vmsummbm: 0102030405060708090a0b0c0e0d0e0f, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 0102030405060708090a0b0c0e0d0e0f
+    vmsummbm:  => 01020c8205062016090a342a0e0d45a1 (00000000)
+    vmsummbm: 0102030405060708090a0b0c0e0d0e0f, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+    vmsummbm:  => f1f2fd72f5f71106f9fb251afefe3691 (00000000)
+    vmsummbm: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 0102030405060708090a0b0c0e0d0e0f, 0102030405060708090a0b0c0e0d0e0f
+    vmsummbm:  => 0102028205060616090a0a2a0e0d0da1 (00000000)
+    vmsummbm: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 0102030405060708090a0b0c0e0d0e0f, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+    vmsummbm:  => f1f2f372f5f6f706f9fafb1afefdfe91 (00000000)
+    vmsummbm: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 0102030405060708090a0b0c0e0d0e0f
+    vmsummbm:  => 0101cfe20505e2760909f58a0e0d0621 (00000000)
+    vmsummbm: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+    vmsummbm:  => f1f2c0d2f5f6d366f9fae67afefdf711 (00000000)
+
+    vmsumshm: 0102030405060708090a0b0c0e0d0e0f, 0102030405060708090a0b0c0e0d0e0f, 0102030405060708090a0b0c0e0d0e0f
+    vmsumshm:  => 010c1f180550b36c09d5c8000f981f99 (00000000)
+    vmsumshm: 0102030405060708090a0b0c0e0d0e0f, 0102030405060708090a0b0c0e0d0e0f, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+    vmsumshm:  => f1fd1008f641a45cfac6b8f000891089 (00000000)
+    vmsumshm: 0102030405060708090a0b0c0e0d0e0f, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 0102030405060708090a0b0c0e0d0e0f
+    vmsumshm:  => 00cf84b8049b208c08a73ca00df0b9d9 (00000000)
+    vmsumshm: 0102030405060708090a0b0c0e0d0e0f, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+    vmsumshm:  => f1c075a8f58c117cf9982d90fee1aac9 (00000000)
+    vmsumshm: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 0102030405060708090a0b0c0e0d0e0f, 0102030405060708090a0b0c0e0d0e0f
+    vmsumshm:  => 00cf84b8049b208c08a73ca00df0b9d9 (00000000)
+    vmsumshm: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 0102030405060708090a0b0c0e0d0e0f, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+    vmsumshm:  => f1c075a8f58c117cf9982d90fee1aac9 (00000000)
+    vmsumshm: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 0102030405060708090a0b0c0e0d0e0f
+    vmsumshm:  => 0258ac5805ab4fac093e73400e0f1619 (00000000)
+    vmsumshm: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+    vmsumshm:  => f3499d48f69c409cfa2f6430ff000709 (00000000)
+
+PPC altivec integer logical insns with three args:
+       vperm: 0102030405060708090a0b0c0e0d0e0f, 0102030405060708090a0b0c0e0d0e0f, 0102030405060708090a0b0c0e0d0e0f
+       vperm:  => 02030405060708090a0b0c0e0e0d0e0f (00000000)
+       vperm: 0102030405060708090a0b0c0e0d0e0f, 0102030405060708090a0b0c0e0d0e0f, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+       vperm:  => 02030405060708090a0b0c0e0e0d0e0f (00000000)
+       vperm: 0102030405060708090a0b0c0e0d0e0f, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 0102030405060708090a0b0c0e0d0e0f
+       vperm:  => 02030405060708090a0b0c0e0e0d0e0f (00000000)
+       vperm: 0102030405060708090a0b0c0e0d0e0f, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+       vperm:  => f2f3f4f5f6f7f8f9fafbfcfefefdfeff (00000000)
+       vperm: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 0102030405060708090a0b0c0e0d0e0f, 0102030405060708090a0b0c0e0d0e0f
+       vperm:  => f2f3f4f5f6f7f8f9fafbfcfefefdfeff (00000000)
+       vperm: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 0102030405060708090a0b0c0e0d0e0f, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+       vperm:  => 02030405060708090a0b0c0e0e0d0e0f (00000000)
+       vperm: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 0102030405060708090a0b0c0e0d0e0f
+       vperm:  => f2f3f4f5f6f7f8f9fafbfcfefefdfeff (00000000)
+       vperm: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+       vperm:  => f2f3f4f5f6f7f8f9fafbfcfefefdfeff (00000000)
+
+        vsel: 0102030405060708090a0b0c0e0d0e0f, 0102030405060708090a0b0c0e0d0e0f, 0102030405060708090a0b0c0e0d0e0f
+        vsel:  => 0102030405060708090a0b0c0e0d0e0f (00000000)
+        vsel: 0102030405060708090a0b0c0e0d0e0f, 0102030405060708090a0b0c0e0d0e0f, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+        vsel:  => 0102030405060708090a0b0c0e0d0e0f (00000000)
+        vsel: 0102030405060708090a0b0c0e0d0e0f, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 0102030405060708090a0b0c0e0d0e0f
+        vsel:  => 0102030405060708090a0b0c0e0d0e0f (00000000)
+        vsel: 0102030405060708090a0b0c0e0d0e0f, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+        vsel:  => f1f2f3f4f5f6f7f8f9fafbfcfefdfeff (00000000)
+        vsel: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 0102030405060708090a0b0c0e0d0e0f, 0102030405060708090a0b0c0e0d0e0f
+        vsel:  => f1f2f3f4f5f6f7f8f9fafbfcfefdfeff (00000000)
+        vsel: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 0102030405060708090a0b0c0e0d0e0f, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+        vsel:  => 0102030405060708090a0b0c0e0d0e0f (00000000)
+        vsel: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 0102030405060708090a0b0c0e0d0e0f
+        vsel:  => f1f2f3f4f5f6f7f8f9fafbfcfefdfeff (00000000)
+        vsel: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+        vsel:  => f1f2f3f4f5f6f7f8f9fafbfcfefdfeff (00000000)
+
+PPC altivec integer arith insns with two args:
+     vaddubm: 0102030405060708090a0b0c0e0d0e0f, 0102030405060708090a0b0c0e0d0e0f
+     vaddubm:  => 02040608 0a0c0e10 12141618 1c1a1c1e (00000000)
+     vaddubm: 0102030405060708090a0b0c0e0d0e0f, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+     vaddubm:  => f2f4f6f8 fafcfe00 02040608 0c0a0c0e (00000000)
+     vaddubm: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 0102030405060708090a0b0c0e0d0e0f
+     vaddubm:  => f2f4f6f8 fafcfe00 02040608 0c0a0c0e (00000000)
+     vaddubm: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+     vaddubm:  => e2e4e6e8 eaeceef0 f2f4f6f8 fcfafcfe (00000000)
+
+     vadduhm: 0102030405060708090a0b0c0e0d0e0f, 0102030405060708090a0b0c0e0d0e0f
+     vadduhm:  => 02040608 0a0c0e10 12141618 1c1a1c1e (00000000)
+     vadduhm: 0102030405060708090a0b0c0e0d0e0f, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+     vadduhm:  => f2f4f6f8 fafcff00 03040708 0d0a0d0e (00000000)
+     vadduhm: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 0102030405060708090a0b0c0e0d0e0f
+     vadduhm:  => f2f4f6f8 fafcff00 03040708 0d0a0d0e (00000000)
+     vadduhm: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+     vadduhm:  => e3e4e7e8 ebeceff0 f3f4f7f8 fdfafdfe (00000000)
+
+     vadduwm: 0102030405060708090a0b0c0e0d0e0f, 0102030405060708090a0b0c0e0d0e0f
+     vadduwm:  => 02040608 0a0c0e10 12141618 1c1a1c1e (00000000)
+     vadduwm: 0102030405060708090a0b0c0e0d0e0f, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+     vadduwm:  => f2f4f6f8 fafcff00 03050708 0d0b0d0e (00000000)
+     vadduwm: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 0102030405060708090a0b0c0e0d0e0f
+     vadduwm:  => f2f4f6f8 fafcff00 03050708 0d0b0d0e (00000000)
+     vadduwm: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+     vadduwm:  => e3e5e7e8 ebedeff0 f3f5f7f8 fdfbfdfe (00000000)
+
+     vaddubs: 0102030405060708090a0b0c0e0d0e0f, 0102030405060708090a0b0c0e0d0e0f
+     vaddubs:  => 02040608 0a0c0e10 12141618 1c1a1c1e (00000000)
+     vaddubs: 0102030405060708090a0b0c0e0d0e0f, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+     vaddubs:  => f2f4f6f8 fafcfeff ffffffff ffffffff (00000000)
+     vaddubs: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 0102030405060708090a0b0c0e0d0e0f
+     vaddubs:  => f2f4f6f8 fafcfeff ffffffff ffffffff (00000000)
+     vaddubs: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+     vaddubs:  => ffffffff ffffffff ffffffff ffffffff (00000000)
+
+     vadduhs: 0102030405060708090a0b0c0e0d0e0f, 0102030405060708090a0b0c0e0d0e0f
+     vadduhs:  => 02040608 0a0c0e10 12141618 1c1a1c1e (00000000)
+     vadduhs: 0102030405060708090a0b0c0e0d0e0f, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+     vadduhs:  => f2f4f6f8 fafcff00 ffffffff ffffffff (00000000)
+     vadduhs: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 0102030405060708090a0b0c0e0d0e0f
+     vadduhs:  => f2f4f6f8 fafcff00 ffffffff ffffffff (00000000)
+     vadduhs: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+     vadduhs:  => ffffffff ffffffff ffffffff ffffffff (00000000)
+
+     vadduws: 0102030405060708090a0b0c0e0d0e0f, 0102030405060708090a0b0c0e0d0e0f
+     vadduws:  => 02040608 0a0c0e10 12141618 1c1a1c1e (00000000)
+     vadduws: 0102030405060708090a0b0c0e0d0e0f, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+     vadduws:  => f2f4f6f8 fafcff00 ffffffff ffffffff (00000000)
+     vadduws: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 0102030405060708090a0b0c0e0d0e0f
+     vadduws:  => f2f4f6f8 fafcff00 ffffffff ffffffff (00000000)
+     vadduws: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+     vadduws:  => ffffffff ffffffff ffffffff ffffffff (00000000)
+
+     vaddsbs: 0102030405060708090a0b0c0e0d0e0f, 0102030405060708090a0b0c0e0d0e0f
+     vaddsbs:  => 02040608 0a0c0e10 12141618 1c1a1c1e (00000000)
+     vaddsbs: 0102030405060708090a0b0c0e0d0e0f, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+     vaddsbs:  => f2f4f6f8 fafcfe00 02040608 0c0a0c0e (00000000)
+     vaddsbs: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 0102030405060708090a0b0c0e0d0e0f
+     vaddsbs:  => f2f4f6f8 fafcfe00 02040608 0c0a0c0e (00000000)
+     vaddsbs: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+     vaddsbs:  => e2e4e6e8 eaeceef0 f2f4f6f8 fcfafcfe (00000000)
+
+     vaddshs: 0102030405060708090a0b0c0e0d0e0f, 0102030405060708090a0b0c0e0d0e0f
+     vaddshs:  => 02040608 0a0c0e10 12141618 1c1a1c1e (00000000)
+     vaddshs: 0102030405060708090a0b0c0e0d0e0f, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+     vaddshs:  => f2f4f6f8 fafcff00 03040708 0d0a0d0e (00000000)
+     vaddshs: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 0102030405060708090a0b0c0e0d0e0f
+     vaddshs:  => f2f4f6f8 fafcff00 03040708 0d0a0d0e (00000000)
+     vaddshs: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+     vaddshs:  => e3e4e7e8 ebeceff0 f3f4f7f8 fdfafdfe (00000000)
+
+     vaddsws: 0102030405060708090a0b0c0e0d0e0f, 0102030405060708090a0b0c0e0d0e0f
+     vaddsws:  => 02040608 0a0c0e10 12141618 1c1a1c1e (00000000)
+     vaddsws: 0102030405060708090a0b0c0e0d0e0f, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+     vaddsws:  => f2f4f6f8 fafcff00 03050708 0d0b0d0e (00000000)
+     vaddsws: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 0102030405060708090a0b0c0e0d0e0f
+     vaddsws:  => f2f4f6f8 fafcff00 03050708 0d0b0d0e (00000000)
+     vaddsws: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+     vaddsws:  => e3e5e7e8 ebedeff0 f3f5f7f8 fdfbfdfe (00000000)
+
+     vaddcuw: 0102030405060708090a0b0c0e0d0e0f, 0102030405060708090a0b0c0e0d0e0f
+     vaddcuw:  => 00000000 00000000 00000000 00000000 (00000000)
+     vaddcuw: 0102030405060708090a0b0c0e0d0e0f, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+     vaddcuw:  => 00000000 00000000 00000001 00000001 (00000000)
+     vaddcuw: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 0102030405060708090a0b0c0e0d0e0f
+     vaddcuw:  => 00000000 00000000 00000001 00000001 (00000000)
+     vaddcuw: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+     vaddcuw:  => 00000001 00000001 00000001 00000001 (00000000)
+
+     vsububm: 0102030405060708090a0b0c0e0d0e0f, 0102030405060708090a0b0c0e0d0e0f
+     vsububm:  => 00000000 00000000 00000000 00000000 (00000000)
+     vsububm: 0102030405060708090a0b0c0e0d0e0f, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+     vsububm:  => 10101010 10101010 10101010 10101010 (00000000)
+     vsububm: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 0102030405060708090a0b0c0e0d0e0f
+     vsububm:  => f0f0f0f0 f0f0f0f0 f0f0f0f0 f0f0f0f0 (00000000)
+     vsububm: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+     vsububm:  => 00000000 00000000 00000000 00000000 (00000000)
+
+     vsubuhm: 0102030405060708090a0b0c0e0d0e0f, 0102030405060708090a0b0c0e0d0e0f
+     vsubuhm:  => 00000000 00000000 00000000 00000000 (00000000)
+     vsubuhm: 0102030405060708090a0b0c0e0d0e0f, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+     vsubuhm:  => 0f100f10 0f100f10 0f100f10 0f100f10 (00000000)
+     vsubuhm: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 0102030405060708090a0b0c0e0d0e0f
+     vsubuhm:  => f0f0f0f0 f0f0f0f0 f0f0f0f0 f0f0f0f0 (00000000)
+     vsubuhm: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+     vsubuhm:  => 00000000 00000000 00000000 00000000 (00000000)
+
+     vsubuwm: 0102030405060708090a0b0c0e0d0e0f, 0102030405060708090a0b0c0e0d0e0f
+     vsubuwm:  => 00000000 00000000 00000000 00000000 (00000000)
+     vsubuwm: 0102030405060708090a0b0c0e0d0e0f, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+     vsubuwm:  => 0f0f0f10 0f0f0f10 0f0f0f10 0f0f0f10 (00000000)
+     vsubuwm: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 0102030405060708090a0b0c0e0d0e0f
+     vsubuwm:  => f0f0f0f0 f0f0f0f0 f0f0f0f0 f0f0f0f0 (00000000)
+     vsubuwm: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+     vsubuwm:  => 00000000 00000000 00000000 00000000 (00000000)
+
+     vsububs: 0102030405060708090a0b0c0e0d0e0f, 0102030405060708090a0b0c0e0d0e0f
+     vsububs:  => 00000000 00000000 00000000 00000000 (00000000)
+     vsububs: 0102030405060708090a0b0c0e0d0e0f, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+     vsububs:  => 00000000 00000000 00000000 00000000 (00000000)
+     vsububs: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 0102030405060708090a0b0c0e0d0e0f
+     vsububs:  => f0f0f0f0 f0f0f0f0 f0f0f0f0 f0f0f0f0 (00000000)
+     vsububs: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+     vsububs:  => 00000000 00000000 00000000 00000000 (00000000)
+
+     vsubuhs: 0102030405060708090a0b0c0e0d0e0f, 0102030405060708090a0b0c0e0d0e0f
+     vsubuhs:  => 00000000 00000000 00000000 00000000 (00000000)
+     vsubuhs: 0102030405060708090a0b0c0e0d0e0f, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+     vsubuhs:  => 00000000 00000000 00000000 00000000 (00000000)
+     vsubuhs: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 0102030405060708090a0b0c0e0d0e0f
+     vsubuhs:  => f0f0f0f0 f0f0f0f0 f0f0f0f0 f0f0f0f0 (00000000)
+     vsubuhs: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+     vsubuhs:  => 00000000 00000000 00000000 00000000 (00000000)
+
+     vsubuws: 0102030405060708090a0b0c0e0d0e0f, 0102030405060708090a0b0c0e0d0e0f
+     vsubuws:  => 00000000 00000000 00000000 00000000 (00000000)
+     vsubuws: 0102030405060708090a0b0c0e0d0e0f, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+     vsubuws:  => 00000000 00000000 00000000 00000000 (00000000)
+     vsubuws: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 0102030405060708090a0b0c0e0d0e0f
+     vsubuws:  => f0f0f0f0 f0f0f0f0 f0f0f0f0 f0f0f0f0 (00000000)
+     vsubuws: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+     vsubuws:  => 00000000 00000000 00000000 00000000 (00000000)
+
+     vsubsbs: 0102030405060708090a0b0c0e0d0e0f, 0102030405060708090a0b0c0e0d0e0f
+     vsubsbs:  => 00000000 00000000 00000000 00000000 (00000000)
+     vsubsbs: 0102030405060708090a0b0c0e0d0e0f, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+     vsubsbs:  => 10101010 10101010 10101010 10101010 (00000000)
+     vsubsbs: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 0102030405060708090a0b0c0e0d0e0f
+     vsubsbs:  => f0f0f0f0 f0f0f0f0 f0f0f0f0 f0f0f0f0 (00000000)
+     vsubsbs: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+     vsubsbs:  => 00000000 00000000 00000000 00000000 (00000000)
+
+     vsubshs: 0102030405060708090a0b0c0e0d0e0f, 0102030405060708090a0b0c0e0d0e0f
+     vsubshs:  => 00000000 00000000 00000000 00000000 (00000000)
+     vsubshs: 0102030405060708090a0b0c0e0d0e0f, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+     vsubshs:  => 0f100f10 0f100f10 0f100f10 0f100f10 (00000000)
+     vsubshs: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 0102030405060708090a0b0c0e0d0e0f
+     vsubshs:  => f0f0f0f0 f0f0f0f0 f0f0f0f0 f0f0f0f0 (00000000)
+     vsubshs: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+     vsubshs:  => 00000000 00000000 00000000 00000000 (00000000)
+
+     vsubsws: 0102030405060708090a0b0c0e0d0e0f, 0102030405060708090a0b0c0e0d0e0f
+     vsubsws:  => 00000000 00000000 00000000 00000000 (00000000)
+     vsubsws: 0102030405060708090a0b0c0e0d0e0f, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+     vsubsws:  => 0f0f0f10 0f0f0f10 0f0f0f10 0f0f0f10 (00000000)
+     vsubsws: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 0102030405060708090a0b0c0e0d0e0f
+     vsubsws:  => f0f0f0f0 f0f0f0f0 f0f0f0f0 f0f0f0f0 (00000000)
+     vsubsws: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+     vsubsws:  => 00000000 00000000 00000000 00000000 (00000000)
+
+     vsubcuw: 0102030405060708090a0b0c0e0d0e0f, 0102030405060708090a0b0c0e0d0e0f
+     vsubcuw:  => 00000001 00000001 00000001 00000001 (00000000)
+     vsubcuw: 0102030405060708090a0b0c0e0d0e0f, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+     vsubcuw:  => 00000000 00000000 00000000 00000000 (00000000)
+     vsubcuw: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 0102030405060708090a0b0c0e0d0e0f
+     vsubcuw:  => 00000001 00000001 00000001 00000001 (00000000)
+     vsubcuw: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+     vsubcuw:  => 00000001 00000001 00000001 00000001 (00000000)
+
+     vmuloub: 0102030405060708090a0b0c0e0d0e0f, 0102030405060708090a0b0c0e0d0e0f
+     vmuloub:  => 00040010 00240040 00640090 00a900e1 (00000000)
+     vmuloub: 0102030405060708090a0b0c0e0d0e0f, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+     vmuloub:  => 01e403d0 05c407c0 09c40bd0 0cd90ef1 (00000000)
+     vmuloub: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 0102030405060708090a0b0c0e0d0e0f
+     vmuloub:  => 01e403d0 05c407c0 09c40bd0 0cd90ef1 (00000000)
+     vmuloub: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+     vmuloub:  => e4c4e890 ec64f040 f424f810 fa09fe01 (00000000)
+
+     vmulouh: 0102030405060708090a0b0c0e0d0e0f, 0102030405060708090a0b0c0e0d0e0f
+     vmulouh:  => 00091810 00317040 007a0890 00c5a4e1 (00000000)
+     vmulouh: 0102030405060708090a0b0c0e0d0e0f, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+     vmulouh:  => 02dfabd0 06cf87c0 0adfa3d0 0e00e2f1 (00000000)
+     vmulouh: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 0102030405060708090a0b0c0e0d0e0f
+     vmulouh:  => 02dfabd0 06cf87c0 0adfa3d0 0e00e2f1 (00000000)
+     vmulouh: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+     vmulouh:  => e8792090 f0308040 f8082010 fdff0201 (00000000)
+
+     vmulosb: 0102030405060708090a0b0c0e0d0e0f, 0102030405060708090a0b0c0e0d0e0f
+     vmulosb:  => 00040010 00240040 00640090 00a900e1 (00000000)
+     vmulosb: 0102030405060708090a0b0c0e0d0e0f, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+     vmulosb:  => ffe4ffd0 ffc4ffc0 ffc4ffd0 ffd9fff1 (00000000)
+     vmulosb: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 0102030405060708090a0b0c0e0d0e0f
+     vmulosb:  => ffe4ffd0 ffc4ffc0 ffc4ffd0 ffd9fff1 (00000000)
+     vmulosb: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+     vmulosb:  => 00c40090 00640040 00240010 00090001 (00000000)
+
+     vmulosh: 0102030405060708090a0b0c0e0d0e0f, 0102030405060708090a0b0c0e0d0e0f
+     vmulosh:  => 00091810 00317040 007a0890 00c5a4e1 (00000000)
+     vmulosh: 0102030405060708090a0b0c0e0d0e0f, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+     vmulosh:  => ffdbabd0 ffc787c0 ffd3a3d0 fff1e2f1 (00000000)
+     vmulosh: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 0102030405060708090a0b0c0e0d0e0f
+     vmulosh:  => ffdbabd0 ffc787c0 ffd3a3d0 fff1e2f1 (00000000)
+     vmulosh: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+     vmulosh:  => 00912090 00408040 00102010 00010201 (00000000)
+
+     vmuleub: 0102030405060708090a0b0c0e0d0e0f, 0102030405060708090a0b0c0e0d0e0f
+     vmuleub:  => 00010009 00190031 00510079 00c400c4 (00000000)
+     vmuleub: 0102030405060708090a0b0c0e0d0e0f, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+     vmuleub:  => 00f102d9 04c906c1 08c10ac9 0de40de4 (00000000)
+     vmuleub: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 0102030405060708090a0b0c0e0d0e0f
+     vmuleub:  => 00f102d9 04c906c1 08c10ac9 0de40de4 (00000000)
+     vmuleub: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+     vmuleub:  => e2e1e6a9 ea79ee51 f231f619 fc04fc04 (00000000)
+
+     vmuleuh: 0102030405060708090a0b0c0e0d0e0f, 0102030405060708090a0b0c0e0d0e0f
+     vmuleuh:  => 00010404 00193c24 0051b464 00c56ca9 (00000000)
+     vmuleuh: 0102030405060708090a0b0c0e0d0e0f, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+     vmuleuh:  => 00f3d5e4 04d391c4 08d38dc4 0dfec8d9 (00000000)
+     vmuleuh: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 0102030405060708090a0b0c0e0d0e0f
+     vmuleuh:  => 00f3d5e4 04d391c4 08d38dc4 0dfec8d9 (00000000)
+     vmuleuh: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+     vmuleuh:  => e4a988c4 ec50c864 f4184824 fdfb0609 (00000000)
+
+     vmulesb: 0102030405060708090a0b0c0e0d0e0f, 0102030405060708090a0b0c0e0d0e0f
+     vmulesb:  => 00010009 00190031 00510079 00c400c4 (00000000)
+     vmulesb: 0102030405060708090a0b0c0e0d0e0f, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+     vmulesb:  => fff1ffd9 ffc9ffc1 ffc1ffc9 ffe4ffe4 (00000000)
+     vmulesb: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 0102030405060708090a0b0c0e0d0e0f
+     vmulesb:  => fff1ffd9 ffc9ffc1 ffc1ffc9 ffe4ffe4 (00000000)
+     vmulesb: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+     vmulesb:  => 00e100a9 00790051 00310019 00040004 (00000000)
+
+     vmulesh: 0102030405060708090a0b0c0e0d0e0f, 0102030405060708090a0b0c0e0d0e0f
+     vmulesh:  => 00010404 00193c24 0051b464 00c56ca9 (00000000)
+     vmulesh: 0102030405060708090a0b0c0e0d0e0f, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+     vmulesh:  => fff1d5e4 ffcd91c4 ffc98dc4 fff1c8d9 (00000000)
+     vmulesh: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 0102030405060708090a0b0c0e0d0e0f
+     vmulesh:  => fff1d5e4 ffcd91c4 ffc98dc4 fff1c8d9 (00000000)
+     vmulesh: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+     vmulesh:  => 00c588c4 0064c864 00244824 00010609 (00000000)
+
+     vsumsws: 0102030405060708090a0b0c0e0d0e0f, 0102030405060708090a0b0c0e0d0e0f
+     vsumsws:  => 00000000 00000000 00000000 2b2c3136 (00000000)
+     vsumsws: 0102030405060708090a0b0c0e0d0e0f, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+     vsumsws:  => 00000000 00000000 00000000 1c1d2226 (00000000)
+     vsumsws: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 0102030405060708090a0b0c0e0d0e0f
+     vsumsws:  => 00000000 00000000 00000000 eeeff4f6 (00000000)
+     vsumsws: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+     vsumsws:  => 00000000 00000000 00000000 dfe0e5e6 (00000000)
+
+    vsum2sws: 0102030405060708090a0b0c0e0d0e0f, 0102030405060708090a0b0c0e0d0e0f
+    vsum2sws:  => 00000000 0b0e1114 00000000 2524272a (00000000)
+    vsum2sws: 0102030405060708090a0b0c0e0d0e0f, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+    vsum2sws:  => 00000000 fbff0204 00000000 1615181a (00000000)
+    vsum2sws: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 0102030405060708090a0b0c0e0d0e0f
+    vsum2sws:  => 00000000 eceff2f4 00000000 0706090a (00000000)
+    vsum2sws: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+    vsum2sws:  => 00000000 dde0e3e4 00000000 f7f6f9fa (00000000)
+
+    vsum4ubs: 0102030405060708090a0b0c0e0d0e0f, 0102030405060708090a0b0c0e0d0e0f
+    vsum4ubs:  => 0102030e 05060722 090a0b36 0e0d0e47 (00000000)
+    vsum4ubs: 0102030405060708090a0b0c0e0d0e0f, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+    vsum4ubs:  => f1f2f3fe f5f6f812 f9fafc26 fefdff37 (00000000)
+    vsum4ubs: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 0102030405060708090a0b0c0e0d0e0f
+    vsum4ubs:  => 010206ce 05060ae2 090a0ef6 0e0d1207 (00000000)
+    vsum4ubs: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+    vsum4ubs:  => f1f2f7be f5f6fbd2 f9faffe6 fefe02f7 (00000000)
+
+    vsum4sbs: 0102030405060708090a0b0c0e0d0e0f, 0102030405060708090a0b0c0e0d0e0f
+    vsum4sbs:  => 0102030e 05060722 090a0b36 0e0d0e47 (00000000)
+    vsum4sbs: 0102030405060708090a0b0c0e0d0e0f, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+    vsum4sbs:  => f1f2f3fe f5f6f812 f9fafc26 fefdff37 (00000000)
+    vsum4sbs: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 0102030405060708090a0b0c0e0d0e0f
+    vsum4sbs:  => 010202ce 050606e2 090a0af6 0e0d0e07 (00000000)
+    vsum4sbs: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+    vsum4sbs:  => f1f2f3be f5f6f7d2 f9fafbe6 fefdfef7 (00000000)
+
+    vsum4shs: 0102030405060708090a0b0c0e0d0e0f, 0102030405060708090a0b0c0e0d0e0f
+    vsum4shs:  => 0102070a 05061316 090a1f22 0e0d2a2b (00000000)
+    vsum4shs: 0102030405060708090a0b0c0e0d0e0f, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+    vsum4shs:  => f1f2f7fa f5f70406 f9fb1012 fefe1b1b (00000000)
+    vsum4shs: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 0102030405060708090a0b0c0e0d0e0f
+    vsum4shs:  => 0101e8ea 0505f4f6 090a0102 0e0d0c0b (00000000)
+    vsum4shs: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+    vsum4shs:  => f1f2d9da f5f6e5e6 f9faf1f2 fefdfcfb (00000000)
+
+      vavgub: 0102030405060708090a0b0c0e0d0e0f, 0102030405060708090a0b0c0e0d0e0f
+      vavgub:  => 01020304 05060708 090a0b0c 0e0d0e0f (00000000)
+      vavgub: 0102030405060708090a0b0c0e0d0e0f, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+      vavgub:  => 797a7b7c 7d7e7f80 81828384 86858687 (00000000)
+      vavgub: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 0102030405060708090a0b0c0e0d0e0f
+      vavgub:  => 797a7b7c 7d7e7f80 81828384 86858687 (00000000)
+      vavgub: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+      vavgub:  => f1f2f3f4 f5f6f7f8 f9fafbfc fefdfeff (00000000)
+
+      vavguh: 0102030405060708090a0b0c0e0d0e0f, 0102030405060708090a0b0c0e0d0e0f
+      vavguh:  => 01020304 05060708 090a0b0c 0e0d0e0f (00000000)
+      vavguh: 0102030405060708090a0b0c0e0d0e0f, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+      vavguh:  => 797a7b7c 7d7e7f80 81828384 86858687 (00000000)
+      vavguh: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 0102030405060708090a0b0c0e0d0e0f
+      vavguh:  => 797a7b7c 7d7e7f80 81828384 86858687 (00000000)
+      vavguh: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+      vavguh:  => f1f2f3f4 f5f6f7f8 f9fafbfc fefdfeff (00000000)
+
+      vavguw: 0102030405060708090a0b0c0e0d0e0f, 0102030405060708090a0b0c0e0d0e0f
+      vavguw:  => 01020304 05060708 090a0b0c 0e0d0e0f (00000000)
+      vavguw: 0102030405060708090a0b0c0e0d0e0f, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+      vavguw:  => 797a7b7c 7d7e7f80 81828384 86858687 (00000000)
+      vavguw: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 0102030405060708090a0b0c0e0d0e0f
+      vavguw:  => 797a7b7c 7d7e7f80 81828384 86858687 (00000000)
+      vavguw: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+      vavguw:  => f1f2f3f4 f5f6f7f8 f9fafbfc fefdfeff (00000000)
+
+      vavgsb: 0102030405060708090a0b0c0e0d0e0f, 0102030405060708090a0b0c0e0d0e0f
+      vavgsb:  => 01020304 05060708 090a0b0c 0e0d0e0f (00000000)
+      vavgsb: 0102030405060708090a0b0c0e0d0e0f, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+      vavgsb:  => f9fafbfc fdfeff00 01020304 06050607 (00000000)
+      vavgsb: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 0102030405060708090a0b0c0e0d0e0f
+      vavgsb:  => f9fafbfc fdfeff00 01020304 06050607 (00000000)
+      vavgsb: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+      vavgsb:  => f1f2f3f4 f5f6f7f8 f9fafbfc fefdfeff (00000000)
+
+      vavgsh: 0102030405060708090a0b0c0e0d0e0f, 0102030405060708090a0b0c0e0d0e0f
+      vavgsh:  => 01020304 05060708 090a0b0c 0e0d0e0f (00000000)
+      vavgsh: 0102030405060708090a0b0c0e0d0e0f, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+      vavgsh:  => f97afb7c fd7eff80 01820384 06850687 (00000000)
+      vavgsh: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 0102030405060708090a0b0c0e0d0e0f
+      vavgsh:  => f97afb7c fd7eff80 01820384 06850687 (00000000)
+      vavgsh: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+      vavgsh:  => f1f2f3f4 f5f6f7f8 f9fafbfc fefdfeff (00000000)
+
+      vavgsw: 0102030405060708090a0b0c0e0d0e0f, 0102030405060708090a0b0c0e0d0e0f
+      vavgsw:  => 01020304 05060708 090a0b0c 0e0d0e0f (00000000)
+      vavgsw: 0102030405060708090a0b0c0e0d0e0f, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+      vavgsw:  => f97a7b7c fd7e7f80 01828384 06858687 (00000000)
+      vavgsw: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 0102030405060708090a0b0c0e0d0e0f
+      vavgsw:  => f97a7b7c fd7e7f80 01828384 06858687 (00000000)
+      vavgsw: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+      vavgsw:  => f1f2f3f4 f5f6f7f8 f9fafbfc fefdfeff (00000000)
+
+      vmaxub: 0102030405060708090a0b0c0e0d0e0f, 0102030405060708090a0b0c0e0d0e0f
+      vmaxub:  => 01020304 05060708 090a0b0c 0e0d0e0f (00000000)
+      vmaxub: 0102030405060708090a0b0c0e0d0e0f, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+      vmaxub:  => f1f2f3f4 f5f6f7f8 f9fafbfc fefdfeff (00000000)
+      vmaxub: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 0102030405060708090a0b0c0e0d0e0f
+      vmaxub:  => f1f2f3f4 f5f6f7f8 f9fafbfc fefdfeff (00000000)
+      vmaxub: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+      vmaxub:  => f1f2f3f4 f5f6f7f8 f9fafbfc fefdfeff (00000000)
+
+      vmaxuh: 0102030405060708090a0b0c0e0d0e0f, 0102030405060708090a0b0c0e0d0e0f
+      vmaxuh:  => 01020304 05060708 090a0b0c 0e0d0e0f (00000000)
+      vmaxuh: 0102030405060708090a0b0c0e0d0e0f, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+      vmaxuh:  => f1f2f3f4 f5f6f7f8 f9fafbfc fefdfeff (00000000)
+      vmaxuh: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 0102030405060708090a0b0c0e0d0e0f
+      vmaxuh:  => f1f2f3f4 f5f6f7f8 f9fafbfc fefdfeff (00000000)
+      vmaxuh: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+      vmaxuh:  => f1f2f3f4 f5f6f7f8 f9fafbfc fefdfeff (00000000)
+
+      vmaxuw: 0102030405060708090a0b0c0e0d0e0f, 0102030405060708090a0b0c0e0d0e0f
+      vmaxuw:  => 01020304 05060708 090a0b0c 0e0d0e0f (00000000)
+      vmaxuw: 0102030405060708090a0b0c0e0d0e0f, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+      vmaxuw:  => f1f2f3f4 f5f6f7f8 f9fafbfc fefdfeff (00000000)
+      vmaxuw: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 0102030405060708090a0b0c0e0d0e0f
+      vmaxuw:  => f1f2f3f4 f5f6f7f8 f9fafbfc fefdfeff (00000000)
+      vmaxuw: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+      vmaxuw:  => f1f2f3f4 f5f6f7f8 f9fafbfc fefdfeff (00000000)
+
+      vmaxsb: 0102030405060708090a0b0c0e0d0e0f, 0102030405060708090a0b0c0e0d0e0f
+      vmaxsb:  => 01020304 05060708 090a0b0c 0e0d0e0f (00000000)
+      vmaxsb: 0102030405060708090a0b0c0e0d0e0f, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+      vmaxsb:  => 01020304 05060708 090a0b0c 0e0d0e0f (00000000)
+      vmaxsb: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 0102030405060708090a0b0c0e0d0e0f
+      vmaxsb:  => 01020304 05060708 090a0b0c 0e0d0e0f (00000000)
+      vmaxsb: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+      vmaxsb:  => f1f2f3f4 f5f6f7f8 f9fafbfc fefdfeff (00000000)
+
+      vmaxsh: 0102030405060708090a0b0c0e0d0e0f, 0102030405060708090a0b0c0e0d0e0f
+      vmaxsh:  => 01020304 05060708 090a0b0c 0e0d0e0f (00000000)
+      vmaxsh: 0102030405060708090a0b0c0e0d0e0f, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+      vmaxsh:  => 01020304 05060708 090a0b0c 0e0d0e0f (00000000)
+      vmaxsh: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 0102030405060708090a0b0c0e0d0e0f
+      vmaxsh:  => 01020304 05060708 090a0b0c 0e0d0e0f (00000000)
+      vmaxsh: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+      vmaxsh:  => f1f2f3f4 f5f6f7f8 f9fafbfc fefdfeff (00000000)
+
+      vmaxsw: 0102030405060708090a0b0c0e0d0e0f, 0102030405060708090a0b0c0e0d0e0f
+      vmaxsw:  => 01020304 05060708 090a0b0c 0e0d0e0f (00000000)
+      vmaxsw: 0102030405060708090a0b0c0e0d0e0f, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+      vmaxsw:  => 01020304 05060708 090a0b0c 0e0d0e0f (00000000)
+      vmaxsw: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 0102030405060708090a0b0c0e0d0e0f
+      vmaxsw:  => 01020304 05060708 090a0b0c 0e0d0e0f (00000000)
+      vmaxsw: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+      vmaxsw:  => f1f2f3f4 f5f6f7f8 f9fafbfc fefdfeff (00000000)
+
+      vminub: 0102030405060708090a0b0c0e0d0e0f, 0102030405060708090a0b0c0e0d0e0f
+      vminub:  => 01020304 05060708 090a0b0c 0e0d0e0f (00000000)
+      vminub: 0102030405060708090a0b0c0e0d0e0f, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+      vminub:  => 01020304 05060708 090a0b0c 0e0d0e0f (00000000)
+      vminub: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 0102030405060708090a0b0c0e0d0e0f
+      vminub:  => 01020304 05060708 090a0b0c 0e0d0e0f (00000000)
+      vminub: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+      vminub:  => f1f2f3f4 f5f6f7f8 f9fafbfc fefdfeff (00000000)
+
+      vminuh: 0102030405060708090a0b0c0e0d0e0f, 0102030405060708090a0b0c0e0d0e0f
+      vminuh:  => 01020304 05060708 090a0b0c 0e0d0e0f (00000000)
+      vminuh: 0102030405060708090a0b0c0e0d0e0f, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+      vminuh:  => 01020304 05060708 090a0b0c 0e0d0e0f (00000000)
+      vminuh: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 0102030405060708090a0b0c0e0d0e0f
+      vminuh:  => 01020304 05060708 090a0b0c 0e0d0e0f (00000000)
+      vminuh: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+      vminuh:  => f1f2f3f4 f5f6f7f8 f9fafbfc fefdfeff (00000000)
+
+      vminuw: 0102030405060708090a0b0c0e0d0e0f, 0102030405060708090a0b0c0e0d0e0f
+      vminuw:  => 01020304 05060708 090a0b0c 0e0d0e0f (00000000)
+      vminuw: 0102030405060708090a0b0c0e0d0e0f, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+      vminuw:  => 01020304 05060708 090a0b0c 0e0d0e0f (00000000)
+      vminuw: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 0102030405060708090a0b0c0e0d0e0f
+      vminuw:  => 01020304 05060708 090a0b0c 0e0d0e0f (00000000)
+      vminuw: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+      vminuw:  => f1f2f3f4 f5f6f7f8 f9fafbfc fefdfeff (00000000)
+
+      vminsb: 0102030405060708090a0b0c0e0d0e0f, 0102030405060708090a0b0c0e0d0e0f
+      vminsb:  => 01020304 05060708 090a0b0c 0e0d0e0f (00000000)
+      vminsb: 0102030405060708090a0b0c0e0d0e0f, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+      vminsb:  => f1f2f3f4 f5f6f7f8 f9fafbfc fefdfeff (00000000)
+      vminsb: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 0102030405060708090a0b0c0e0d0e0f
+      vminsb:  => f1f2f3f4 f5f6f7f8 f9fafbfc fefdfeff (00000000)
+      vminsb: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+      vminsb:  => f1f2f3f4 f5f6f7f8 f9fafbfc fefdfeff (00000000)
+
+      vminsh: 0102030405060708090a0b0c0e0d0e0f, 0102030405060708090a0b0c0e0d0e0f
+      vminsh:  => 01020304 05060708 090a0b0c 0e0d0e0f (00000000)
+      vminsh: 0102030405060708090a0b0c0e0d0e0f, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+      vminsh:  => f1f2f3f4 f5f6f7f8 f9fafbfc fefdfeff (00000000)
+      vminsh: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 0102030405060708090a0b0c0e0d0e0f
+      vminsh:  => f1f2f3f4 f5f6f7f8 f9fafbfc fefdfeff (00000000)
+      vminsh: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+      vminsh:  => f1f2f3f4 f5f6f7f8 f9fafbfc fefdfeff (00000000)
+
+      vminsw: 0102030405060708090a0b0c0e0d0e0f, 0102030405060708090a0b0c0e0d0e0f
+      vminsw:  => 01020304 05060708 090a0b0c 0e0d0e0f (00000000)
+      vminsw: 0102030405060708090a0b0c0e0d0e0f, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+      vminsw:  => f1f2f3f4 f5f6f7f8 f9fafbfc fefdfeff (00000000)
+      vminsw: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 0102030405060708090a0b0c0e0d0e0f
+      vminsw:  => f1f2f3f4 f5f6f7f8 f9fafbfc fefdfeff (00000000)
+      vminsw: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+      vminsw:  => f1f2f3f4 f5f6f7f8 f9fafbfc fefdfeff (00000000)
+
+PPC altivec integer logical insns with two args:
+        vand: 0102030405060708090a0b0c0e0d0e0f, 0102030405060708090a0b0c0e0d0e0f
+        vand:  => 01020304 05060708 090a0b0c 0e0d0e0f (00000000)
+        vand: 0102030405060708090a0b0c0e0d0e0f, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+        vand:  => 01020304 05060708 090a0b0c 0e0d0e0f (00000000)
+        vand: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 0102030405060708090a0b0c0e0d0e0f
+        vand:  => 01020304 05060708 090a0b0c 0e0d0e0f (00000000)
+        vand: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+        vand:  => f1f2f3f4 f5f6f7f8 f9fafbfc fefdfeff (00000000)
+
+         vor: 0102030405060708090a0b0c0e0d0e0f, 0102030405060708090a0b0c0e0d0e0f
+         vor:  => 01020304 05060708 090a0b0c 0e0d0e0f (00000000)
+         vor: 0102030405060708090a0b0c0e0d0e0f, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+         vor:  => f1f2f3f4 f5f6f7f8 f9fafbfc fefdfeff (00000000)
+         vor: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 0102030405060708090a0b0c0e0d0e0f
+         vor:  => f1f2f3f4 f5f6f7f8 f9fafbfc fefdfeff (00000000)
+         vor: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+         vor:  => f1f2f3f4 f5f6f7f8 f9fafbfc fefdfeff (00000000)
+
+        vxor: 0102030405060708090a0b0c0e0d0e0f, 0102030405060708090a0b0c0e0d0e0f
+        vxor:  => 00000000 00000000 00000000 00000000 (00000000)
+        vxor: 0102030405060708090a0b0c0e0d0e0f, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+        vxor:  => f0f0f0f0 f0f0f0f0 f0f0f0f0 f0f0f0f0 (00000000)
+        vxor: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 0102030405060708090a0b0c0e0d0e0f
+        vxor:  => f0f0f0f0 f0f0f0f0 f0f0f0f0 f0f0f0f0 (00000000)
+        vxor: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+        vxor:  => 00000000 00000000 00000000 00000000 (00000000)
+
+       vandc: 0102030405060708090a0b0c0e0d0e0f, 0102030405060708090a0b0c0e0d0e0f
+       vandc:  => 00000000 00000000 00000000 00000000 (00000000)
+       vandc: 0102030405060708090a0b0c0e0d0e0f, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+       vandc:  => 00000000 00000000 00000000 00000000 (00000000)
+       vandc: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 0102030405060708090a0b0c0e0d0e0f
+       vandc:  => f0f0f0f0 f0f0f0f0 f0f0f0f0 f0f0f0f0 (00000000)
+       vandc: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+       vandc:  => 00000000 00000000 00000000 00000000 (00000000)
+
+        vnor: 0102030405060708090a0b0c0e0d0e0f, 0102030405060708090a0b0c0e0d0e0f
+        vnor:  => fefdfcfb faf9f8f7 f6f5f4f3 f1f2f1f0 (00000000)
+        vnor: 0102030405060708090a0b0c0e0d0e0f, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+        vnor:  => 0e0d0c0b 0a090807 06050403 01020100 (00000000)
+        vnor: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 0102030405060708090a0b0c0e0d0e0f
+        vnor:  => 0e0d0c0b 0a090807 06050403 01020100 (00000000)
+        vnor: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+        vnor:  => 0e0d0c0b 0a090807 06050403 01020100 (00000000)
+
+        vrlb: 0102030405060708090a0b0c0e0d0e0f, 0102030405060708090a0b0c0e0d0e0f
+        vrlb:  => 02081840 a0818308 122858c0 83a18387 (00000000)
+        vrlb: 0102030405060708090a0b0c0e0d0e0f, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+        vrlb:  => 02081840 a0818308 122858c0 83a18387 (00000000)
+        vrlb: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 0102030405060708090a0b0c0e0d0e0f
+        vrlb:  => e3cb9f4f bebdfbf8 f3ebdfcf bfbfbfff (00000000)
+        vrlb: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+        vrlb:  => e3cb9f4f bebdfbf8 f3ebdfcf bfbfbfff (00000000)
+
+        vrlh: 0102030405060708090a0b0c0e0d0e0f, 0102030405060708090a0b0c0e0d0e0f
+        vrlh:  => 04083040 41810807 2824c0b0 a1c18707 (00000000)
+        vrlh: 0102030405060708090a0b0c0e0d0e0f, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+        vrlh:  => 04083040 41810807 2824c0b0 a1c18707 (00000000)
+        vrlh: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 0102030405060708090a0b0c0e0d0e0f
+        vrlh:  => c7cb3f4f 7dbdf8f7 ebe7cfbf bfdfff7f (00000000)
+        vrlh: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+        vrlh:  => c7cb3f4f 7dbdf8f7 ebe7cfbf bfdfff7f (00000000)
+
+        vrlw: 0102030405060708090a0b0c0e0d0e0f, 0102030405060708090a0b0c0e0d0e0f
+        vrlw:  => 10203040 06070805 a0b0c090 87078706 (00000000)
+        vrlw: 0102030405060708090a0b0c0e0d0e0f, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+        vrlw:  => 30401020 08050607 c090a0b0 87068707 (00000000)
+        vrlw: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 0102030405060708090a0b0c0e0d0e0f
+        vrlw:  => 1f2f3f4f f6f7f8f5 afbfcf9f ff7fff7e (00000000)
+        vrlw: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+        vrlw:  => 3f4f1f2f f8f5f6f7 cf9fafbf ff7eff7f (00000000)
+
+        vslb: 0102030405060708090a0b0c0e0d0e0f, 0102030405060708090a0b0c0e0d0e0f
+        vslb:  => 02081840 a0808008 122858c0 80a08080 (00000000)
+        vslb: 0102030405060708090a0b0c0e0d0e0f, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+        vslb:  => 02081840 a0808008 122858c0 80a08080 (00000000)
+        vslb: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 0102030405060708090a0b0c0e0d0e0f
+        vslb:  => e2c89840 a08080f8 f2e8d8c0 80a08080 (00000000)
+        vslb: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+        vslb:  => e2c89840 a08080f8 f2e8d8c0 80a08080 (00000000)
+
+        vslh: 0102030405060708090a0b0c0e0d0e0f, 0102030405060708090a0b0c0e0d0e0f
+        vslh:  => 04083040 41800800 2800c000 a0008000 (00000000)
+        vslh: 0102030405060708090a0b0c0e0d0e0f, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+        vslh:  => 04083040 41800800 2800c000 a0008000 (00000000)
+        vslh: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 0102030405060708090a0b0c0e0d0e0f
+        vslh:  => c7c83f40 7d80f800 e800c000 a0008000 (00000000)
+        vslh: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+        vslh:  => c7c83f40 7d80f800 e800c000 a0008000 (00000000)
+
+        vslw: 0102030405060708090a0b0c0e0d0e0f, 0102030405060708090a0b0c0e0d0e0f
+        vslw:  => 10203040 06070800 a0b0c000 87078000 (00000000)
+        vslw: 0102030405060708090a0b0c0e0d0e0f, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+        vslw:  => 30400000 08000000 c0000000 80000000 (00000000)
+        vslw: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 0102030405060708090a0b0c0e0d0e0f
+        vslw:  => 1f2f3f40 f6f7f800 afbfc000 ff7f8000 (00000000)
+        vslw: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+        vslw:  => 3f400000 f8000000 c0000000 80000000 (00000000)
+
+        vsrb: 0102030405060708090a0b0c0e0d0e0f, 0102030405060708090a0b0c0e0d0e0f
+        vsrb:  => 00000000 00000008 04020100 00000000 (00000000)
+        vsrb: 0102030405060708090a0b0c0e0d0e0f, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+        vsrb:  => 00000000 00000008 04020100 00000000 (00000000)
+        vsrb: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 0102030405060708090a0b0c0e0d0e0f
+        vsrb:  => 783c1e0f 070301f8 7c3e1f0f 03070301 (00000000)
+        vsrb: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+        vsrb:  => 783c1e0f 070301f8 7c3e1f0f 03070301 (00000000)
+
+        vsrh: 0102030405060708090a0b0c0e0d0e0f, 0102030405060708090a0b0c0e0d0e0f
+        vsrh:  => 00400030 00140007 00020000 00000000 (00000000)
+        vsrh: 0102030405060708090a0b0c0e0d0e0f, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+        vsrh:  => 00400030 00140007 00020000 00000000 (00000000)
+        vsrh: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 0102030405060708090a0b0c0e0d0e0f
+        vsrh:  => 3c7c0f3f 03d700f7 003e000f 00070001 (00000000)
+        vsrh: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+        vsrh:  => 3c7c0f3f 03d700f7 003e000f 00070001 (00000000)
+
+        vsrw: 0102030405060708090a0b0c0e0d0e0f, 0102030405060708090a0b0c0e0d0e0f
+        vsrw:  => 00102030 00050607 000090a0 00001c1a (00000000)
+        vsrw: 0102030405060708090a0b0c0e0d0e0f, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+        vsrw:  => 00000010 00000005 00000000 00000000 (00000000)
+        vsrw: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 0102030405060708090a0b0c0e0d0e0f
+        vsrw:  => 0f1f2f3f 00f5f6f7 000f9faf 0001fdfb (00000000)
+        vsrw: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+        vsrw:  => 00000f1f 000000f5 0000000f 00000001 (00000000)
+
+       vsrab: 0102030405060708090a0b0c0e0d0e0f, 0102030405060708090a0b0c0e0d0e0f
+       vsrab:  => 00000000 00000008 04020100 00000000 (00000000)
+       vsrab: 0102030405060708090a0b0c0e0d0e0f, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+       vsrab:  => 00000000 00000008 04020100 00000000 (00000000)
+       vsrab: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 0102030405060708090a0b0c0e0d0e0f
+       vsrab:  => f8fcfeff fffffff8 fcfeffff ffffffff (00000000)
+       vsrab: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+       vsrab:  => f8fcfeff fffffff8 fcfeffff ffffffff (00000000)
+
+       vsrah: 0102030405060708090a0b0c0e0d0e0f, 0102030405060708090a0b0c0e0d0e0f
+       vsrah:  => 00400030 00140007 00020000 00000000 (00000000)
+       vsrah: 0102030405060708090a0b0c0e0d0e0f, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+       vsrah:  => 00400030 00140007 00020000 00000000 (00000000)
+       vsrah: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 0102030405060708090a0b0c0e0d0e0f
+       vsrah:  => fc7cff3f ffd7fff7 fffeffff ffffffff (00000000)
+       vsrah: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+       vsrah:  => fc7cff3f ffd7fff7 fffeffff ffffffff (00000000)
+
+       vsraw: 0102030405060708090a0b0c0e0d0e0f, 0102030405060708090a0b0c0e0d0e0f
+       vsraw:  => 00102030 00050607 000090a0 00001c1a (00000000)
+       vsraw: 0102030405060708090a0b0c0e0d0e0f, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+       vsraw:  => 00000010 00000005 00000000 00000000 (00000000)
+       vsraw: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 0102030405060708090a0b0c0e0d0e0f
+       vsraw:  => ff1f2f3f fff5f6f7 ffff9faf fffffdfb (00000000)
+       vsraw: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+       vsraw:  => ffffff1f fffffff5 ffffffff ffffffff (00000000)
+
+     vpkuhum: 0102030405060708090a0b0c0e0d0e0f, 0102030405060708090a0b0c0e0d0e0f
+     vpkuhum:  => 02040608 0a0c0d0f 02040608 0a0c0d0f (00000000)
+     vpkuhum: 0102030405060708090a0b0c0e0d0e0f, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+     vpkuhum:  => 02040608 0a0c0d0f f2f4f6f8 fafcfdff (00000000)
+     vpkuhum: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 0102030405060708090a0b0c0e0d0e0f
+     vpkuhum:  => f2f4f6f8 fafcfdff 02040608 0a0c0d0f (00000000)
+     vpkuhum: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+     vpkuhum:  => f2f4f6f8 fafcfdff f2f4f6f8 fafcfdff (00000000)
+
+     vpkuwum: 0102030405060708090a0b0c0e0d0e0f, 0102030405060708090a0b0c0e0d0e0f
+     vpkuwum:  => 03040708 0b0c0e0f 03040708 0b0c0e0f (00000000)
+     vpkuwum: 0102030405060708090a0b0c0e0d0e0f, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+     vpkuwum:  => 03040708 0b0c0e0f f3f4f7f8 fbfcfeff (00000000)
+     vpkuwum: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 0102030405060708090a0b0c0e0d0e0f
+     vpkuwum:  => f3f4f7f8 fbfcfeff 03040708 0b0c0e0f (00000000)
+     vpkuwum: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+     vpkuwum:  => f3f4f7f8 fbfcfeff f3f4f7f8 fbfcfeff (00000000)
+
+     vpkuhus: 0102030405060708090a0b0c0e0d0e0f, 0102030405060708090a0b0c0e0d0e0f
+     vpkuhus:  => ffffffff ffffffff ffffffff ffffffff (00000000)
+     vpkuhus: 0102030405060708090a0b0c0e0d0e0f, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+     vpkuhus:  => ffffffff ffffffff ffffffff ffffffff (00000000)
+     vpkuhus: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 0102030405060708090a0b0c0e0d0e0f
+     vpkuhus:  => ffffffff ffffffff ffffffff ffffffff (00000000)
+     vpkuhus: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+     vpkuhus:  => ffffffff ffffffff ffffffff ffffffff (00000000)
+
+     vpkuwus: 0102030405060708090a0b0c0e0d0e0f, 0102030405060708090a0b0c0e0d0e0f
+     vpkuwus:  => ffffffff ffffffff ffffffff ffffffff (00000000)
+     vpkuwus: 0102030405060708090a0b0c0e0d0e0f, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+     vpkuwus:  => ffffffff ffffffff ffffffff ffffffff (00000000)
+     vpkuwus: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 0102030405060708090a0b0c0e0d0e0f
+     vpkuwus:  => ffffffff ffffffff ffffffff ffffffff (00000000)
+     vpkuwus: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+     vpkuwus:  => ffffffff ffffffff ffffffff ffffffff (00000000)
+
+     vpkshus: 0102030405060708090a0b0c0e0d0e0f, 0102030405060708090a0b0c0e0d0e0f
+     vpkshus:  => ffffffff ffffffff ffffffff ffffffff (00000000)
+     vpkshus: 0102030405060708090a0b0c0e0d0e0f, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+     vpkshus:  => ffffffff ffffffff 00000000 00000000 (00000000)
+     vpkshus: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 0102030405060708090a0b0c0e0d0e0f
+     vpkshus:  => 00000000 00000000 ffffffff ffffffff (00000000)
+     vpkshus: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+     vpkshus:  => 00000000 00000000 00000000 00000000 (00000000)
+
+     vpkswus: 0102030405060708090a0b0c0e0d0e0f, 0102030405060708090a0b0c0e0d0e0f
+     vpkswus:  => ffffffff ffffffff ffffffff ffffffff (00000000)
+     vpkswus: 0102030405060708090a0b0c0e0d0e0f, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+     vpkswus:  => ffffffff ffffffff 00000000 00000000 (00000000)
+     vpkswus: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 0102030405060708090a0b0c0e0d0e0f
+     vpkswus:  => 00000000 00000000 ffffffff ffffffff (00000000)
+     vpkswus: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+     vpkswus:  => 00000000 00000000 00000000 00000000 (00000000)
+
+     vpkshss: 0102030405060708090a0b0c0e0d0e0f, 0102030405060708090a0b0c0e0d0e0f
+     vpkshss:  => 7f7f7f7f 7f7f7f7f 7f7f7f7f 7f7f7f7f (00000000)
+     vpkshss: 0102030405060708090a0b0c0e0d0e0f, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+     vpkshss:  => 7f7f7f7f 7f7f7f7f 80808080 80808080 (00000000)
+     vpkshss: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 0102030405060708090a0b0c0e0d0e0f
+     vpkshss:  => 80808080 80808080 7f7f7f7f 7f7f7f7f (00000000)
+     vpkshss: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+     vpkshss:  => 80808080 80808080 80808080 80808080 (00000000)
+
+     vpkswss: 0102030405060708090a0b0c0e0d0e0f, 0102030405060708090a0b0c0e0d0e0f
+     vpkswss:  => 7fff7fff 7fff7fff 7fff7fff 7fff7fff (00000000)
+     vpkswss: 0102030405060708090a0b0c0e0d0e0f, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+     vpkswss:  => 7fff7fff 7fff7fff 80008000 80008000 (00000000)
+     vpkswss: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 0102030405060708090a0b0c0e0d0e0f
+     vpkswss:  => 80008000 80008000 7fff7fff 7fff7fff (00000000)
+     vpkswss: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+     vpkswss:  => 80008000 80008000 80008000 80008000 (00000000)
+
+       vpkpx: 0102030405060708090a0b0c0e0d0e0f, 0102030405060708090a0b0c0e0d0e0f
+       vpkpx:  => 80008001 84210421 80008001 84210421 (00000000)
+       vpkpx: 0102030405060708090a0b0c0e0d0e0f, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+       vpkpx:  => 80008001 84210421 fbdefbdf ffff7fff (00000000)
+       vpkpx: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 0102030405060708090a0b0c0e0d0e0f
+       vpkpx:  => fbdefbdf ffff7fff 80008001 84210421 (00000000)
+       vpkpx: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+       vpkpx:  => fbdefbdf ffff7fff fbdefbdf ffff7fff (00000000)
+
+      vmrghb: 0102030405060708090a0b0c0e0d0e0f, 0102030405060708090a0b0c0e0d0e0f
+      vmrghb:  => 01010202 03030404 05050606 07070808 (00000000)
+      vmrghb: 0102030405060708090a0b0c0e0d0e0f, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+      vmrghb:  => 01f102f2 03f304f4 05f506f6 07f708f8 (00000000)
+      vmrghb: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 0102030405060708090a0b0c0e0d0e0f
+      vmrghb:  => f101f202 f303f404 f505f606 f707f808 (00000000)
+      vmrghb: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+      vmrghb:  => f1f1f2f2 f3f3f4f4 f5f5f6f6 f7f7f8f8 (00000000)
+
+      vmrghh: 0102030405060708090a0b0c0e0d0e0f, 0102030405060708090a0b0c0e0d0e0f
+      vmrghh:  => 01020102 03040304 05060506 07080708 (00000000)
+      vmrghh: 0102030405060708090a0b0c0e0d0e0f, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+      vmrghh:  => 0102f1f2 0304f3f4 0506f5f6 0708f7f8 (00000000)
+      vmrghh: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 0102030405060708090a0b0c0e0d0e0f
+      vmrghh:  => f1f20102 f3f40304 f5f60506 f7f80708 (00000000)
+      vmrghh: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+      vmrghh:  => f1f2f1f2 f3f4f3f4 f5f6f5f6 f7f8f7f8 (00000000)
+
+      vmrghw: 0102030405060708090a0b0c0e0d0e0f, 0102030405060708090a0b0c0e0d0e0f
+      vmrghw:  => 01020304 01020304 05060708 05060708 (00000000)
+      vmrghw: 0102030405060708090a0b0c0e0d0e0f, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+      vmrghw:  => 01020304 f1f2f3f4 05060708 f5f6f7f8 (00000000)
+      vmrghw: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 0102030405060708090a0b0c0e0d0e0f
+      vmrghw:  => f1f2f3f4 01020304 f5f6f7f8 05060708 (00000000)
+      vmrghw: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+      vmrghw:  => f1f2f3f4 f1f2f3f4 f5f6f7f8 f5f6f7f8 (00000000)
+
+      vmrglb: 0102030405060708090a0b0c0e0d0e0f, 0102030405060708090a0b0c0e0d0e0f
+      vmrglb:  => 09090a0a 0b0b0c0c 0e0e0d0d 0e0e0f0f (00000000)
+      vmrglb: 0102030405060708090a0b0c0e0d0e0f, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+      vmrglb:  => 09f90afa 0bfb0cfc 0efe0dfd 0efe0fff (00000000)
+      vmrglb: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 0102030405060708090a0b0c0e0d0e0f
+      vmrglb:  => f909fa0a fb0bfc0c fe0efd0d fe0eff0f (00000000)
+      vmrglb: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+      vmrglb:  => f9f9fafa fbfbfcfc fefefdfd fefeffff (00000000)
+
+      vmrglh: 0102030405060708090a0b0c0e0d0e0f, 0102030405060708090a0b0c0e0d0e0f
+      vmrglh:  => 090a090a 0b0c0b0c 0e0d0e0d 0e0f0e0f (00000000)
+      vmrglh: 0102030405060708090a0b0c0e0d0e0f, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+      vmrglh:  => 090af9fa 0b0cfbfc 0e0dfefd 0e0ffeff (00000000)
+      vmrglh: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 0102030405060708090a0b0c0e0d0e0f
+      vmrglh:  => f9fa090a fbfc0b0c fefd0e0d feff0e0f (00000000)
+      vmrglh: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+      vmrglh:  => f9faf9fa fbfcfbfc fefdfefd fefffeff (00000000)
+
+      vmrglw: 0102030405060708090a0b0c0e0d0e0f, 0102030405060708090a0b0c0e0d0e0f
+      vmrglw:  => 090a0b0c 090a0b0c 0e0d0e0f 0e0d0e0f (00000000)
+      vmrglw: 0102030405060708090a0b0c0e0d0e0f, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+      vmrglw:  => 090a0b0c f9fafbfc 0e0d0e0f fefdfeff (00000000)
+      vmrglw: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 0102030405060708090a0b0c0e0d0e0f
+      vmrglw:  => f9fafbfc 090a0b0c fefdfeff 0e0d0e0f (00000000)
+      vmrglw: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+      vmrglw:  => f9fafbfc f9fafbfc fefdfeff fefdfeff (00000000)
+
+        vslo: 0102030405060708090a0b0c0e0d0e0f, 0102030405060708090a0b0c0e0d0e0f
+        vslo:  => 02030405 06070809 0a0b0c0e 0d0e0f00 (00000000)
+        vslo: 0102030405060708090a0b0c0e0d0e0f, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+        vslo:  => 0f000000 00000000 00000000 00000000 (00000000)
+        vslo: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 0102030405060708090a0b0c0e0d0e0f
+        vslo:  => f2f3f4f5 f6f7f8f9 fafbfcfe fdfeff00 (00000000)
+        vslo: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+        vslo:  => ff000000 00000000 00000000 00000000 (00000000)
+
+        vsro: 0102030405060708090a0b0c0e0d0e0f, 0102030405060708090a0b0c0e0d0e0f
+        vsro:  => 00010203 04050607 08090a0b 0c0e0d0e (00000000)
+        vsro: 0102030405060708090a0b0c0e0d0e0f, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+        vsro:  => 00000000 00000000 00000000 00000001 (00000000)
+        vsro: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 0102030405060708090a0b0c0e0d0e0f
+        vsro:  => 00f1f2f3 f4f5f6f7 f8f9fafb fcfefdfe (00000000)
+        vsro: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+        vsro:  => 00000000 00000000 00000000 000000f1 (00000000)
+
+PPC altivec integer logical insns with one arg:
+     vupkhsb: 01020304 05060708 090a0b0c 0e0d0e0f
+     vupkhsb:  => 00010002 00030004 00050006 00070008 (00000000)
+     vupkhsb: f1f2f3f4 f5f6f7f8 f9fafbfc fefdfeff
+     vupkhsb:  => fff1fff2 fff3fff4 fff5fff6 fff7fff8 (00000000)
+
+     vupkhsh: 01020304 05060708 090a0b0c 0e0d0e0f
+     vupkhsh:  => 00000102 00000304 00000506 00000708 (00000000)
+     vupkhsh: f1f2f3f4 f5f6f7f8 f9fafbfc fefdfeff
+     vupkhsh:  => fffff1f2 fffff3f4 fffff5f6 fffff7f8 (00000000)
+
+     vupkhpx: 01020304 05060708 090a0b0c 0e0d0e0f
+     vupkhpx:  => 00000802 00001804 00010806 00011808 (00000000)
+     vupkhpx: f1f2f3f4 f5f6f7f8 f9fafbfc fefdfeff
+     vupkhpx:  => ff1c0f12 ff1c1f14 ff1d0f16 ff1d1f18 (00000000)
+
+     vupklsb: 01020304 05060708 090a0b0c 0e0d0e0f
+     vupklsb:  => 0009000a 000b000c 000e000d 000e000f (00000000)
+     vupklsb: f1f2f3f4 f5f6f7f8 f9fafbfc fefdfeff
+     vupklsb:  => fff9fffa fffbfffc fffefffd fffeffff (00000000)
+
+     vupklsh: 01020304 05060708 090a0b0c 0e0d0e0f
+     vupklsh:  => 0000090a 00000b0c 00000e0d 00000e0f (00000000)
+     vupklsh: f1f2f3f4 f5f6f7f8 f9fafbfc fefdfeff
+     vupklsh:  => fffff9fa fffffbfc fffffefd fffffeff (00000000)
+
+     vupklpx: 01020304 05060708 090a0b0c 0e0d0e0f
+     vupklpx:  => 0002080a 0002180c 0003100d 0003100f (00000000)
+     vupklpx: f1f2f3f4 f5f6f7f8 f9fafbfc fefdfeff
+     vupklpx:  => ff1e0f1a ff1e1f1c ff1f171d ff1f171f (00000000)
+
+Altivec integer compare insns:
+    vcmpgtub: 0102030405060708090a0b0c0e0d0e0f, 0102030405060708090a0b0c0e0d0e0f
+    vcmpgtub:  => 00000000 00000000 00000000 00000000 (00000000)
+    vcmpgtub: 0102030405060708090a0b0c0e0d0e0f, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+    vcmpgtub:  => 00000000 00000000 00000000 00000000 (00000000)
+    vcmpgtub: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 0102030405060708090a0b0c0e0d0e0f
+    vcmpgtub:  => ffffffff ffffffff ffffffff ffffffff (00000000)
+    vcmpgtub: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+    vcmpgtub:  => 00000000 00000000 00000000 00000000 (00000000)
+
+    vcmpgtuh: 0102030405060708090a0b0c0e0d0e0f, 0102030405060708090a0b0c0e0d0e0f
+    vcmpgtuh:  => 00000000 00000000 00000000 00000000 (00000000)
+    vcmpgtuh: 0102030405060708090a0b0c0e0d0e0f, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+    vcmpgtuh:  => 00000000 00000000 00000000 00000000 (00000000)
+    vcmpgtuh: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 0102030405060708090a0b0c0e0d0e0f
+    vcmpgtuh:  => ffffffff ffffffff ffffffff ffffffff (00000000)
+    vcmpgtuh: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+    vcmpgtuh:  => 00000000 00000000 00000000 00000000 (00000000)
+
+    vcmpgtuw: 0102030405060708090a0b0c0e0d0e0f, 0102030405060708090a0b0c0e0d0e0f
+    vcmpgtuw:  => 00000000 00000000 00000000 00000000 (00000000)
+    vcmpgtuw: 0102030405060708090a0b0c0e0d0e0f, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+    vcmpgtuw:  => 00000000 00000000 00000000 00000000 (00000000)
+    vcmpgtuw: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 0102030405060708090a0b0c0e0d0e0f
+    vcmpgtuw:  => ffffffff ffffffff ffffffff ffffffff (00000000)
+    vcmpgtuw: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+    vcmpgtuw:  => 00000000 00000000 00000000 00000000 (00000000)
+
+    vcmpgtsb: 0102030405060708090a0b0c0e0d0e0f, 0102030405060708090a0b0c0e0d0e0f
+    vcmpgtsb:  => 00000000 00000000 00000000 00000000 (00000000)
+    vcmpgtsb: 0102030405060708090a0b0c0e0d0e0f, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+    vcmpgtsb:  => ffffffff ffffffff ffffffff ffffffff (00000000)
+    vcmpgtsb: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 0102030405060708090a0b0c0e0d0e0f
+    vcmpgtsb:  => 00000000 00000000 00000000 00000000 (00000000)
+    vcmpgtsb: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+    vcmpgtsb:  => 00000000 00000000 00000000 00000000 (00000000)
+
+    vcmpgtsh: 0102030405060708090a0b0c0e0d0e0f, 0102030405060708090a0b0c0e0d0e0f
+    vcmpgtsh:  => 00000000 00000000 00000000 00000000 (00000000)
+    vcmpgtsh: 0102030405060708090a0b0c0e0d0e0f, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+    vcmpgtsh:  => ffffffff ffffffff ffffffff ffffffff (00000000)
+    vcmpgtsh: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 0102030405060708090a0b0c0e0d0e0f
+    vcmpgtsh:  => 00000000 00000000 00000000 00000000 (00000000)
+    vcmpgtsh: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+    vcmpgtsh:  => 00000000 00000000 00000000 00000000 (00000000)
+
+    vcmpgtsw: 0102030405060708090a0b0c0e0d0e0f, 0102030405060708090a0b0c0e0d0e0f
+    vcmpgtsw:  => 00000000 00000000 00000000 00000000 (00000000)
+    vcmpgtsw: 0102030405060708090a0b0c0e0d0e0f, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+    vcmpgtsw:  => ffffffff ffffffff ffffffff ffffffff (00000000)
+    vcmpgtsw: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 0102030405060708090a0b0c0e0d0e0f
+    vcmpgtsw:  => 00000000 00000000 00000000 00000000 (00000000)
+    vcmpgtsw: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+    vcmpgtsw:  => 00000000 00000000 00000000 00000000 (00000000)
+
+    vcmpequb: 0102030405060708090a0b0c0e0d0e0f, 0102030405060708090a0b0c0e0d0e0f
+    vcmpequb:  => ffffffff ffffffff ffffffff ffffffff (00000000)
+    vcmpequb: 0102030405060708090a0b0c0e0d0e0f, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+    vcmpequb:  => 00000000 00000000 00000000 00000000 (00000000)
+    vcmpequb: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 0102030405060708090a0b0c0e0d0e0f
+    vcmpequb:  => 00000000 00000000 00000000 00000000 (00000000)
+    vcmpequb: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+    vcmpequb:  => ffffffff ffffffff ffffffff ffffffff (00000000)
+
+    vcmpequh: 0102030405060708090a0b0c0e0d0e0f, 0102030405060708090a0b0c0e0d0e0f
+    vcmpequh:  => ffffffff ffffffff ffffffff ffffffff (00000000)
+    vcmpequh: 0102030405060708090a0b0c0e0d0e0f, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+    vcmpequh:  => 00000000 00000000 00000000 00000000 (00000000)
+    vcmpequh: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 0102030405060708090a0b0c0e0d0e0f
+    vcmpequh:  => 00000000 00000000 00000000 00000000 (00000000)
+    vcmpequh: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+    vcmpequh:  => ffffffff ffffffff ffffffff ffffffff (00000000)
+
+    vcmpequw: 0102030405060708090a0b0c0e0d0e0f, 0102030405060708090a0b0c0e0d0e0f
+    vcmpequw:  => ffffffff ffffffff ffffffff ffffffff (00000000)
+    vcmpequw: 0102030405060708090a0b0c0e0d0e0f, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+    vcmpequw:  => 00000000 00000000 00000000 00000000 (00000000)
+    vcmpequw: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 0102030405060708090a0b0c0e0d0e0f
+    vcmpequw:  => 00000000 00000000 00000000 00000000 (00000000)
+    vcmpequw: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+    vcmpequw:  => ffffffff ffffffff ffffffff ffffffff (00000000)
+
+Altivec integer compare insns with flags update:
+   vcmpgtub.: 0102030405060708090a0b0c0e0d0e0f, 0102030405060708090a0b0c0e0d0e0f
+   vcmpgtub.:  => 00000000 00000000 00000000 00000000 (00000020)
+   vcmpgtub.: 0102030405060708090a0b0c0e0d0e0f, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+   vcmpgtub.:  => 00000000 00000000 00000000 00000000 (00000020)
+   vcmpgtub.: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 0102030405060708090a0b0c0e0d0e0f
+   vcmpgtub.:  => ffffffff ffffffff ffffffff ffffffff (00000080)
+   vcmpgtub.: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+   vcmpgtub.:  => 00000000 00000000 00000000 00000000 (00000020)
+
+   vcmpgtuh.: 0102030405060708090a0b0c0e0d0e0f, 0102030405060708090a0b0c0e0d0e0f
+   vcmpgtuh.:  => 00000000 00000000 00000000 00000000 (00000020)
+   vcmpgtuh.: 0102030405060708090a0b0c0e0d0e0f, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+   vcmpgtuh.:  => 00000000 00000000 00000000 00000000 (00000020)
+   vcmpgtuh.: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 0102030405060708090a0b0c0e0d0e0f
+   vcmpgtuh.:  => ffffffff ffffffff ffffffff ffffffff (00000080)
+   vcmpgtuh.: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+   vcmpgtuh.:  => 00000000 00000000 00000000 00000000 (00000020)
+
+   vcmpgtuw.: 0102030405060708090a0b0c0e0d0e0f, 0102030405060708090a0b0c0e0d0e0f
+   vcmpgtuw.:  => 00000000 00000000 00000000 00000000 (00000020)
+   vcmpgtuw.: 0102030405060708090a0b0c0e0d0e0f, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+   vcmpgtuw.:  => 00000000 00000000 00000000 00000000 (00000020)
+   vcmpgtuw.: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 0102030405060708090a0b0c0e0d0e0f
+   vcmpgtuw.:  => ffffffff ffffffff ffffffff ffffffff (00000080)
+   vcmpgtuw.: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+   vcmpgtuw.:  => 00000000 00000000 00000000 00000000 (00000020)
+
+   vcmpgtsb.: 0102030405060708090a0b0c0e0d0e0f, 0102030405060708090a0b0c0e0d0e0f
+   vcmpgtsb.:  => 00000000 00000000 00000000 00000000 (00000020)
+   vcmpgtsb.: 0102030405060708090a0b0c0e0d0e0f, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+   vcmpgtsb.:  => ffffffff ffffffff ffffffff ffffffff (00000080)
+   vcmpgtsb.: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 0102030405060708090a0b0c0e0d0e0f
+   vcmpgtsb.:  => 00000000 00000000 00000000 00000000 (00000020)
+   vcmpgtsb.: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+   vcmpgtsb.:  => 00000000 00000000 00000000 00000000 (00000020)
+
+   vcmpgtsh.: 0102030405060708090a0b0c0e0d0e0f, 0102030405060708090a0b0c0e0d0e0f
+   vcmpgtsh.:  => 00000000 00000000 00000000 00000000 (00000020)
+   vcmpgtsh.: 0102030405060708090a0b0c0e0d0e0f, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+   vcmpgtsh.:  => ffffffff ffffffff ffffffff ffffffff (00000080)
+   vcmpgtsh.: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 0102030405060708090a0b0c0e0d0e0f
+   vcmpgtsh.:  => 00000000 00000000 00000000 00000000 (00000020)
+   vcmpgtsh.: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+   vcmpgtsh.:  => 00000000 00000000 00000000 00000000 (00000020)
+
+   vcmpgtsw.: 0102030405060708090a0b0c0e0d0e0f, 0102030405060708090a0b0c0e0d0e0f
+   vcmpgtsw.:  => 00000000 00000000 00000000 00000000 (00000020)
+   vcmpgtsw.: 0102030405060708090a0b0c0e0d0e0f, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+   vcmpgtsw.:  => ffffffff ffffffff ffffffff ffffffff (00000080)
+   vcmpgtsw.: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 0102030405060708090a0b0c0e0d0e0f
+   vcmpgtsw.:  => 00000000 00000000 00000000 00000000 (00000020)
+   vcmpgtsw.: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+   vcmpgtsw.:  => 00000000 00000000 00000000 00000000 (00000020)
+
+   vcmpequb.: 0102030405060708090a0b0c0e0d0e0f, 0102030405060708090a0b0c0e0d0e0f
+   vcmpequb.:  => ffffffff ffffffff ffffffff ffffffff (00000080)
+   vcmpequb.: 0102030405060708090a0b0c0e0d0e0f, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+   vcmpequb.:  => 00000000 00000000 00000000 00000000 (00000020)
+   vcmpequb.: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 0102030405060708090a0b0c0e0d0e0f
+   vcmpequb.:  => 00000000 00000000 00000000 00000000 (00000020)
+   vcmpequb.: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+   vcmpequb.:  => ffffffff ffffffff ffffffff ffffffff (00000080)
+
+   vcmpequh.: 0102030405060708090a0b0c0e0d0e0f, 0102030405060708090a0b0c0e0d0e0f
+   vcmpequh.:  => ffffffff ffffffff ffffffff ffffffff (00000080)
+   vcmpequh.: 0102030405060708090a0b0c0e0d0e0f, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+   vcmpequh.:  => 00000000 00000000 00000000 00000000 (00000020)
+   vcmpequh.: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 0102030405060708090a0b0c0e0d0e0f
+   vcmpequh.:  => 00000000 00000000 00000000 00000000 (00000020)
+   vcmpequh.: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+   vcmpequh.:  => ffffffff ffffffff ffffffff ffffffff (00000080)
+
+   vcmpequw.: 0102030405060708090a0b0c0e0d0e0f, 0102030405060708090a0b0c0e0d0e0f
+   vcmpequw.:  => ffffffff ffffffff ffffffff ffffffff (00000080)
+   vcmpequw.: 0102030405060708090a0b0c0e0d0e0f, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+   vcmpequw.:  => 00000000 00000000 00000000 00000000 (00000020)
+   vcmpequw.: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 0102030405060708090a0b0c0e0d0e0f
+   vcmpequw.:  => 00000000 00000000 00000000 00000000 (00000020)
+   vcmpequw.: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff
+   vcmpequw.:  => ffffffff ffffffff ffffffff ffffffff (00000080)
+
+Altivec integer special insns:
+         vsl: 0102030405060708090a0b0c0e0d0e0f, 00000000000000000000000000000000
+         vsl:  => 01020304 05060708 090a0b0c 0e0d0e0f (00000000)
+         vsl: 0102030405060708090a0b0c0e0d0e0f, 01010101010101010101010101010101
+         vsl:  => 02040608 0a0c0e10 12141618 1c1a1c1e (00000000)
+         vsl: 0102030405060708090a0b0c0e0d0e0f, 02020202020202020202020202020202
+         vsl:  => 04080c10 14181c20 24282c30 3834383c (00000000)
+         vsl: 0102030405060708090a0b0c0e0d0e0f, 03030303030303030303030303030303
+         vsl:  => 08101820 28303840 48505860 70687078 (00000000)
+         vsl: 0102030405060708090a0b0c0e0d0e0f, 04040404040404040404040404040404
+         vsl:  => 10203040 50607080 90a0b0c0 e0d0e0f0 (00000000)
+         vsl: 0102030405060708090a0b0c0e0d0e0f, 05050505050505050505050505050505
+         vsl:  => 20406080 a0c0e101 21416181 c1a1c1e0 (00000000)
+         vsl: 0102030405060708090a0b0c0e0d0e0f, 06060606060606060606060606060606
+         vsl:  => 4080c101 4181c202 4282c303 834383c0 (00000000)
+         vsl: 0102030405060708090a0b0c0e0d0e0f, 07070707070707070707070707070707
+         vsl:  => 81018202 83038404 85058607 06870780 (00000000)
+         vsl: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 00000000000000000000000000000000
+         vsl:  => f1f2f3f4 f5f6f7f8 f9fafbfc fefdfeff (00000000)
+         vsl: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 01010101010101010101010101010101
+         vsl:  => e3e5e7e9 ebedeff1 f3f5f7f9 fdfbfdfe (00000000)
+         vsl: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 02020202020202020202020202020202
+         vsl:  => c7cbcfd3 d7dbdfe3 e7ebeff3 fbf7fbfc (00000000)
+         vsl: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 03030303030303030303030303030303
+         vsl:  => 8f979fa7 afb7bfc7 cfd7dfe7 f7eff7f8 (00000000)
+         vsl: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 04040404040404040404040404040404
+         vsl:  => 1f2f3f4f 5f6f7f8f 9fafbfcf efdfeff0 (00000000)
+         vsl: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 05050505050505050505050505050505
+         vsl:  => 3e5e7e9e bedeff1f 3f5f7f9f dfbfdfe0 (00000000)
+         vsl: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 06060606060606060606060606060606
+         vsl:  => 7cbcfd3d 7dbdfe3e 7ebeff3f bf7fbfc0 (00000000)
+         vsl: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 07070707070707070707070707070707
+         vsl:  => f979fa7a fb7bfc7c fd7dfe7f 7eff7f80 (00000000)
+
+         vsr: 0102030405060708090a0b0c0e0d0e0f, 00000000000000000000000000000000
+         vsr:  => 01020304 05060708 090a0b0c 0e0d0e0f (00000000)
+         vsr: 0102030405060708090a0b0c0e0d0e0f, 01010101010101010101010101010101
+         vsr:  => 00810182 02830384 04850586 07068707 (00000000)
+         vsr: 0102030405060708090a0b0c0e0d0e0f, 02020202020202020202020202020202
+         vsr:  => 004080c1 014181c2 024282c3 03834383 (00000000)
+         vsr: 0102030405060708090a0b0c0e0d0e0f, 03030303030303030303030303030303
+         vsr:  => 00204060 80a0c0e1 01214161 81c1a1c1 (00000000)
+         vsr: 0102030405060708090a0b0c0e0d0e0f, 04040404040404040404040404040404
+         vsr:  => 00102030 40506070 8090a0b0 c0e0d0e0 (00000000)
+         vsr: 0102030405060708090a0b0c0e0d0e0f, 05050505050505050505050505050505
+         vsr:  => 00081018 20283038 40485058 60706870 (00000000)
+         vsr: 0102030405060708090a0b0c0e0d0e0f, 06060606060606060606060606060606
+         vsr:  => 0004080c 1014181c 2024282c 30383438 (00000000)
+         vsr: 0102030405060708090a0b0c0e0d0e0f, 07070707070707070707070707070707
+         vsr:  => 00020406 080a0c0e 10121416 181c1a1c (00000000)
+         vsr: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 00000000000000000000000000000000
+         vsr:  => f1f2f3f4 f5f6f7f8 f9fafbfc fefdfeff (00000000)
+         vsr: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 01010101010101010101010101010101
+         vsr:  => 78f979fa 7afb7bfc 7cfd7dfe 7f7eff7f (00000000)
+         vsr: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 02020202020202020202020202020202
+         vsr:  => 3c7cbcfd 3d7dbdfe 3e7ebeff 3fbf7fbf (00000000)
+         vsr: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 03030303030303030303030303030303
+         vsr:  => 1e3e5e7e 9ebedeff 1f3f5f7f 9fdfbfdf (00000000)
+         vsr: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 04040404040404040404040404040404
+         vsr:  => 0f1f2f3f 4f5f6f7f 8f9fafbf cfefdfef (00000000)
+         vsr: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 05050505050505050505050505050505
+         vsr:  => 078f979f a7afb7bf c7cfd7df e7f7eff7 (00000000)
+         vsr: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 06060606060606060606060606060606
+         vsr:  => 03c7cbcf d3d7dbdf e3e7ebef f3fbf7fb (00000000)
+         vsr: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 07070707070707070707070707070707
+         vsr:  => 01e3e5e7 e9ebedef f1f3f5f7 f9fdfbfd (00000000)
+
+      vspltb: 01020304 05060708 090a0b0c 0e0d0e0f, 0
+      vspltb:  => 01010101 01010101 01010101 01010101 (00000000)
+      vspltb: 01020304 05060708 090a0b0c 0e0d0e0f, 3
+      vspltb:  => 04040404 04040404 04040404 04040404 (00000000)
+      vspltb: 01020304 05060708 090a0b0c 0e0d0e0f, 6
+      vspltb:  => 07070707 07070707 07070707 07070707 (00000000)
+      vspltb: 01020304 05060708 090a0b0c 0e0d0e0f, 9
+      vspltb:  => 0a0a0a0a 0a0a0a0a 0a0a0a0a 0a0a0a0a (00000000)
+      vspltb: 01020304 05060708 090a0b0c 0e0d0e0f, 12
+      vspltb:  => 0e0e0e0e 0e0e0e0e 0e0e0e0e 0e0e0e0e (00000000)
+      vspltb: 01020304 05060708 090a0b0c 0e0d0e0f, 15
+      vspltb:  => 0f0f0f0f 0f0f0f0f 0f0f0f0f 0f0f0f0f (00000000)
+      vspltb: f1f2f3f4 f5f6f7f8 f9fafbfc fefdfeff, 0
+      vspltb:  => f1f1f1f1 f1f1f1f1 f1f1f1f1 f1f1f1f1 (00000000)
+      vspltb: f1f2f3f4 f5f6f7f8 f9fafbfc fefdfeff, 3
+      vspltb:  => f4f4f4f4 f4f4f4f4 f4f4f4f4 f4f4f4f4 (00000000)
+      vspltb: f1f2f3f4 f5f6f7f8 f9fafbfc fefdfeff, 6
+      vspltb:  => f7f7f7f7 f7f7f7f7 f7f7f7f7 f7f7f7f7 (00000000)
+      vspltb: f1f2f3f4 f5f6f7f8 f9fafbfc fefdfeff, 9
+      vspltb:  => fafafafa fafafafa fafafafa fafafafa (00000000)
+      vspltb: f1f2f3f4 f5f6f7f8 f9fafbfc fefdfeff, 12
+      vspltb:  => fefefefe fefefefe fefefefe fefefefe (00000000)
+      vspltb: f1f2f3f4 f5f6f7f8 f9fafbfc fefdfeff, 15
+      vspltb:  => ffffffff ffffffff ffffffff ffffffff (00000000)
+
+      vsplth: 01020304 05060708 090a0b0c 0e0d0e0f, 0
+      vsplth:  => 01020102 01020102 01020102 01020102 (00000000)
+      vsplth: 01020304 05060708 090a0b0c 0e0d0e0f, 3
+      vsplth:  => 07080708 07080708 07080708 07080708 (00000000)
+      vsplth: 01020304 05060708 090a0b0c 0e0d0e0f, 6
+      vsplth:  => 0e0d0e0d 0e0d0e0d 0e0d0e0d 0e0d0e0d (00000000)
+      vsplth: 01020304 05060708 090a0b0c 0e0d0e0f, 9
+      vsplth:  => 03040304 03040304 03040304 03040304 (00000000)
+      vsplth: 01020304 05060708 090a0b0c 0e0d0e0f, 12
+      vsplth:  => 090a090a 090a090a 090a090a 090a090a (00000000)
+      vsplth: 01020304 05060708 090a0b0c 0e0d0e0f, 15
+      vsplth:  => 0e0f0e0f 0e0f0e0f 0e0f0e0f 0e0f0e0f (00000000)
+      vsplth: f1f2f3f4 f5f6f7f8 f9fafbfc fefdfeff, 0
+      vsplth:  => f1f2f1f2 f1f2f1f2 f1f2f1f2 f1f2f1f2 (00000000)
+      vsplth: f1f2f3f4 f5f6f7f8 f9fafbfc fefdfeff, 3
+      vsplth:  => f7f8f7f8 f7f8f7f8 f7f8f7f8 f7f8f7f8 (00000000)
+      vsplth: f1f2f3f4 f5f6f7f8 f9fafbfc fefdfeff, 6
+      vsplth:  => fefdfefd fefdfefd fefdfefd fefdfefd (00000000)
+      vsplth: f1f2f3f4 f5f6f7f8 f9fafbfc fefdfeff, 9
+      vsplth:  => f3f4f3f4 f3f4f3f4 f3f4f3f4 f3f4f3f4 (00000000)
+      vsplth: f1f2f3f4 f5f6f7f8 f9fafbfc fefdfeff, 12
+      vsplth:  => f9faf9fa f9faf9fa f9faf9fa f9faf9fa (00000000)
+      vsplth: f1f2f3f4 f5f6f7f8 f9fafbfc fefdfeff, 15
+      vsplth:  => fefffeff fefffeff fefffeff fefffeff (00000000)
+
+      vspltw: 01020304 05060708 090a0b0c 0e0d0e0f, 0
+      vspltw:  => 01020304 01020304 01020304 01020304 (00000000)
+      vspltw: 01020304 05060708 090a0b0c 0e0d0e0f, 3
+      vspltw:  => 0e0d0e0f 0e0d0e0f 0e0d0e0f 0e0d0e0f (00000000)
+      vspltw: 01020304 05060708 090a0b0c 0e0d0e0f, 6
+      vspltw:  => 090a0b0c 090a0b0c 090a0b0c 090a0b0c (00000000)
+      vspltw: 01020304 05060708 090a0b0c 0e0d0e0f, 9
+      vspltw:  => 05060708 05060708 05060708 05060708 (00000000)
+      vspltw: 01020304 05060708 090a0b0c 0e0d0e0f, 12
+      vspltw:  => 01020304 01020304 01020304 01020304 (00000000)
+      vspltw: 01020304 05060708 090a0b0c 0e0d0e0f, 15
+      vspltw:  => 0e0d0e0f 0e0d0e0f 0e0d0e0f 0e0d0e0f (00000000)
+      vspltw: f1f2f3f4 f5f6f7f8 f9fafbfc fefdfeff, 0
+      vspltw:  => f1f2f3f4 f1f2f3f4 f1f2f3f4 f1f2f3f4 (00000000)
+      vspltw: f1f2f3f4 f5f6f7f8 f9fafbfc fefdfeff, 3
+      vspltw:  => fefdfeff fefdfeff fefdfeff fefdfeff (00000000)
+      vspltw: f1f2f3f4 f5f6f7f8 f9fafbfc fefdfeff, 6
+      vspltw:  => f9fafbfc f9fafbfc f9fafbfc f9fafbfc (00000000)
+      vspltw: f1f2f3f4 f5f6f7f8 f9fafbfc fefdfeff, 9
+      vspltw:  => f5f6f7f8 f5f6f7f8 f5f6f7f8 f5f6f7f8 (00000000)
+      vspltw: f1f2f3f4 f5f6f7f8 f9fafbfc fefdfeff, 12
+      vspltw:  => f1f2f3f4 f1f2f3f4 f1f2f3f4 f1f2f3f4 (00000000)
+      vspltw: f1f2f3f4 f5f6f7f8 f9fafbfc fefdfeff, 15
+      vspltw:  => fefdfeff fefdfeff fefdfeff fefdfeff (00000000)
+
+    vspltisb:  0 => 00000000 00000000 00000000 00000000 (00000000)
+    vspltisb:  1 => 01010101 01010101 01010101 01010101 (00000000)
+    vspltisb:  2 => 02020202 02020202 02020202 02020202 (00000000)
+    vspltisb:  3 => 03030303 03030303 03030303 03030303 (00000000)
+    vspltisb:  4 => 04040404 04040404 04040404 04040404 (00000000)
+    vspltisb:  5 => 05050505 05050505 05050505 05050505 (00000000)
+    vspltisb:  6 => 06060606 06060606 06060606 06060606 (00000000)
+    vspltisb:  7 => 07070707 07070707 07070707 07070707 (00000000)
+    vspltisb:  8 => 08080808 08080808 08080808 08080808 (00000000)
+    vspltisb:  9 => 09090909 09090909 09090909 09090909 (00000000)
+    vspltisb: 10 => 0a0a0a0a 0a0a0a0a 0a0a0a0a 0a0a0a0a (00000000)
+    vspltisb: 11 => 0b0b0b0b 0b0b0b0b 0b0b0b0b 0b0b0b0b (00000000)
+    vspltisb: 12 => 0c0c0c0c 0c0c0c0c 0c0c0c0c 0c0c0c0c (00000000)
+    vspltisb: 13 => 0d0d0d0d 0d0d0d0d 0d0d0d0d 0d0d0d0d (00000000)
+    vspltisb: 14 => 0e0e0e0e 0e0e0e0e 0e0e0e0e 0e0e0e0e (00000000)
+    vspltisb: 15 => 0f0f0f0f 0f0f0f0f 0f0f0f0f 0f0f0f0f (00000000)
+    vspltisb: 16 => f0f0f0f0 f0f0f0f0 f0f0f0f0 f0f0f0f0 (00000000)
+    vspltisb: 17 => f1f1f1f1 f1f1f1f1 f1f1f1f1 f1f1f1f1 (00000000)
+    vspltisb: 18 => f2f2f2f2 f2f2f2f2 f2f2f2f2 f2f2f2f2 (00000000)
+    vspltisb: 19 => f3f3f3f3 f3f3f3f3 f3f3f3f3 f3f3f3f3 (00000000)
+    vspltisb: 20 => f4f4f4f4 f4f4f4f4 f4f4f4f4 f4f4f4f4 (00000000)
+    vspltisb: 21 => f5f5f5f5 f5f5f5f5 f5f5f5f5 f5f5f5f5 (00000000)
+    vspltisb: 22 => f6f6f6f6 f6f6f6f6 f6f6f6f6 f6f6f6f6 (00000000)
+    vspltisb: 23 => f7f7f7f7 f7f7f7f7 f7f7f7f7 f7f7f7f7 (00000000)
+    vspltisb: 24 => f8f8f8f8 f8f8f8f8 f8f8f8f8 f8f8f8f8 (00000000)
+    vspltisb: 25 => f9f9f9f9 f9f9f9f9 f9f9f9f9 f9f9f9f9 (00000000)
+    vspltisb: 26 => fafafafa fafafafa fafafafa fafafafa (00000000)
+    vspltisb: 27 => fbfbfbfb fbfbfbfb fbfbfbfb fbfbfbfb (00000000)
+    vspltisb: 28 => fcfcfcfc fcfcfcfc fcfcfcfc fcfcfcfc (00000000)
+    vspltisb: 29 => fdfdfdfd fdfdfdfd fdfdfdfd fdfdfdfd (00000000)
+    vspltisb: 30 => fefefefe fefefefe fefefefe fefefefe (00000000)
+    vspltisb: 31 => ffffffff ffffffff ffffffff ffffffff (00000000)
+
+    vspltish:  0 => 00000000 00000000 00000000 00000000 (00000000)
+    vspltish:  1 => 00010001 00010001 00010001 00010001 (00000000)
+    vspltish:  2 => 00020002 00020002 00020002 00020002 (00000000)
+    vspltish:  3 => 00030003 00030003 00030003 00030003 (00000000)
+    vspltish:  4 => 00040004 00040004 00040004 00040004 (00000000)
+    vspltish:  5 => 00050005 00050005 00050005 00050005 (00000000)
+    vspltish:  6 => 00060006 00060006 00060006 00060006 (00000000)
+    vspltish:  7 => 00070007 00070007 00070007 00070007 (00000000)
+    vspltish:  8 => 00080008 00080008 00080008 00080008 (00000000)
+    vspltish:  9 => 00090009 00090009 00090009 00090009 (00000000)
+    vspltish: 10 => 000a000a 000a000a 000a000a 000a000a (00000000)
+    vspltish: 11 => 000b000b 000b000b 000b000b 000b000b (00000000)
+    vspltish: 12 => 000c000c 000c000c 000c000c 000c000c (00000000)
+    vspltish: 13 => 000d000d 000d000d 000d000d 000d000d (00000000)
+    vspltish: 14 => 000e000e 000e000e 000e000e 000e000e (00000000)
+    vspltish: 15 => 000f000f 000f000f 000f000f 000f000f (00000000)
+    vspltish: 16 => fff0fff0 fff0fff0 fff0fff0 fff0fff0 (00000000)
+    vspltish: 17 => fff1fff1 fff1fff1 fff1fff1 fff1fff1 (00000000)
+    vspltish: 18 => fff2fff2 fff2fff2 fff2fff2 fff2fff2 (00000000)
+    vspltish: 19 => fff3fff3 fff3fff3 fff3fff3 fff3fff3 (00000000)
+    vspltish: 20 => fff4fff4 fff4fff4 fff4fff4 fff4fff4 (00000000)
+    vspltish: 21 => fff5fff5 fff5fff5 fff5fff5 fff5fff5 (00000000)
+    vspltish: 22 => fff6fff6 fff6fff6 fff6fff6 fff6fff6 (00000000)
+    vspltish: 23 => fff7fff7 fff7fff7 fff7fff7 fff7fff7 (00000000)
+    vspltish: 24 => fff8fff8 fff8fff8 fff8fff8 fff8fff8 (00000000)
+    vspltish: 25 => fff9fff9 fff9fff9 fff9fff9 fff9fff9 (00000000)
+    vspltish: 26 => fffafffa fffafffa fffafffa fffafffa (00000000)
+    vspltish: 27 => fffbfffb fffbfffb fffbfffb fffbfffb (00000000)
+    vspltish: 28 => fffcfffc fffcfffc fffcfffc fffcfffc (00000000)
+    vspltish: 29 => fffdfffd fffdfffd fffdfffd fffdfffd (00000000)
+    vspltish: 30 => fffefffe fffefffe fffefffe fffefffe (00000000)
+    vspltish: 31 => ffffffff ffffffff ffffffff ffffffff (00000000)
+
+    vspltisw:  0 => 00000000 00000000 00000000 00000000 (00000000)
+    vspltisw:  1 => 00000001 00000001 00000001 00000001 (00000000)
+    vspltisw:  2 => 00000002 00000002 00000002 00000002 (00000000)
+    vspltisw:  3 => 00000003 00000003 00000003 00000003 (00000000)
+    vspltisw:  4 => 00000004 00000004 00000004 00000004 (00000000)
+    vspltisw:  5 => 00000005 00000005 00000005 00000005 (00000000)
+    vspltisw:  6 => 00000006 00000006 00000006 00000006 (00000000)
+    vspltisw:  7 => 00000007 00000007 00000007 00000007 (00000000)
+    vspltisw:  8 => 00000008 00000008 00000008 00000008 (00000000)
+    vspltisw:  9 => 00000009 00000009 00000009 00000009 (00000000)
+    vspltisw: 10 => 0000000a 0000000a 0000000a 0000000a (00000000)
+    vspltisw: 11 => 0000000b 0000000b 0000000b 0000000b (00000000)
+    vspltisw: 12 => 0000000c 0000000c 0000000c 0000000c (00000000)
+    vspltisw: 13 => 0000000d 0000000d 0000000d 0000000d (00000000)
+    vspltisw: 14 => 0000000e 0000000e 0000000e 0000000e (00000000)
+    vspltisw: 15 => 0000000f 0000000f 0000000f 0000000f (00000000)
+    vspltisw: 16 => fffffff0 fffffff0 fffffff0 fffffff0 (00000000)
+    vspltisw: 17 => fffffff1 fffffff1 fffffff1 fffffff1 (00000000)
+    vspltisw: 18 => fffffff2 fffffff2 fffffff2 fffffff2 (00000000)
+    vspltisw: 19 => fffffff3 fffffff3 fffffff3 fffffff3 (00000000)
+    vspltisw: 20 => fffffff4 fffffff4 fffffff4 fffffff4 (00000000)
+    vspltisw: 21 => fffffff5 fffffff5 fffffff5 fffffff5 (00000000)
+    vspltisw: 22 => fffffff6 fffffff6 fffffff6 fffffff6 (00000000)
+    vspltisw: 23 => fffffff7 fffffff7 fffffff7 fffffff7 (00000000)
+    vspltisw: 24 => fffffff8 fffffff8 fffffff8 fffffff8 (00000000)
+    vspltisw: 25 => fffffff9 fffffff9 fffffff9 fffffff9 (00000000)
+    vspltisw: 26 => fffffffa fffffffa fffffffa fffffffa (00000000)
+    vspltisw: 27 => fffffffb fffffffb fffffffb fffffffb (00000000)
+    vspltisw: 28 => fffffffc fffffffc fffffffc fffffffc (00000000)
+    vspltisw: 29 => fffffffd fffffffd fffffffd fffffffd (00000000)
+    vspltisw: 30 => fffffffe fffffffe fffffffe fffffffe (00000000)
+    vspltisw: 31 => ffffffff ffffffff ffffffff ffffffff (00000000)
+
+      vsldoi: 0102030405060708090a0b0c0e0d0e0f, 0102030405060708090a0b0c0e0d0e0f, 0
+      vsldoi:  => 01020304 05060708 090a0b0c 0e0d0e0f] (00000000)
+      vsldoi: 0102030405060708090a0b0c0e0d0e0f, 0102030405060708090a0b0c0e0d0e0f, 14
+      vsldoi:  => 0e0f0102 03040506 0708090a 0b0c0e0d] (00000000)
+      vsldoi: 0102030405060708090a0b0c0e0d0e0f, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 0
+      vsldoi:  => 01020304 05060708 090a0b0c 0e0d0e0f] (00000000)
+      vsldoi: 0102030405060708090a0b0c0e0d0e0f, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 14
+      vsldoi:  => 0e0ff1f2 f3f4f5f6 f7f8f9fa fbfcfefd] (00000000)
+      vsldoi: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 0102030405060708090a0b0c0e0d0e0f, 0
+      vsldoi:  => f1f2f3f4 f5f6f7f8 f9fafbfc fefdfeff] (00000000)
+      vsldoi: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 0102030405060708090a0b0c0e0d0e0f, 14
+      vsldoi:  => feff0102 03040506 0708090a 0b0c0e0d] (00000000)
+      vsldoi: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 0
+      vsldoi:  => f1f2f3f4 f5f6f7f8 f9fafbfc fefdfeff] (00000000)
+      vsldoi: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, f1f2f3f4f5f6f7f8f9fafbfcfefdfeff, 14
+      vsldoi:  => fefff1f2 f3f4f5f6 f7f8f9fa fbfcfefd] (00000000)
+
+All done. Tested 283 different instructions
diff --git a/none/tests/ppc32/jm-vmx.vgtest b/none/tests/ppc32/jm-vmx.vgtest
new file mode 100644 (file)
index 0000000..0f32c0d
--- /dev/null
@@ -0,0 +1 @@
+prog: jm-insns -a