summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsewardj <sewardj@a5019735-40e9-0310-863c-91ae7b9d1cf9>2011-09-05 12:15:16 +0000
committersewardj <sewardj@a5019735-40e9-0310-863c-91ae7b9d1cf9>2011-09-05 12:15:16 +0000
commit2062dc6ae4b4674619f0e330a551e18f0ea21da1 (patch)
treed4cb5eb5db1d06a2918c8ae0908888f9b5f122d7
parent169ac048e00bacd4dd5e16843404be9a958832ba (diff)
Add support for IBM Power ISA 2.06 -- stage 3 -- Test cases.
Bug 279994 comment 2). (Maynard Johnson, maynardj@us.ibm.com) git-svn-id: svn://svn.valgrind.org/valgrind/trunk@12007 a5019735-40e9-0310-863c-91ae7b9d1cf9
-rw-r--r--none/tests/ppc32/Makefile.am9
-rw-r--r--none/tests/ppc32/test_isa_2_06_part3.c1582
-rw-r--r--none/tests/ppc32/test_isa_2_06_part3.stderr.exp2
-rw-r--r--none/tests/ppc32/test_isa_2_06_part3.stdout.exp605
-rw-r--r--none/tests/ppc32/test_isa_2_06_part3.vgtest2
-rw-r--r--none/tests/ppc64/Makefile.am8
l---------none/tests/ppc64/test_isa_2_06_part3.c1
-rw-r--r--none/tests/ppc64/test_isa_2_06_part3.stderr.exp2
-rw-r--r--none/tests/ppc64/test_isa_2_06_part3.stdout.exp663
-rw-r--r--none/tests/ppc64/test_isa_2_06_part3.vgtest2
10 files changed, 2872 insertions, 4 deletions
diff --git a/none/tests/ppc32/Makefile.am b/none/tests/ppc32/Makefile.am
index b451b683..f43e1be9 100644
--- a/none/tests/ppc32/Makefile.am
+++ b/none/tests/ppc32/Makefile.am
@@ -28,7 +28,8 @@ EXTRA_DIST = \
power5+_round.stderr.exp power5+_round.stdout.exp power5+_round.vgtest \
power6_bcmp.stderr.exp power6_bcmp.stdout.exp power6_bcmp.vgtest \
test_isa_2_06_part1.stderr.exp test_isa_2_06_part1.stdout.exp test_isa_2_06_part1.vgtest \
- test_isa_2_06_part2.stderr.exp test_isa_2_06_part2.stdout.exp test_isa_2_06_part2.vgtest
+ test_isa_2_06_part2.stderr.exp test_isa_2_06_part2.stdout.exp test_isa_2_06_part2.vgtest \
+ test_isa_2_06_part3.stderr.exp test_isa_2_06_part3.stdout.exp test_isa_2_06_part3.vgtest
check_PROGRAMS = \
bug129390-ppc32 \
@@ -36,7 +37,8 @@ check_PROGRAMS = \
ldstrev lsw jm-insns mftocrf mcrfs round test_fx test_gx \
testVMX twi tw xlc_dbl_u32 power5+_round power6_bcmp \
test_isa_2_06_part1 \
- test_isa_2_06_part2
+ test_isa_2_06_part2 \
+ test_isa_2_06_part3
AM_CFLAGS += @FLAG_M32@
AM_CXXFLAGS += @FLAG_M32@
@@ -68,3 +70,6 @@ test_isa_2_06_part1_CFLAGS = $(AM_CFLAGS) -Winline -Wall -O -g -mregnames $(VSX_
test_isa_2_06_part2_CFLAGS = $(AM_CFLAGS) -Winline -Wall -O -g -mregnames $(VSX_FLAG) \
@FLAG_M32@ $(ALTIVEC_FLAG) $(BUILD_FLAG_VSX)
+test_isa_2_06_part3_CFLAGS = $(AM_CFLAGS) -Winline -Wall -O -lm -g -mregnames $(VSX_FLAG) \
+ @FLAG_M32@ $(ALTIVEC_FLAG) $(BUILD_FLAG_VSX)
+
diff --git a/none/tests/ppc32/test_isa_2_06_part3.c b/none/tests/ppc32/test_isa_2_06_part3.c
new file mode 100644
index 00000000..2f86760a
--- /dev/null
+++ b/none/tests/ppc32/test_isa_2_06_part3.c
@@ -0,0 +1,1582 @@
+/* Copyright (C) 2011 IBM
+
+ Author: Maynard Johnson <maynardj@us.ibm.com>
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation; either version 2 of the
+ License, or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307, USA.
+
+ The GNU General Public License is contained in the file COPYING.
+ */
+
+#ifdef HAS_VSX
+
+#include <stdio.h>
+#include <stdint.h>
+#include <stdlib.h>
+#include <string.h>
+#include <malloc.h>
+#include <altivec.h>
+#include <math.h>
+
+#ifndef __powerpc64__
+typedef uint32_t HWord_t;
+#else
+typedef uint64_t HWord_t;
+#endif /* __powerpc64__ */
+
+typedef unsigned char Bool;
+#define True 1
+#define False 0
+register HWord_t r14 __asm__ ("r14");
+register HWord_t r15 __asm__ ("r15");
+register HWord_t r16 __asm__ ("r16");
+register HWord_t r17 __asm__ ("r17");
+register double f14 __asm__ ("fr14");
+register double f15 __asm__ ("fr15");
+register double f16 __asm__ ("fr16");
+register double f17 __asm__ ("fr17");
+
+static volatile unsigned int div_flags, div_xer;
+
+#define ALLCR "cr0","cr1","cr2","cr3","cr4","cr5","cr6","cr7"
+
+#define SET_CR(_arg) \
+ __asm__ __volatile__ ("mtcr %0" : : "b"(_arg) : ALLCR );
+
+#define SET_XER(_arg) \
+ __asm__ __volatile__ ("mtxer %0" : : "b"(_arg) : "xer" );
+
+#define GET_CR(_lval) \
+ __asm__ __volatile__ ("mfcr %0" : "=b"(_lval) )
+
+#define GET_XER(_lval) \
+ __asm__ __volatile__ ("mfxer %0" : "=b"(_lval) )
+
+#define GET_CR_XER(_lval_cr,_lval_xer) \
+ do { GET_CR(_lval_cr); GET_XER(_lval_xer); } while (0)
+
+#define SET_CR_ZERO \
+ SET_CR(0)
+
+#define SET_XER_ZERO \
+ SET_XER(0)
+
+#define SET_CR_XER_ZERO \
+ do { SET_CR_ZERO; SET_XER_ZERO; } while (0)
+
+#define SET_FPSCR_ZERO \
+ do { double _d = 0.0; \
+ __asm__ __volatile__ ("mtfsf 0xFF, %0" : : "f"(_d) ); \
+ } while (0)
+
+
+typedef void (*test_func_t)(void);
+typedef struct test_table test_table_t;
+
+
+/* These functions below that construct a table of floating point
+ * values were lifted from none/tests/ppc32/jm-insns.c.
+ */
+
+#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
+
+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);
+}
+
+
+typedef struct fp_test_args {
+ int fra_idx;
+ int frb_idx;
+} fp_test_args_t;
+
+
+fp_test_args_t two_arg_fp_tests[] = {
+ {8, 8},
+ {8, 14},
+ {15, 16},
+ {8, 5},
+ {8, 4},
+ {8, 7},
+ {8, 9},
+ {8, 11},
+ {14, 8},
+ {14, 14},
+ {14, 6},
+ {14, 5},
+ {14, 4},
+ {14, 7},
+ {14, 9},
+ {14, 11},
+ {6, 8},
+ {6, 14},
+ {6, 6},
+ {6, 5},
+ {6, 4},
+ {6, 7},
+ {6, 9},
+ {6, 11},
+ {5, 8},
+ {5, 14},
+ {5, 6},
+ {5, 5},
+ {5, 4},
+ {5, 7},
+ {5, 9},
+ {5, 11},
+ {4, 8},
+ {4, 14},
+ {4, 6},
+ {4, 5},
+ {4, 1},
+ {4, 7},
+ {4, 9},
+ {4, 11},
+ {7, 8},
+ {7, 14},
+ {7, 6},
+ {7, 5},
+ {7, 4},
+ {7, 7},
+ {7, 9},
+ {7, 11},
+ {10, 8},
+ {10, 14},
+ {12, 6},
+ {12, 5},
+ {10, 4},
+ {10, 7},
+ {10, 9},
+ {10, 11},
+ {12, 8 },
+ {12, 14},
+ {12, 6},
+ {15, 16},
+ {15, 16},
+ {9, 11},
+ {11, 11},
+ {11, 12},
+ {16, 18},
+ {17, 16},
+ {19, 19},
+ {19, 18}
+};
+
+
+static int nb_special_fargs;
+static double * spec_fargs;
+static float * spec_sp_fargs;
+
+static void build_special_fargs_table(void)
+{
+/*
+ Entry Sign Exp fraction Special value
+ 0 0 3fd 0x8000000000000ULL Positive finite number
+ 1 0 404 0xf000000000000ULL ...
+ 2 0 001 0x8000000b77501ULL ...
+ 3 0 7fe 0x800000000051bULL ...
+ 4 0 012 0x3214569900000ULL ...
+ 5 0 000 0x0000000000000ULL +0.0 (+zero)
+ 6 1 000 0x0000000000000ULL -0.0 (-zero)
+ 7 0 7ff 0x0000000000000ULL +infinity
+ 8 1 7ff 0x0000000000000ULL -infinity
+ 9 0 7ff 0x7FFFFFFFFFFFFULL +SNaN
+ 10 1 7ff 0x7FFFFFFFFFFFFULL -SNaN
+ 11 0 7ff 0x8000000000000ULL +QNaN
+ 12 1 7ff 0x8000000000000ULL -QNaN
+ 13 1 000 0x8340000078000ULL Denormalized val (zero exp and non-zero fraction)
+ 14 1 40d 0x0650f5a07b353ULL Negative finite number
+ 15 0 412 0x32585a9900000ULL A few more positive finite numbers
+ 16 0 413 0x82511a2000000ULL ...
+ 17 . . . . . . . . . . . . . . . . . . . . . . .
+ 18 . . . . . . . . . . . . . . . . . . . . . . .
+ 19 . . . . . . . . . . . . . . . . . . . . . . .
+*/
+
+ uint64_t mant;
+ uint16_t _exp;
+ int s;
+ int j, i = 0;
+
+ if (spec_fargs)
+ return;
+
+ spec_fargs = malloc( 20 * sizeof(double) );
+ spec_sp_fargs = malloc( 20 * sizeof(float) );
+
+ // #0
+ s = 0;
+ _exp = 0x3fd;
+ mant = 0x8000000000000ULL;
+ register_farg(&spec_fargs[i++], s, _exp, mant);
+
+ // #1
+ s = 0;
+ _exp = 0x404;
+ mant = 0xf000000000000ULL;
+ register_farg(&spec_fargs[i++], s, _exp, mant);
+
+ // #2
+ s = 0;
+ _exp = 0x001;
+ mant = 0x8000000b77501ULL;
+ register_farg(&spec_fargs[i++], s, _exp, mant);
+
+ // #3
+ s = 0;
+ _exp = 0x7fe;
+ mant = 0x800000000051bULL;
+ register_farg(&spec_fargs[i++], s, _exp, mant);
+
+ // #4
+ s = 0;
+ _exp = 0x012;
+ mant = 0x3214569900000ULL;
+ register_farg(&spec_fargs[i++], s, _exp, mant);
+
+
+ /* Special values */
+ /* +0.0 : 0 0x000 0x0000000000000 */
+ // #5
+ s = 0;
+ _exp = 0x000;
+ mant = 0x0000000000000ULL;
+ register_farg(&spec_fargs[i++], s, _exp, mant);
+
+ /* -0.0 : 1 0x000 0x0000000000000 */
+ // #6
+ s = 1;
+ _exp = 0x000;
+ mant = 0x0000000000000ULL;
+ register_farg(&spec_fargs[i++], s, _exp, mant);
+
+ /* +infinity : 0 0x7FF 0x0000000000000 */
+ // #7
+ s = 0;
+ _exp = 0x7FF;
+ mant = 0x0000000000000ULL;
+ register_farg(&spec_fargs[i++], s, _exp, mant);
+
+ /* -infinity : 1 0x7FF 0x0000000000000 */
+ // #8
+ s = 1;
+ _exp = 0x7FF;
+ mant = 0x0000000000000ULL;
+ register_farg(&spec_fargs[i++], s, _exp, mant);
+
+ /* +QNaN : 0 0x7FF 0x7FFFFFFFFFFFF */
+ // #9
+ s = 0;
+ _exp = 0x7FF;
+ mant = 0x7FFFFFFFFFFFFULL;
+ register_farg(&spec_fargs[i++], s, _exp, mant);
+
+ /* -QNaN : 1 0x7FF 0x7FFFFFFFFFFFF */
+ // #10
+ s = 1;
+ _exp = 0x7FF;
+ mant = 0x7FFFFFFFFFFFFULL;
+ register_farg(&spec_fargs[i++], s, _exp, mant);
+
+ /* +SNaN : 0 0x7FF 0x8000000000000 */
+ // #11
+ s = 0;
+ _exp = 0x7FF;
+ mant = 0x8000000000000ULL;
+ register_farg(&spec_fargs[i++], s, _exp, mant);
+
+ /* -SNaN : 1 0x7FF 0x8000000000000 */
+ // #12
+ s = 1;
+ _exp = 0x7FF;
+ mant = 0x8000000000000ULL;
+ register_farg(&spec_fargs[i++], s, _exp, mant);
+
+ /* denormalized value */
+ // #13
+ s = 1;
+ _exp = 0x000;
+ mant = 0x8340000078000ULL;
+ register_farg(&spec_fargs[i++], s, _exp, mant);
+
+ /* Negative finite number */
+ // #14
+ s = 1;
+ _exp = 0x40d;
+ mant = 0x0650f5a07b353ULL;
+ register_farg(&spec_fargs[i++], s, _exp, mant);
+
+ /* A few positive finite numbers ... */
+ // #15
+ s = 0;
+ _exp = 0x412;
+ mant = 0x32585a9900000ULL;
+ register_farg(&spec_fargs[i++], s, _exp, mant);
+
+ // #16
+ s = 0;
+ _exp = 0x413;
+ mant = 0x82511a2000000ULL;
+ register_farg(&spec_fargs[i++], s, _exp, mant);
+
+ // #17
+ s = 0;
+ _exp = 0x403;
+ mant = 0x12ef5a9300000ULL;
+ register_farg(&spec_fargs[i++], s, _exp, mant);
+
+ // #18
+ s = 0;
+ _exp = 0x405;
+ mant = 0x14bf5d2300000ULL;
+ register_farg(&spec_fargs[i++], s, _exp, mant);
+
+ // #19
+ s = 0;
+ _exp = 0x409;
+ mant = 0x76bf982440000ULL;
+ register_farg(&spec_fargs[i++], s, _exp, mant);
+
+ nb_special_fargs = i;
+ for (j = 0; j < i; j++) {
+ spec_sp_fargs[j] = spec_fargs[j];
+ }
+}
+
+
+struct test_table
+{
+ test_func_t test_category;
+ char * name;
+};
+
+/* Type of input for floating point operations.*/
+typedef enum {
+ SINGLE_TEST,
+ DOUBLE_TEST
+} precision_type_t;
+
+typedef enum {
+ VX_SCALAR_CONV_TO_WORD,
+ VX_CONV_TO_SINGLE,
+ VX_CONV_TO_DOUBLE,
+ VX_ESTIMATE,
+ VX_DEFAULT
+} vx_fp_test_type;
+
+static vector unsigned int vec_out, vec_inA, vec_inB;
+
+/* This function is for checking the reciprocal and reciprocal square root
+ * estimate instructions.
+ */
+Bool check_estimate(precision_type_t type, Bool is_rsqrte, int idx, int output_vec_idx)
+{
+ /* Technically, the number of bits of precision for xvredp and xvrsqrtedp is
+ * 14 bits (14 = log2 16384). However, the VEX emulation of these instructions
+ * does an actual reciprocal calculation versus estimation, so the answer we get back from
+ * valgrind can easily differ from the estimate in the lower bits (within the 14 bits of
+ * precision) and the estimate may still be within expected tolerances. On top of that,
+ * we can't count on these estimates always being the same across implementations.
+ * For example, with the fre[s] instruction (which should be correct to within one part
+ * in 256 -- i.e., 8 bits of precision) . . . When approximating the value 1.0111_1111_1111,
+ * one implementation could return 1.0111_1111_0000 and another implementation could return
+ * 1.1000_0000_0000. Both estimates meet the 1/256 accuracy requirement, but share only a
+ * single bit in common.
+ *
+ * The upshot is we can't validate the VEX output for these instructions by comparing against
+ * stored bit patterns. We must check that the result is within expected tolerances.
+ */
+
+
+ /* A mask to be used for validation as a last resort.
+ * Only use 12 bits of precision for reasons discussed above.
+ */
+#define VSX_RECIP_ESTIMATE_MASK_DP 0xFFFFFF0000000000ULL
+#define VSX_RECIP_ESTIMATE_MASK_SP 0xFFFFFF00
+
+ Bool result = False;
+ Bool dp_test = type == DOUBLE_TEST;
+ double src_dp, res_dp;
+ float src_sp, res_sp;
+ src_dp = res_dp = 0;
+ src_sp = res_sp = 0;
+#define SRC (dp_test ? src_dp : src_sp)
+#define RES (dp_test ? res_dp : res_sp)
+ Bool src_is_negative = False;
+ Bool res_is_negative = False;
+ unsigned long long * dst_dp = NULL;
+ unsigned int * dst_sp = NULL;
+ if (dp_test) {
+ unsigned long long * src_dp_ull;
+ dst_dp = (unsigned long long *) &vec_out;
+ src_dp = spec_fargs[idx];
+ src_dp_ull = (unsigned long long *) &src_dp;
+ src_is_negative = (*src_dp_ull & 0x8000000000000000ULL) ? True : False;
+ res_is_negative = (dst_dp[output_vec_idx] & 0x8000000000000000ULL) ? True : False;
+ memcpy(&res_dp, &dst_dp[output_vec_idx], 8);
+ } else {
+ unsigned int * src_sp_uint;
+ dst_sp = (unsigned int *) &vec_out;
+ src_sp = spec_sp_fargs[idx];
+ src_sp_uint = (unsigned int *) &src_sp;
+ src_is_negative = (*src_sp_uint & 0x80000000) ? True : False;
+ res_is_negative = (dst_sp[output_vec_idx] & 0x80000000) ? True : False;
+ memcpy(&res_sp, &dst_sp[output_vec_idx], 4);
+ }
+
+ // Below are common rules for xvre{d|s}p and xvrsqrte{d|s}p
+ if (isnan(SRC))
+ return isnan(RES);
+ if (fpclassify(SRC) == FP_ZERO)
+ return isinf(RES);
+ if (!src_is_negative && isinf(SRC))
+ return !res_is_negative && (fpclassify(RES) == FP_ZERO);
+ if (is_rsqrte) {
+ if (src_is_negative)
+ return isnan(RES);
+ } else {
+ if (src_is_negative && isinf(SRC))
+ return res_is_negative && (fpclassify(RES) == FP_ZERO);
+ }
+ if (dp_test) {
+ double calc_diff;
+ double real_diff;
+ double recip_divisor;
+ double div_result;
+ double calc_diff_tmp;
+
+ if (is_rsqrte)
+ recip_divisor = sqrt(src_dp);
+ else
+ recip_divisor = src_dp;
+
+ div_result = 1.0/recip_divisor;
+ calc_diff_tmp = recip_divisor * 16384.0;
+ if (isnormal(calc_diff_tmp)) {
+ calc_diff = fabs(1.0/calc_diff_tmp);
+ real_diff = fabs(res_dp - div_result);
+ result = ( ( res_dp == div_result )
+ || ( real_diff <= calc_diff ) );
+ } else {
+ /* Unable to compute theoretical difference, so we fall back to masking out
+ * un-precise bits.
+ */
+ unsigned long long * div_result_dp = (unsigned long long *) &div_result;
+ result = (dst_dp[output_vec_idx] & VSX_RECIP_ESTIMATE_MASK_DP) == (*div_result_dp & VSX_RECIP_ESTIMATE_MASK_DP);
+ }
+ /* For debug use . . .
+ if (!result) {
+ unsigned long long * dv = &div_result;
+ unsigned long long * rd = &real_diff;
+ unsigned long long * cd = &calc_diff;
+ printf("\n\t {actual div_result: %016llx; real_diff: %016llx; calc_diff: %016llx}\n",
+ *dv, *rd, *cd);
+ }
+ */
+ } else { // single precision test (only have xvrsqrtesp, since xvresp was implemented in stage 2)
+ float calc_diff;
+ float real_diff;
+ float div_result;
+ float calc_diff_tmp;
+ float recip_divisor = sqrt(src_sp);
+
+ div_result = 1.0/recip_divisor;
+ calc_diff_tmp = recip_divisor * 16384.0;
+ if (isnormal(calc_diff_tmp)) {
+ calc_diff = fabsf(1.0/calc_diff_tmp);
+ real_diff = fabsf(res_sp - div_result);
+ result = ( ( res_sp == div_result )
+ || ( real_diff <= calc_diff ) );
+ } else {
+ /* Unable to compute theoretical difference, so we fall back to masking out
+ * un-precise bits.
+ */
+ unsigned int * div_result_sp = (unsigned int *) &div_result;
+ result = (dst_sp[output_vec_idx] & VSX_RECIP_ESTIMATE_MASK_SP) == (*div_result_sp & VSX_RECIP_ESTIMATE_MASK_SP);
+ }
+ /* For debug use . . .
+ if (!result) {
+ unsigned long long * dv = &div_result;
+ unsigned long long * rd = &real_diff;
+ unsigned long long * cd = &calc_diff;
+ printf("\n\t {actual div_result: %016llx; real_diff: %016llx; calc_diff: %016llx}\n",
+ *dv, *rd, *cd);
+ }
+ */
+ }
+ return result;
+}
+
+typedef struct vx_fp_test
+{
+ test_func_t test_func;
+ const char * name;
+ fp_test_args_t * targs;
+ int num_tests;
+ precision_type_t precision;
+ vx_fp_test_type type;
+ const char * op;
+} vx_fp_test_t;
+
+
+static Bool do_dot;
+
+static void test_xvredp(void)
+{
+ __asm__ __volatile__ ("xvredp %x0, %x1" : "=wa" (vec_out): "wa" (vec_inB));
+}
+
+static void test_xsredp(void)
+{
+ __asm__ __volatile__ ("xsredp %x0, %x1" : "=wa" (vec_out): "wa" (vec_inB));
+}
+
+static void test_xvrsqrtedp(void)
+{
+ __asm__ __volatile__ ("xvrsqrtedp %x0, %x1" : "=wa" (vec_out): "wa" (vec_inB));
+}
+
+static void test_xsrsqrtedp(void)
+{
+ __asm__ __volatile__ ("xsrsqrtedp %x0, %x1" : "=wa" (vec_out): "wa" (vec_inB));
+}
+
+static void test_xvrsqrtesp(void)
+{
+ __asm__ __volatile__ ("xvrsqrtesp %x0, %x1" : "=wa" (vec_out): "wa" (vec_inB));
+}
+
+static void test_xstsqrtdp(void)
+{
+ __asm__ __volatile__ ("xstsqrtdp cr1, %x0" : : "wa" (vec_inB));
+}
+
+static void test_xvtsqrtdp(void)
+{
+ __asm__ __volatile__ ("xvtsqrtdp cr1, %x0" : : "wa" (vec_inB));
+}
+
+static void test_xvtsqrtsp(void)
+{
+ __asm__ __volatile__ ("xvtsqrtsp cr1, %x0" : : "wa" (vec_inB));
+}
+
+static void test_xvsqrtdp(void)
+{
+ __asm__ __volatile__ ("xvsqrtdp %x0, %x1" : "=wa" (vec_out): "wa" (vec_inB));
+}
+
+static void test_xvsqrtsp(void)
+{
+ __asm__ __volatile__ ("xvsqrtsp %x0, %x1" : "=wa" (vec_out): "wa" (vec_inB));
+}
+
+static void test_xvtdivdp(void)
+{
+ __asm__ __volatile__ ("xvtdivdp cr1, %x0, %x1" : : "wa" (vec_inA), "wa" (vec_inB));
+}
+
+static void test_xvtdivsp(void)
+{
+ __asm__ __volatile__ ("xvtdivsp cr1, %x0, %x1" : : "wa" (vec_inA), "wa" (vec_inB));
+}
+
+static void test_xscvdpsp(void)
+{
+ __asm__ __volatile__ ("xscvdpsp %x0, %x1" : "=wa" (vec_out): "wa" (vec_inB));
+}
+
+static void test_xscvdpuxws(void)
+{
+ __asm__ __volatile__ ("xscvdpuxws %x0, %x1" : "=wa" (vec_out): "wa" (vec_inB));
+}
+
+static void test_xscvspdp(void)
+{
+ __asm__ __volatile__ ("xscvspdp %x0, %x1" : "=wa" (vec_out): "wa" (vec_inB));
+}
+
+static void test_xvcvdpsp(void)
+{
+ __asm__ __volatile__ ("xvcvdpsp %x0, %x1" : "=wa" (vec_out): "wa" (vec_inB));
+}
+
+static void test_xvcvdpuxds(void)
+{
+ __asm__ __volatile__ ("xvcvdpuxds %x0, %x1" : "=wa" (vec_out): "wa" (vec_inB));
+}
+
+static void test_xvcvdpuxws(void)
+{
+ __asm__ __volatile__ ("xvcvdpuxws %x0, %x1" : "=wa" (vec_out): "wa" (vec_inB));
+}
+
+static void test_xvcvspdp(void)
+{
+ __asm__ __volatile__ ("xvcvspdp %x0, %x1" : "=wa" (vec_out): "wa" (vec_inB));
+}
+
+static void test_xvcvspsxds(void)
+{
+ __asm__ __volatile__ ("xvcvspsxds %x0, %x1" : "=wa" (vec_out): "wa" (vec_inB));
+}
+
+static void test_xvcvspuxds(void)
+{
+ __asm__ __volatile__ ("xvcvspuxds %x0, %x1" : "=wa" (vec_out): "wa" (vec_inB));
+}
+
+static void test_xvcvdpsxds(void)
+{
+ __asm__ __volatile__ ("xvcvdpsxds %x0, %x1" : "=wa" (vec_out): "wa" (vec_inB));
+}
+
+static void test_xvcvspuxws(void)
+{
+ __asm__ __volatile__ ("xvcvspuxws %x0, %x1" : "=wa" (vec_out): "wa" (vec_inB));
+}
+
+static void test_xvcvsxddp(void)
+{
+ __asm__ __volatile__ ("xvcvsxddp %x0, %x1" : "=wa" (vec_out): "wa" (vec_inB));
+}
+
+static void test_xvcvuxddp(void)
+{
+ __asm__ __volatile__ ("xvcvuxddp %x0, %x1" : "=wa" (vec_out): "wa" (vec_inB));
+}
+
+static void test_xvcvsxdsp(void)
+{
+ __asm__ __volatile__ ("xvcvsxdsp %x0, %x1" : "=wa" (vec_out): "wa" (vec_inB));
+}
+
+static void test_xvcvuxdsp(void)
+{
+ __asm__ __volatile__ ("xvcvuxdsp %x0, %x1" : "=wa" (vec_out): "wa" (vec_inB));
+}
+
+static void test_xvcvsxwdp(void)
+{
+ __asm__ __volatile__ ("xvcvsxwdp %x0, %x1" : "=wa" (vec_out): "wa" (vec_inB));
+}
+
+static void test_xvcvuxwdp(void)
+{
+ __asm__ __volatile__ ("xvcvuxwdp %x0, %x1" : "=wa" (vec_out): "wa" (vec_inB));
+}
+
+static void test_xvcvsxwsp(void)
+{
+ __asm__ __volatile__ ("xvcvsxwsp %x0, %x1" : "=wa" (vec_out): "wa" (vec_inB));
+}
+
+static void test_xvcvuxwsp(void)
+{
+ __asm__ __volatile__ ("xvcvuxwsp %x0, %x1" : "=wa" (vec_out): "wa" (vec_inB));
+}
+
+static void test_xsrdpic(void)
+{
+ __asm__ __volatile__ ("xsrdpic %x0, %x1" : "=wa" (vec_out): "wa" (vec_inB));
+}
+
+static void test_xsrdpiz(void)
+{
+ __asm__ __volatile__ ("xsrdpiz %x0, %x1" : "=wa" (vec_out): "wa" (vec_inB));
+}
+
+static void test_xsrdpi(void)
+{
+ __asm__ __volatile__ ("xsrdpi %x0, %x1" : "=wa" (vec_out): "wa" (vec_inB));
+}
+
+static void test_xvabsdp(void)
+{
+ __asm__ __volatile__ ("xvabsdp %x0, %x1" : "=wa" (vec_out): "wa" (vec_inB));
+}
+
+static void test_xvnabsdp(void)
+{
+ __asm__ __volatile__ ("xvnabsdp %x0, %x1" : "=wa" (vec_out): "wa" (vec_inB));
+}
+
+static void test_xvnegdp(void)
+{
+ __asm__ __volatile__ ("xvnegdp %x0, %x1" : "=wa" (vec_out): "wa" (vec_inB));
+}
+
+static void test_xvabssp(void)
+{
+ __asm__ __volatile__ ("xvabssp %x0, %x1" : "=wa" (vec_out): "wa" (vec_inB));
+}
+
+static void test_xvnabssp(void)
+{
+ __asm__ __volatile__ ("xvnabssp %x0, %x1" : "=wa" (vec_out): "wa" (vec_inB));
+}
+
+static void test_xvrdpi(void)
+{
+ __asm__ __volatile__ ("xvrdpi %x0, %x1" : "=wa" (vec_out): "wa" (vec_inB));
+}
+
+static void test_xvrdpic(void)
+{
+ __asm__ __volatile__ ("xvrdpic %x0, %x1" : "=wa" (vec_out): "wa" (vec_inB));
+}
+
+static void test_xvrdpim(void)
+{
+ __asm__ __volatile__ ("xvrdpim %x0, %x1" : "=wa" (vec_out): "wa" (vec_inB));
+}
+
+static void test_xvrdpip(void)
+{
+ __asm__ __volatile__ ("xvrdpip %x0, %x1" : "=wa" (vec_out): "wa" (vec_inB));
+}
+
+static void test_xvrdpiz(void)
+{
+ __asm__ __volatile__ ("xvrdpiz %x0, %x1" : "=wa" (vec_out): "wa" (vec_inB));
+}
+
+static void test_xvrspi(void)
+{
+ __asm__ __volatile__ ("xvrspi %x0, %x1" : "=wa" (vec_out): "wa" (vec_inB));
+}
+
+static void test_xvrspic(void)
+{
+ __asm__ __volatile__ ("xvrspic %x0, %x1" : "=wa" (vec_out): "wa" (vec_inB));
+}
+
+static void test_xvrspim(void)
+{
+ __asm__ __volatile__ ("xvrspim %x0, %x1" : "=wa" (vec_out): "wa" (vec_inB));
+}
+
+static void test_xvrspip(void)
+{
+ __asm__ __volatile__ ("xvrspip %x0, %x1" : "=wa" (vec_out): "wa" (vec_inB));
+}
+
+static void test_xvrspiz(void)
+{
+ __asm__ __volatile__ ("xvrspiz %x0, %x1" : "=wa" (vec_out): "wa" (vec_inB));
+}
+
+static vx_fp_test_t
+vsx_one_fp_arg_tests[] = {
+ { &test_xvredp, "xvredp", NULL, 18, DOUBLE_TEST, VX_ESTIMATE, "1/x"},
+ { &test_xsredp, "xsredp", NULL, 18, DOUBLE_TEST, VX_ESTIMATE, "1/x"},
+ { &test_xvrsqrtedp, "xvrsqrtedp", NULL, 18, DOUBLE_TEST, VX_ESTIMATE, "1/x-sqrt"},
+ { &test_xsrsqrtedp, "xsrsqrtedp", NULL, 18, DOUBLE_TEST, VX_ESTIMATE, "1/x-sqrt"},
+ { &test_xvrsqrtesp, "xvrsqrtesp", NULL, 18, SINGLE_TEST, VX_ESTIMATE, "1/x-sqrt"},
+ { &test_xvsqrtdp, "xvsqrtdp", NULL, 18, DOUBLE_TEST, VX_DEFAULT, "sqrt"},
+ { &test_xvsqrtsp, "xvsqrtsp", NULL, 18, SINGLE_TEST, VX_DEFAULT, "sqrt"},
+ { &test_xscvdpsp, "xscvdpsp", NULL, 20, DOUBLE_TEST, VX_CONV_TO_SINGLE, "conv"},
+ { &test_xscvdpuxws, "xscvdpuxws", NULL, 20, DOUBLE_TEST, VX_SCALAR_CONV_TO_WORD, "conv"},
+ { &test_xscvspdp, "xscvspdp", NULL, 20, SINGLE_TEST, VX_CONV_TO_DOUBLE, "conv"},
+ { &test_xvcvdpsp, "xvcvdpsp", NULL, 20, DOUBLE_TEST, VX_CONV_TO_SINGLE, "conv"},
+ { &test_xvcvdpuxds, "xvcvdpuxds", NULL, 20, DOUBLE_TEST, VX_CONV_TO_DOUBLE, "conv"},
+ { &test_xvcvdpuxws, "xvcvdpuxws", NULL, 20, DOUBLE_TEST, VX_CONV_TO_SINGLE, "conv"},
+ { &test_xvcvspdp, "xvcvspdp", NULL, 20, SINGLE_TEST, VX_CONV_TO_DOUBLE, "conv"},
+ { &test_xvcvspsxds, "xvcvspsxds", NULL, 20, SINGLE_TEST, VX_CONV_TO_DOUBLE, "conv"},
+ { &test_xvcvdpsxds, "xvcvdpsxds", NULL, 20, DOUBLE_TEST, VX_CONV_TO_DOUBLE, "conv"},
+ { &test_xvcvspuxds, "xvcvspuxds", NULL, 20, SINGLE_TEST, VX_CONV_TO_DOUBLE, "conv"},
+ { &test_xvcvspuxws, "xvcvspuxws", NULL, 20, SINGLE_TEST, VX_CONV_TO_SINGLE, "conv"},
+ { &test_xsrdpic, "xsrdpic", NULL, 20, DOUBLE_TEST, VX_CONV_TO_DOUBLE, "round"},
+ { &test_xsrdpiz, "xsrdpiz", NULL, 20, DOUBLE_TEST, VX_CONV_TO_DOUBLE, "round"},
+ { &test_xsrdpi, "xsrdpi", NULL, 20, DOUBLE_TEST, VX_CONV_TO_DOUBLE, "round"},
+ { &test_xvabsdp, "xvabsdp", NULL, 20, DOUBLE_TEST, VX_DEFAULT, "abs"},
+ { &test_xvnabsdp, "xvnabsdp", NULL, 20, DOUBLE_TEST, VX_DEFAULT, "nabs"},
+ { &test_xvnegdp, "xvnegdp", NULL, 20, DOUBLE_TEST, VX_DEFAULT, "neg"},
+ { &test_xvabssp, "xvabssp", NULL, 20, SINGLE_TEST, VX_DEFAULT, "abs"},
+ { &test_xvnabssp, "xvnabssp", NULL, 20, SINGLE_TEST, VX_DEFAULT, "nabs"},
+ { &test_xvrdpi, "xvrdpi", NULL, 20, DOUBLE_TEST, VX_CONV_TO_DOUBLE, "round"},
+ { &test_xvrdpic, "xvrdpic", NULL, 20, DOUBLE_TEST, VX_CONV_TO_DOUBLE, "round"},
+ { &test_xvrdpim, "xvrdpim", NULL, 20, DOUBLE_TEST, VX_CONV_TO_DOUBLE, "round"},
+ { &test_xvrdpip, "xvrdpip", NULL, 20, DOUBLE_TEST, VX_CONV_TO_DOUBLE, "round"},
+ { &test_xvrdpiz, "xvrdpiz", NULL, 20, DOUBLE_TEST, VX_CONV_TO_DOUBLE, "round"},
+ { &test_xvrspi, "xvrspi", NULL, 20, SINGLE_TEST, VX_CONV_TO_SINGLE, "round"},
+ { &test_xvrspic, "xvrspic", NULL, 20, SINGLE_TEST, VX_CONV_TO_SINGLE, "round"},
+ { &test_xvrspim, "xvrspim", NULL, 20, SINGLE_TEST, VX_CONV_TO_SINGLE, "round"},
+ { &test_xvrspip, "xvrspip", NULL, 20, SINGLE_TEST, VX_CONV_TO_SINGLE, "round"},
+ { &test_xvrspiz, "xvrspiz", NULL, 20, SINGLE_TEST, VX_CONV_TO_SINGLE, "round"},
+ { NULL, NULL, NULL, 0, 0, 0, NULL}
+};
+
+static vx_fp_test_t
+vx_tdivORtsqrt_tests[] = {
+ { &test_xstsqrtdp, "xstsqrtdp", NULL, 20, DOUBLE_TEST, VX_DEFAULT, "test-sqrt"},
+ { &test_xvtsqrtdp, "xvtsqrtdp", NULL, 20, DOUBLE_TEST, VX_DEFAULT, "test-sqrt"},
+ { &test_xvtsqrtsp, "xvtsqrtsp", NULL, 20, SINGLE_TEST, VX_DEFAULT, "test-sqrt"},
+ { &test_xvtdivdp, "xvtdivdp", two_arg_fp_tests, 68, DOUBLE_TEST, VX_DEFAULT, "test-div"},
+ { &test_xvtdivsp, "xvtdivsp", two_arg_fp_tests, 68, SINGLE_TEST, VX_DEFAULT, "test-div"},
+ { NULL, NULL, NULL, 0 , 0, 0, NULL}
+};
+
+static unsigned long long doubleWord[] = { 0,
+ 0xffffffff00000000LL,
+ 0x00000000ffffffffLL,
+ 0xffffffffffffffffLL,
+ 0x89abcde123456789LL,
+ 0x0102030405060708LL,
+ 0x00000000a0b1c2d3LL,
+ 0x1111222233334444LL
+};
+
+static unsigned int singleWord[] = {0,
+ 0xffff0000,
+ 0x0000ffff,
+ 0xffffffff,
+ 0x89a73522,
+ 0x01020304,
+ 0x0000abcd,
+ 0x11223344
+};
+
+typedef struct vx_intToFp_test
+{
+ test_func_t test_func;
+ const char * name;
+ void * targs;
+ int num_tests;
+ precision_type_t precision;
+ vx_fp_test_type type;
+} vx_intToFp_test_t;
+
+static vx_intToFp_test_t
+intToFp_tests[] = {
+ { test_xvcvsxddp, "xvcvsxddp", (void *)doubleWord, 8, DOUBLE_TEST, VX_CONV_TO_DOUBLE },
+ { test_xvcvuxddp, "xvcvuxddp", (void *)doubleWord, 8, DOUBLE_TEST, VX_CONV_TO_DOUBLE },
+ { test_xvcvsxdsp, "xvcvsxdsp", (void *)doubleWord, 8, DOUBLE_TEST, VX_CONV_TO_SINGLE },
+ { test_xvcvuxdsp, "xvcvuxdsp", (void *)doubleWord, 8, DOUBLE_TEST, VX_CONV_TO_SINGLE },
+ { test_xvcvsxwdp, "xvcvsxwdp", (void *)singleWord, 8, SINGLE_TEST, VX_CONV_TO_DOUBLE },
+ { test_xvcvuxwdp, "xvcvuxwdp", (void *)singleWord, 8, SINGLE_TEST, VX_CONV_TO_DOUBLE },
+ { test_xvcvsxwsp, "xvcvsxwsp", (void *)singleWord, 8, SINGLE_TEST, VX_CONV_TO_SINGLE },
+ { test_xvcvuxwsp, "xvcvuxwsp", (void *)singleWord, 8, SINGLE_TEST, VX_CONV_TO_SINGLE },
+ { NULL, NULL, NULL, 0, 0 }
+};
+
+static Bool do_OE;
+typedef enum {
+ DIV_BASE = 1,
+ DIV_OE = 2,
+ DIV_DOT = 4,
+} div_type_t;
+/* Possible divde type combinations are:
+ * - base
+ * - base+dot
+ * - base+OE
+ * - base+OE+dot
+ */
+#ifdef __powerpc64__
+static void test_divdeu(void)
+{
+ int divdeu_type = DIV_BASE;
+ if (do_OE)
+ divdeu_type |= DIV_OE;
+ if (do_dot)
+ divdeu_type |= DIV_DOT;
+
+ switch (divdeu_type) {
+ case 1:
+ SET_CR_XER_ZERO;
+ __asm__ __volatile__ ("divdeu %0, %1, %2" : "=r" (r17) : "r" (r14),"r" (r15));
+ GET_CR_XER(div_flags, div_xer);
+ break;
+ case 3:
+ SET_CR_XER_ZERO;
+ __asm__ __volatile__ ("divdeuo %0, %1, %2" : "=r" (r17) : "r" (r14),"r" (r15));
+ GET_CR_XER(div_flags, div_xer);
+ break;
+ case 5:
+ SET_CR_XER_ZERO;
+ __asm__ __volatile__ ("divdeu. %0, %1, %2" : "=r" (r17) : "r" (r14),"r" (r15));
+ GET_CR_XER(div_flags, div_xer);
+ break;
+ case 7:
+ SET_CR_XER_ZERO;
+ __asm__ __volatile__ ("divdeuo. %0, %1, %2" : "=r" (r17) : "r" (r14),"r" (r15));
+ GET_CR_XER(div_flags, div_xer);
+ break;
+ default:
+ fprintf(stderr, "Invalid divdeu type. Exiting\n");
+ exit(1);
+ }
+}
+#endif
+
+static void test_divwe(void)
+{
+ int divwe_type = DIV_BASE;
+ if (do_OE)
+ divwe_type |= DIV_OE;
+ if (do_dot)
+ divwe_type |= DIV_DOT;
+
+ switch (divwe_type) {
+ case 1:
+ SET_CR_XER_ZERO;
+ __asm__ __volatile__ ("divwe %0, %1, %2" : "=r" (r17) : "r" (r14),"r" (r15));
+ GET_CR_XER(div_flags, div_xer);
+ break;
+ case 3:
+ SET_CR_XER_ZERO;
+ __asm__ __volatile__ ("divweo %0, %1, %2" : "=r" (r17) : "r" (r14),"r" (r15));
+ GET_CR_XER(div_flags, div_xer);
+ break;
+ case 5:
+ SET_CR_XER_ZERO;
+ __asm__ __volatile__ ("divwe. %0, %1, %2" : "=r" (r17) : "r" (r14),"r" (r15));
+ GET_CR_XER(div_flags, div_xer);
+ break;
+ case 7:
+ SET_CR_XER_ZERO;
+ __asm__ __volatile__ ("divweo. %0, %1, %2" : "=r" (r17) : "r" (r14),"r" (r15));
+ GET_CR_XER(div_flags, div_xer);
+ break;
+ default:
+ fprintf(stderr, "Invalid divweu type. Exiting\n");
+ exit(1);
+ }
+}
+
+
+typedef struct simple_test {
+ test_func_t test_func;
+ char * name;
+ precision_type_t precision;
+} simple_test_t;
+
+
+static void setup_sp_fp_args(fp_test_args_t * targs, Bool swap_inputs)
+{
+ int a_idx, b_idx, i;
+ void * inA, * inB;
+ void * vec_src = swap_inputs ? &vec_out : &vec_inB;
+
+ for (i = 0; i < 4; i++) {
+ a_idx = targs->fra_idx;
+ b_idx = targs->frb_idx;
+ inA = (void *)&spec_sp_fargs[a_idx];
+ inB = (void *)&spec_sp_fargs[b_idx];
+ // copy single precision FP into vector element i
+ memcpy(((void *)&vec_inA) + (i * 4), inA, 4);
+ memcpy(vec_src + (i * 4), inB, 4);
+ targs++;
+ }
+}
+
+static void setup_dp_fp_args(fp_test_args_t * targs, Bool swap_inputs)
+{
+ int a_idx, b_idx, i;
+ void * inA, * inB;
+ void * vec_src = swap_inputs ? (void *)&vec_out : (void *)&vec_inB;
+
+ for (i = 0; i < 2; i++) {
+ a_idx = targs->fra_idx;
+ b_idx = targs->frb_idx;
+ inA = (void *)&spec_fargs[a_idx];
+ inB = (void *)&spec_fargs[b_idx];
+ // copy double precision FP into vector element i
+ memcpy(((void *)&vec_inA) + (i * 8), inA, 8);
+ memcpy(vec_src + (i * 8), inB, 8);
+ targs++;
+ }
+}
+
+#define VX_NOT_CMP_OP 0xffffffff
+static void print_vector_fp_result(unsigned int cc, vx_fp_test_t * test_group, int i, Bool print_vec_out)
+{
+ int a_idx, b_idx, k;
+ char * name = malloc(20);
+ int dp = test_group->precision == DOUBLE_TEST ? 1 : 0;
+ int loops = dp ? 2 : 4;
+ fp_test_args_t * targs = &test_group->targs[i];
+ unsigned long long * frA_dp, * frB_dp, * dst_dp;
+ unsigned int * frA_sp, *frB_sp, * dst_sp;
+ strcpy(name, test_group->name);
+ printf("#%d: %s%s ", dp? i/2 : i/4, name, (do_dot ? "." : ""));
+ for (k = 0; k < loops; k++) {
+ a_idx = targs->fra_idx;
+ b_idx = targs->frb_idx;
+ if (k)
+ printf(" AND ");
+ if (dp) {
+ frA_dp = (unsigned long long *)&spec_fargs[a_idx];
+ frB_dp = (unsigned long long *)&spec_fargs[b_idx];
+ printf("%016llx %s %016llx", *frA_dp, test_group->op, *frB_dp);
+ } else {
+ frA_sp = (unsigned int *)&spec_sp_fargs[a_idx];
+ frB_sp = (unsigned int *)&spec_sp_fargs[b_idx];
+ printf("%08x %s %08x", *frA_sp, test_group->op, *frB_sp);
+ }
+ targs++;
+ }
+ if (cc != VX_NOT_CMP_OP)
+ printf(" ? cc=%x", cc);
+
+ if (print_vec_out) {
+ if (dp) {
+ dst_dp = (unsigned long long *) &vec_out;
+ printf(" => %016llx %016llx\n", dst_dp[0], dst_dp[1]);
+ } else {
+ dst_sp = (unsigned int *) &vec_out;
+ printf(" => %08x %08x %08x %08x\n", dst_sp[0], dst_sp[1], dst_sp[2], dst_sp[3]);
+ }
+ } else {
+ printf("\n");
+ }
+ free(name);
+}
+
+
+
+static void test_vsx_one_fp_arg(void)
+{
+ test_func_t func;
+ int k;
+ k = 0;
+ build_special_fargs_table();
+
+ while ((func = vsx_one_fp_arg_tests[k].test_func)) {
+ int idx, i;
+ vx_fp_test_t test_group = vsx_one_fp_arg_tests[k];
+ Bool estimate = (test_group.type == VX_ESTIMATE);
+ Bool dp = (test_group.precision == DOUBLE_TEST) ? True : False;
+ Bool is_sqrt = (strstr(test_group.name, "sqrt")) ? True : False;
+ Bool is_scalar = (strstr(test_group.name, "xs")) ? True : False;
+ Bool sparse_sp = False;
+ int stride = dp ? 2 : 4;
+ int loops = is_scalar ? 1 : stride;
+ stride = is_scalar ? 1: stride;
+
+ /* For conversions of single to double, the 128-bit input register is sparsely populated:
+ * |___ SP___|_Unused_|___SP___|__Unused__| // for vector op
+ * or
+ * |___ SP___|_Unused_|_Unused_|__Unused__| // for scalar op
+ *
+ * For the vector op case, we need to adjust stride from '4' to '2', since
+ * we'll only be loading two values per loop into the input register.
+ */
+ if (!dp && !is_scalar && test_group.type == VX_CONV_TO_DOUBLE) {
+ sparse_sp = True;
+ stride = 2;
+ }
+
+ for (i = 0; i < test_group.num_tests; i+=stride) {
+ unsigned int * pv;
+ void * inB;
+
+ pv = (unsigned int *)&vec_out;
+ // clear vec_out
+ for (idx = 0; idx < 4; idx++, pv++)
+ *pv = 0;
+
+ if (dp) {
+ int j;
+ unsigned long long * frB_dp, *dst_dp;
+ for (j = 0; j < loops; j++) {
+ inB = (void *)&spec_fargs[i + j];
+ // copy double precision FP into vector element i
+ memcpy(((void *)&vec_inB) + (j * 8), inB, 8);
+ }
+ // execute test insn
+ (*func)();
+ dst_dp = (unsigned long long *) &vec_out;
+ printf("#%d: %s ", i/stride, test_group.name);
+ for (j = 0; j < loops; j++) {
+ if (j)
+ printf("; ");
+ frB_dp = (unsigned long long *)&spec_fargs[i + j];
+ printf("%s(%016llx)", test_group.op, *frB_dp);
+ if (estimate) {
+ Bool res = check_estimate(DOUBLE_TEST, is_sqrt, i + j, j);
+ printf(" ==> %s)", res ? "PASS" : "FAIL");
+ /* For debugging . . .
+ printf(" ==> %s (res=%016llx)", res ? "PASS" : "FAIL", dst_dp[j]);
+ */
+ } else {
+ vx_fp_test_type type = test_group.type;
+ switch (type) {
+ case VX_SCALAR_CONV_TO_WORD:
+ printf(" = %016llx", dst_dp[j] & 0x00000000ffffffffULL);
+ break;
+ case VX_CONV_TO_SINGLE:
+ printf(" = %016llx", dst_dp[j] & 0xffffffff00000000ULL);
+ break;
+ default: // For VX_CONV_TO_DOUBLE and non-convert instructions . . .
+ printf(" = %016llx", dst_dp[j]);
+ }
+ }
+ }
+ printf("\n");
+ } else {
+ int j, skip_slot;
+ unsigned int * frB_sp, * dst_sp = NULL;
+ unsigned long long * dst_dp = NULL;
+ if (sparse_sp) {
+ skip_slot = 1;
+ loops = 2;
+ } else {
+ skip_slot = 0;
+ }
+ for (j = 0; j < loops; j++) {
+ inB = (void *)&spec_sp_fargs[i + j];
+ // copy single precision FP into vector element i
+ if (skip_slot && j > 0)
+ memcpy(((void *)&vec_inB) + ((j + j) * 4), inB, 4);
+ else
+ memcpy(((void *)&vec_inB) + (j * 4), inB, 4);
+ }
+ // execute test insn
+ (*func)();
+ if (test_group.type == VX_CONV_TO_DOUBLE)
+ dst_dp = (unsigned long long *) &vec_out;
+ else
+ dst_sp = (unsigned int *) &vec_out;
+ // print result
+ printf("#%d: %s ", i/stride, test_group.name);
+ for (j = 0; j < loops; j++) {
+ if (j)
+ printf("; ");
+ frB_sp = (unsigned int *)&spec_sp_fargs[i + j];
+ printf("%s(%08x)", test_group.op, *frB_sp);
+ if (estimate) {
+ Bool res = check_estimate(SINGLE_TEST, is_sqrt, i + j, j);
+ printf(" ==> %s)", res ? "PASS" : "FAIL");
+ } else {
+ if (test_group.type == VX_CONV_TO_DOUBLE)
+ printf(" = %016llx", dst_dp[j]);
+ else
+ /* Special case: Current VEX implementation for fsqrts (single precision)
+ * uses the same implementation as that used for double precision fsqrt.
+ * However, I've found that for xvsqrtsp, the result from that implementation
+ * may be off by the two LSBs. Generally, even this small inaccuracy can cause the
+ * output to appear very different if you end up with a carry. But for the given
+ * inputs in this testcase, we can simply mask out these bits.
+ */
+ printf(" = %08x", is_sqrt ? (dst_sp[j] & 0xfffffffc) : dst_sp[j]);
+ }
+ }
+ printf("\n");
+ }
+ }
+ k++;
+ printf( "\n" );
+ }
+}
+
+static void test_int_to_fp_convert(void)
+{
+ test_func_t func;
+ int k;
+ k = 0;
+
+ while ((func = intToFp_tests[k].test_func)) {
+ int idx, i;
+ vx_intToFp_test_t test_group = intToFp_tests[k];
+ Bool dp = (test_group.precision == DOUBLE_TEST) ? True : False;
+ Bool sparse_sp = False;
+ int stride = dp ? 2 : 4;
+ int loops = stride;
+
+ /* For conversions of single to double, the 128-bit input register is sparsely populated:
+ * |___ int___|_Unused_|___int___|__Unused__| // for vector op
+ * or
+ * We need to adjust stride from '4' to '2', since we'll only be loading
+ * two values per loop into the input register.
+ */
+ if (!dp && test_group.type == VX_CONV_TO_DOUBLE) {
+ sparse_sp = True;
+ stride = 2;
+ }
+
+ for (i = 0; i < test_group.num_tests; i+=stride) {
+ unsigned int * pv;
+ void * inB;
+
+ pv = (unsigned int *)&vec_out;
+ // clear vec_out
+ for (idx = 0; idx < 4; idx++, pv++)
+ *pv = 0;
+
+ if (dp) {
+ int j;
+ unsigned long long *dst_dw, * targs = test_group.targs;
+ for (j = 0; j < loops; j++) {
+ inB = (void *)&targs[i + j];
+ // copy doubleword into vector element i
+ memcpy(((void *)&vec_inB) + (j * 8), inB, 8);
+ }
+ // execute test insn
+ (*func)();
+ dst_dw = (unsigned long long *) &vec_out;
+ printf("#%d: %s ", i/stride, test_group.name);
+ for (j = 0; j < loops; j++) {
+ if (j)
+ printf("; ");
+ printf("conv(%016llx)", targs[i + j]);
+
+ if (test_group.type == VX_CONV_TO_SINGLE)
+ printf(" = %016llx", dst_dw[j] & 0xffffffff00000000ULL);
+ else
+ printf(" = %016llx", dst_dw[j]);
+ }
+ printf("\n");
+ } else {
+ int j, skip_slot;
+ unsigned int * dst_sp = NULL;
+ unsigned int * targs = test_group.targs;
+ unsigned long long * dst_dp = NULL;
+ if (sparse_sp) {
+ skip_slot = 1;
+ loops = 2;
+ } else {
+ skip_slot = 0;
+ }
+ for (j = 0; j < loops; j++) {
+ inB = (void *)&targs[i + j];
+ // copy single word into vector element i
+ if (skip_slot && j > 0)
+ memcpy(((void *)&vec_inB) + ((j + j) * 4), inB, 4);
+ else
+ memcpy(((void *)&vec_inB) + (j * 4), inB, 4);
+ }
+ // execute test insn
+ (*func)();
+ if (test_group.type == VX_CONV_TO_DOUBLE)
+ dst_dp = (unsigned long long *) &vec_out;
+ else
+ dst_sp = (unsigned int *) &vec_out;
+ // print result
+ printf("#%d: %s ", i/stride, test_group.name);
+ for (j = 0; j < loops; j++) {
+ if (j)
+ printf("; ");
+ printf("conv(%08x)", targs[i + j]);
+ if (test_group.type == VX_CONV_TO_DOUBLE)
+ printf(" = %016llx", dst_dp[j]);
+ else
+ printf(" = %08x", dst_sp[j]);
+ }
+ printf("\n");
+ }
+ }
+ k++;
+ printf( "\n" );
+ }
+}
+
+
+
+// The div doubleword test data
+signed long long div_dw_tdata[13][2] = {
+ { 4, -4 },
+ { 4, -3 },
+ { 4, 4 },
+ { 4, -5 },
+ { 3, 8 },
+ { 0x8000000000000000, 0xa },
+ { 0x50c, -1 },
+ { 0x50c, -4096 },
+ { 0x1234fedc, 0x8000a873 },
+ { 0xabcd87651234fedc, 0xa123b893 },
+ { 0x123456789abdc, 0 },
+ { 0, 2 },
+ { 0x77, 0xa3499 }
+};
+#define dw_tdata_len (sizeof(div_dw_tdata)/sizeof(signed long long)/2)
+
+// The div word test data
+unsigned int div_w_tdata[6][2] = {
+ { 0, 2 },
+ { 2, 0 },
+ { 0x7abc1234, 0xf0000000 },
+ { 0xfabc1234, 5 },
+ { 77, 66 },
+ { 5, 0xfabc1234 },
+};
+#define w_tdata_len (sizeof(div_w_tdata)/sizeof(unsigned int)/2)
+
+typedef struct div_ext_test
+{
+ test_func_t test_func;
+ const char *name;
+ int num_tests;
+ div_type_t div_type;
+ precision_type_t precision;
+} div_ext_test_t;
+
+static div_ext_test_t div_tests[] = {
+#ifdef __powerpc64__
+ { &test_divdeu, "divdeu", dw_tdata_len, DIV_BASE, DOUBLE_TEST },
+ { &test_divdeu, "divdeuo", dw_tdata_len, DIV_OE, DOUBLE_TEST },
+#endif
+ { &test_divwe, "divwe", w_tdata_len, DIV_BASE, SINGLE_TEST },
+ { &test_divwe, "divweo", w_tdata_len, DIV_OE, SINGLE_TEST },
+ { NULL, NULL, 0, 0, 0 }
+};
+
+static void test_div_extensions(void)
+{
+ test_func_t func;
+ int k;
+ k = 0;
+
+ while ((func = div_tests[k].test_func)) {
+ int i, repeat = 1;
+ div_ext_test_t test_group = div_tests[k];
+ do_dot = False;
+
+again:
+ for (i = 0; i < test_group.num_tests; i++) {
+ unsigned int condreg;
+
+ if (test_group.div_type == DIV_OE)
+ do_OE = True;
+ else
+ do_OE = False;
+
+ if (test_group.precision == DOUBLE_TEST) {
+ r14 = div_dw_tdata[i][0];
+ r15 = div_dw_tdata[i][1];
+ } else {
+ r14 = div_w_tdata[i][0];
+ r15 = div_w_tdata[i][1];
+ }
+ // execute test insn
+ (*func)();
+ condreg = (div_flags & 0xf0000000) >> 28;
+ printf("#%d: %s%s: ", i, test_group.name, do_dot ? "." : "");
+ if (test_group.precision == DOUBLE_TEST) {
+ printf("0x%016llx0000000000000000 / 0x%016llx = 0x%016llx;",
+ div_dw_tdata[i][0], div_dw_tdata[i][1], (signed long long) r17);
+ } else {
+ printf("0x%08x00000000 / 0x%08x = 0x%08x;",
+ div_w_tdata[i][0], div_w_tdata[i][1], (unsigned int) r17);
+ }
+ printf(" CR=%x; XER=%x\n", condreg, div_xer);
+ }
+ printf("\n");
+ if (repeat) {
+ repeat = 0;
+ do_dot = True;
+ goto again;
+ }
+ k++;
+ printf( "\n" );
+ }
+}
+
+
+static void test_vx_tdivORtsqrt(void)
+{
+ test_func_t func;
+ int k, crx;
+ unsigned int flags;
+ k = 0;
+ do_dot = False;
+ build_special_fargs_table();
+
+ while ((func = vx_tdivORtsqrt_tests[k].test_func)) {
+ int idx, i;
+ vx_fp_test_t test_group = vx_tdivORtsqrt_tests[k];
+ Bool dp = (test_group.precision == DOUBLE_TEST) ? True : False;
+ Bool is_scalar = (strstr(test_group.name, "xs")) ? True : False;
+ Bool two_args = test_group.targs ? True : False;
+ int stride = dp ? 2 : 4;
+ int loops = is_scalar ? 1 : stride;
+ stride = is_scalar ? 1: stride;
+
+ for (i = 0; i < test_group.num_tests; i+=stride) {
+ unsigned int * pv;
+ void * inB;
+
+ pv = (unsigned int *)&vec_out;
+ // clear vec_out
+ for (idx = 0; idx < 4; idx++, pv++)
+ *pv = 0;
+
+ if (dp) {
+ int j;
+ unsigned long long * frB_dp;
+ if (two_args) {
+ setup_dp_fp_args(&test_group.targs[i], False);
+ } else {
+ for (j = 0; j < loops; j++) {
+ inB = (void *)&spec_fargs[i + j];
+ // copy double precision FP into vector element i
+ memcpy(((void *)&vec_inB) + (j * 8), inB, 8);
+ }
+ }
+ // execute test insn
+ // Must do set/get of CRs immediately before/after calling the asm func
+ // to avoid CRs being modified by other instructions.
+ SET_FPSCR_ZERO;
+ SET_CR_XER_ZERO;
+ (*func)();
+ GET_CR(flags);
+ // assumes using CR1
+ crx = (flags & 0x0f000000) >> 24;
+ if (two_args) {
+ print_vector_fp_result(crx, &test_group, i, False/*do not print vec_out*/);
+ } else {
+ printf("#%d: %s ", i/stride, test_group.name);
+ for (j = 0; j < loops; j++) {
+ if (j)
+ printf("; ");
+ frB_dp = (unsigned long long *)&spec_fargs[i + j];
+ printf("%s(%016llx)", test_group.op, *frB_dp);
+ }
+ printf( " ? %x (CRx)\n", crx);
+ }
+ } else {
+ int j;
+ unsigned int * frB_sp;
+ if (two_args) {
+ setup_sp_fp_args(&test_group.targs[i], False);
+ } else {
+ for (j = 0; j < loops; j++) {
+ inB = (void *)&spec_sp_fargs[i + j];
+ // copy single precision FP into vector element i
+ memcpy(((void *)&vec_inB) + (j * 4), inB, 4);
+ }
+ }
+ // execute test insn
+ SET_FPSCR_ZERO;
+ SET_CR_XER_ZERO;
+ (*func)();
+ GET_CR(flags);
+ crx = (flags & 0x0f000000) >> 24;
+ // print result
+ if (two_args) {
+ print_vector_fp_result(crx, &test_group, i, False/*do not print vec_out*/);
+ } else {
+ printf("#%d: %s ", i/stride, test_group.name);
+ for (j = 0; j < loops; j++) {
+ if (j)
+ printf("; ");
+ frB_sp = (unsigned int *)&spec_sp_fargs[i + j];
+ printf("%s(%08x)", test_group.op, *frB_sp);
+ }
+ printf( " ? %x (CRx)\n", crx);
+ }
+ }
+ }
+ k++;
+ printf( "\n" );
+ }
+}
+
+
+static void test_ftsqrt(void)
+{
+ int i, crx;
+ unsigned int flags;
+ unsigned long long * frbp;
+ build_special_fargs_table();
+
+
+ for (i = 0; i < nb_special_fargs; i++) {
+ f14 = spec_fargs[i];
+ frbp = (unsigned long long *)&spec_fargs[i];
+ SET_FPSCR_ZERO;
+ SET_CR_XER_ZERO;
+ __asm__ __volatile__ ("ftsqrt cr1, %0" : : "d" (f14));
+ GET_CR(flags);
+ crx = (flags & 0x0f000000) >> 24;
+ printf( "ftsqrt: %016llx ? %x (CRx)\n", *frbp, crx);
+ }
+ printf( "\n" );
+}
+
+static void
+test_popcntw(void)
+{
+#ifdef __powerpc64__
+ uint64_t res;
+ unsigned long long src = 0x9182736405504536ULL;
+ r14 = src;
+ __asm__ __volatile__ ("popcntw %0, %1" : "=r" (res): "r" (r14));
+ printf("popcntw: 0x%llx => 0x%016llx\n", (unsigned long long)src, (unsigned long long)res);
+#else
+ uint32_t res;
+ unsigned int src = 0x9182730E;
+ r14 = src;
+ __asm__ __volatile__ ("popcntw %0, %1" : "=r" (res): "r" (r14));
+ printf("popcntw: 0x%x => 0x%08x\n", src, (int)res);
+#endif
+ printf( "\n" );
+}
+
+
+static test_table_t
+ all_tests[] =
+{
+
+ { &test_vsx_one_fp_arg,
+ "Test VSX vector and scalar single argument instructions"} ,
+ { &test_int_to_fp_convert,
+ "Test VSX vector integer to float conversion instructions" },
+ { &test_div_extensions,
+ "Test div extensions" },
+ { &test_ftsqrt,
+ "Test ftsqrt instruction" },
+ { &test_vx_tdivORtsqrt,
+ "Test vector and scalar tdiv and tsqrt instructions" },
+ { &test_popcntw,
+ "Test popcntw instruction" },
+ { NULL, NULL }
+};
+#endif // HAS_VSX
+
+int main(int argc, char *argv[])
+{
+#ifdef HAS_VSX
+
+ test_table_t aTest;
+ test_func_t func;
+ int i = 0;
+
+ while ((func = all_tests[i].test_category)) {
+ aTest = all_tests[i];
+ printf( "%s\n", aTest.name );
+ (*func)();
+ i++;
+ }
+ if (spec_fargs)
+ free(spec_fargs);
+ if (spec_sp_fargs)
+ free(spec_sp_fargs);
+
+#endif // HAS _VSX
+
+ return 0;
+}
diff --git a/none/tests/ppc32/test_isa_2_06_part3.stderr.exp b/none/tests/ppc32/test_isa_2_06_part3.stderr.exp
new file mode 100644
index 00000000..139597f9
--- /dev/null
+++ b/none/tests/ppc32/test_isa_2_06_part3.stderr.exp
@@ -0,0 +1,2 @@
+
+
diff --git a/none/tests/ppc32/test_isa_2_06_part3.stdout.exp b/none/tests/ppc32/test_isa_2_06_part3.stdout.exp
new file mode 100644
index 00000000..df25d908
--- /dev/null
+++ b/none/tests/ppc32/test_isa_2_06_part3.stdout.exp
@@ -0,0 +1,605 @@
+Test VSX vector and scalar single argument instructions
+#0: xvredp 1/x(3fd8000000000000) ==> PASS); 1/x(404f000000000000) ==> PASS)
+#1: xvredp 1/x(0018000000b77501) ==> PASS); 1/x(7fe800000000051b) ==> PASS)
+#2: xvredp 1/x(0123214569900000) ==> PASS); 1/x(0000000000000000) ==> PASS)
+#3: xvredp 1/x(8000000000000000) ==> PASS); 1/x(7ff0000000000000) ==> PASS)
+#4: xvredp 1/x(fff0000000000000) ==> PASS); 1/x(7ff7ffffffffffff) ==> PASS)
+#5: xvredp 1/x(fff7ffffffffffff) ==> PASS); 1/x(7ff8000000000000) ==> PASS)
+#6: xvredp 1/x(fff8000000000000) ==> PASS); 1/x(8008340000078000) ==> PASS)
+#7: xvredp 1/x(c0d0650f5a07b353) ==> PASS); 1/x(41232585a9900000) ==> PASS)
+#8: xvredp 1/x(41382511a2000000) ==> PASS); 1/x(40312ef5a9300000) ==> PASS)
+
+#0: xsredp 1/x(3fd8000000000000) ==> PASS)
+#1: xsredp 1/x(404f000000000000) ==> PASS)
+#2: xsredp 1/x(0018000000b77501) ==> PASS)
+#3: xsredp 1/x(7fe800000000051b) ==> PASS)
+#4: xsredp 1/x(0123214569900000) ==> PASS)
+#5: xsredp 1/x(0000000000000000) ==> PASS)
+#6: xsredp 1/x(8000000000000000) ==> PASS)
+#7: xsredp 1/x(7ff0000000000000) ==> PASS)
+#8: xsredp 1/x(fff0000000000000) ==> PASS)
+#9: xsredp 1/x(7ff7ffffffffffff) ==> PASS)
+#10: xsredp 1/x(fff7ffffffffffff) ==> PASS)
+#11: xsredp 1/x(7ff8000000000000) ==> PASS)
+#12: xsredp 1/x(fff8000000000000) ==> PASS)
+#13: xsredp 1/x(8008340000078000) ==> PASS)
+#14: xsredp 1/x(c0d0650f5a07b353) ==> PASS)
+#15: xsredp 1/x(41232585a9900000) ==> PASS)
+#16: xsredp 1/x(41382511a2000000) ==> PASS)
+#17: xsredp 1/x(40312ef5a9300000) ==> PASS)
+
+#0: xvrsqrtedp 1/x-sqrt(3fd8000000000000) ==> PASS); 1/x-sqrt(404f000000000000) ==> PASS)
+#1: xvrsqrtedp 1/x-sqrt(0018000000b77501) ==> PASS); 1/x-sqrt(7fe800000000051b) ==> PASS)
+#2: xvrsqrtedp 1/x-sqrt(0123214569900000) ==> PASS); 1/x-sqrt(0000000000000000) ==> PASS)
+#3: xvrsqrtedp 1/x-sqrt(8000000000000000) ==> PASS); 1/x-sqrt(7ff0000000000000) ==> PASS)
+#4: xvrsqrtedp 1/x-sqrt(fff0000000000000) ==> PASS); 1/x-sqrt(7ff7ffffffffffff) ==> PASS)
+#5: xvrsqrtedp 1/x-sqrt(fff7ffffffffffff) ==> PASS); 1/x-sqrt(7ff8000000000000) ==> PASS)
+#6: xvrsqrtedp 1/x-sqrt(fff8000000000000) ==> PASS); 1/x-sqrt(8008340000078000) ==> PASS)
+#7: xvrsqrtedp 1/x-sqrt(c0d0650f5a07b353) ==> PASS); 1/x-sqrt(41232585a9900000) ==> PASS)
+#8: xvrsqrtedp 1/x-sqrt(41382511a2000000) ==> PASS); 1/x-sqrt(40312ef5a9300000) ==> PASS)
+
+#0: xsrsqrtedp 1/x-sqrt(3fd8000000000000) ==> PASS)
+#1: xsrsqrtedp 1/x-sqrt(404f000000000000) ==> PASS)
+#2: xsrsqrtedp 1/x-sqrt(0018000000b77501) ==> PASS)
+#3: xsrsqrtedp 1/x-sqrt(7fe800000000051b) ==> PASS)
+#4: xsrsqrtedp 1/x-sqrt(0123214569900000) ==> PASS)
+#5: xsrsqrtedp 1/x-sqrt(0000000000000000) ==> PASS)
+#6: xsrsqrtedp 1/x-sqrt(8000000000000000) ==> PASS)
+#7: xsrsqrtedp 1/x-sqrt(7ff0000000000000) ==> PASS)
+#8: xsrsqrtedp 1/x-sqrt(fff0000000000000) ==> PASS)
+#9: xsrsqrtedp 1/x-sqrt(7ff7ffffffffffff) ==> PASS)
+#10: xsrsqrtedp 1/x-sqrt(fff7ffffffffffff) ==> PASS)
+#11: xsrsqrtedp 1/x-sqrt(7ff8000000000000) ==> PASS)
+#12: xsrsqrtedp 1/x-sqrt(fff8000000000000) ==> PASS)
+#13: xsrsqrtedp 1/x-sqrt(8008340000078000) ==> PASS)
+#14: xsrsqrtedp 1/x-sqrt(c0d0650f5a07b353) ==> PASS)
+#15: xsrsqrtedp 1/x-sqrt(41232585a9900000) ==> PASS)
+#16: xsrsqrtedp 1/x-sqrt(41382511a2000000) ==> PASS)
+#17: xsrsqrtedp 1/x-sqrt(40312ef5a9300000) ==> PASS)
+
+#0: xvrsqrtesp 1/x-sqrt(3ec00000) ==> PASS); 1/x-sqrt(42780000) ==> PASS); 1/x-sqrt(00000000) ==> PASS); 1/x-sqrt(7f800000) ==> PASS)
+#1: xvrsqrtesp 1/x-sqrt(00000000) ==> PASS); 1/x-sqrt(00000000) ==> PASS); 1/x-sqrt(80000000) ==> PASS); 1/x-sqrt(7f800000) ==> PASS)
+#2: xvrsqrtesp 1/x-sqrt(ff800000) ==> PASS); 1/x-sqrt(7fffffff) ==> PASS); 1/x-sqrt(ffffffff) ==> PASS); 1/x-sqrt(7fc00000) ==> PASS)
+#3: xvrsqrtesp 1/x-sqrt(ffc00000) ==> PASS); 1/x-sqrt(80000000) ==> PASS); 1/x-sqrt(c683287b) ==> PASS); 1/x-sqrt(49192c2d) ==> PASS)
+#4: xvrsqrtesp 1/x-sqrt(49c1288d) ==> PASS); 1/x-sqrt(418977ad) ==> PASS); 1/x-sqrt(428a5faf) ==> PASS); 1/x-sqrt(44bb5fcc) ==> PASS)
+
+#0: xvsqrtdp sqrt(3fd8000000000000) = 3fe3988e1409212e; sqrt(404f000000000000) = 401f7efbeb8d4f12
+#1: xvsqrtdp sqrt(0018000000b77501) = 2003988e14540690; sqrt(7fe800000000051b) = 5febb67ae8584f9d
+#2: xvsqrtdp sqrt(0123214569900000) = 2088bde98d60ebe6; sqrt(0000000000000000) = 0000000000000000
+#3: xvsqrtdp sqrt(8000000000000000) = 8000000000000000; sqrt(7ff0000000000000) = 7ff0000000000000
+#4: xvsqrtdp sqrt(fff0000000000000) = 7ff8000000000000; sqrt(7ff7ffffffffffff) = 7fffffffffffffff
+#5: xvsqrtdp sqrt(fff7ffffffffffff) = ffffffffffffffff; sqrt(7ff8000000000000) = 7ff8000000000000
+#6: xvsqrtdp sqrt(fff8000000000000) = fff8000000000000; sqrt(8008340000078000) = 7ff8000000000000
+#7: xvsqrtdp sqrt(c0d0650f5a07b353) = 7ff8000000000000; sqrt(41232585a9900000) = 4088c0a9258a4a8b
+#8: xvsqrtdp sqrt(41382511a2000000) = 4093a7aa60f34e85; sqrt(40312ef5a9300000) = 401094c71dec3a9c
+
+#0: xvsqrtsp sqrt(3ec00000) = 3f1cc470; sqrt(42780000) = 40fbf7dc; sqrt(00000000) = 00000000; sqrt(7f800000) = 7f800000
+#1: xvsqrtsp sqrt(00000000) = 00000000; sqrt(00000000) = 00000000; sqrt(80000000) = 80000000; sqrt(7f800000) = 7f800000
+#2: xvsqrtsp sqrt(ff800000) = 7fc00000; sqrt(7fffffff) = 7ffffffc; sqrt(ffffffff) = fffffffc; sqrt(7fc00000) = 7fc00000
+#3: xvsqrtsp sqrt(ffc00000) = ffc00000; sqrt(80000000) = 80000000; sqrt(c683287b) = 7fc00000; sqrt(49192c2d) = 44460548
+#4: xvsqrtsp sqrt(49c1288d) = 449d3d50; sqrt(418977ad) = 4084a638; sqrt(428a5faf) = 410515f8; sqrt(44bb5fcc) = 421ade08
+
+#0: xscvdpsp conv(3fd8000000000000) = 3ec0000000000000
+#1: xscvdpsp conv(404f000000000000) = 4278000000000000
+#2: xscvdpsp conv(0018000000b77501) = 0000000000000000
+#3: xscvdpsp conv(7fe800000000051b) = 7f80000000000000
+#4: xscvdpsp conv(0123214569900000) = 0000000000000000
+#5: xscvdpsp conv(0000000000000000) = 0000000000000000
+#6: xscvdpsp conv(8000000000000000) = 8000000000000000
+#7: xscvdpsp conv(7ff0000000000000) = 7f80000000000000
+#8: xscvdpsp conv(fff0000000000000) = ff80000000000000
+#9: xscvdpsp conv(7ff7ffffffffffff) = 7fffffff00000000
+#10: xscvdpsp conv(fff7ffffffffffff) = ffffffff00000000
+#11: xscvdpsp conv(7ff8000000000000) = 7fc0000000000000
+#12: xscvdpsp conv(fff8000000000000) = ffc0000000000000
+#13: xscvdpsp conv(8008340000078000) = 8000000000000000
+#14: xscvdpsp conv(c0d0650f5a07b353) = c683287b00000000
+#15: xscvdpsp conv(41232585a9900000) = 49192c2d00000000
+#16: xscvdpsp conv(41382511a2000000) = 49c1288d00000000
+#17: xscvdpsp conv(40312ef5a9300000) = 418977ad00000000
+#18: xscvdpsp conv(40514bf5d2300000) = 428a5faf00000000
+#19: xscvdpsp conv(40976bf982440000) = 44bb5fcc00000000
+
+#0: xscvdpuxws conv(3fd8000000000000) = 0000000000000000
+#1: xscvdpuxws conv(404f000000000000) = 000000000000003e
+#2: xscvdpuxws conv(0018000000b77501) = 0000000000000000
+#3: xscvdpuxws conv(7fe800000000051b) = 00000000ffffffff
+#4: xscvdpuxws conv(0123214569900000) = 0000000000000000
+#5: xscvdpuxws conv(0000000000000000) = 0000000000000000
+#6: xscvdpuxws conv(8000000000000000) = 0000000000000000
+#7: xscvdpuxws conv(7ff0000000000000) = 00000000ffffffff
+#8: xscvdpuxws conv(fff0000000000000) = 0000000000000000
+#9: xscvdpuxws conv(7ff7ffffffffffff) = 0000000000000000
+#10: xscvdpuxws conv(fff7ffffffffffff) = 0000000000000000
+#11: xscvdpuxws conv(7ff8000000000000) = 0000000000000000
+#12: xscvdpuxws conv(fff8000000000000) = 0000000000000000
+#13: xscvdpuxws conv(8008340000078000) = 0000000000000000
+#14: xscvdpuxws conv(c0d0650f5a07b353) = 0000000000000000
+#15: xscvdpuxws conv(41232585a9900000) = 00000000000992c2
+#16: xscvdpuxws conv(41382511a2000000) = 0000000000182511
+#17: xscvdpuxws conv(40312ef5a9300000) = 0000000000000011
+#18: xscvdpuxws conv(40514bf5d2300000) = 0000000000000045
+#19: xscvdpuxws conv(40976bf982440000) = 00000000000005da
+
+#0: xscvspdp conv(3ec00000) = 3fd8000000000000
+#1: xscvspdp conv(42780000) = 404f000000000000
+#2: xscvspdp conv(00000000) = 0000000000000000
+#3: xscvspdp conv(7f800000) = 7ff0000000000000
+#4: xscvspdp conv(00000000) = 0000000000000000
+#5: xscvspdp conv(00000000) = 0000000000000000
+#6: xscvspdp conv(80000000) = 8000000000000000
+#7: xscvspdp conv(7f800000) = 7ff0000000000000
+#8: xscvspdp conv(ff800000) = fff0000000000000
+#9: xscvspdp conv(7fffffff) = 7fffffffe0000000
+#10: xscvspdp conv(ffffffff) = ffffffffe0000000
+#11: xscvspdp conv(7fc00000) = 7ff8000000000000
+#12: xscvspdp conv(ffc00000) = fff8000000000000
+#13: xscvspdp conv(80000000) = 8000000000000000
+#14: xscvspdp conv(c683287b) = c0d0650f60000000
+#15: xscvspdp conv(49192c2d) = 41232585a0000000
+#16: xscvspdp conv(49c1288d) = 41382511a0000000
+#17: xscvspdp conv(418977ad) = 40312ef5a0000000
+#18: xscvspdp conv(428a5faf) = 40514bf5e0000000
+#19: xscvspdp conv(44bb5fcc) = 40976bf980000000
+
+#0: xvcvdpsp conv(3fd8000000000000) = 3ec0000000000000; conv(404f000000000000) = 4278000000000000
+#1: xvcvdpsp conv(0018000000b77501) = 0000000000000000; conv(7fe800000000051b) = 7f80000000000000
+#2: xvcvdpsp conv(0123214569900000) = 0000000000000000; conv(0000000000000000) = 0000000000000000
+#3: xvcvdpsp conv(8000000000000000) = 8000000000000000; conv(7ff0000000000000) = 7f80000000000000
+#4: xvcvdpsp conv(fff0000000000000) = ff80000000000000; conv(7ff7ffffffffffff) = 7fffffff00000000
+#5: xvcvdpsp conv(fff7ffffffffffff) = ffffffff00000000; conv(7ff8000000000000) = 7fc0000000000000
+#6: xvcvdpsp conv(fff8000000000000) = ffc0000000000000; conv(8008340000078000) = 8000000000000000
+#7: xvcvdpsp conv(c0d0650f5a07b353) = c683287b00000000; conv(41232585a9900000) = 49192c2d00000000
+#8: xvcvdpsp conv(41382511a2000000) = 49c1288d00000000; conv(40312ef5a9300000) = 418977ad00000000
+#9: xvcvdpsp conv(40514bf5d2300000) = 428a5faf00000000; conv(40976bf982440000) = 44bb5fcc00000000
+
+#0: xvcvdpuxds conv(3fd8000000000000) = 0000000000000000; conv(404f000000000000) = 000000000000003e
+#1: xvcvdpuxds conv(0018000000b77501) = 0000000000000000; conv(7fe800000000051b) = ffffffffffffffff
+#2: xvcvdpuxds conv(0123214569900000) = 0000000000000000; conv(0000000000000000) = 0000000000000000
+#3: xvcvdpuxds conv(8000000000000000) = 0000000000000000; conv(7ff0000000000000) = ffffffffffffffff
+#4: xvcvdpuxds conv(fff0000000000000) = 0000000000000000; conv(7ff7ffffffffffff) = 0000000000000000
+#5: xvcvdpuxds conv(fff7ffffffffffff) = 0000000000000000; conv(7ff8000000000000) = 0000000000000000
+#6: xvcvdpuxds conv(fff8000000000000) = 0000000000000000; conv(8008340000078000) = 0000000000000000
+#7: xvcvdpuxds conv(c0d0650f5a07b353) = 0000000000000000; conv(41232585a9900000) = 00000000000992c2
+#8: xvcvdpuxds conv(41382511a2000000) = 0000000000182511; conv(40312ef5a9300000) = 0000000000000011
+#9: xvcvdpuxds conv(40514bf5d2300000) = 0000000000000045; conv(40976bf982440000) = 00000000000005da
+
+#0: xvcvdpuxws conv(3fd8000000000000) = 0000000000000000; conv(404f000000000000) = 0000003e00000000
+#1: xvcvdpuxws conv(0018000000b77501) = 0000000000000000; conv(7fe800000000051b) = ffffffff00000000
+#2: xvcvdpuxws conv(0123214569900000) = 0000000000000000; conv(0000000000000000) = 0000000000000000
+#3: xvcvdpuxws conv(8000000000000000) = 0000000000000000; conv(7ff0000000000000) = ffffffff00000000
+#4: xvcvdpuxws conv(fff0000000000000) = 0000000000000000; conv(7ff7ffffffffffff) = 0000000000000000
+#5: xvcvdpuxws conv(fff7ffffffffffff) = 0000000000000000; conv(7ff8000000000000) = 0000000000000000
+#6: xvcvdpuxws conv(fff8000000000000) = 0000000000000000; conv(8008340000078000) = 0000000000000000
+#7: xvcvdpuxws conv(c0d0650f5a07b353) = 0000000000000000; conv(41232585a9900000) = 000992c200000000
+#8: xvcvdpuxws conv(41382511a2000000) = 0018251100000000; conv(40312ef5a9300000) = 0000001100000000
+#9: xvcvdpuxws conv(40514bf5d2300000) = 0000004500000000; conv(40976bf982440000) = 000005da00000000
+
+#0: xvcvspdp conv(3ec00000) = 3fd8000000000000; conv(42780000) = 404f000000000000
+#1: xvcvspdp conv(00000000) = 0000000000000000; conv(7f800000) = 7ff0000000000000
+#2: xvcvspdp conv(00000000) = 0000000000000000; conv(00000000) = 0000000000000000
+#3: xvcvspdp conv(80000000) = 8000000000000000; conv(7f800000) = 7ff0000000000000
+#4: xvcvspdp conv(ff800000) = fff0000000000000; conv(7fffffff) = 7fffffffe0000000
+#5: xvcvspdp conv(ffffffff) = ffffffffe0000000; conv(7fc00000) = 7ff8000000000000
+#6: xvcvspdp conv(ffc00000) = fff8000000000000; conv(80000000) = 8000000000000000
+#7: xvcvspdp conv(c683287b) = c0d0650f60000000; conv(49192c2d) = 41232585a0000000
+#8: xvcvspdp conv(49c1288d) = 41382511a0000000; conv(418977ad) = 40312ef5a0000000
+#9: xvcvspdp conv(428a5faf) = 40514bf5e0000000; conv(44bb5fcc) = 40976bf980000000
+
+#0: xvcvspsxds conv(3ec00000) = 0000000000000000; conv(42780000) = 000000000000003e
+#1: xvcvspsxds conv(00000000) = 0000000000000000; conv(7f800000) = 7fffffffffffffff
+#2: xvcvspsxds conv(00000000) = 0000000000000000; conv(00000000) = 0000000000000000
+#3: xvcvspsxds conv(80000000) = 0000000000000000; conv(7f800000) = 7fffffffffffffff
+#4: xvcvspsxds conv(ff800000) = 8000000000000000; conv(7fffffff) = 8000000000000000
+#5: xvcvspsxds conv(ffffffff) = 8000000000000000; conv(7fc00000) = 8000000000000000
+#6: xvcvspsxds conv(ffc00000) = 8000000000000000; conv(80000000) = 0000000000000000
+#7: xvcvspsxds conv(c683287b) = ffffffffffffbe6c; conv(49192c2d) = 00000000000992c2
+#8: xvcvspsxds conv(49c1288d) = 0000000000182511; conv(418977ad) = 0000000000000011
+#9: xvcvspsxds conv(428a5faf) = 0000000000000045; conv(44bb5fcc) = 00000000000005da
+
+#0: xvcvdpsxds conv(3fd8000000000000) = 0000000000000000; conv(404f000000000000) = 000000000000003e
+#1: xvcvdpsxds conv(0018000000b77501) = 0000000000000000; conv(7fe800000000051b) = 7fffffffffffffff
+#2: xvcvdpsxds conv(0123214569900000) = 0000000000000000; conv(0000000000000000) = 0000000000000000
+#3: xvcvdpsxds conv(8000000000000000) = 0000000000000000; conv(7ff0000000000000) = 7fffffffffffffff
+#4: xvcvdpsxds conv(fff0000000000000) = 8000000000000000; conv(7ff7ffffffffffff) = 8000000000000000
+#5: xvcvdpsxds conv(fff7ffffffffffff) = 8000000000000000; conv(7ff8000000000000) = 8000000000000000
+#6: xvcvdpsxds conv(fff8000000000000) = 8000000000000000; conv(8008340000078000) = 0000000000000000
+#7: xvcvdpsxds conv(c0d0650f5a07b353) = ffffffffffffbe6c; conv(41232585a9900000) = 00000000000992c2
+#8: xvcvdpsxds conv(41382511a2000000) = 0000000000182511; conv(40312ef5a9300000) = 0000000000000011
+#9: xvcvdpsxds conv(40514bf5d2300000) = 0000000000000045; conv(40976bf982440000) = 00000000000005da
+
+#0: xvcvspuxds conv(3ec00000) = 0000000000000000; conv(42780000) = 000000000000003e
+#1: xvcvspuxds conv(00000000) = 0000000000000000; conv(7f800000) = ffffffffffffffff
+#2: xvcvspuxds conv(00000000) = 0000000000000000; conv(00000000) = 0000000000000000
+#3: xvcvspuxds conv(80000000) = 0000000000000000; conv(7f800000) = ffffffffffffffff
+#4: xvcvspuxds conv(ff800000) = 0000000000000000; conv(7fffffff) = 0000000000000000
+#5: xvcvspuxds conv(ffffffff) = 0000000000000000; conv(7fc00000) = 0000000000000000
+#6: xvcvspuxds conv(ffc00000) = 0000000000000000; conv(80000000) = 0000000000000000
+#7: xvcvspuxds conv(c683287b) = 0000000000000000; conv(49192c2d) = 00000000000992c2
+#8: xvcvspuxds conv(49c1288d) = 0000000000182511; conv(418977ad) = 0000000000000011
+#9: xvcvspuxds conv(428a5faf) = 0000000000000045; conv(44bb5fcc) = 00000000000005da
+
+#0: xvcvspuxws conv(3ec00000) = 00000000; conv(42780000) = 0000003e; conv(00000000) = 00000000; conv(7f800000) = ffffffff
+#1: xvcvspuxws conv(00000000) = 00000000; conv(00000000) = 00000000; conv(80000000) = 00000000; conv(7f800000) = ffffffff
+#2: xvcvspuxws conv(ff800000) = 00000000; conv(7fffffff) = 00000000; conv(ffffffff) = 00000000; conv(7fc00000) = 00000000
+#3: xvcvspuxws conv(ffc00000) = 00000000; conv(80000000) = 00000000; conv(c683287b) = 00000000; conv(49192c2d) = 000992c2
+#4: xvcvspuxws conv(49c1288d) = 00182511; conv(418977ad) = 00000011; conv(428a5faf) = 00000045; conv(44bb5fcc) = 000005da
+
+#0: xsrdpic round(3fd8000000000000) = 0000000000000000
+#1: xsrdpic round(404f000000000000) = 404f000000000000
+#2: xsrdpic round(0018000000b77501) = 0000000000000000
+#3: xsrdpic round(7fe800000000051b) = 7fe800000000051b
+#4: xsrdpic round(0123214569900000) = 0000000000000000
+#5: xsrdpic round(0000000000000000) = 0000000000000000
+#6: xsrdpic round(8000000000000000) = 8000000000000000
+#7: xsrdpic round(7ff0000000000000) = 7ff0000000000000
+#8: xsrdpic round(fff0000000000000) = fff0000000000000
+#9: xsrdpic round(7ff7ffffffffffff) = 7fffffffffffffff
+#10: xsrdpic round(fff7ffffffffffff) = ffffffffffffffff
+#11: xsrdpic round(7ff8000000000000) = 7ff8000000000000
+#12: xsrdpic round(fff8000000000000) = fff8000000000000
+#13: xsrdpic round(8008340000078000) = 8000000000000000
+#14: xsrdpic round(c0d0650f5a07b353) = c0d0650000000000
+#15: xsrdpic round(41232585a9900000) = 4123258600000000
+#16: xsrdpic round(41382511a2000000) = 4138251200000000
+#17: xsrdpic round(40312ef5a9300000) = 4031000000000000
+#18: xsrdpic round(40514bf5d2300000) = 4051400000000000
+#19: xsrdpic round(40976bf982440000) = 40976c0000000000
+
+#0: xsrdpiz round(3fd8000000000000) = 0000000000000000
+#1: xsrdpiz round(404f000000000000) = 404f000000000000
+#2: xsrdpiz round(0018000000b77501) = 0000000000000000
+#3: xsrdpiz round(7fe800000000051b) = 7fe800000000051b
+#4: xsrdpiz round(0123214569900000) = 0000000000000000
+#5: xsrdpiz round(0000000000000000) = 0000000000000000
+#6: xsrdpiz round(8000000000000000) = 8000000000000000
+#7: xsrdpiz round(7ff0000000000000) = 7ff0000000000000
+#8: xsrdpiz round(fff0000000000000) = fff0000000000000
+#9: xsrdpiz round(7ff7ffffffffffff) = 7fffffffffffffff
+#10: xsrdpiz round(fff7ffffffffffff) = ffffffffffffffff
+#11: xsrdpiz round(7ff8000000000000) = 7ff8000000000000
+#12: xsrdpiz round(fff8000000000000) = fff8000000000000
+#13: xsrdpiz round(8008340000078000) = 8000000000000000
+#14: xsrdpiz round(c0d0650f5a07b353) = c0d0650000000000
+#15: xsrdpiz round(41232585a9900000) = 4123258400000000
+#16: xsrdpiz round(41382511a2000000) = 4138251100000000
+#17: xsrdpiz round(40312ef5a9300000) = 4031000000000000
+#18: xsrdpiz round(40514bf5d2300000) = 4051400000000000
+#19: xsrdpiz round(40976bf982440000) = 4097680000000000
+
+#0: xsrdpi round(3fd8000000000000) = 0000000000000000
+#1: xsrdpi round(404f000000000000) = 404f000000000000
+#2: xsrdpi round(0018000000b77501) = 0000000000000000
+#3: xsrdpi round(7fe800000000051b) = 7fe800000000051b
+#4: xsrdpi round(0123214569900000) = 0000000000000000
+#5: xsrdpi round(0000000000000000) = 0000000000000000
+#6: xsrdpi round(8000000000000000) = 8000000000000000
+#7: xsrdpi round(7ff0000000000000) = 7ff0000000000000
+#8: xsrdpi round(fff0000000000000) = fff0000000000000
+#9: xsrdpi round(7ff7ffffffffffff) = 7fffffffffffffff
+#10: xsrdpi round(fff7ffffffffffff) = ffffffffffffffff
+#11: xsrdpi round(7ff8000000000000) = 7ff8000000000000
+#12: xsrdpi round(fff8000000000000) = fff8000000000000
+#13: xsrdpi round(8008340000078000) = 8000000000000000
+#14: xsrdpi round(c0d0650f5a07b353) = c0d0650000000000
+#15: xsrdpi round(41232585a9900000) = 4123258600000000
+#16: xsrdpi round(41382511a2000000) = 4138251200000000
+#17: xsrdpi round(40312ef5a9300000) = 4031000000000000
+#18: xsrdpi round(40514bf5d2300000) = 4051400000000000
+#19: xsrdpi round(40976bf982440000) = 40976c0000000000
+
+#0: xvabsdp abs(3fd8000000000000) = 3fd8000000000000; abs(404f000000000000) = 404f000000000000
+#1: xvabsdp abs(0018000000b77501) = 0018000000b77501; abs(7fe800000000051b) = 7fe800000000051b
+#2: xvabsdp abs(0123214569900000) = 0123214569900000; abs(0000000000000000) = 0000000000000000
+#3: xvabsdp abs(8000000000000000) = 0000000000000000; abs(7ff0000000000000) = 7ff0000000000000
+#4: xvabsdp abs(fff0000000000000) = 7ff0000000000000; abs(7ff7ffffffffffff) = 7ff7ffffffffffff
+#5: xvabsdp abs(fff7ffffffffffff) = 7ff7ffffffffffff; abs(7ff8000000000000) = 7ff8000000000000
+#6: xvabsdp abs(fff8000000000000) = 7ff8000000000000; abs(8008340000078000) = 0008340000078000
+#7: xvabsdp abs(c0d0650f5a07b353) = 40d0650f5a07b353; abs(41232585a9900000) = 41232585a9900000
+#8: xvabsdp abs(41382511a2000000) = 41382511a2000000; abs(40312ef5a9300000) = 40312ef5a9300000
+#9: xvabsdp abs(40514bf5d2300000) = 40514bf5d2300000; abs(40976bf982440000) = 40976bf982440000
+
+#0: xvnabsdp nabs(3fd8000000000000) = bfd8000000000000; nabs(404f000000000000) = c04f000000000000
+#1: xvnabsdp nabs(0018000000b77501) = 8018000000b77501; nabs(7fe800000000051b) = ffe800000000051b
+#2: xvnabsdp nabs(0123214569900000) = 8123214569900000; nabs(0000000000000000) = 8000000000000000
+#3: xvnabsdp nabs(8000000000000000) = 8000000000000000; nabs(7ff0000000000000) = fff0000000000000
+#4: xvnabsdp nabs(fff0000000000000) = fff0000000000000; nabs(7ff7ffffffffffff) = fff7ffffffffffff
+#5: xvnabsdp nabs(fff7ffffffffffff) = fff7ffffffffffff; nabs(7ff8000000000000) = fff8000000000000
+#6: xvnabsdp nabs(fff8000000000000) = fff8000000000000; nabs(8008340000078000) = 8008340000078000
+#7: xvnabsdp nabs(c0d0650f5a07b353) = c0d0650f5a07b353; nabs(41232585a9900000) = c1232585a9900000
+#8: xvnabsdp nabs(41382511a2000000) = c1382511a2000000; nabs(40312ef5a9300000) = c0312ef5a9300000
+#9: xvnabsdp nabs(40514bf5d2300000) = c0514bf5d2300000; nabs(40976bf982440000) = c0976bf982440000
+
+#0: xvnegdp neg(3fd8000000000000) = bfd8000000000000; neg(404f000000000000) = c04f000000000000
+#1: xvnegdp neg(0018000000b77501) = 8018000000b77501; neg(7fe800000000051b) = ffe800000000051b
+#2: xvnegdp neg(0123214569900000) = 8123214569900000; neg(0000000000000000) = 8000000000000000
+#3: xvnegdp neg(8000000000000000) = 0000000000000000; neg(7ff0000000000000) = fff0000000000000
+#4: xvnegdp neg(fff0000000000000) = 7ff0000000000000; neg(7ff7ffffffffffff) = fff7ffffffffffff
+#5: xvnegdp neg(fff7ffffffffffff) = 7ff7ffffffffffff; neg(7ff8000000000000) = fff8000000000000
+#6: xvnegdp neg(fff8000000000000) = 7ff8000000000000; neg(8008340000078000) = 0008340000078000
+#7: xvnegdp neg(c0d0650f5a07b353) = 40d0650f5a07b353; neg(41232585a9900000) = c1232585a9900000
+#8: xvnegdp neg(41382511a2000000) = c1382511a2000000; neg(40312ef5a9300000) = c0312ef5a9300000
+#9: xvnegdp neg(40514bf5d2300000) = c0514bf5d2300000; neg(40976bf982440000) = c0976bf982440000
+
+#0: xvabssp abs(3ec00000) = 3ec00000; abs(42780000) = 42780000; abs(00000000) = 00000000; abs(7f800000) = 7f800000
+#1: xvabssp abs(00000000) = 00000000; abs(00000000) = 00000000; abs(80000000) = 00000000; abs(7f800000) = 7f800000
+#2: xvabssp abs(ff800000) = 7f800000; abs(7fffffff) = 7fffffff; abs(ffffffff) = 7fffffff; abs(7fc00000) = 7fc00000
+#3: xvabssp abs(ffc00000) = 7fc00000; abs(80000000) = 00000000; abs(c683287b) = 4683287b; abs(49192c2d) = 49192c2d
+#4: xvabssp abs(49c1288d) = 49c1288d; abs(418977ad) = 418977ad; abs(428a5faf) = 428a5faf; abs(44bb5fcc) = 44bb5fcc
+
+#0: xvnabssp nabs(3ec00000) = bec00000; nabs(42780000) = c2780000; nabs(00000000) = 80000000; nabs(7f800000) = ff800000
+#1: xvnabssp nabs(00000000) = 80000000; nabs(00000000) = 80000000; nabs(80000000) = 80000000; nabs(7f800000) = ff800000
+#2: xvnabssp nabs(ff800000) = ff800000; nabs(7fffffff) = ffffffff; nabs(ffffffff) = ffffffff; nabs(7fc00000) = ffc00000
+#3: xvnabssp nabs(ffc00000) = ffc00000; nabs(80000000) = 80000000; nabs(c683287b) = c683287b; nabs(49192c2d) = c9192c2d
+#4: xvnabssp nabs(49c1288d) = c9c1288d; nabs(418977ad) = c18977ad; nabs(428a5faf) = c28a5faf; nabs(44bb5fcc) = c4bb5fcc
+
+#0: xvrdpi round(3fd8000000000000) = 0000000000000000; round(404f000000000000) = 404f000000000000
+#1: xvrdpi round(0018000000b77501) = 0000000000000000; round(7fe800000000051b) = 7fe800000000051b
+#2: xvrdpi round(0123214569900000) = 0000000000000000; round(0000000000000000) = 0000000000000000
+#3: xvrdpi round(8000000000000000) = 8000000000000000; round(7ff0000000000000) = 7ff0000000000000
+#4: xvrdpi round(fff0000000000000) = fff0000000000000; round(7ff7ffffffffffff) = 7fffffffffffffff
+#5: xvrdpi round(fff7ffffffffffff) = ffffffffffffffff; round(7ff8000000000000) = 7ff8000000000000
+#6: xvrdpi round(fff8000000000000) = fff8000000000000; round(8008340000078000) = 8000000000000000
+#7: xvrdpi round(c0d0650f5a07b353) = c0d0650000000000; round(41232585a9900000) = 4123258600000000
+#8: xvrdpi round(41382511a2000000) = 4138251200000000; round(40312ef5a9300000) = 4031000000000000
+#9: xvrdpi round(40514bf5d2300000) = 4051400000000000; round(40976bf982440000) = 40976c0000000000
+
+#0: xvrdpic round(3fd8000000000000) = 0000000000000000; round(404f000000000000) = 404f000000000000
+#1: xvrdpic round(0018000000b77501) = 0000000000000000; round(7fe800000000051b) = 7fe800000000051b
+#2: xvrdpic round(0123214569900000) = 0000000000000000; round(0000000000000000) = 0000000000000000
+#3: xvrdpic round(8000000000000000) = 8000000000000000; round(7ff0000000000000) = 7ff0000000000000
+#4: xvrdpic round(fff0000000000000) = fff0000000000000; round(7ff7ffffffffffff) = 7fffffffffffffff
+#5: xvrdpic round(fff7ffffffffffff) = ffffffffffffffff; round(7ff8000000000000) = 7ff8000000000000
+#6: xvrdpic round(fff8000000000000) = fff8000000000000; round(8008340000078000) = 8000000000000000
+#7: xvrdpic round(c0d0650f5a07b353) = c0d0650000000000; round(41232585a9900000) = 4123258600000000
+#8: xvrdpic round(41382511a2000000) = 4138251200000000; round(40312ef5a9300000) = 4031000000000000
+#9: xvrdpic round(40514bf5d2300000) = 4051400000000000; round(40976bf982440000) = 40976c0000000000
+
+#0: xvrdpim round(3fd8000000000000) = 0000000000000000; round(404f000000000000) = 404f000000000000
+#1: xvrdpim round(0018000000b77501) = 0000000000000000; round(7fe800000000051b) = 7fe800000000051b
+#2: xvrdpim round(0123214569900000) = 0000000000000000; round(0000000000000000) = 0000000000000000
+#3: xvrdpim round(8000000000000000) = 8000000000000000; round(7ff0000000000000) = 7ff0000000000000
+#4: xvrdpim round(fff0000000000000) = fff0000000000000; round(7ff7ffffffffffff) = 7fffffffffffffff
+#5: xvrdpim round(fff7ffffffffffff) = ffffffffffffffff; round(7ff8000000000000) = 7ff8000000000000
+#6: xvrdpim round(fff8000000000000) = fff8000000000000; round(8008340000078000) = bff0000000000000
+#7: xvrdpim round(c0d0650f5a07b353) = c0d0654000000000; round(41232585a9900000) = 4123258400000000
+#8: xvrdpim round(41382511a2000000) = 4138251100000000; round(40312ef5a9300000) = 4031000000000000
+#9: xvrdpim round(40514bf5d2300000) = 4051400000000000; round(40976bf982440000) = 4097680000000000
+
+#0: xvrdpip round(3fd8000000000000) = 3ff0000000000000; round(404f000000000000) = 404f000000000000
+#1: xvrdpip round(0018000000b77501) = 3ff0000000000000; round(7fe800000000051b) = 7fe800000000051b
+#2: xvrdpip round(0123214569900000) = 3ff0000000000000; round(0000000000000000) = 0000000000000000
+#3: xvrdpip round(8000000000000000) = 8000000000000000; round(7ff0000000000000) = 7ff0000000000000
+#4: xvrdpip round(fff0000000000000) = fff0000000000000; round(7ff7ffffffffffff) = 7fffffffffffffff
+#5: xvrdpip round(fff7ffffffffffff) = ffffffffffffffff; round(7ff8000000000000) = 7ff8000000000000
+#6: xvrdpip round(fff8000000000000) = fff8000000000000; round(8008340000078000) = 8000000000000000
+#7: xvrdpip round(c0d0650f5a07b353) = c0d0650000000000; round(41232585a9900000) = 4123258600000000
+#8: xvrdpip round(41382511a2000000) = 4138251200000000; round(40312ef5a9300000) = 4032000000000000
+#9: xvrdpip round(40514bf5d2300000) = 4051800000000000; round(40976bf982440000) = 40976c0000000000
+
+#0: xvrdpiz round(3fd8000000000000) = 0000000000000000; round(404f000000000000) = 404f000000000000
+#1: xvrdpiz round(0018000000b77501) = 0000000000000000; round(7fe800000000051b) = 7fe800000000051b
+#2: xvrdpiz round(0123214569900000) = 0000000000000000; round(0000000000000000) = 0000000000000000
+#3: xvrdpiz round(8000000000000000) = 8000000000000000; round(7ff0000000000000) = 7ff0000000000000
+#4: xvrdpiz round(fff0000000000000) = fff0000000000000; round(7ff7ffffffffffff) = 7fffffffffffffff
+#5: xvrdpiz round(fff7ffffffffffff) = ffffffffffffffff; round(7ff8000000000000) = 7ff8000000000000
+#6: xvrdpiz round(fff8000000000000) = fff8000000000000; round(8008340000078000) = 8000000000000000
+#7: xvrdpiz round(c0d0650f5a07b353) = c0d0650000000000; round(41232585a9900000) = 4123258400000000
+#8: xvrdpiz round(41382511a2000000) = 4138251100000000; round(40312ef5a9300000) = 4031000000000000
+#9: xvrdpiz round(40514bf5d2300000) = 4051400000000000; round(40976bf982440000) = 4097680000000000
+
+#0: xvrspi round(3ec00000) = 00000000; round(42780000) = 42780000; round(00000000) = 00000000; round(7f800000) = 7f800000
+#1: xvrspi round(00000000) = 00000000; round(00000000) = 00000000; round(80000000) = 80000000; round(7f800000) = 7f800000
+#2: xvrspi round(ff800000) = ff800000; round(7fffffff) = 7fffffff; round(ffffffff) = ffffffff; round(7fc00000) = 7fc00000
+#3: xvrspi round(ffc00000) = ffc00000; round(80000000) = 80000000; round(c683287b) = c6832800; round(49192c2d) = 49192c30
+#4: xvrspi round(49c1288d) = 49c12890; round(418977ad) = 41880000; round(428a5faf) = 428a0000; round(44bb5fcc) = 44bb6000
+
+#0: xvrspic round(3ec00000) = 00000000; round(42780000) = 42780000; round(00000000) = 00000000; round(7f800000) = 7f800000
+#1: xvrspic round(00000000) = 00000000; round(00000000) = 00000000; round(80000000) = 80000000; round(7f800000) = 7f800000
+#2: xvrspic round(ff800000) = ff800000; round(7fffffff) = 7fffffff; round(ffffffff) = ffffffff; round(7fc00000) = 7fc00000
+#3: xvrspic round(ffc00000) = ffc00000; round(80000000) = 80000000; round(c683287b) = c6832800; round(49192c2d) = 49192c30
+#4: xvrspic round(49c1288d) = 49c12890; round(418977ad) = 41880000; round(428a5faf) = 428a0000; round(44bb5fcc) = 44bb6000
+
+#0: xvrspim round(3ec00000) = 00000000; round(42780000) = 42780000; round(00000000) = 00000000; round(7f800000) = 7f800000
+#1: xvrspim round(00000000) = 00000000; round(00000000) = 00000000; round(80000000) = 80000000; round(7f800000) = 7f800000
+#2: xvrspim round(ff800000) = ff800000; round(7fffffff) = 7fffffff; round(ffffffff) = ffffffff; round(7fc00000) = 7fc00000
+#3: xvrspim round(ffc00000) = ffc00000; round(80000000) = 80000000; round(c683287b) = c6832a00; round(49192c2d) = 49192c20
+#4: xvrspim round(49c1288d) = 49c12888; round(418977ad) = 41880000; round(428a5faf) = 428a0000; round(44bb5fcc) = 44bb4000
+
+#0: xvrspip round(3ec00000) = 3f800000; round(42780000) = 42780000; round(00000000) = 00000000; round(7f800000) = 7f800000
+#1: xvrspip round(00000000) = 00000000; round(00000000) = 00000000; round(80000000) = 80000000; round(7f800000) = 7f800000
+#2: xvrspip round(ff800000) = ff800000; round(7fffffff) = 7fffffff; round(ffffffff) = ffffffff; round(7fc00000) = 7fc00000
+#3: xvrspip round(ffc00000) = ffc00000; round(80000000) = 80000000; round(c683287b) = c6832800; round(49192c2d) = 49192c30
+#4: xvrspip round(49c1288d) = 49c12890; round(418977ad) = 41900000; round(428a5faf) = 428c0000; round(44bb5fcc) = 44bb6000
+
+#0: xvrspiz round(3ec00000) = 00000000; round(42780000) = 42780000; round(00000000) = 00000000; round(7f800000) = 7f800000
+#1: xvrspiz round(00000000) = 00000000; round(00000000) = 00000000; round(80000000) = 80000000; round(7f800000) = 7f800000
+#2: xvrspiz round(ff800000) = ff800000; round(7fffffff) = 7fffffff; round(ffffffff) = ffffffff; round(7fc00000) = 7fc00000
+#3: xvrspiz round(ffc00000) = ffc00000; round(80000000) = 80000000; round(c683287b) = c6832800; round(49192c2d) = 49192c20
+#4: xvrspiz round(49c1288d) = 49c12888; round(418977ad) = 41880000; round(428a5faf) = 428a0000; round(44bb5fcc) = 44bb4000
+
+Test VSX vector integer to float conversion instructions
+#0: xvcvsxddp conv(0000000000000000) = 0000000000000000; conv(ffffffff00000000) = c1f0000000000000
+#1: xvcvsxddp conv(00000000ffffffff) = 41efffffffe00000; conv(ffffffffffffffff) = bff0000000000000
+#2: xvcvsxddp conv(89abcde123456789) = c3dd950c87b72ea6; conv(0102030405060708) = 4370203040506070
+#3: xvcvsxddp conv(00000000a0b1c2d3) = 41e416385a600000; conv(1111222233334444) = 43b1112222333344
+
+#0: xvcvuxddp conv(0000000000000000) = 0000000000000000; conv(ffffffff00000000) = 43efffffffe00000
+#1: xvcvuxddp conv(00000000ffffffff) = 41efffffffe00000; conv(ffffffffffffffff) = 43f0000000000000
+#2: xvcvuxddp conv(89abcde123456789) = 43e13579bc2468ad; conv(0102030405060708) = 4370203040506070
+#3: xvcvuxddp conv(00000000a0b1c2d3) = 41e416385a600000; conv(1111222233334444) = 43b1112222333344
+
+#0: xvcvsxdsp conv(0000000000000000) = 0000000000000000; conv(ffffffff00000000) = cf80000000000000
+#1: xvcvsxdsp conv(00000000ffffffff) = 4f80000000000000; conv(ffffffffffffffff) = bf80000000000000
+#2: xvcvsxdsp conv(89abcde123456789) = deeca86400000000; conv(0102030405060708) = 5b81018200000000
+#3: xvcvsxdsp conv(00000000a0b1c2d3) = 4f20b1c300000000; conv(1111222233334444) = 5d88891100000000
+
+#0: xvcvuxdsp conv(0000000000000000) = 0000000000000000; conv(ffffffff00000000) = 5f80000000000000
+#1: xvcvuxdsp conv(00000000ffffffff) = 4f80000000000000; conv(ffffffffffffffff) = 5f80000000000000
+#2: xvcvuxdsp conv(89abcde123456789) = 5f09abce00000000; conv(0102030405060708) = 5b81018200000000
+#3: xvcvuxdsp conv(00000000a0b1c2d3) = 4f20b1c300000000; conv(1111222233334444) = 5d88891100000000
+
+#0: xvcvsxwdp conv(00000000) = 0000000000000000; conv(ffff0000) = c0f0000000000000
+#1: xvcvsxwdp conv(0000ffff) = 40efffe000000000; conv(ffffffff) = bff0000000000000
+#2: xvcvsxwdp conv(89a73522) = c1dd9632b7800000; conv(01020304) = 4170203040000000
+#3: xvcvsxwdp conv(0000abcd) = 40e579a000000000; conv(11223344) = 41b1223344000000
+
+#0: xvcvuxwdp conv(00000000) = 0000000000000000; conv(ffff0000) = 41efffe000000000
+#1: xvcvuxwdp conv(0000ffff) = 40efffe000000000; conv(ffffffff) = 41efffffffe00000
+#2: xvcvuxwdp conv(89a73522) = 41e134e6a4400000; conv(01020304) = 4170203040000000
+#3: xvcvuxwdp conv(0000abcd) = 40e579a000000000; conv(11223344) = 41b1223344000000
+
+#0: xvcvsxwsp conv(00000000) = 00000000; conv(ffff0000) = c7800000; conv(0000ffff) = 477fff00; conv(ffffffff) = bf800000
+#1: xvcvsxwsp conv(89a73522) = ceecb196; conv(01020304) = 4b810182; conv(0000abcd) = 472bcd00; conv(11223344) = 4d89119a
+
+#0: xvcvuxwsp conv(00000000) = 00000000; conv(ffff0000) = 4f7fff00; conv(0000ffff) = 477fff00; conv(ffffffff) = 4f800000
+#1: xvcvuxwsp conv(89a73522) = 4f09a735; conv(01020304) = 4b810182; conv(0000abcd) = 472bcd00; conv(11223344) = 4d89119a
+
+Test div extensions
+#0: divwe: 0x0000000000000000 / 0x00000002 = 0x00000000; CR=0; XER=0
+#1: divwe: 0x0000000200000000 / 0x00000000 = 0x00000000; CR=0; XER=0
+#2: divwe: 0x7abc123400000000 / 0xf0000000 = 0x00000000; CR=0; XER=0
+#3: divwe: 0xfabc123400000000 / 0x00000005 = 0x00000000; CR=0; XER=0
+#4: divwe: 0x0000004d00000000 / 0x00000042 = 0x00000000; CR=0; XER=0
+#5: divwe: 0x0000000500000000 / 0xfabc1234 = 0xffffff0d; CR=0; XER=0
+
+#0: divwe.: 0x0000000000000000 / 0x00000002 = 0x00000000; CR=2; XER=0
+#1: divwe.: 0x0000000200000000 / 0x00000000 = 0x00000000; CR=2; XER=0
+#2: divwe.: 0x7abc123400000000 / 0xf0000000 = 0x00000000; CR=2; XER=0
+#3: divwe.: 0xfabc123400000000 / 0x00000005 = 0x00000000; CR=2; XER=0
+#4: divwe.: 0x0000004d00000000 / 0x00000042 = 0x00000000; CR=2; XER=0
+#5: divwe.: 0x0000000500000000 / 0xfabc1234 = 0xffffff0d; CR=8; XER=0
+
+
+#0: divweo: 0x0000000000000000 / 0x00000002 = 0x00000000; CR=0; XER=0
+#1: divweo: 0x0000000200000000 / 0x00000000 = 0x00000000; CR=0; XER=c0000000
+#2: divweo: 0x7abc123400000000 / 0xf0000000 = 0x00000000; CR=0; XER=c0000000
+#3: divweo: 0xfabc123400000000 / 0x00000005 = 0x00000000; CR=0; XER=c0000000
+#4: divweo: 0x0000004d00000000 / 0x00000042 = 0x00000000; CR=0; XER=c0000000
+#5: divweo: 0x0000000500000000 / 0xfabc1234 = 0xffffff0d; CR=0; XER=0
+
+#0: divweo.: 0x0000000000000000 / 0x00000002 = 0x00000000; CR=2; XER=0
+#1: divweo.: 0x0000000200000000 / 0x00000000 = 0x00000000; CR=3; XER=c0000000
+#2: divweo.: 0x7abc123400000000 / 0xf0000000 = 0x00000000; CR=3; XER=c0000000
+#3: divweo.: 0xfabc123400000000 / 0x00000005 = 0x00000000; CR=3; XER=c0000000
+#4: divweo.: 0x0000004d00000000 / 0x00000042 = 0x00000000; CR=3; XER=c0000000
+#5: divweo.: 0x0000000500000000 / 0xfabc1234 = 0xffffff0d; CR=8; XER=0
+
+
+Test ftsqrt instruction
+ftsqrt: 3fd8000000000000 ? 8 (CRx)
+ftsqrt: 404f000000000000 ? 8 (CRx)
+ftsqrt: 0018000000b77501 ? a (CRx)
+ftsqrt: 7fe800000000051b ? 8 (CRx)
+ftsqrt: 0123214569900000 ? a (CRx)
+ftsqrt: 0000000000000000 ? e (CRx)
+ftsqrt: 8000000000000000 ? e (CRx)
+ftsqrt: 7ff0000000000000 ? e (CRx)
+ftsqrt: fff0000000000000 ? e (CRx)
+ftsqrt: 7ff7ffffffffffff ? a (CRx)
+ftsqrt: fff7ffffffffffff ? a (CRx)
+ftsqrt: 7ff8000000000000 ? a (CRx)
+ftsqrt: fff8000000000000 ? a (CRx)
+ftsqrt: 8008340000078000 ? e (CRx)
+ftsqrt: c0d0650f5a07b353 ? a (CRx)
+ftsqrt: 41232585a9900000 ? 8 (CRx)
+ftsqrt: 41382511a2000000 ? 8 (CRx)
+ftsqrt: 40312ef5a9300000 ? 8 (CRx)
+ftsqrt: 40514bf5d2300000 ? 8 (CRx)
+ftsqrt: 40976bf982440000 ? 8 (CRx)
+
+Test vector and scalar tdiv and tsqrt instructions
+#0: xstsqrtdp test-sqrt(3fd8000000000000) ? 8 (CRx)
+#1: xstsqrtdp test-sqrt(404f000000000000) ? 8 (CRx)
+#2: xstsqrtdp test-sqrt(0018000000b77501) ? a (CRx)
+#3: xstsqrtdp test-sqrt(7fe800000000051b) ? 8 (CRx)
+#4: xstsqrtdp test-sqrt(0123214569900000) ? a (CRx)
+#5: xstsqrtdp test-sqrt(0000000000000000) ? e (CRx)
+#6: xstsqrtdp test-sqrt(8000000000000000) ? e (CRx)
+#7: xstsqrtdp test-sqrt(7ff0000000000000) ? e (CRx)
+#8: xstsqrtdp test-sqrt(fff0000000000000) ? e (CRx)
+#9: xstsqrtdp test-sqrt(7ff7ffffffffffff) ? a (CRx)
+#10: xstsqrtdp test-sqrt(fff7ffffffffffff) ? a (CRx)
+#11: xstsqrtdp test-sqrt(7ff8000000000000) ? a (CRx)
+#12: xstsqrtdp test-sqrt(fff8000000000000) ? a (CRx)
+#13: xstsqrtdp test-sqrt(8008340000078000) ? e (CRx)
+#14: xstsqrtdp test-sqrt(c0d0650f5a07b353) ? a (CRx)
+#15: xstsqrtdp test-sqrt(41232585a9900000) ? 8 (CRx)
+#16: xstsqrtdp test-sqrt(41382511a2000000) ? 8 (CRx)
+#17: xstsqrtdp test-sqrt(40312ef5a9300000) ? 8 (CRx)
+#18: xstsqrtdp test-sqrt(40514bf5d2300000) ? 8 (CRx)
+#19: xstsqrtdp test-sqrt(40976bf982440000) ? 8 (CRx)
+
+#0: xvtsqrtdp test-sqrt(3fd8000000000000); test-sqrt(404f000000000000) ? 8 (CRx)
+#1: xvtsqrtdp test-sqrt(0018000000b77501); test-sqrt(7fe800000000051b) ? a (CRx)
+#2: xvtsqrtdp test-sqrt(0123214569900000); test-sqrt(0000000000000000) ? e (CRx)
+#3: xvtsqrtdp test-sqrt(8000000000000000); test-sqrt(7ff0000000000000) ? e (CRx)
+#4: xvtsqrtdp test-sqrt(fff0000000000000); test-sqrt(7ff7ffffffffffff) ? e (CRx)
+#5: xvtsqrtdp test-sqrt(fff7ffffffffffff); test-sqrt(7ff8000000000000) ? a (CRx)
+#6: xvtsqrtdp test-sqrt(fff8000000000000); test-sqrt(8008340000078000) ? e (CRx)
+#7: xvtsqrtdp test-sqrt(c0d0650f5a07b353); test-sqrt(41232585a9900000) ? a (CRx)
+#8: xvtsqrtdp test-sqrt(41382511a2000000); test-sqrt(40312ef5a9300000) ? 8 (CRx)
+#9: xvtsqrtdp test-sqrt(40514bf5d2300000); test-sqrt(40976bf982440000) ? 8 (CRx)
+
+#0: xvtsqrtsp test-sqrt(3ec00000); test-sqrt(42780000); test-sqrt(00000000); test-sqrt(7f800000) ? e (CRx)
+#1: xvtsqrtsp test-sqrt(00000000); test-sqrt(00000000); test-sqrt(80000000); test-sqrt(7f800000) ? e (CRx)
+#2: xvtsqrtsp test-sqrt(ff800000); test-sqrt(7fffffff); test-sqrt(ffffffff); test-sqrt(7fc00000) ? e (CRx)
+#3: xvtsqrtsp test-sqrt(ffc00000); test-sqrt(80000000); test-sqrt(c683287b); test-sqrt(49192c2d) ? e (CRx)
+#4: xvtsqrtsp test-sqrt(49c1288d); test-sqrt(418977ad); test-sqrt(428a5faf); test-sqrt(44bb5fcc) ? 8 (CRx)
+
+#0: xvtdivdp fff0000000000000 test-div fff0000000000000 AND fff0000000000000 test-div c0d0650f5a07b353 ? cc=e
+#1: xvtdivdp 41232585a9900000 test-div 41382511a2000000 AND fff0000000000000 test-div 0000000000000000 ? cc=e
+#2: xvtdivdp fff0000000000000 test-div 0123214569900000 AND fff0000000000000 test-div 7ff0000000000000 ? cc=e
+#3: xvtdivdp fff0000000000000 test-div 7ff7ffffffffffff AND fff0000000000000 test-div 7ff8000000000000 ? cc=e
+#4: xvtdivdp c0d0650f5a07b353 test-div fff0000000000000 AND c0d0650f5a07b353 test-div c0d0650f5a07b353 ? cc=e
+#5: xvtdivdp c0d0650f5a07b353 test-div 8000000000000000 AND c0d0650f5a07b353 test-div 0000000000000000 ? cc=e
+#6: xvtdivdp c0d0650f5a07b353 test-div 0123214569900000 AND c0d0650f5a07b353 test-div 7ff0000000000000 ? cc=e
+#7: xvtdivdp c0d0650f5a07b353 test-div 7ff7ffffffffffff AND c0d0650f5a07b353 test-div 7ff8000000000000 ? cc=a
+#8: xvtdivdp 8000000000000000 test-div fff0000000000000 AND 8000000000000000 test-div c0d0650f5a07b353 ? cc=e
+#9: xvtdivdp 8000000000000000 test-div 8000000000000000 AND 8000000000000000 test-div 0000000000000000 ? cc=e
+#10: xvtdivdp 8000000000000000 test-div 0123214569900000 AND 8000000000000000 test-div 7ff0000000000000 ? cc=e
+#11: xvtdivdp 8000000000000000 test-div 7ff7ffffffffffff AND 8000000000000000 test-div 7ff8000000000000 ? cc=a
+#12: xvtdivdp 0000000000000000 test-div fff0000000000000 AND 0000000000000000 test-div c0d0650f5a07b353 ? cc=e
+#13: xvtdivdp 0000000000000000 test-div 8000000000000000 AND 0000000000000000 test-div 0000000000000000 ? cc=e
+#14: xvtdivdp 0000000000000000 test-div 0123214569900000 AND 0000000000000000 test-div 7ff0000000000000 ? cc=e
+#15: xvtdivdp 0000000000000000 test-div 7ff7ffffffffffff AND 0000000000000000 test-div 7ff8000000000000 ? cc=a
+#16: xvtdivdp 0123214569900000 test-div fff0000000000000 AND 0123214569900000 test-div c0d0650f5a07b353 ? cc=e
+#17: xvtdivdp 0123214569900000 test-div 8000000000000000 AND 0123214569900000 test-div 0000000000000000 ? cc=e
+#18: xvtdivdp 0123214569900000 test-div 404f000000000000 AND 0123214569900000 test-div 7ff0000000000000 ? cc=e
+#19: xvtdivdp 0123214569900000 test-div 7ff7ffffffffffff AND 0123214569900000 test-div 7ff8000000000000 ? cc=a
+#20: xvtdivdp 7ff0000000000000 test-div fff0000000000000 AND 7ff0000000000000 test-div c0d0650f5a07b353 ? cc=e
+#21: xvtdivdp 7ff0000000000000 test-div 8000000000000000 AND 7ff0000000000000 test-div 0000000000000000 ? cc=e
+#22: xvtdivdp 7ff0000000000000 test-div 0123214569900000 AND 7ff0000000000000 test-div 7ff0000000000000 ? cc=e
+#23: xvtdivdp 7ff0000000000000 test-div 7ff7ffffffffffff AND 7ff0000000000000 test-div 7ff8000000000000 ? cc=e
+#24: xvtdivdp fff7ffffffffffff test-div fff0000000000000 AND fff7ffffffffffff test-div c0d0650f5a07b353 ? cc=e
+#25: xvtdivdp fff8000000000000 test-div 8000000000000000 AND fff8000000000000 test-div 0000000000000000 ? cc=e
+#26: xvtdivdp fff7ffffffffffff test-div 0123214569900000 AND fff7ffffffffffff test-div 7ff0000000000000 ? cc=e
+#27: xvtdivdp fff7ffffffffffff test-div 7ff7ffffffffffff AND fff7ffffffffffff test-div 7ff8000000000000 ? cc=a
+#28: xvtdivdp fff8000000000000 test-div fff0000000000000 AND fff8000000000000 test-div c0d0650f5a07b353 ? cc=e
+#29: xvtdivdp fff8000000000000 test-div 8000000000000000 AND 41232585a9900000 test-div 41382511a2000000 ? cc=e
+#30: xvtdivdp 41232585a9900000 test-div 41382511a2000000 AND 7ff7ffffffffffff test-div 7ff8000000000000 ? cc=a
+#31: xvtdivdp 7ff8000000000000 test-div 7ff8000000000000 AND 7ff8000000000000 test-div fff8000000000000 ? cc=a
+#32: xvtdivdp 41382511a2000000 test-div 40514bf5d2300000 AND 40312ef5a9300000 test-div 41382511a2000000 ? cc=8
+#33: xvtdivdp 40976bf982440000 test-div 40976bf982440000 AND 40976bf982440000 test-div 40514bf5d2300000 ? cc=8
+
+#0: xvtdivsp ff800000 test-div ff800000 AND ff800000 test-div c683287b AND 49192c2d test-div 49c1288d AND ff800000 test-div 00000000 ? cc=e
+#1: xvtdivsp ff800000 test-div 00000000 AND ff800000 test-div 7f800000 AND ff800000 test-div 7fffffff AND ff800000 test-div 7fc00000 ? cc=e
+#2: xvtdivsp c683287b test-div ff800000 AND c683287b test-div c683287b AND c683287b test-div 80000000 AND c683287b test-div 00000000 ? cc=e
+#3: xvtdivsp c683287b test-div 00000000 AND c683287b test-div 7f800000 AND c683287b test-div 7fffffff AND c683287b test-div 7fc00000 ? cc=e
+#4: xvtdivsp 80000000 test-div ff800000 AND 80000000 test-div c683287b AND 80000000 test-div 80000000 AND 80000000 test-div 00000000 ? cc=e
+#5: xvtdivsp 80000000 test-div 00000000 AND 80000000 test-div 7f800000 AND 80000000 test-div 7fffffff AND 80000000 test-div 7fc00000 ? cc=e
+#6: xvtdivsp 00000000 test-div ff800000 AND 00000000 test-div c683287b AND 00000000 test-div 80000000 AND 00000000 test-div 00000000 ? cc=e
+#7: xvtdivsp 00000000 test-div 00000000 AND 00000000 test-div 7f800000 AND 00000000 test-div 7fffffff AND 00000000 test-div 7fc00000 ? cc=e
+#8: xvtdivsp 00000000 test-div ff800000 AND 00000000 test-div c683287b AND 00000000 test-div 80000000 AND 00000000 test-div 00000000 ? cc=e
+#9: xvtdivsp 00000000 test-div 42780000 AND 00000000 test-div 7f800000 AND 00000000 test-div 7fffffff AND 00000000 test-div 7fc00000 ? cc=e
+#10: xvtdivsp 7f800000 test-div ff800000 AND 7f800000 test-div c683287b AND 7f800000 test-div 80000000 AND 7f800000 test-div 00000000 ? cc=e
+#11: xvtdivsp 7f800000 test-div 00000000 AND 7f800000 test-div 7f800000 AND 7f800000 test-div 7fffffff AND 7f800000 test-div 7fc00000 ? cc=e
+#12: xvtdivsp ffffffff test-div ff800000 AND ffffffff test-div c683287b AND ffc00000 test-div 80000000 AND ffc00000 test-div 00000000 ? cc=e
+#13: xvtdivsp ffffffff test-div 00000000 AND ffffffff test-div 7f800000 AND ffffffff test-div 7fffffff AND ffffffff test-div 7fc00000 ? cc=e
+#14: xvtdivsp ffc00000 test-div ff800000 AND ffc00000 test-div c683287b AND ffc00000 test-div 80000000 AND 49192c2d test-div 49c1288d ? cc=e
+#15: xvtdivsp 49192c2d test-div 49c1288d AND 7fffffff test-div 7fc00000 AND 7fc00000 test-div 7fc00000 AND 7fc00000 test-div ffc00000 ? cc=a
+#16: xvtdivsp 49c1288d test-div 428a5faf AND 418977ad test-div 49c1288d AND 44bb5fcc test-div 44bb5fcc AND 44bb5fcc test-div 428a5faf ? cc=8
+
+Test popcntw instruction
+popcntw: 0x9182730e => 0x0000000d
+
diff --git a/none/tests/ppc32/test_isa_2_06_part3.vgtest b/none/tests/ppc32/test_isa_2_06_part3.vgtest
new file mode 100644
index 00000000..3519c8a0
--- /dev/null
+++ b/none/tests/ppc32/test_isa_2_06_part3.vgtest
@@ -0,0 +1,2 @@
+prereq: ../../../tests/check_isa-2_06_cap
+prog: test_isa_2_06_part3
diff --git a/none/tests/ppc64/Makefile.am b/none/tests/ppc64/Makefile.am
index 363b7f08..15b4b39b 100644
--- a/none/tests/ppc64/Makefile.am
+++ b/none/tests/ppc64/Makefile.am
@@ -16,11 +16,12 @@ EXTRA_DIST = \
power6_bcmp.stderr.exp power6_bcmp.stdout.exp power6_bcmp.vgtest \
power6_mf_gpr.stderr.exp power6_mf_gpr.stdout.exp power6_mf_gpr.vgtest \
test_isa_2_06_part1.stderr.exp test_isa_2_06_part1.stdout.exp test_isa_2_06_part1.vgtest \
- test_isa_2_06_part2.stderr.exp test_isa_2_06_part2.stdout.exp test_isa_2_06_part2.vgtest
+ test_isa_2_06_part2.stderr.exp test_isa_2_06_part2.stdout.exp test_isa_2_06_part2.vgtest \
+ test_isa_2_06_part3.stderr.exp test_isa_2_06_part3.stdout.exp test_isa_2_06_part3.vgtest
check_PROGRAMS = \
jm-insns lsw round std_reg_imm twi_tdi tw_td power6_bcmp power6_mf_gpr test_isa_2_06_part1 \
- test_isa_2_06_part2
+ test_isa_2_06_part2 test_isa_2_06_part3
AM_CFLAGS += @FLAG_M64@
AM_CXXFLAGS += @FLAG_M64@
@@ -46,6 +47,9 @@ test_isa_2_06_part1_CFLAGS = $(AM_CFLAGS) -Winline -Wall -O -g -mregnames $(VSX_
test_isa_2_06_part2_CFLAGS = $(AM_CFLAGS) -Winline -Wall -O -g -mregnames $(VSX_FLAG) \
@FLAG_M64@ $(ALTIVEC_FLAG) $(BUILD_FLAG_VSX)
+test_isa_2_06_part3_CFLAGS = $(AM_CFLAGS) -Winline -Wall -O -lm -g -mregnames $(VSX_FLAG) \
+ @FLAG_M64@ $(ALTIVEC_FLAG) $(BUILD_FLAG_VSX)
+
jm_insns_CFLAGS = $(AM_CFLAGS) -Winline -Wall -O -g -mregnames -maltivec \
@FLAG_M64@ $(ALTIVEC_FLAG)
diff --git a/none/tests/ppc64/test_isa_2_06_part3.c b/none/tests/ppc64/test_isa_2_06_part3.c
new file mode 120000
index 00000000..57da4ec0
--- /dev/null
+++ b/none/tests/ppc64/test_isa_2_06_part3.c
@@ -0,0 +1 @@
+../../../none/tests/ppc32/test_isa_2_06_part3.c \ No newline at end of file
diff --git a/none/tests/ppc64/test_isa_2_06_part3.stderr.exp b/none/tests/ppc64/test_isa_2_06_part3.stderr.exp
new file mode 100644
index 00000000..139597f9
--- /dev/null
+++ b/none/tests/ppc64/test_isa_2_06_part3.stderr.exp
@@ -0,0 +1,2 @@
+
+
diff --git a/none/tests/ppc64/test_isa_2_06_part3.stdout.exp b/none/tests/ppc64/test_isa_2_06_part3.stdout.exp
new file mode 100644
index 00000000..c3da39f8
--- /dev/null
+++ b/none/tests/ppc64/test_isa_2_06_part3.stdout.exp
@@ -0,0 +1,663 @@
+Test VSX vector and scalar single argument instructions
+#0: xvredp 1/x(3fd8000000000000) ==> PASS); 1/x(404f000000000000) ==> PASS)
+#1: xvredp 1/x(0018000000b77501) ==> PASS); 1/x(7fe800000000051b) ==> PASS)
+#2: xvredp 1/x(0123214569900000) ==> PASS); 1/x(0000000000000000) ==> PASS)
+#3: xvredp 1/x(8000000000000000) ==> PASS); 1/x(7ff0000000000000) ==> PASS)
+#4: xvredp 1/x(fff0000000000000) ==> PASS); 1/x(7ff7ffffffffffff) ==> PASS)
+#5: xvredp 1/x(fff7ffffffffffff) ==> PASS); 1/x(7ff8000000000000) ==> PASS)
+#6: xvredp 1/x(fff8000000000000) ==> PASS); 1/x(8008340000078000) ==> PASS)
+#7: xvredp 1/x(c0d0650f5a07b353) ==> PASS); 1/x(41232585a9900000) ==> PASS)
+#8: xvredp 1/x(41382511a2000000) ==> PASS); 1/x(40312ef5a9300000) ==> PASS)
+
+#0: xsredp 1/x(3fd8000000000000) ==> PASS)
+#1: xsredp 1/x(404f000000000000) ==> PASS)
+#2: xsredp 1/x(0018000000b77501) ==> PASS)
+#3: xsredp 1/x(7fe800000000051b) ==> PASS)
+#4: xsredp 1/x(0123214569900000) ==> PASS)
+#5: xsredp 1/x(0000000000000000) ==> PASS)
+#6: xsredp 1/x(8000000000000000) ==> PASS)
+#7: xsredp 1/x(7ff0000000000000) ==> PASS)
+#8: xsredp 1/x(fff0000000000000) ==> PASS)
+#9: xsredp 1/x(7ff7ffffffffffff) ==> PASS)
+#10: xsredp 1/x(fff7ffffffffffff) ==> PASS)
+#11: xsredp 1/x(7ff8000000000000) ==> PASS)
+#12: xsredp 1/x(fff8000000000000) ==> PASS)
+#13: xsredp 1/x(8008340000078000) ==> PASS)
+#14: xsredp 1/x(c0d0650f5a07b353) ==> PASS)
+#15: xsredp 1/x(41232585a9900000) ==> PASS)
+#16: xsredp 1/x(41382511a2000000) ==> PASS)
+#17: xsredp 1/x(40312ef5a9300000) ==> PASS)
+
+#0: xvrsqrtedp 1/x-sqrt(3fd8000000000000) ==> PASS); 1/x-sqrt(404f000000000000) ==> PASS)
+#1: xvrsqrtedp 1/x-sqrt(0018000000b77501) ==> PASS); 1/x-sqrt(7fe800000000051b) ==> PASS)
+#2: xvrsqrtedp 1/x-sqrt(0123214569900000) ==> PASS); 1/x-sqrt(0000000000000000) ==> PASS)
+#3: xvrsqrtedp 1/x-sqrt(8000000000000000) ==> PASS); 1/x-sqrt(7ff0000000000000) ==> PASS)
+#4: xvrsqrtedp 1/x-sqrt(fff0000000000000) ==> PASS); 1/x-sqrt(7ff7ffffffffffff) ==> PASS)
+#5: xvrsqrtedp 1/x-sqrt(fff7ffffffffffff) ==> PASS); 1/x-sqrt(7ff8000000000000) ==> PASS)
+#6: xvrsqrtedp 1/x-sqrt(fff8000000000000) ==> PASS); 1/x-sqrt(8008340000078000) ==> PASS)
+#7: xvrsqrtedp 1/x-sqrt(c0d0650f5a07b353) ==> PASS); 1/x-sqrt(41232585a9900000) ==> PASS)
+#8: xvrsqrtedp 1/x-sqrt(41382511a2000000) ==> PASS); 1/x-sqrt(40312ef5a9300000) ==> PASS)
+
+#0: xsrsqrtedp 1/x-sqrt(3fd8000000000000) ==> PASS)
+#1: xsrsqrtedp 1/x-sqrt(404f000000000000) ==> PASS)
+#2: xsrsqrtedp 1/x-sqrt(0018000000b77501) ==> PASS)
+#3: xsrsqrtedp 1/x-sqrt(7fe800000000051b) ==> PASS)
+#4: xsrsqrtedp 1/x-sqrt(0123214569900000) ==> PASS)
+#5: xsrsqrtedp 1/x-sqrt(0000000000000000) ==> PASS)
+#6: xsrsqrtedp 1/x-sqrt(8000000000000000) ==> PASS)
+#7: xsrsqrtedp 1/x-sqrt(7ff0000000000000) ==> PASS)
+#8: xsrsqrtedp 1/x-sqrt(fff0000000000000) ==> PASS)
+#9: xsrsqrtedp 1/x-sqrt(7ff7ffffffffffff) ==> PASS)
+#10: xsrsqrtedp 1/x-sqrt(fff7ffffffffffff) ==> PASS)
+#11: xsrsqrtedp 1/x-sqrt(7ff8000000000000) ==> PASS)
+#12: xsrsqrtedp 1/x-sqrt(fff8000000000000) ==> PASS)
+#13: xsrsqrtedp 1/x-sqrt(8008340000078000) ==> PASS)
+#14: xsrsqrtedp 1/x-sqrt(c0d0650f5a07b353) ==> PASS)
+#15: xsrsqrtedp 1/x-sqrt(41232585a9900000) ==> PASS)
+#16: xsrsqrtedp 1/x-sqrt(41382511a2000000) ==> PASS)
+#17: xsrsqrtedp 1/x-sqrt(40312ef5a9300000) ==> PASS)
+
+#0: xvrsqrtesp 1/x-sqrt(3ec00000) ==> PASS); 1/x-sqrt(42780000) ==> PASS); 1/x-sqrt(00000000) ==> PASS); 1/x-sqrt(7f800000) ==> PASS)
+#1: xvrsqrtesp 1/x-sqrt(00000000) ==> PASS); 1/x-sqrt(00000000) ==> PASS); 1/x-sqrt(80000000) ==> PASS); 1/x-sqrt(7f800000) ==> PASS)
+#2: xvrsqrtesp 1/x-sqrt(ff800000) ==> PASS); 1/x-sqrt(7fffffff) ==> PASS); 1/x-sqrt(ffffffff) ==> PASS); 1/x-sqrt(7fc00000) ==> PASS)
+#3: xvrsqrtesp 1/x-sqrt(ffc00000) ==> PASS); 1/x-sqrt(80000000) ==> PASS); 1/x-sqrt(c683287b) ==> PASS); 1/x-sqrt(49192c2d) ==> PASS)
+#4: xvrsqrtesp 1/x-sqrt(49c1288d) ==> PASS); 1/x-sqrt(418977ad) ==> PASS); 1/x-sqrt(428a5faf) ==> PASS); 1/x-sqrt(44bb5fcc) ==> PASS)
+
+#0: xvsqrtdp sqrt(3fd8000000000000) = 3fe3988e1409212e; sqrt(404f000000000000) = 401f7efbeb8d4f12
+#1: xvsqrtdp sqrt(0018000000b77501) = 2003988e14540690; sqrt(7fe800000000051b) = 5febb67ae8584f9d
+#2: xvsqrtdp sqrt(0123214569900000) = 2088bde98d60ebe6; sqrt(0000000000000000) = 0000000000000000
+#3: xvsqrtdp sqrt(8000000000000000) = 8000000000000000; sqrt(7ff0000000000000) = 7ff0000000000000
+#4: xvsqrtdp sqrt(fff0000000000000) = 7ff8000000000000; sqrt(7ff7ffffffffffff) = 7fffffffffffffff
+#5: xvsqrtdp sqrt(fff7ffffffffffff) = ffffffffffffffff; sqrt(7ff8000000000000) = 7ff8000000000000
+#6: xvsqrtdp sqrt(fff8000000000000) = fff8000000000000; sqrt(8008340000078000) = 7ff8000000000000
+#7: xvsqrtdp sqrt(c0d0650f5a07b353) = 7ff8000000000000; sqrt(41232585a9900000) = 4088c0a9258a4a8b
+#8: xvsqrtdp sqrt(41382511a2000000) = 4093a7aa60f34e85; sqrt(40312ef5a9300000) = 401094c71dec3a9c
+
+#0: xvsqrtsp sqrt(3ec00000) = 3f1cc470; sqrt(42780000) = 40fbf7dc; sqrt(00000000) = 00000000; sqrt(7f800000) = 7f800000
+#1: xvsqrtsp sqrt(00000000) = 00000000; sqrt(00000000) = 00000000; sqrt(80000000) = 80000000; sqrt(7f800000) = 7f800000
+#2: xvsqrtsp sqrt(ff800000) = 7fc00000; sqrt(7fffffff) = 7ffffffc; sqrt(ffffffff) = fffffffc; sqrt(7fc00000) = 7fc00000
+#3: xvsqrtsp sqrt(ffc00000) = ffc00000; sqrt(80000000) = 80000000; sqrt(c683287b) = 7fc00000; sqrt(49192c2d) = 44460548
+#4: xvsqrtsp sqrt(49c1288d) = 449d3d50; sqrt(418977ad) = 4084a638; sqrt(428a5faf) = 410515f8; sqrt(44bb5fcc) = 421ade08
+
+#0: xscvdpsp conv(3fd8000000000000) = 3ec0000000000000
+#1: xscvdpsp conv(404f000000000000) = 4278000000000000
+#2: xscvdpsp conv(0018000000b77501) = 0000000000000000
+#3: xscvdpsp conv(7fe800000000051b) = 7f80000000000000
+#4: xscvdpsp conv(0123214569900000) = 0000000000000000
+#5: xscvdpsp conv(0000000000000000) = 0000000000000000
+#6: xscvdpsp conv(8000000000000000) = 8000000000000000
+#7: xscvdpsp conv(7ff0000000000000) = 7f80000000000000
+#8: xscvdpsp conv(fff0000000000000) = ff80000000000000
+#9: xscvdpsp conv(7ff7ffffffffffff) = 7fffffff00000000
+#10: xscvdpsp conv(fff7ffffffffffff) = ffffffff00000000
+#11: xscvdpsp conv(7ff8000000000000) = 7fc0000000000000
+#12: xscvdpsp conv(fff8000000000000) = ffc0000000000000
+#13: xscvdpsp conv(8008340000078000) = 8000000000000000
+#14: xscvdpsp conv(c0d0650f5a07b353) = c683287b00000000
+#15: xscvdpsp conv(41232585a9900000) = 49192c2d00000000
+#16: xscvdpsp conv(41382511a2000000) = 49c1288d00000000
+#17: xscvdpsp conv(40312ef5a9300000) = 418977ad00000000
+#18: xscvdpsp conv(40514bf5d2300000) = 428a5faf00000000
+#19: xscvdpsp conv(40976bf982440000) = 44bb5fcc00000000
+
+#0: xscvdpuxws conv(3fd8000000000000) = 0000000000000000
+#1: xscvdpuxws conv(404f000000000000) = 000000000000003e
+#2: xscvdpuxws conv(0018000000b77501) = 0000000000000000
+#3: xscvdpuxws conv(7fe800000000051b) = 00000000ffffffff
+#4: xscvdpuxws conv(0123214569900000) = 0000000000000000
+#5: xscvdpuxws conv(0000000000000000) = 0000000000000000
+#6: xscvdpuxws conv(8000000000000000) = 0000000000000000
+#7: xscvdpuxws conv(7ff0000000000000) = 00000000ffffffff
+#8: xscvdpuxws conv(fff0000000000000) = 0000000000000000
+#9: xscvdpuxws conv(7ff7ffffffffffff) = 0000000000000000
+#10: xscvdpuxws conv(fff7ffffffffffff) = 0000000000000000
+#11: xscvdpuxws conv(7ff8000000000000) = 0000000000000000
+#12: xscvdpuxws conv(fff8000000000000) = 0000000000000000
+#13: xscvdpuxws conv(8008340000078000) = 0000000000000000
+#14: xscvdpuxws conv(c0d0650f5a07b353) = 0000000000000000
+#15: xscvdpuxws conv(41232585a9900000) = 00000000000992c2
+#16: xscvdpuxws conv(41382511a2000000) = 0000000000182511
+#17: xscvdpuxws conv(40312ef5a9300000) = 0000000000000011
+#18: xscvdpuxws conv(40514bf5d2300000) = 0000000000000045
+#19: xscvdpuxws conv(40976bf982440000) = 00000000000005da
+
+#0: xscvspdp conv(3ec00000) = 3fd8000000000000
+#1: xscvspdp conv(42780000) = 404f000000000000
+#2: xscvspdp conv(00000000) = 0000000000000000
+#3: xscvspdp conv(7f800000) = 7ff0000000000000
+#4: xscvspdp conv(00000000) = 0000000000000000
+#5: xscvspdp conv(00000000) = 0000000000000000
+#6: xscvspdp conv(80000000) = 8000000000000000
+#7: xscvspdp conv(7f800000) = 7ff0000000000000
+#8: xscvspdp conv(ff800000) = fff0000000000000
+#9: xscvspdp conv(7fffffff) = 7fffffffe0000000
+#10: xscvspdp conv(ffffffff) = ffffffffe0000000
+#11: xscvspdp conv(7fc00000) = 7ff8000000000000
+#12: xscvspdp conv(ffc00000) = fff8000000000000
+#13: xscvspdp conv(80000000) = 8000000000000000
+#14: xscvspdp conv(c683287b) = c0d0650f60000000
+#15: xscvspdp conv(49192c2d) = 41232585a0000000
+#16: xscvspdp conv(49c1288d) = 41382511a0000000
+#17: xscvspdp conv(418977ad) = 40312ef5a0000000
+#18: xscvspdp conv(428a5faf) = 40514bf5e0000000
+#19: xscvspdp conv(44bb5fcc) = 40976bf980000000
+
+#0: xvcvdpsp conv(3fd8000000000000) = 3ec0000000000000; conv(404f000000000000) = 4278000000000000
+#1: xvcvdpsp conv(0018000000b77501) = 0000000000000000; conv(7fe800000000051b) = 7f80000000000000
+#2: xvcvdpsp conv(0123214569900000) = 0000000000000000; conv(0000000000000000) = 0000000000000000
+#3: xvcvdpsp conv(8000000000000000) = 8000000000000000; conv(7ff0000000000000) = 7f80000000000000
+#4: xvcvdpsp conv(fff0000000000000) = ff80000000000000; conv(7ff7ffffffffffff) = 7fffffff00000000
+#5: xvcvdpsp conv(fff7ffffffffffff) = ffffffff00000000; conv(7ff8000000000000) = 7fc0000000000000
+#6: xvcvdpsp conv(fff8000000000000) = ffc0000000000000; conv(8008340000078000) = 8000000000000000
+#7: xvcvdpsp conv(c0d0650f5a07b353) = c683287b00000000; conv(41232585a9900000) = 49192c2d00000000
+#8: xvcvdpsp conv(41382511a2000000) = 49c1288d00000000; conv(40312ef5a9300000) = 418977ad00000000
+#9: xvcvdpsp conv(40514bf5d2300000) = 428a5faf00000000; conv(40976bf982440000) = 44bb5fcc00000000
+
+#0: xvcvdpuxds conv(3fd8000000000000) = 0000000000000000; conv(404f000000000000) = 000000000000003e
+#1: xvcvdpuxds conv(0018000000b77501) = 0000000000000000; conv(7fe800000000051b) = ffffffffffffffff
+#2: xvcvdpuxds conv(0123214569900000) = 0000000000000000; conv(0000000000000000) = 0000000000000000
+#3: xvcvdpuxds conv(8000000000000000) = 0000000000000000; conv(7ff0000000000000) = ffffffffffffffff
+#4: xvcvdpuxds conv(fff0000000000000) = 0000000000000000; conv(7ff7ffffffffffff) = 0000000000000000
+#5: xvcvdpuxds conv(fff7ffffffffffff) = 0000000000000000; conv(7ff8000000000000) = 0000000000000000
+#6: xvcvdpuxds conv(fff8000000000000) = 0000000000000000; conv(8008340000078000) = 0000000000000000
+#7: xvcvdpuxds conv(c0d0650f5a07b353) = 0000000000000000; conv(41232585a9900000) = 00000000000992c2
+#8: xvcvdpuxds conv(41382511a2000000) = 0000000000182511; conv(40312ef5a9300000) = 0000000000000011
+#9: xvcvdpuxds conv(40514bf5d2300000) = 0000000000000045; conv(40976bf982440000) = 00000000000005da
+
+#0: xvcvdpuxws conv(3fd8000000000000) = 0000000000000000; conv(404f000000000000) = 0000003e00000000
+#1: xvcvdpuxws conv(0018000000b77501) = 0000000000000000; conv(7fe800000000051b) = ffffffff00000000
+#2: xvcvdpuxws conv(0123214569900000) = 0000000000000000; conv(0000000000000000) = 0000000000000000
+#3: xvcvdpuxws conv(8000000000000000) = 0000000000000000; conv(7ff0000000000000) = ffffffff00000000
+#4: xvcvdpuxws conv(fff0000000000000) = 0000000000000000; conv(7ff7ffffffffffff) = 0000000000000000
+#5: xvcvdpuxws conv(fff7ffffffffffff) = 0000000000000000; conv(7ff8000000000000) = 0000000000000000
+#6: xvcvdpuxws conv(fff8000000000000) = 0000000000000000; conv(8008340000078000) = 0000000000000000
+#7: xvcvdpuxws conv(c0d0650f5a07b353) = 0000000000000000; conv(41232585a9900000) = 000992c200000000
+#8: xvcvdpuxws conv(41382511a2000000) = 0018251100000000; conv(40312ef5a9300000) = 0000001100000000
+#9: xvcvdpuxws conv(40514bf5d2300000) = 0000004500000000; conv(40976bf982440000) = 000005da00000000
+
+#0: xvcvspdp conv(3ec00000) = 3fd8000000000000; conv(42780000) = 404f000000000000
+#1: xvcvspdp conv(00000000) = 0000000000000000; conv(7f800000) = 7ff0000000000000
+#2: xvcvspdp conv(00000000) = 0000000000000000; conv(00000000) = 0000000000000000
+#3: xvcvspdp conv(80000000) = 8000000000000000; conv(7f800000) = 7ff0000000000000
+#4: xvcvspdp conv(ff800000) = fff0000000000000; conv(7fffffff) = 7fffffffe0000000
+#5: xvcvspdp conv(ffffffff) = ffffffffe0000000; conv(7fc00000) = 7ff8000000000000
+#6: xvcvspdp conv(ffc00000) = fff8000000000000; conv(80000000) = 8000000000000000
+#7: xvcvspdp conv(c683287b) = c0d0650f60000000; conv(49192c2d) = 41232585a0000000
+#8: xvcvspdp conv(49c1288d) = 41382511a0000000; conv(418977ad) = 40312ef5a0000000
+#9: xvcvspdp conv(428a5faf) = 40514bf5e0000000; conv(44bb5fcc) = 40976bf980000000
+
+#0: xvcvspsxds conv(3ec00000) = 0000000000000000; conv(42780000) = 000000000000003e
+#1: xvcvspsxds conv(00000000) = 0000000000000000; conv(7f800000) = 7fffffffffffffff
+#2: xvcvspsxds conv(00000000) = 0000000000000000; conv(00000000) = 0000000000000000
+#3: xvcvspsxds conv(80000000) = 0000000000000000; conv(7f800000) = 7fffffffffffffff
+#4: xvcvspsxds conv(ff800000) = 8000000000000000; conv(7fffffff) = 8000000000000000
+#5: xvcvspsxds conv(ffffffff) = 8000000000000000; conv(7fc00000) = 8000000000000000
+#6: xvcvspsxds conv(ffc00000) = 8000000000000000; conv(80000000) = 0000000000000000
+#7: xvcvspsxds conv(c683287b) = ffffffffffffbe6c; conv(49192c2d) = 00000000000992c2
+#8: xvcvspsxds conv(49c1288d) = 0000000000182511; conv(418977ad) = 0000000000000011
+#9: xvcvspsxds conv(428a5faf) = 0000000000000045; conv(44bb5fcc) = 00000000000005da
+
+#0: xvcvdpsxds conv(3fd8000000000000) = 0000000000000000; conv(404f000000000000) = 000000000000003e
+#1: xvcvdpsxds conv(0018000000b77501) = 0000000000000000; conv(7fe800000000051b) = 7fffffffffffffff
+#2: xvcvdpsxds conv(0123214569900000) = 0000000000000000; conv(0000000000000000) = 0000000000000000
+#3: xvcvdpsxds conv(8000000000000000) = 0000000000000000; conv(7ff0000000000000) = 7fffffffffffffff
+#4: xvcvdpsxds conv(fff0000000000000) = 8000000000000000; conv(7ff7ffffffffffff) = 8000000000000000
+#5: xvcvdpsxds conv(fff7ffffffffffff) = 8000000000000000; conv(7ff8000000000000) = 8000000000000000
+#6: xvcvdpsxds conv(fff8000000000000) = 8000000000000000; conv(8008340000078000) = 0000000000000000
+#7: xvcvdpsxds conv(c0d0650f5a07b353) = ffffffffffffbe6c; conv(41232585a9900000) = 00000000000992c2
+#8: xvcvdpsxds conv(41382511a2000000) = 0000000000182511; conv(40312ef5a9300000) = 0000000000000011
+#9: xvcvdpsxds conv(40514bf5d2300000) = 0000000000000045; conv(40976bf982440000) = 00000000000005da
+
+#0: xvcvspuxds conv(3ec00000) = 0000000000000000; conv(42780000) = 000000000000003e
+#1: xvcvspuxds conv(00000000) = 0000000000000000; conv(7f800000) = ffffffffffffffff
+#2: xvcvspuxds conv(00000000) = 0000000000000000; conv(00000000) = 0000000000000000
+#3: xvcvspuxds conv(80000000) = 0000000000000000; conv(7f800000) = ffffffffffffffff
+#4: xvcvspuxds conv(ff800000) = 0000000000000000; conv(7fffffff) = 0000000000000000
+#5: xvcvspuxds conv(ffffffff) = 0000000000000000; conv(7fc00000) = 0000000000000000
+#6: xvcvspuxds conv(ffc00000) = 0000000000000000; conv(80000000) = 0000000000000000
+#7: xvcvspuxds conv(c683287b) = 0000000000000000; conv(49192c2d) = 00000000000992c2
+#8: xvcvspuxds conv(49c1288d) = 0000000000182511; conv(418977ad) = 0000000000000011
+#9: xvcvspuxds conv(428a5faf) = 0000000000000045; conv(44bb5fcc) = 00000000000005da
+
+#0: xvcvspuxws conv(3ec00000) = 00000000; conv(42780000) = 0000003e; conv(00000000) = 00000000; conv(7f800000) = ffffffff
+#1: xvcvspuxws conv(00000000) = 00000000; conv(00000000) = 00000000; conv(80000000) = 00000000; conv(7f800000) = ffffffff
+#2: xvcvspuxws conv(ff800000) = 00000000; conv(7fffffff) = 00000000; conv(ffffffff) = 00000000; conv(7fc00000) = 00000000
+#3: xvcvspuxws conv(ffc00000) = 00000000; conv(80000000) = 00000000; conv(c683287b) = 00000000; conv(49192c2d) = 000992c2
+#4: xvcvspuxws conv(49c1288d) = 00182511; conv(418977ad) = 00000011; conv(428a5faf) = 00000045; conv(44bb5fcc) = 000005da
+
+#0: xsrdpic round(3fd8000000000000) = 0000000000000000
+#1: xsrdpic round(404f000000000000) = 404f000000000000
+#2: xsrdpic round(0018000000b77501) = 0000000000000000
+#3: xsrdpic round(7fe800000000051b) = 7fe800000000051b
+#4: xsrdpic round(0123214569900000) = 0000000000000000
+#5: xsrdpic round(0000000000000000) = 0000000000000000
+#6: xsrdpic round(8000000000000000) = 8000000000000000
+#7: xsrdpic round(7ff0000000000000) = 7ff0000000000000
+#8: xsrdpic round(fff0000000000000) = fff0000000000000
+#9: xsrdpic round(7ff7ffffffffffff) = 7fffffffffffffff
+#10: xsrdpic round(fff7ffffffffffff) = ffffffffffffffff
+#11: xsrdpic round(7ff8000000000000) = 7ff8000000000000
+#12: xsrdpic round(fff8000000000000) = fff8000000000000
+#13: xsrdpic round(8008340000078000) = 8000000000000000
+#14: xsrdpic round(c0d0650f5a07b353) = c0d0650000000000
+#15: xsrdpic round(41232585a9900000) = 4123258600000000
+#16: xsrdpic round(41382511a2000000) = 4138251200000000
+#17: xsrdpic round(40312ef5a9300000) = 4031000000000000
+#18: xsrdpic round(40514bf5d2300000) = 4051400000000000
+#19: xsrdpic round(40976bf982440000) = 40976c0000000000
+
+#0: xsrdpiz round(3fd8000000000000) = 0000000000000000
+#1: xsrdpiz round(404f000000000000) = 404f000000000000
+#2: xsrdpiz round(0018000000b77501) = 0000000000000000
+#3: xsrdpiz round(7fe800000000051b) = 7fe800000000051b
+#4: xsrdpiz round(0123214569900000) = 0000000000000000
+#5: xsrdpiz round(0000000000000000) = 0000000000000000
+#6: xsrdpiz round(8000000000000000) = 8000000000000000
+#7: xsrdpiz round(7ff0000000000000) = 7ff0000000000000
+#8: xsrdpiz round(fff0000000000000) = fff0000000000000
+#9: xsrdpiz round(7ff7ffffffffffff) = 7fffffffffffffff
+#10: xsrdpiz round(fff7ffffffffffff) = ffffffffffffffff
+#11: xsrdpiz round(7ff8000000000000) = 7ff8000000000000
+#12: xsrdpiz round(fff8000000000000) = fff8000000000000
+#13: xsrdpiz round(8008340000078000) = 8000000000000000
+#14: xsrdpiz round(c0d0650f5a07b353) = c0d0650000000000
+#15: xsrdpiz round(41232585a9900000) = 4123258400000000
+#16: xsrdpiz round(41382511a2000000) = 4138251100000000
+#17: xsrdpiz round(40312ef5a9300000) = 4031000000000000
+#18: xsrdpiz round(40514bf5d2300000) = 4051400000000000
+#19: xsrdpiz round(40976bf982440000) = 4097680000000000
+
+#0: xsrdpi round(3fd8000000000000) = 0000000000000000
+#1: xsrdpi round(404f000000000000) = 404f000000000000
+#2: xsrdpi round(0018000000b77501) = 0000000000000000
+#3: xsrdpi round(7fe800000000051b) = 7fe800000000051b
+#4: xsrdpi round(0123214569900000) = 0000000000000000
+#5: xsrdpi round(0000000000000000) = 0000000000000000
+#6: xsrdpi round(8000000000000000) = 8000000000000000
+#7: xsrdpi round(7ff0000000000000) = 7ff0000000000000
+#8: xsrdpi round(fff0000000000000) = fff0000000000000
+#9: xsrdpi round(7ff7ffffffffffff) = 7fffffffffffffff
+#10: xsrdpi round(fff7ffffffffffff) = ffffffffffffffff
+#11: xsrdpi round(7ff8000000000000) = 7ff8000000000000
+#12: xsrdpi round(fff8000000000000) = fff8000000000000
+#13: xsrdpi round(8008340000078000) = 8000000000000000
+#14: xsrdpi round(c0d0650f5a07b353) = c0d0650000000000
+#15: xsrdpi round(41232585a9900000) = 4123258600000000
+#16: xsrdpi round(41382511a2000000) = 4138251200000000
+#17: xsrdpi round(40312ef5a9300000) = 4031000000000000
+#18: xsrdpi round(40514bf5d2300000) = 4051400000000000
+#19: xsrdpi round(40976bf982440000) = 40976c0000000000
+
+#0: xvabsdp abs(3fd8000000000000) = 3fd8000000000000; abs(404f000000000000) = 404f000000000000
+#1: xvabsdp abs(0018000000b77501) = 0018000000b77501; abs(7fe800000000051b) = 7fe800000000051b
+#2: xvabsdp abs(0123214569900000) = 0123214569900000; abs(0000000000000000) = 0000000000000000
+#3: xvabsdp abs(8000000000000000) = 0000000000000000; abs(7ff0000000000000) = 7ff0000000000000
+#4: xvabsdp abs(fff0000000000000) = 7ff0000000000000; abs(7ff7ffffffffffff) = 7ff7ffffffffffff
+#5: xvabsdp abs(fff7ffffffffffff) = 7ff7ffffffffffff; abs(7ff8000000000000) = 7ff8000000000000
+#6: xvabsdp abs(fff8000000000000) = 7ff8000000000000; abs(8008340000078000) = 0008340000078000
+#7: xvabsdp abs(c0d0650f5a07b353) = 40d0650f5a07b353; abs(41232585a9900000) = 41232585a9900000
+#8: xvabsdp abs(41382511a2000000) = 41382511a2000000; abs(40312ef5a9300000) = 40312ef5a9300000
+#9: xvabsdp abs(40514bf5d2300000) = 40514bf5d2300000; abs(40976bf982440000) = 40976bf982440000
+
+#0: xvnabsdp nabs(3fd8000000000000) = bfd8000000000000; nabs(404f000000000000) = c04f000000000000
+#1: xvnabsdp nabs(0018000000b77501) = 8018000000b77501; nabs(7fe800000000051b) = ffe800000000051b
+#2: xvnabsdp nabs(0123214569900000) = 8123214569900000; nabs(0000000000000000) = 8000000000000000
+#3: xvnabsdp nabs(8000000000000000) = 8000000000000000; nabs(7ff0000000000000) = fff0000000000000
+#4: xvnabsdp nabs(fff0000000000000) = fff0000000000000; nabs(7ff7ffffffffffff) = fff7ffffffffffff
+#5: xvnabsdp nabs(fff7ffffffffffff) = fff7ffffffffffff; nabs(7ff8000000000000) = fff8000000000000
+#6: xvnabsdp nabs(fff8000000000000) = fff8000000000000; nabs(8008340000078000) = 8008340000078000
+#7: xvnabsdp nabs(c0d0650f5a07b353) = c0d0650f5a07b353; nabs(41232585a9900000) = c1232585a9900000
+#8: xvnabsdp nabs(41382511a2000000) = c1382511a2000000; nabs(40312ef5a9300000) = c0312ef5a9300000
+#9: xvnabsdp nabs(40514bf5d2300000) = c0514bf5d2300000; nabs(40976bf982440000) = c0976bf982440000
+
+#0: xvnegdp neg(3fd8000000000000) = bfd8000000000000; neg(404f000000000000) = c04f000000000000
+#1: xvnegdp neg(0018000000b77501) = 8018000000b77501; neg(7fe800000000051b) = ffe800000000051b
+#2: xvnegdp neg(0123214569900000) = 8123214569900000; neg(0000000000000000) = 8000000000000000
+#3: xvnegdp neg(8000000000000000) = 0000000000000000; neg(7ff0000000000000) = fff0000000000000
+#4: xvnegdp neg(fff0000000000000) = 7ff0000000000000; neg(7ff7ffffffffffff) = fff7ffffffffffff
+#5: xvnegdp neg(fff7ffffffffffff) = 7ff7ffffffffffff; neg(7ff8000000000000) = fff8000000000000
+#6: xvnegdp neg(fff8000000000000) = 7ff8000000000000; neg(8008340000078000) = 0008340000078000
+#7: xvnegdp neg(c0d0650f5a07b353) = 40d0650f5a07b353; neg(41232585a9900000) = c1232585a9900000
+#8: xvnegdp neg(41382511a2000000) = c1382511a2000000; neg(40312ef5a9300000) = c0312ef5a9300000
+#9: xvnegdp neg(40514bf5d2300000) = c0514bf5d2300000; neg(40976bf982440000) = c0976bf982440000
+
+#0: xvabssp abs(3ec00000) = 3ec00000; abs(42780000) = 42780000; abs(00000000) = 00000000; abs(7f800000) = 7f800000
+#1: xvabssp abs(00000000) = 00000000; abs(00000000) = 00000000; abs(80000000) = 00000000; abs(7f800000) = 7f800000
+#2: xvabssp abs(ff800000) = 7f800000; abs(7fffffff) = 7fffffff; abs(ffffffff) = 7fffffff; abs(7fc00000) = 7fc00000
+#3: xvabssp abs(ffc00000) = 7fc00000; abs(80000000) = 00000000; abs(c683287b) = 4683287b; abs(49192c2d) = 49192c2d
+#4: xvabssp abs(49c1288d) = 49c1288d; abs(418977ad) = 418977ad; abs(428a5faf) = 428a5faf; abs(44bb5fcc) = 44bb5fcc
+
+#0: xvnabssp nabs(3ec00000) = bec00000; nabs(42780000) = c2780000; nabs(00000000) = 80000000; nabs(7f800000) = ff800000
+#1: xvnabssp nabs(00000000) = 80000000; nabs(00000000) = 80000000; nabs(80000000) = 80000000; nabs(7f800000) = ff800000
+#2: xvnabssp nabs(ff800000) = ff800000; nabs(7fffffff) = ffffffff; nabs(ffffffff) = ffffffff; nabs(7fc00000) = ffc00000
+#3: xvnabssp nabs(ffc00000) = ffc00000; nabs(80000000) = 80000000; nabs(c683287b) = c683287b; nabs(49192c2d) = c9192c2d
+#4: xvnabssp nabs(49c1288d) = c9c1288d; nabs(418977ad) = c18977ad; nabs(428a5faf) = c28a5faf; nabs(44bb5fcc) = c4bb5fcc
+
+#0: xvrdpi round(3fd8000000000000) = 0000000000000000; round(404f000000000000) = 404f000000000000
+#1: xvrdpi round(0018000000b77501) = 0000000000000000; round(7fe800000000051b) = 7fe800000000051b
+#2: xvrdpi round(0123214569900000) = 0000000000000000; round(0000000000000000) = 0000000000000000
+#3: xvrdpi round(8000000000000000) = 8000000000000000; round(7ff0000000000000) = 7ff0000000000000
+#4: xvrdpi round(fff0000000000000) = fff0000000000000; round(7ff7ffffffffffff) = 7fffffffffffffff
+#5: xvrdpi round(fff7ffffffffffff) = ffffffffffffffff; round(7ff8000000000000) = 7ff8000000000000
+#6: xvrdpi round(fff8000000000000) = fff8000000000000; round(8008340000078000) = 8000000000000000
+#7: xvrdpi round(c0d0650f5a07b353) = c0d0650000000000; round(41232585a9900000) = 4123258600000000
+#8: xvrdpi round(41382511a2000000) = 4138251200000000; round(40312ef5a9300000) = 4031000000000000
+#9: xvrdpi round(40514bf5d2300000) = 4051400000000000; round(40976bf982440000) = 40976c0000000000
+
+#0: xvrdpic round(3fd8000000000000) = 0000000000000000; round(404f000000000000) = 404f000000000000
+#1: xvrdpic round(0018000000b77501) = 0000000000000000; round(7fe800000000051b) = 7fe800000000051b
+#2: xvrdpic round(0123214569900000) = 0000000000000000; round(0000000000000000) = 0000000000000000
+#3: xvrdpic round(8000000000000000) = 8000000000000000; round(7ff0000000000000) = 7ff0000000000000
+#4: xvrdpic round(fff0000000000000) = fff0000000000000; round(7ff7ffffffffffff) = 7fffffffffffffff
+#5: xvrdpic round(fff7ffffffffffff) = ffffffffffffffff; round(7ff8000000000000) = 7ff8000000000000
+#6: xvrdpic round(fff8000000000000) = fff8000000000000; round(8008340000078000) = 8000000000000000
+#7: xvrdpic round(c0d0650f5a07b353) = c0d0650000000000; round(41232585a9900000) = 4123258600000000
+#8: xvrdpic round(41382511a2000000) = 4138251200000000; round(40312ef5a9300000) = 4031000000000000
+#9: xvrdpic round(40514bf5d2300000) = 4051400000000000; round(40976bf982440000) = 40976c0000000000
+
+#0: xvrdpim round(3fd8000000000000) = 0000000000000000; round(404f000000000000) = 404f000000000000
+#1: xvrdpim round(0018000000b77501) = 0000000000000000; round(7fe800000000051b) = 7fe800000000051b
+#2: xvrdpim round(0123214569900000) = 0000000000000000; round(0000000000000000) = 0000000000000000
+#3: xvrdpim round(8000000000000000) = 8000000000000000; round(7ff0000000000000) = 7ff0000000000000
+#4: xvrdpim round(fff0000000000000) = fff0000000000000; round(7ff7ffffffffffff) = 7fffffffffffffff
+#5: xvrdpim round(fff7ffffffffffff) = ffffffffffffffff; round(7ff8000000000000) = 7ff8000000000000
+#6: xvrdpim round(fff8000000000000) = fff8000000000000; round(8008340000078000) = bff0000000000000
+#7: xvrdpim round(c0d0650f5a07b353) = c0d0654000000000; round(41232585a9900000) = 4123258400000000
+#8: xvrdpim round(41382511a2000000) = 4138251100000000; round(40312ef5a9300000) = 4031000000000000
+#9: xvrdpim round(40514bf5d2300000) = 4051400000000000; round(40976bf982440000) = 4097680000000000
+
+#0: xvrdpip round(3fd8000000000000) = 3ff0000000000000; round(404f000000000000) = 404f000000000000
+#1: xvrdpip round(0018000000b77501) = 3ff0000000000000; round(7fe800000000051b) = 7fe800000000051b
+#2: xvrdpip round(0123214569900000) = 3ff0000000000000; round(0000000000000000) = 0000000000000000
+#3: xvrdpip round(8000000000000000) = 8000000000000000; round(7ff0000000000000) = 7ff0000000000000
+#4: xvrdpip round(fff0000000000000) = fff0000000000000; round(7ff7ffffffffffff) = 7fffffffffffffff
+#5: xvrdpip round(fff7ffffffffffff) = ffffffffffffffff; round(7ff8000000000000) = 7ff8000000000000
+#6: xvrdpip round(fff8000000000000) = fff8000000000000; round(8008340000078000) = 8000000000000000
+#7: xvrdpip round(c0d0650f5a07b353) = c0d0650000000000; round(41232585a9900000) = 4123258600000000
+#8: xvrdpip round(41382511a2000000) = 4138251200000000; round(40312ef5a9300000) = 4032000000000000
+#9: xvrdpip round(40514bf5d2300000) = 4051800000000000; round(40976bf982440000) = 40976c0000000000
+
+#0: xvrdpiz round(3fd8000000000000) = 0000000000000000; round(404f000000000000) = 404f000000000000
+#1: xvrdpiz round(0018000000b77501) = 0000000000000000; round(7fe800000000051b) = 7fe800000000051b
+#2: xvrdpiz round(0123214569900000) = 0000000000000000; round(0000000000000000) = 0000000000000000
+#3: xvrdpiz round(8000000000000000) = 8000000000000000; round(7ff0000000000000) = 7ff0000000000000
+#4: xvrdpiz round(fff0000000000000) = fff0000000000000; round(7ff7ffffffffffff) = 7fffffffffffffff
+#5: xvrdpiz round(fff7ffffffffffff) = ffffffffffffffff; round(7ff8000000000000) = 7ff8000000000000
+#6: xvrdpiz round(fff8000000000000) = fff8000000000000; round(8008340000078000) = 8000000000000000
+#7: xvrdpiz round(c0d0650f5a07b353) = c0d0650000000000; round(41232585a9900000) = 4123258400000000
+#8: xvrdpiz round(41382511a2000000) = 4138251100000000; round(40312ef5a9300000) = 4031000000000000
+#9: xvrdpiz round(40514bf5d2300000) = 4051400000000000; round(40976bf982440000) = 4097680000000000
+
+#0: xvrspi round(3ec00000) = 00000000; round(42780000) = 42780000; round(00000000) = 00000000; round(7f800000) = 7f800000
+#1: xvrspi round(00000000) = 00000000; round(00000000) = 00000000; round(80000000) = 80000000; round(7f800000) = 7f800000
+#2: xvrspi round(ff800000) = ff800000; round(7fffffff) = 7fffffff; round(ffffffff) = ffffffff; round(7fc00000) = 7fc00000
+#3: xvrspi round(ffc00000) = ffc00000; round(80000000) = 80000000; round(c683287b) = c6832800; round(49192c2d) = 49192c30
+#4: xvrspi round(49c1288d) = 49c12890; round(418977ad) = 41880000; round(428a5faf) = 428a0000; round(44bb5fcc) = 44bb6000
+
+#0: xvrspic round(3ec00000) = 00000000; round(42780000) = 42780000; round(00000000) = 00000000; round(7f800000) = 7f800000
+#1: xvrspic round(00000000) = 00000000; round(00000000) = 00000000; round(80000000) = 80000000; round(7f800000) = 7f800000
+#2: xvrspic round(ff800000) = ff800000; round(7fffffff) = 7fffffff; round(ffffffff) = ffffffff; round(7fc00000) = 7fc00000
+#3: xvrspic round(ffc00000) = ffc00000; round(80000000) = 80000000; round(c683287b) = c6832800; round(49192c2d) = 49192c30
+#4: xvrspic round(49c1288d) = 49c12890; round(418977ad) = 41880000; round(428a5faf) = 428a0000; round(44bb5fcc) = 44bb6000
+
+#0: xvrspim round(3ec00000) = 00000000; round(42780000) = 42780000; round(00000000) = 00000000; round(7f800000) = 7f800000
+#1: xvrspim round(00000000) = 00000000; round(00000000) = 00000000; round(80000000) = 80000000; round(7f800000) = 7f800000
+#2: xvrspim round(ff800000) = ff800000; round(7fffffff) = 7fffffff; round(ffffffff) = ffffffff; round(7fc00000) = 7fc00000
+#3: xvrspim round(ffc00000) = ffc00000; round(80000000) = 80000000; round(c683287b) = c6832a00; round(49192c2d) = 49192c20
+#4: xvrspim round(49c1288d) = 49c12888; round(418977ad) = 41880000; round(428a5faf) = 428a0000; round(44bb5fcc) = 44bb4000
+
+#0: xvrspip round(3ec00000) = 3f800000; round(42780000) = 42780000; round(00000000) = 00000000; round(7f800000) = 7f800000
+#1: xvrspip round(00000000) = 00000000; round(00000000) = 00000000; round(80000000) = 80000000; round(7f800000) = 7f800000
+#2: xvrspip round(ff800000) = ff800000; round(7fffffff) = 7fffffff; round(ffffffff) = ffffffff; round(7fc00000) = 7fc00000
+#3: xvrspip round(ffc00000) = ffc00000; round(80000000) = 80000000; round(c683287b) = c6832800; round(49192c2d) = 49192c30
+#4: xvrspip round(49c1288d) = 49c12890; round(418977ad) = 41900000; round(428a5faf) = 428c0000; round(44bb5fcc) = 44bb6000
+
+#0: xvrspiz round(3ec00000) = 00000000; round(42780000) = 42780000; round(00000000) = 00000000; round(7f800000) = 7f800000
+#1: xvrspiz round(00000000) = 00000000; round(00000000) = 00000000; round(80000000) = 80000000; round(7f800000) = 7f800000
+#2: xvrspiz round(ff800000) = ff800000; round(7fffffff) = 7fffffff; round(ffffffff) = ffffffff; round(7fc00000) = 7fc00000
+#3: xvrspiz round(ffc00000) = ffc00000; round(80000000) = 80000000; round(c683287b) = c6832800; round(49192c2d) = 49192c20
+#4: xvrspiz round(49c1288d) = 49c12888; round(418977ad) = 41880000; round(428a5faf) = 428a0000; round(44bb5fcc) = 44bb4000
+
+Test VSX vector integer to float conversion instructions
+#0: xvcvsxddp conv(0000000000000000) = 0000000000000000; conv(ffffffff00000000) = c1f0000000000000
+#1: xvcvsxddp conv(00000000ffffffff) = 41efffffffe00000; conv(ffffffffffffffff) = bff0000000000000
+#2: xvcvsxddp conv(89abcde123456789) = c3dd950c87b72ea6; conv(0102030405060708) = 4370203040506070
+#3: xvcvsxddp conv(00000000a0b1c2d3) = 41e416385a600000; conv(1111222233334444) = 43b1112222333344
+
+#0: xvcvuxddp conv(0000000000000000) = 0000000000000000; conv(ffffffff00000000) = 43efffffffe00000
+#1: xvcvuxddp conv(00000000ffffffff) = 41efffffffe00000; conv(ffffffffffffffff) = 43f0000000000000
+#2: xvcvuxddp conv(89abcde123456789) = 43e13579bc2468ad; conv(0102030405060708) = 4370203040506070
+#3: xvcvuxddp conv(00000000a0b1c2d3) = 41e416385a600000; conv(1111222233334444) = 43b1112222333344
+
+#0: xvcvsxdsp conv(0000000000000000) = 0000000000000000; conv(ffffffff00000000) = cf80000000000000
+#1: xvcvsxdsp conv(00000000ffffffff) = 4f80000000000000; conv(ffffffffffffffff) = bf80000000000000
+#2: xvcvsxdsp conv(89abcde123456789) = deeca86400000000; conv(0102030405060708) = 5b81018200000000
+#3: xvcvsxdsp conv(00000000a0b1c2d3) = 4f20b1c300000000; conv(1111222233334444) = 5d88891100000000
+
+#0: xvcvuxdsp conv(0000000000000000) = 0000000000000000; conv(ffffffff00000000) = 5f80000000000000
+#1: xvcvuxdsp conv(00000000ffffffff) = 4f80000000000000; conv(ffffffffffffffff) = 5f80000000000000
+#2: xvcvuxdsp conv(89abcde123456789) = 5f09abce00000000; conv(0102030405060708) = 5b81018200000000
+#3: xvcvuxdsp conv(00000000a0b1c2d3) = 4f20b1c300000000; conv(1111222233334444) = 5d88891100000000
+
+#0: xvcvsxwdp conv(00000000) = 0000000000000000; conv(ffff0000) = c0f0000000000000
+#1: xvcvsxwdp conv(0000ffff) = 40efffe000000000; conv(ffffffff) = bff0000000000000
+#2: xvcvsxwdp conv(89a73522) = c1dd9632b7800000; conv(01020304) = 4170203040000000
+#3: xvcvsxwdp conv(0000abcd) = 40e579a000000000; conv(11223344) = 41b1223344000000
+
+#0: xvcvuxwdp conv(00000000) = 0000000000000000; conv(ffff0000) = 41efffe000000000
+#1: xvcvuxwdp conv(0000ffff) = 40efffe000000000; conv(ffffffff) = 41efffffffe00000
+#2: xvcvuxwdp conv(89a73522) = 41e134e6a4400000; conv(01020304) = 4170203040000000
+#3: xvcvuxwdp conv(0000abcd) = 40e579a000000000; conv(11223344) = 41b1223344000000
+
+#0: xvcvsxwsp conv(00000000) = 00000000; conv(ffff0000) = c7800000; conv(0000ffff) = 477fff00; conv(ffffffff) = bf800000
+#1: xvcvsxwsp conv(89a73522) = ceecb196; conv(01020304) = 4b810182; conv(0000abcd) = 472bcd00; conv(11223344) = 4d89119a
+
+#0: xvcvuxwsp conv(00000000) = 00000000; conv(ffff0000) = 4f7fff00; conv(0000ffff) = 477fff00; conv(ffffffff) = 4f800000
+#1: xvcvuxwsp conv(89a73522) = 4f09a735; conv(01020304) = 4b810182; conv(0000abcd) = 472bcd00; conv(11223344) = 4d89119a
+
+Test div extensions
+#0: divdeu: 0x00000000000000040000000000000000 / 0xfffffffffffffffc = 0x0000000000000004; CR=0; XER=0
+#1: divdeu: 0x00000000000000040000000000000000 / 0xfffffffffffffffd = 0x0000000000000004; CR=0; XER=0
+#2: divdeu: 0x00000000000000040000000000000000 / 0x0000000000000004 = 0x0000000000000000; CR=0; XER=0
+#3: divdeu: 0x00000000000000040000000000000000 / 0xfffffffffffffffb = 0x0000000000000004; CR=0; XER=0
+#4: divdeu: 0x00000000000000030000000000000000 / 0x0000000000000008 = 0x6000000000000000; CR=0; XER=0
+#5: divdeu: 0x80000000000000000000000000000000 / 0x000000000000000a = 0x0000000000000000; CR=0; XER=0
+#6: divdeu: 0x000000000000050c0000000000000000 / 0xffffffffffffffff = 0x000000000000050c; CR=0; XER=0
+#7: divdeu: 0x000000000000050c0000000000000000 / 0xfffffffffffff000 = 0x000000000000050c; CR=0; XER=0
+#8: divdeu: 0x000000001234fedc0000000000000000 / 0x000000008000a873 = 0x2469cdcc6ad4ce20; CR=0; XER=0
+#9: divdeu: 0xabcd87651234fedc0000000000000000 / 0x00000000a123b893 = 0x0000000000000000; CR=0; XER=0
+#10: divdeu: 0x000123456789abdc0000000000000000 / 0x0000000000000000 = 0x0000000000000000; CR=0; XER=0
+#11: divdeu: 0x00000000000000000000000000000000 / 0x0000000000000002 = 0x0000000000000000; CR=0; XER=0
+#12: divdeu: 0x00000000000000770000000000000000 / 0x00000000000a3499 = 0x000ba911a321dcca; CR=0; XER=0
+
+#0: divdeu.: 0x00000000000000040000000000000000 / 0xfffffffffffffffc = 0x0000000000000004; CR=4; XER=0
+#1: divdeu.: 0x00000000000000040000000000000000 / 0xfffffffffffffffd = 0x0000000000000004; CR=4; XER=0
+#2: divdeu.: 0x00000000000000040000000000000000 / 0x0000000000000004 = 0x0000000000000000; CR=2; XER=0
+#3: divdeu.: 0x00000000000000040000000000000000 / 0xfffffffffffffffb = 0x0000000000000004; CR=4; XER=0
+#4: divdeu.: 0x00000000000000030000000000000000 / 0x0000000000000008 = 0x6000000000000000; CR=4; XER=0
+#5: divdeu.: 0x80000000000000000000000000000000 / 0x000000000000000a = 0x0000000000000000; CR=2; XER=0
+#6: divdeu.: 0x000000000000050c0000000000000000 / 0xffffffffffffffff = 0x000000000000050c; CR=4; XER=0
+#7: divdeu.: 0x000000000000050c0000000000000000 / 0xfffffffffffff000 = 0x000000000000050c; CR=4; XER=0
+#8: divdeu.: 0x000000001234fedc0000000000000000 / 0x000000008000a873 = 0x2469cdcc6ad4ce20; CR=4; XER=0
+#9: divdeu.: 0xabcd87651234fedc0000000000000000 / 0x00000000a123b893 = 0x0000000000000000; CR=2; XER=0
+#10: divdeu.: 0x000123456789abdc0000000000000000 / 0x0000000000000000 = 0x0000000000000000; CR=2; XER=0
+#11: divdeu.: 0x00000000000000000000000000000000 / 0x0000000000000002 = 0x0000000000000000; CR=2; XER=0
+#12: divdeu.: 0x00000000000000770000000000000000 / 0x00000000000a3499 = 0x000ba911a321dcca; CR=4; XER=0
+
+
+#0: divdeuo: 0x00000000000000040000000000000000 / 0xfffffffffffffffc = 0x0000000000000004; CR=0; XER=0
+#1: divdeuo: 0x00000000000000040000000000000000 / 0xfffffffffffffffd = 0x0000000000000004; CR=0; XER=0
+#2: divdeuo: 0x00000000000000040000000000000000 / 0x0000000000000004 = 0x0000000000000000; CR=0; XER=c0000000
+#3: divdeuo: 0x00000000000000040000000000000000 / 0xfffffffffffffffb = 0x0000000000000004; CR=0; XER=0
+#4: divdeuo: 0x00000000000000030000000000000000 / 0x0000000000000008 = 0x6000000000000000; CR=0; XER=0
+#5: divdeuo: 0x80000000000000000000000000000000 / 0x000000000000000a = 0x0000000000000000; CR=0; XER=c0000000
+#6: divdeuo: 0x000000000000050c0000000000000000 / 0xffffffffffffffff = 0x000000000000050c; CR=0; XER=0
+#7: divdeuo: 0x000000000000050c0000000000000000 / 0xfffffffffffff000 = 0x000000000000050c; CR=0; XER=0
+#8: divdeuo: 0x000000001234fedc0000000000000000 / 0x000000008000a873 = 0x2469cdcc6ad4ce20; CR=0; XER=0
+#9: divdeuo: 0xabcd87651234fedc0000000000000000 / 0x00000000a123b893 = 0x0000000000000000; CR=0; XER=c0000000
+#10: divdeuo: 0x000123456789abdc0000000000000000 / 0x0000000000000000 = 0x0000000000000000; CR=0; XER=c0000000
+#11: divdeuo: 0x00000000000000000000000000000000 / 0x0000000000000002 = 0x0000000000000000; CR=0; XER=0
+#12: divdeuo: 0x00000000000000770000000000000000 / 0x00000000000a3499 = 0x000ba911a321dcca; CR=0; XER=0
+
+#0: divdeuo.: 0x00000000000000040000000000000000 / 0xfffffffffffffffc = 0x0000000000000004; CR=4; XER=0
+#1: divdeuo.: 0x00000000000000040000000000000000 / 0xfffffffffffffffd = 0x0000000000000004; CR=4; XER=0
+#2: divdeuo.: 0x00000000000000040000000000000000 / 0x0000000000000004 = 0x0000000000000000; CR=3; XER=c0000000
+#3: divdeuo.: 0x00000000000000040000000000000000 / 0xfffffffffffffffb = 0x0000000000000004; CR=4; XER=0
+#4: divdeuo.: 0x00000000000000030000000000000000 / 0x0000000000000008 = 0x6000000000000000; CR=4; XER=0
+#5: divdeuo.: 0x80000000000000000000000000000000 / 0x000000000000000a = 0x0000000000000000; CR=3; XER=c0000000
+#6: divdeuo.: 0x000000000000050c0000000000000000 / 0xffffffffffffffff = 0x000000000000050c; CR=4; XER=0
+#7: divdeuo.: 0x000000000000050c0000000000000000 / 0xfffffffffffff000 = 0x000000000000050c; CR=4; XER=0
+#8: divdeuo.: 0x000000001234fedc0000000000000000 / 0x000000008000a873 = 0x2469cdcc6ad4ce20; CR=4; XER=0
+#9: divdeuo.: 0xabcd87651234fedc0000000000000000 / 0x00000000a123b893 = 0x0000000000000000; CR=3; XER=c0000000
+#10: divdeuo.: 0x000123456789abdc0000000000000000 / 0x0000000000000000 = 0x0000000000000000; CR=3; XER=c0000000
+#11: divdeuo.: 0x00000000000000000000000000000000 / 0x0000000000000002 = 0x0000000000000000; CR=2; XER=0
+#12: divdeuo.: 0x00000000000000770000000000000000 / 0x00000000000a3499 = 0x000ba911a321dcca; CR=4; XER=0
+
+
+#0: divwe: 0x0000000000000000 / 0x00000002 = 0x00000000; CR=0; XER=0
+#1: divwe: 0x0000000200000000 / 0x00000000 = 0x00000000; CR=0; XER=0
+#2: divwe: 0x7abc123400000000 / 0xf0000000 = 0x00000000; CR=0; XER=0
+#3: divwe: 0xfabc123400000000 / 0x00000005 = 0x00000000; CR=0; XER=0
+#4: divwe: 0x0000004d00000000 / 0x00000042 = 0x00000000; CR=0; XER=0
+#5: divwe: 0x0000000500000000 / 0xfabc1234 = 0xffffff0d; CR=0; XER=0
+
+#0: divwe.: 0x0000000000000000 / 0x00000002 = 0x00000000; CR=2; XER=0
+#1: divwe.: 0x0000000200000000 / 0x00000000 = 0x00000000; CR=2; XER=0
+#2: divwe.: 0x7abc123400000000 / 0xf0000000 = 0x00000000; CR=2; XER=0
+#3: divwe.: 0xfabc123400000000 / 0x00000005 = 0x00000000; CR=2; XER=0
+#4: divwe.: 0x0000004d00000000 / 0x00000042 = 0x00000000; CR=2; XER=0
+#5: divwe.: 0x0000000500000000 / 0xfabc1234 = 0xffffff0d; CR=4; XER=0
+
+
+#0: divweo: 0x0000000000000000 / 0x00000002 = 0x00000000; CR=0; XER=0
+#1: divweo: 0x0000000200000000 / 0x00000000 = 0x00000000; CR=0; XER=c0000000
+#2: divweo: 0x7abc123400000000 / 0xf0000000 = 0x00000000; CR=0; XER=c0000000
+#3: divweo: 0xfabc123400000000 / 0x00000005 = 0x00000000; CR=0; XER=c0000000
+#4: divweo: 0x0000004d00000000 / 0x00000042 = 0x00000000; CR=0; XER=c0000000
+#5: divweo: 0x0000000500000000 / 0xfabc1234 = 0xffffff0d; CR=0; XER=0
+
+#0: divweo.: 0x0000000000000000 / 0x00000002 = 0x00000000; CR=2; XER=0
+#1: divweo.: 0x0000000200000000 / 0x00000000 = 0x00000000; CR=3; XER=c0000000
+#2: divweo.: 0x7abc123400000000 / 0xf0000000 = 0x00000000; CR=3; XER=c0000000
+#3: divweo.: 0xfabc123400000000 / 0x00000005 = 0x00000000; CR=3; XER=c0000000
+#4: divweo.: 0x0000004d00000000 / 0x00000042 = 0x00000000; CR=3; XER=c0000000
+#5: divweo.: 0x0000000500000000 / 0xfabc1234 = 0xffffff0d; CR=4; XER=0
+
+
+Test ftsqrt instruction
+ftsqrt: 3fd8000000000000 ? 8 (CRx)
+ftsqrt: 404f000000000000 ? 8 (CRx)
+ftsqrt: 0018000000b77501 ? a (CRx)
+ftsqrt: 7fe800000000051b ? 8 (CRx)
+ftsqrt: 0123214569900000 ? a (CRx)
+ftsqrt: 0000000000000000 ? e (CRx)
+ftsqrt: 8000000000000000 ? e (CRx)
+ftsqrt: 7ff0000000000000 ? e (CRx)
+ftsqrt: fff0000000000000 ? e (CRx)
+ftsqrt: 7ff7ffffffffffff ? a (CRx)
+ftsqrt: fff7ffffffffffff ? a (CRx)
+ftsqrt: 7ff8000000000000 ? a (CRx)
+ftsqrt: fff8000000000000 ? a (CRx)
+ftsqrt: 8008340000078000 ? e (CRx)
+ftsqrt: c0d0650f5a07b353 ? a (CRx)
+ftsqrt: 41232585a9900000 ? 8 (CRx)
+ftsqrt: 41382511a2000000 ? 8 (CRx)
+ftsqrt: 40312ef5a9300000 ? 8 (CRx)
+ftsqrt: 40514bf5d2300000 ? 8 (CRx)
+ftsqrt: 40976bf982440000 ? 8 (CRx)
+
+Test vector and scalar tdiv and tsqrt instructions
+#0: xstsqrtdp test-sqrt(3fd8000000000000) ? 8 (CRx)
+#1: xstsqrtdp test-sqrt(404f000000000000) ? 8 (CRx)
+#2: xstsqrtdp test-sqrt(0018000000b77501) ? a (CRx)
+#3: xstsqrtdp test-sqrt(7fe800000000051b) ? 8 (CRx)
+#4: xstsqrtdp test-sqrt(0123214569900000) ? a (CRx)
+#5: xstsqrtdp test-sqrt(0000000000000000) ? e (CRx)
+#6: xstsqrtdp test-sqrt(8000000000000000) ? e (CRx)
+#7: xstsqrtdp test-sqrt(7ff0000000000000) ? e (CRx)
+#8: xstsqrtdp test-sqrt(fff0000000000000) ? e (CRx)
+#9: xstsqrtdp test-sqrt(7ff7ffffffffffff) ? a (CRx)
+#10: xstsqrtdp test-sqrt(fff7ffffffffffff) ? a (CRx)
+#11: xstsqrtdp test-sqrt(7ff8000000000000) ? a (CRx)
+#12: xstsqrtdp test-sqrt(fff8000000000000) ? a (CRx)
+#13: xstsqrtdp test-sqrt(8008340000078000) ? e (CRx)
+#14: xstsqrtdp test-sqrt(c0d0650f5a07b353) ? a (CRx)
+#15: xstsqrtdp test-sqrt(41232585a9900000) ? 8 (CRx)
+#16: xstsqrtdp test-sqrt(41382511a2000000) ? 8 (CRx)
+#17: xstsqrtdp test-sqrt(40312ef5a9300000) ? 8 (CRx)
+#18: xstsqrtdp test-sqrt(40514bf5d2300000) ? 8 (CRx)
+#19: xstsqrtdp test-sqrt(40976bf982440000) ? 8 (CRx)
+
+#0: xvtsqrtdp test-sqrt(3fd8000000000000); test-sqrt(404f000000000000) ? 8 (CRx)
+#1: xvtsqrtdp test-sqrt(0018000000b77501); test-sqrt(7fe800000000051b) ? a (CRx)
+#2: xvtsqrtdp test-sqrt(0123214569900000); test-sqrt(0000000000000000) ? e (CRx)
+#3: xvtsqrtdp test-sqrt(8000000000000000); test-sqrt(7ff0000000000000) ? e (CRx)
+#4: xvtsqrtdp test-sqrt(fff0000000000000); test-sqrt(7ff7ffffffffffff) ? e (CRx)
+#5: xvtsqrtdp test-sqrt(fff7ffffffffffff); test-sqrt(7ff8000000000000) ? a (CRx)
+#6: xvtsqrtdp test-sqrt(fff8000000000000); test-sqrt(8008340000078000) ? e (CRx)
+#7: xvtsqrtdp test-sqrt(c0d0650f5a07b353); test-sqrt(41232585a9900000) ? a (CRx)
+#8: xvtsqrtdp test-sqrt(41382511a2000000); test-sqrt(40312ef5a9300000) ? 8 (CRx)
+#9: xvtsqrtdp test-sqrt(40514bf5d2300000); test-sqrt(40976bf982440000) ? 8 (CRx)
+
+#0: xvtsqrtsp test-sqrt(3ec00000); test-sqrt(42780000); test-sqrt(00000000); test-sqrt(7f800000) ? e (CRx)
+#1: xvtsqrtsp test-sqrt(00000000); test-sqrt(00000000); test-sqrt(80000000); test-sqrt(7f800000) ? e (CRx)
+#2: xvtsqrtsp test-sqrt(ff800000); test-sqrt(7fffffff); test-sqrt(ffffffff); test-sqrt(7fc00000) ? e (CRx)
+#3: xvtsqrtsp test-sqrt(ffc00000); test-sqrt(80000000); test-sqrt(c683287b); test-sqrt(49192c2d) ? e (CRx)
+#4: xvtsqrtsp test-sqrt(49c1288d); test-sqrt(418977ad); test-sqrt(428a5faf); test-sqrt(44bb5fcc) ? 8 (CRx)
+
+#0: xvtdivdp fff0000000000000 test-div fff0000000000000 AND fff0000000000000 test-div c0d0650f5a07b353 ? cc=e
+#1: xvtdivdp 41232585a9900000 test-div 41382511a2000000 AND fff0000000000000 test-div 0000000000000000 ? cc=e
+#2: xvtdivdp fff0000000000000 test-div 0123214569900000 AND fff0000000000000 test-div 7ff0000000000000 ? cc=e
+#3: xvtdivdp fff0000000000000 test-div 7ff7ffffffffffff AND fff0000000000000 test-div 7ff8000000000000 ? cc=e
+#4: xvtdivdp c0d0650f5a07b353 test-div fff0000000000000 AND c0d0650f5a07b353 test-div c0d0650f5a07b353 ? cc=e
+#5: xvtdivdp c0d0650f5a07b353 test-div 8000000000000000 AND c0d0650f5a07b353 test-div 0000000000000000 ? cc=e
+#6: xvtdivdp c0d0650f5a07b353 test-div 0123214569900000 AND c0d0650f5a07b353 test-div 7ff0000000000000 ? cc=e
+#7: xvtdivdp c0d0650f5a07b353 test-div 7ff7ffffffffffff AND c0d0650f5a07b353 test-div 7ff8000000000000 ? cc=a
+#8: xvtdivdp 8000000000000000 test-div fff0000000000000 AND 8000000000000000 test-div c0d0650f5a07b353 ? cc=e
+#9: xvtdivdp 8000000000000000 test-div 8000000000000000 AND 8000000000000000 test-div 0000000000000000 ? cc=e
+#10: xvtdivdp 8000000000000000 test-div 0123214569900000 AND 8000000000000000 test-div 7ff0000000000000 ? cc=e
+#11: xvtdivdp 8000000000000000 test-div 7ff7ffffffffffff AND 8000000000000000 test-div 7ff8000000000000 ? cc=a
+#12: xvtdivdp 0000000000000000 test-div fff0000000000000 AND 0000000000000000 test-div c0d0650f5a07b353 ? cc=e
+#13: xvtdivdp 0000000000000000 test-div 8000000000000000 AND 0000000000000000 test-div 0000000000000000 ? cc=e
+#14: xvtdivdp 0000000000000000 test-div 0123214569900000 AND 0000000000000000 test-div 7ff0000000000000 ? cc=e
+#15: xvtdivdp 0000000000000000 test-div 7ff7ffffffffffff AND 0000000000000000 test-div 7ff8000000000000 ? cc=a
+#16: xvtdivdp 0123214569900000 test-div fff0000000000000 AND 0123214569900000 test-div c0d0650f5a07b353 ? cc=e
+#17: xvtdivdp 0123214569900000 test-div 8000000000000000 AND 0123214569900000 test-div 0000000000000000 ? cc=e
+#18: xvtdivdp 0123214569900000 test-div 404f000000000000 AND 0123214569900000 test-div 7ff0000000000000 ? cc=e
+#19: xvtdivdp 0123214569900000 test-div 7ff7ffffffffffff AND 0123214569900000 test-div 7ff8000000000000 ? cc=a
+#20: xvtdivdp 7ff0000000000000 test-div fff0000000000000 AND 7ff0000000000000 test-div c0d0650f5a07b353 ? cc=e
+#21: xvtdivdp 7ff0000000000000 test-div 8000000000000000 AND 7ff0000000000000 test-div 0000000000000000 ? cc=e
+#22: xvtdivdp 7ff0000000000000 test-div 0123214569900000 AND 7ff0000000000000 test-div 7ff0000000000000 ? cc=e
+#23: xvtdivdp 7ff0000000000000 test-div 7ff7ffffffffffff AND 7ff0000000000000 test-div 7ff8000000000000 ? cc=e
+#24: xvtdivdp fff7ffffffffffff test-div fff0000000000000 AND fff7ffffffffffff test-div c0d0650f5a07b353 ? cc=e
+#25: xvtdivdp fff8000000000000 test-div 8000000000000000 AND fff8000000000000 test-div 0000000000000000 ? cc=e
+#26: xvtdivdp fff7ffffffffffff test-div 0123214569900000 AND fff7ffffffffffff test-div 7ff0000000000000 ? cc=e
+#27: xvtdivdp fff7ffffffffffff test-div 7ff7ffffffffffff AND fff7ffffffffffff test-div 7ff8000000000000 ? cc=a
+#28: xvtdivdp fff8000000000000 test-div fff0000000000000 AND fff8000000000000 test-div c0d0650f5a07b353 ? cc=e
+#29: xvtdivdp fff8000000000000 test-div 8000000000000000 AND 41232585a9900000 test-div 41382511a2000000 ? cc=e
+#30: xvtdivdp 41232585a9900000 test-div 41382511a2000000 AND 7ff7ffffffffffff test-div 7ff8000000000000 ? cc=a
+#31: xvtdivdp 7ff8000000000000 test-div 7ff8000000000000 AND 7ff8000000000000 test-div fff8000000000000 ? cc=a
+#32: xvtdivdp 41382511a2000000 test-div 40514bf5d2300000 AND 40312ef5a9300000 test-div 41382511a2000000 ? cc=8
+#33: xvtdivdp 40976bf982440000 test-div 40976bf982440000 AND 40976bf982440000 test-div 40514bf5d2300000 ? cc=8
+
+#0: xvtdivsp ff800000 test-div ff800000 AND ff800000 test-div c683287b AND 49192c2d test-div 49c1288d AND ff800000 test-div 00000000 ? cc=e
+#1: xvtdivsp ff800000 test-div 00000000 AND ff800000 test-div 7f800000 AND ff800000 test-div 7fffffff AND ff800000 test-div 7fc00000 ? cc=e
+#2: xvtdivsp c683287b test-div ff800000 AND c683287b test-div c683287b AND c683287b test-div 80000000 AND c683287b test-div 00000000 ? cc=e
+#3: xvtdivsp c683287b test-div 00000000 AND c683287b test-div 7f800000 AND c683287b test-div 7fffffff AND c683287b test-div 7fc00000 ? cc=e
+#4: xvtdivsp 80000000 test-div ff800000 AND 80000000 test-div c683287b AND 80000000 test-div 80000000 AND 80000000 test-div 00000000 ? cc=e
+#5: xvtdivsp 80000000 test-div 00000000 AND 80000000 test-div 7f800000 AND 80000000 test-div 7fffffff AND 80000000 test-div 7fc00000 ? cc=e
+#6: xvtdivsp 00000000 test-div ff800000 AND 00000000 test-div c683287b AND 00000000 test-div 80000000 AND 00000000 test-div 00000000 ? cc=e
+#7: xvtdivsp 00000000 test-div 00000000 AND 00000000 test-div 7f800000 AND 00000000 test-div 7fffffff AND 00000000 test-div 7fc00000 ? cc=e
+#8: xvtdivsp 00000000 test-div ff800000 AND 00000000 test-div c683287b AND 00000000 test-div 80000000 AND 00000000 test-div 00000000 ? cc=e
+#9: xvtdivsp 00000000 test-div 42780000 AND 00000000 test-div 7f800000 AND 00000000 test-div 7fffffff AND 00000000 test-div 7fc00000 ? cc=e
+#10: xvtdivsp 7f800000 test-div ff800000 AND 7f800000 test-div c683287b AND 7f800000 test-div 80000000 AND 7f800000 test-div 00000000 ? cc=e
+#11: xvtdivsp 7f800000 test-div 00000000 AND 7f800000 test-div 7f800000 AND 7f800000 test-div 7fffffff AND 7f800000 test-div 7fc00000 ? cc=e
+#12: xvtdivsp ffffffff test-div ff800000 AND ffffffff test-div c683287b AND ffc00000 test-div 80000000 AND ffc00000 test-div 00000000 ? cc=e
+#13: xvtdivsp ffffffff test-div 00000000 AND ffffffff test-div 7f800000 AND ffffffff test-div 7fffffff AND ffffffff test-div 7fc00000 ? cc=e
+#14: xvtdivsp ffc00000 test-div ff800000 AND ffc00000 test-div c683287b AND ffc00000 test-div 80000000 AND 49192c2d test-div 49c1288d ? cc=e
+#15: xvtdivsp 49192c2d test-div 49c1288d AND 7fffffff test-div 7fc00000 AND 7fc00000 test-div 7fc00000 AND 7fc00000 test-div ffc00000 ? cc=a
+#16: xvtdivsp 49c1288d test-div 428a5faf AND 418977ad test-div 49c1288d AND 44bb5fcc test-div 44bb5fcc AND 44bb5fcc test-div 428a5faf ? cc=8
+
+Test popcntw instruction
+popcntw: 0x9182736405504536 => 0x0000000d0000000b
+
diff --git a/none/tests/ppc64/test_isa_2_06_part3.vgtest b/none/tests/ppc64/test_isa_2_06_part3.vgtest
new file mode 100644
index 00000000..3519c8a0
--- /dev/null
+++ b/none/tests/ppc64/test_isa_2_06_part3.vgtest
@@ -0,0 +1,2 @@
+prereq: ../../../tests/check_isa-2_06_cap
+prog: test_isa_2_06_part3