1663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng/*  Copyright (C) 2011 IBM
2663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
3663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng Author: Maynard Johnson <maynardj@us.ibm.com>
4663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
5663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng This program is free software; you can redistribute it and/or
6663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng modify it under the terms of the GNU General Public License as
7663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng published by the Free Software Foundation; either version 2 of the
8663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng License, or (at your option) any later version.
9663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
10663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng This program is distributed in the hope that it will be useful, but
11663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng WITHOUT ANY WARRANTY; without even the implied warranty of
12663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng General Public License for more details.
14663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
15663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng You should have received a copy of the GNU General Public License
16663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng along with this program; if not, write to the Free Software
17663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
18663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng 02111-1307, USA.
19663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
20663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng The GNU General Public License is contained in the file COPYING.
21663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng */
22663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
23663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng#ifdef HAS_VSX
24663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
25663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng#include <stdio.h>
26663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng#include <stdint.h>
27663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng#include <stdlib.h>
28663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng#include <string.h>
29663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng#include <malloc.h>
30663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng#include <altivec.h>
31663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
32663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng#ifndef __powerpc64__
33663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengtypedef uint32_t HWord_t;
34663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng#else
35663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengtypedef uint64_t HWord_t;
36663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng#endif /* __powerpc64__ */
37663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
38663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengstatic int errors;
39663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengregister HWord_t r14 __asm__ ("r14");
40663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengregister HWord_t r15 __asm__ ("r15");
41663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengregister HWord_t r16 __asm__ ("r16");
42663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengregister HWord_t r17 __asm__ ("r17");
43663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengregister double f14 __asm__ ("fr14");
44663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengregister double f15 __asm__ ("fr15");
45663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengregister double f16 __asm__ ("fr16");
46663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengregister double f17 __asm__ ("fr17");
47663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
48663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengstatic volatile unsigned int cond_reg;
49663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
50663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng#define ALLCR "cr0","cr1","cr2","cr3","cr4","cr5","cr6","cr7"
51663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
52663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng#define SET_CR(_arg) \
53663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng      __asm__ __volatile__ ("mtcr  %0" : : "b"(_arg) : ALLCR );
54663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
55663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng#define SET_XER(_arg) \
56663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng      __asm__ __volatile__ ("mtxer %0" : : "b"(_arg) : "xer" );
57663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
58663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng#define GET_CR(_lval) \
59663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng      __asm__ __volatile__ ("mfcr %0"  : "=b"(_lval) )
60663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
61663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng#define GET_XER(_lval) \
62663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng      __asm__ __volatile__ ("mfxer %0" : "=b"(_lval) )
63663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
64663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng#define GET_CR_XER(_lval_cr,_lval_xer) \
65663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   do { GET_CR(_lval_cr); GET_XER(_lval_xer); } while (0)
66663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
67663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng#define SET_CR_ZERO \
68663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng      SET_CR(0)
69663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
70663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng#define SET_XER_ZERO \
71663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng      SET_XER(0)
72663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
73663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng#define SET_CR_XER_ZERO \
74663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   do { SET_CR_ZERO; SET_XER_ZERO; } while (0)
75663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
76663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng#define SET_FPSCR_ZERO \
77663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   do { double _d = 0.0; \
78663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng        __asm__ __volatile__ ("mtfsf 0xFF, %0" : : "f"(_d) ); \
79663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   } while (0)
80663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
81663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
82663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengtypedef void (*test_func_t)(void);
83663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengtypedef struct ldst_test ldst_test_t;
84663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengtypedef struct vsx_logic_test logic_test_t;
85663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengtypedef struct xs_conv_test xs_conv_test_t;
86663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengtypedef struct p7_fp_test fp_test_t;
87663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengtypedef struct vx_fp_test vx_fp_test_t;
88663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengtypedef struct vsx_move_test move_test_t;
89663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengtypedef struct vsx_permute_test permute_test_t;
90663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengtypedef struct test_table test_table_t;
91663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
92663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengstatic double *fargs = NULL;
93663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengstatic int nb_fargs;
94663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
95663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng/* These functions below that construct a table of floating point
96663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng * values were lifted from none/tests/ppc32/jm-insns.c.
97663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng */
98663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
99663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng#if defined (DEBUG_ARGS_BUILD)
100663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng#define AB_DPRINTF(fmt, args...) do { fprintf(stderr, fmt , ##args); } while (0)
101663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng#else
102663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng#define AB_DPRINTF(fmt, args...) do { } while (0)
103663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng#endif
104663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
105663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengstatic inline void register_farg (void *farg,
106663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                  int s, uint16_t _exp, uint64_t mant)
107663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng{
108663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   uint64_t tmp;
109663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
110663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   tmp = ((uint64_t)s << 63) | ((uint64_t)_exp << 52) | mant;
111663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   *(uint64_t *)farg = tmp;
112663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   AB_DPRINTF("%d %03x %013llx => %016llx %0e\n",
113663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng              s, _exp, mant, *(uint64_t *)farg, *(double *)farg);
114663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng}
115663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
116663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengstatic void build_fargs_table(void)
117663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng/*
118663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng * Double precision:
119663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng * Sign goes from zero to one               (1 bit)
120663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng * Exponent goes from 0 to ((1 << 12) - 1)  (11 bits)
121663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng * Mantissa goes from 1 to ((1 << 52) - 1)  (52 bits)
122663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng * + special values:
123663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng * +0.0      : 0 0x000 0x0000000000000 => 0x0000000000000000
124663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng * -0.0      : 1 0x000 0x0000000000000 => 0x8000000000000000
125663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng * +infinity : 0 0x7FF 0x0000000000000 => 0x7FF0000000000000
126663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng * -infinity : 1 0x7FF 0x0000000000000 => 0xFFF0000000000000
127436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov * +QNaN     : 0 0x7FF 0x8000000000000 => 0x7FF8000000000000
128436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov * -QNaN     : 1 0x7FF 0x8000000000000 => 0xFFF8000000000000
129436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov * +SNaN     : 0 0x7FF 0x7FFFFFFFFFFFF => 0x7FF7FFFFFFFFFFFF
130436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov * -SNaN     : 1 0x7FF 0x7FFFFFFFFFFFF => 0xFFF7FFFFFFFFFFFF
131663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng * (8 values)
132663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng *
133663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng * Single precision
134663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng * Sign:     1 bit
135663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng * Exponent: 8 bits
136663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng * Mantissa: 23 bits
137663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng * +0.0      : 0 0x00 0x000000 => 0x00000000
138663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng * -0.0      : 1 0x00 0x000000 => 0x80000000
139663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng * +infinity : 0 0xFF 0x000000 => 0x7F800000
140663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng * -infinity : 1 0xFF 0x000000 => 0xFF800000
141436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov * +QNaN     : 0 0xFF 0x400000 => 0x7FC00000
142436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov * -QNaN     : 1 0xFF 0x400000 => 0xFFC00000
143436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov * +SNaN     : 0 0xFF 0x3FFFFF => 0x7FBFFFFF
144436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov * -SNaN     : 1 0xFF 0x3FFFFF => 0xFFBFFFFF
145663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng*/
146663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng{
147663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   uint64_t mant;
148663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   uint16_t _exp, e1;
149663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   int s;
150663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   int i=0;
151663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
152663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   if (nb_fargs)
153663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng      return;
154663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
155663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   fargs = malloc( 16 * sizeof(double) );
156663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   for (s = 0; s < 2; s++) {
157663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng      for (e1 = 0x001;; e1 = ((e1 + 1) << 13) + 7) {
158663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng         if (e1 >= 0x400)
159663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng            e1 = 0x3fe;
160663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng         _exp = e1;
161663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng         for (mant = 0x0000000000001ULL; mant < (1ULL << 52);
162663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng         /* Add 'random' bits */
163663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng         mant = ((mant + 0x4A6) << 29) + 0x359) {
164663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng            register_farg( &fargs[i++], s, _exp, mant );
165663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng         }
166663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng         if (e1 == 0x3fe)
167663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng            break;
168663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng      }
169663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   }
170663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   // add a few smaller values to fargs . . .
171663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   s = 0;
172663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   _exp = 0x002;
173663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   mant = 0x0000000000b01ULL;
174663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   register_farg(&fargs[i++], s, _exp, mant);
175663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
176663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   _exp = 0x000;
177663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   mant = 0x00000203f0b3dULL;
178663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   register_farg(&fargs[i++], s, _exp, mant);
179663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
180663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   mant = 0x00000005a203dULL;
181663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   register_farg(&fargs[i++], s, _exp, mant);
182663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
183663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   s = 1;
184663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   _exp = 0x002;
185663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   mant = 0x0000000000b01ULL;
186663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   register_farg(&fargs[i++], s, _exp, mant);
187663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
188663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   _exp = 0x000;
189663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   mant = 0x00000203f0b3dULL;
190663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   register_farg(&fargs[i++], s, _exp, mant);
191663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
192663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   nb_fargs = i;
193663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng}
194663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
195663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
196663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengtypedef struct ftdiv_test {
197663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   int fra_idx;
198663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   int frb_idx;
199663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   int cr_flags;
200663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng} ftdiv_test_args_t;
201663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
202663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengtypedef struct fp_test_args {
203663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   int fra_idx;
204663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   int frb_idx;
205663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   int cr_flags;
206663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   unsigned long long dp_bin_result;
207663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng} fp_test_args_t;
208663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
209663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengunsigned long long xscvuxddp_results[] = {
210663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                          0x43cfec0000000000ULL,
211663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                          0x43d013c000000000ULL,
212663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                          0x4338000000b77501ULL,
213663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                          0x43dffa0000000001ULL,
214663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                          0x4372321456990000ULL,
215663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                          0x0000000000000000ULL,
216663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                          0x43e0000000000000ULL,
217663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                          0x43dffc0000000000ULL,
218663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                          0x43effe0000000000ULL,
219663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                          0x43dffe0000000000ULL,
220663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                          0x43efff0000000000ULL,
221663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                          0x43dffe0000000000ULL,
222663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                          0x43efff0000000000ULL,
223663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                          0x43e00106800000f0ULL,
224663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                          0x43e81a0ca1eb40f6ULL
225663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng};
226663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
227663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengunsigned long long xscvsxddp_results[] = {
228663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                           0x43cfec0000000000ULL,
229663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                           0x43d013c000000000ULL,
230663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                           0x4338000000b77501ULL,
231663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                           0x43dffa0000000001ULL,
232663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                           0x4372321456990000ULL,
233663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                           0x0000000000000000ULL,
234663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                           0xc3e0000000000000ULL,
235663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                           0x43dffc0000000000ULL,
236663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                           0xc330000000000000ULL,
237663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                           0x43dffe0000000000ULL,
238663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                           0xc320000000000002ULL,
239663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                           0x43dffe0000000000ULL,
240663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                           0xc320000000000000ULL,
241663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                           0xc3dffdf2fffffe20ULL,
242663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                           0xc3cf97cd7852fc26ULL,
243663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng};
244663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
245663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengunsigned long long xscvdpsxds_results[] = {
246663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                           0x0000000000000000ULL,
247663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                           0x000000000000003eULL,
248663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                           0x0000000000000000ULL,
249663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                           0x7fffffffffffffffULL,
250663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                           0x0000000000000000ULL,
251663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                           0x0000000000000000ULL,
252663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                           0x0000000000000000ULL,
253663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                           0x7fffffffffffffffULL,
254663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                           0x8000000000000000ULL,
255663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                           0x8000000000000000ULL,
256663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                           0x8000000000000000ULL,
257663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                           0x8000000000000000ULL,
258663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                           0x8000000000000000ULL,
259663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                           0x0000000000000000ULL,
260663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                           0xffffffffffffbe6cULL
261663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng};
262663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
263663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengftdiv_test_args_t ftdiv_tests[] = {
264663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                              {0, 1, 0x8},
265663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                              {9, 1, 0xa},
266663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                              {1, 12, 0xa},
267663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                              {0, 2, 0xa},
268663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                              {1, 3, 0xa},
269663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                              {3, 0, 0xa},
270663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                              {0, 3, 0xa},
271663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                              {4, 0, 0xa},
272663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                              {7, 1, 0xe},
273663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                              {8, 1, 0xe},
274663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                              {1, 7, 0xe},
275663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                              {0, 13, 0xe},
276663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                              {5, 5, 0xe},
277663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                              {5, 6, 0xe},
278663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng};
279663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
280663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengfp_test_args_t xscmpX_tests[] = {
281663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {8, 8, 0x2, 0ULL},
282663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {8, 14, 0x8, 0ULL},
283663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {8, 6, 0x8, 0ULL},
284663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {8, 5, 0x8, 0ULL},
285663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {8, 4, 0x8, 0ULL},
286663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {8, 7, 0x8, 0ULL},
287663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {8, 9, 0x1, 0ULL},
288663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {8, 11, 0x1, 0ULL},
289663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {14, 8, 0x4, 0ULL},
290663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {14, 14, 0x2, 0ULL},
291663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {14, 6, 0x8, 0ULL},
292663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {14, 5, 0x8, 0ULL},
293663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {14, 4, 0x8, 0ULL},
294663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {14, 7, 0x8, 0ULL},
295663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {14, 9, 0x1, 0ULL},
296663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {14, 11, 0x1, 0ULL},
297663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {6, 8, 0x4, 0ULL},
298663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {6, 14, 0x4, 0ULL},
299663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {6, 6, 0x2, 0ULL},
300663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {6, 5, 0x2, 0ULL},
301663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {6, 4, 0x8, 0ULL},
302663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {6, 7, 0x8, 0ULL},
303663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {6, 9, 0x1, 0ULL},
304663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {6, 11, 0x1, 0ULL},
305663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {5, 8, 0x4, 0ULL},
306663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {5, 14, 0x4, 0ULL},
307663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {5, 6, 0x2, 0ULL},
308663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {5, 5, 0x2, 0ULL},
309663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {5, 4, 0x8, 0ULL},
310663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {5, 7, 0x8, 0ULL},
311663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {5, 9, 0x1, 0ULL},
312663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {5, 11, 0x1, 0ULL},
313663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {4, 8, 0x4, 0ULL},
314663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {4, 14, 0x4, 0ULL},
315663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {4, 6, 0x4, 0ULL},
316663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {4, 5, 0x4, 0ULL},
317663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {4, 1, 0x8, 0ULL},
318663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {4, 7, 0x8, 0ULL},
319663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {4, 9, 0x1, 0ULL},
320663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {4, 11, 0x1, 0ULL},
321663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {7, 8, 0x4, 0ULL},
322663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {7, 14, 0x4, 0ULL},
323663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {7, 6, 0x4, 0ULL},
324663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {7, 5, 0x4, 0ULL},
325663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {7, 4, 0x4, 0ULL},
326663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {7, 7, 0x2, 0ULL},
327663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {7, 9, 0x1, 0ULL},
328663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {7, 11, 0x1, 0ULL},
329663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {10, 8, 0x1, 0ULL},
330663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {10, 14, 0x1, 0ULL},
331663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {10, 6, 0x1, 0ULL},
332663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {10, 5, 0x1, 0ULL},
333663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {10, 4, 0x1, 0ULL},
334663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {10, 7, 0x1, 0ULL},
335663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {10, 9, 0x1, 0ULL},
336663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {10, 11, 0x1, 0ULL},
337663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {12, 8, 0x1, 0ULL},
338663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {12, 14, 0x1, 0ULL},
339663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {12, 6, 0x1, 0ULL},
340663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {12, 5, 0x1, 0ULL},
341663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {12, 4, 0x1, 0ULL},
342663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {12, 7, 0x1, 0ULL},
343663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {12, 9, 0x1, 0ULL},
344663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {12, 11, 0x1, 0ULL},
345663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng};
346663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
347663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengfp_test_args_t xsadddp_tests[] = {
348663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {8, 8, 0x0,   0xfff0000000000000ULL},
349663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {8, 14, 0x0,  0xfff0000000000000ULL},
350663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {8, 6, 0x0,   0xfff0000000000000ULL},
351663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {8, 5, 0x0,   0xfff0000000000000ULL},
352663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {8, 4, 0x0,   0xfff0000000000000ULL},
353663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {8, 7, 0x0,   0x7ff8000000000000ULL},
354663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {8, 9, 0x0,   0x7fffffffffffffffULL},
355663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {8, 11, 0x0,  0x7ff8000000000000ULL},
356663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {14, 8, 0x0,  0xfff0000000000000ULL},
357663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {14, 14, 0x0, 0xc0e0650f5a07b353ULL},
358663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {14, 6, 0x0,  0xc0d0650f5a07b353ULL},
359663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {14, 5, 0x0,  0xc0d0650f5a07b353ULL},
360663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {14, 4, 0x0,  0xc0d0650f5a07b353ULL},
361663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {14, 7, 0x0,  0x7ff0000000000000ULL},
362663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {14, 9, 0x0,  0x7fffffffffffffffULL},
363663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {14, 11, 0x0, 0x7ff8000000000000ULL},
364663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {6, 8, 0x0,   0xfff0000000000000ULL},
365663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {6, 14, 0x0,  0xc0d0650f5a07b353ULL},
366663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {6, 6, 0x0,   0x8000000000000000ULL},
367663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {6, 5, 0x0,   0x0000000000000000ULL},
368663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {6, 4, 0x0,   0x0123214569900000ULL},
369663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {6, 7, 0x0,   0x7ff0000000000000ULL},
370663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {6, 9, 0x0,   0x7fffffffffffffffULL},
371663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {6, 11, 0x0,  0x7ff8000000000000ULL},
372663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {5, 8, 0x0,   0xfff0000000000000ULL},
373663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {5, 14, 0x0,  0xc0d0650f5a07b353ULL},
374663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {5, 6, 0x0,   0x0000000000000000ULL},
375663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {5, 5, 0x0,   0x0000000000000000ULL},
376663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {5, 4, 0x0,   0x0123214569900000ULL},
377663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {5, 7, 0x0,   0x7ff0000000000000ULL},
378663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {5, 9, 0x0,   0x7fffffffffffffffULL},
379663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {5, 11, 0x0,  0x7ff8000000000000ULL},
380663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {4, 8, 0x0,   0xfff0000000000000ULL},
381663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {4, 14, 0x0,  0xc0d0650f5a07b353ULL},
382663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {4, 6, 0x0,   0x0123214569900000ULL},
383663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {4, 5, 0x0,   0x0123214569900000ULL},
384663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {4, 1, 0x0,   0x404f000000000000ULL},
385663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {4, 7, 0x0,   0x7ff0000000000000ULL},
386663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {4, 9, 0x0,   0x7fffffffffffffffULL},
387663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {4, 11, 0x0,  0x7ff8000000000000ULL},
388663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {7, 8, 0x0,   0x7ff8000000000000ULL},
389663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {7, 14, 0x0,  0x7ff0000000000000ULL},
390663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {7, 6, 0x0,   0x7ff0000000000000ULL},
391663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {7, 5, 0x0,   0x7ff0000000000000ULL},
392663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {7, 4, 0x0,   0x7ff0000000000000ULL},
393663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {7, 7, 0x0,   0x7ff0000000000000ULL},
394663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {7, 9, 0x0,   0x7fffffffffffffffULL},
395663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {7, 11, 0x0,  0x7ff8000000000000ULL},
396663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {10, 8, 0x0,  0xffffffffffffffffULL},
397663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {10, 14, 0x0, 0xffffffffffffffffULL},
398663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {10, 6, 0x0,  0xffffffffffffffffULL},
399663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {10, 5, 0x0,  0xffffffffffffffffULL},
400663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {10, 4, 0x0,  0xffffffffffffffffULL},
401663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {10, 7, 0x0,  0xffffffffffffffffULL},
402663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {10, 9, 0x0,  0xffffffffffffffffULL},
403663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {10, 11, 0x0, 0xffffffffffffffffULL},
404663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {12, 8, 0x0,  0xfff8000000000000ULL},
405663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {12, 14, 0x0, 0xfff8000000000000ULL},
406663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {12, 6, 0x0,  0xfff8000000000000ULL},
407663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {12, 5, 0x0,  0xfff8000000000000ULL},
408663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {12, 4, 0x0,  0xfff8000000000000ULL},
409663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {12, 7, 0x0,  0xfff8000000000000ULL},
410663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {12, 9, 0x0,  0xfff8000000000000ULL},
411663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {12, 11, 0x0, 0xfff8000000000000ULL},
412663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng};
413663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
414663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengfp_test_args_t xsdivdp_tests[] = {
415663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {8, 8, 0x0,   0x7ff8000000000000ULL},
416663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {8, 14, 0x0,  0x7ff0000000000000ULL},
417663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {8, 6, 0x0,   0x7ff0000000000000ULL},
418663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {8, 5, 0x0,   0xfff0000000000000ULL},
419663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {8, 4, 0x0,   0xfff0000000000000ULL},
420663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {8, 7, 0x0,   0x7ff8000000000000ULL},
421663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {8, 9, 0x0,   0x7fffffffffffffffULL},
422663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {8, 11, 0x0,  0x7ff8000000000000ULL},
423663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {14, 8, 0x0,  0x0000000000000000ULL},
424663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {14, 14, 0x0, 0x3ff0000000000000ULL},
425663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {14, 6, 0x0,  0x7ff0000000000000ULL},
426663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {14, 5, 0x0,  0xfff0000000000000ULL},
427663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {14, 4, 0x0,  0xff9b6cb57ca13c00ULL},
428663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {14, 7, 0x0,  0x8000000000000000ULL},
429663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {14, 9, 0x0,  0x7fffffffffffffffULL},
430663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {14, 11, 0x0, 0x7ff8000000000000ULL},
431663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {6, 8, 0x0,   0x0000000000000000ULL},
432663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {6, 14, 0x0,  0x0000000000000000ULL},
433663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {6, 6, 0x0,   0x7ff8000000000000ULL},
434663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {6, 5, 0x0,   0x7ff8000000000000ULL},
435663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {6, 4, 0x0,   0x8000000000000000ULL},
436663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {6, 7, 0x0,   0x8000000000000000ULL},
437663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {6, 9, 0x0,   0x7fffffffffffffffULL},
438663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {6, 11, 0x0,  0x7ff8000000000000ULL},
439663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {5, 8, 0x0,   0x8000000000000000ULL},
440663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {5, 14, 0x0,  0x8000000000000000ULL},
441663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {5, 6, 0x0,   0x7ff8000000000000ULL},
442663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {5, 5, 0x0,   0x7ff8000000000000ULL},
443663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {5, 4, 0x0,   0x0000000000000000ULL},
444663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {5, 7, 0x0,   0x0000000000000000ULL},
445663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {5, 9, 0x0,   0x7fffffffffffffffULL},
446663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {5, 11, 0x0,  0x7ff8000000000000ULL},
447663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {4, 8, 0x0,   0x8000000000000000ULL},
448663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {4, 14, 0x0,  0x8042ab59d8b6ec87ULL},
449663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {4, 6, 0x0,   0xfff0000000000000ULL},
450663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {4, 5, 0x0,   0x7ff0000000000000ULL},
451663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {4, 1, 0x0,   0x00c3bf3f64b5ad6bULL},
452663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {4, 7, 0x0,   0x0000000000000000ULL},
453663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {4, 9, 0x0,   0x7fffffffffffffffULL},
454663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {4, 11, 0x0,  0x7ff8000000000000ULL},
455663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {7, 8, 0x0,   0x7ff8000000000000ULL},
456663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {7, 14, 0x0,  0xfff0000000000000ULL},
457663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {7, 6, 0x0,   0xfff0000000000000ULL},
458663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {7, 5, 0x0,   0x7ff0000000000000ULL},
459663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {7, 4, 0x0,   0x7ff0000000000000ULL},
460663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {7, 7, 0x0,   0x7ff8000000000000ULL},
461663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {7, 9, 0x0,   0x7fffffffffffffffULL},
462663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {7, 11, 0x0,  0x7ff8000000000000ULL},
463663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {10, 8, 0x0,  0xffffffffffffffffULL},
464663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {10, 14, 0x0, 0xffffffffffffffffULL},
465663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {10, 6, 0x0,  0xffffffffffffffffULL},
466663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {10, 5, 0x0,  0xffffffffffffffffULL},
467663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {10, 4, 0x0,  0xffffffffffffffffULL},
468663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {10, 7, 0x0,  0xffffffffffffffffULL},
469663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {10, 9, 0x0,  0xffffffffffffffffULL},
470663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {10, 11, 0x0, 0xffffffffffffffffULL},
471663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {12, 8, 0x0,  0xfff8000000000000ULL},
472663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {12, 14, 0x0, 0xfff8000000000000ULL},
473663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {12, 6, 0x0,  0xfff8000000000000ULL},
474663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {12, 5, 0x0,  0xfff8000000000000ULL},
475663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {12, 4, 0x0,  0xfff8000000000000ULL},
476663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {12, 7, 0x0,  0xfff8000000000000ULL},
477663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {12, 9, 0x0,  0xfff8000000000000ULL},
478663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {12, 11, 0x0, 0xfff8000000000000ULL},
479663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng};
480663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
481663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengfp_test_args_t xsmaddXdp_tests[] = {
482663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {8, 8, 0x0,   0x7ff8000000000000ULL},
483663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {8, 14, 0x0,  0xfff0000000000000ULL},
484663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {8, 6, 0x0,   0x7ff0000000000000ULL},
485663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {8, 5, 0x0,   0xfff0000000000000ULL},
486663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {8, 4, 0x0,   0x7ff0000000000000ULL},
487663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {8, 7, 0x0,   0x7ff8000000000000ULL},
488663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {8, 9, 0x0,   0x7fffffffffffffffULL},
489663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {8, 11, 0x0,  0x7ff8000000000000ULL},
490663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {14, 8, 0x0,  0xfff0000000000000ULL},
491663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {14, 14, 0x0, 0xc0d0650f5a07b353ULL},
492663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {14, 6, 0x0,  0x41b0cc9d05eec2a7ULL},
493663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {14, 5, 0x0,  0x82039a19ca8fcb5fULL},
494663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {14, 4, 0x0,  0x41b0cc9d05eec2a7ULL},
495663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {14, 7, 0x0,  0x7ff0000000000000ULL},
496663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {14, 9, 0x0,  0x7fffffffffffffffULL},
497663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {14, 11, 0x0, 0x7ff8000000000000ULL},
498663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {6, 8, 0x0,   0xfff0000000000000ULL},
499663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {6, 14, 0x0,  0xc0d0650f5a07b353ULL},
500663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {6, 6, 0x0,   0x0000000000000000ULL},
501663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {6, 5, 0x0,   0x0000000000000000ULL},
502663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {6, 4, 0x0,   0x0123214569900000ULL},
503663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {6, 7, 0x0,   0x7ff0000000000000ULL},
504663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {6, 9, 0x0,   0x7fffffffffffffffULL},
505663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {6, 11, 0x0,  0x7ff8000000000000ULL},
506663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {5, 8, 0x0,   0xfff0000000000000ULL},
507663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {5, 14, 0x0,  0xc0d0650f5a07b353ULL},
508663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {5, 6, 0x0,   0x8000000000000000ULL},
509663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {5, 5, 0x0,   0x0000000000000000ULL},
510663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {5, 4, 0x0,   0x0123214569900000ULL},
511663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {5, 7, 0x0,   0x7ff0000000000000ULL},
512663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {5, 9, 0x0,   0x7fffffffffffffffULL},
513663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {5, 11, 0x0,  0x7ff8000000000000ULL},
514663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {4, 8, 0x0,   0xfff0000000000000ULL},
515663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {4, 14, 0x0,  0xc0d0650f5a07b353ULL},
516663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {4, 6, 0x0,   0x82039a19ca8fcb5fULL},
517663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {4, 5, 0x0,   0x0000000000000000ULL},
518663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {4, 1, 0x0,   0x404f000000000000ULL},
519663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {4, 7, 0x0,   0x7ff0000000000000ULL},
520663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {4, 9, 0x0,   0x7fffffffffffffffULL},
521663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {4, 11, 0x0,  0x7ff8000000000000ULL},
522663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {7, 8, 0x0,   0xfff0000000000000ULL},
523663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {7, 14, 0x0,  0x7ff0000000000000ULL},
524663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {7, 6, 0x0,   0xfff0000000000000ULL},
525663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {7, 5, 0x0,   0x7ff0000000000000ULL},
526663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {7, 4, 0x0,   0xfff0000000000000ULL},
527663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {7, 7, 0x0,   0x7ff0000000000000ULL},
528663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {7, 9, 0x0,   0x7fffffffffffffffULL},
529663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {7, 11, 0x0,  0x7ff8000000000000ULL},
530663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {10, 8, 0x0,  0xffffffffffffffffULL},
531663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {10, 14, 0x0, 0xffffffffffffffffULL},
532663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {10, 6, 0x0,  0xffffffffffffffffULL},
533663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {10, 5, 0x0,  0xffffffffffffffffULL},
534663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {10, 4, 0x0,  0xffffffffffffffffULL},
535663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {10, 7, 0x0,  0xffffffffffffffffULL},
536663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {10, 9, 0x0,  0xffffffffffffffffULL},
537663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {10, 11, 0x0, 0xffffffffffffffffULL},
538663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {12, 8, 0x0,  0xfff8000000000000ULL},
539663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {12, 14, 0x0, 0xfff8000000000000ULL},
540663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {12, 6, 0x0,  0xfff8000000000000ULL},
541663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {12, 5, 0x0,  0xfff8000000000000ULL},
542663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {12, 4, 0x0,  0xfff8000000000000ULL},
543663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {12, 7, 0x0,  0xfff8000000000000ULL},
544663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {12, 9, 0x0,  0xfff8000000000000ULL},
545663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {12, 11, 0x0, 0xfff8000000000000ULL},
546663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng};
547663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
548663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengfp_test_args_t xsmsubXdp_tests[] = {
549663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {8, 8, 0x0,   0x7ff0000000000000ULL},
550663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {8, 14, 0x0,  0xfff0000000000000ULL},
551663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {8, 6, 0x0,   0x7ff0000000000000ULL},
552663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {8, 5, 0x0,   0xfff0000000000000ULL},
553663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {8, 4, 0x0,   0x7ff0000000000000ULL},
554663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {8, 7, 0x0,   0xfff0000000000000ULL},
555663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {8, 9, 0x0,   0x7fffffffffffffffULL},
556663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {8, 11, 0x0,  0x7ff8000000000000ULL},
557663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {14, 8, 0x0,  0x7ff0000000000000ULL},
558663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {14, 14, 0x0, 0x40d0650f5a07b353ULL},
559663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {14, 6, 0x0,  0x41b0cc9d05eec2a7ULL},
560663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {14, 5, 0x0,  0x82039a19ca8fcb5fULL},
561663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {14, 4, 0x0,  0x41b0cc9d05eec2a7ULL},
562663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {14, 7, 0x0,  0xfff0000000000000ULL},
563663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {14, 9, 0x0,  0x7fffffffffffffffULL},
564663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {14, 11, 0x0, 0x7ff8000000000000ULL},
565663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {6, 8, 0x0,   0x7ff0000000000000ULL},
566663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {6, 14, 0x0,  0x40d0650f5a07b353ULL},
567663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {6, 6, 0x0,   0x0000000000000000ULL},
568663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {6, 5, 0x0,   0x8000000000000000ULL},
569663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {6, 4, 0x0,   0x8123214569900000ULL},
570663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {6, 7, 0x0,   0xfff0000000000000ULL},
571663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {6, 9, 0x0,   0x7fffffffffffffffULL},
572663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {6, 11, 0x0,  0x7ff8000000000000ULL},
573663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {5, 8, 0x0,   0x7ff0000000000000ULL},
574663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {5, 14, 0x0,  0x40d0650f5a07b353ULL},
575663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {5, 6, 0x0,   0x0000000000000000ULL},
576663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {5, 5, 0x0,   0x0000000000000000ULL},
577663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {5, 4, 0x0,   0x8123214569900000ULL},
578663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {5, 7, 0x0,   0xfff0000000000000ULL},
579663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {5, 9, 0x0,   0x7fffffffffffffffULL},
580663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {5, 11, 0x0,  0x7ff8000000000000ULL},
581663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {4, 8, 0x0,   0x7ff0000000000000ULL},
582663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {4, 14, 0x0,  0x40d0650f5a07b353ULL},
583663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {4, 6, 0x0,   0x82039a19ca8fcb5fULL},
584663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {4, 5, 0x0,   0x0000000000000000ULL},
585663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {4, 1, 0x0,   0xc04f000000000000ULL},
586663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {4, 7, 0x0,   0xfff0000000000000ULL},
587663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {4, 9, 0x0,   0x7fffffffffffffffULL},
588663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {4, 11, 0x0,  0x7ff8000000000000ULL},
589663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {7, 8, 0x0,   0x7ff8000000000000ULL},
590663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {7, 14, 0x0,  0x7ff0000000000000ULL},
591663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {7, 6, 0x0,   0xfff0000000000000ULL},
592663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {7, 5, 0x0,   0x7ff0000000000000ULL},
593663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {7, 4, 0x0,   0xfff0000000000000ULL},
594663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {7, 7, 0x0,   0x7ff8000000000000ULL},
595663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {7, 9, 0x0,   0x7fffffffffffffffULL},
596663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {7, 11, 0x0,  0x7ff8000000000000ULL},
597663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {10, 8, 0x0,  0xffffffffffffffffULL},
598663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {10, 14, 0x0, 0xffffffffffffffffULL},
599663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {10, 6, 0x0,  0xffffffffffffffffULL},
600663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {10, 5, 0x0,  0xffffffffffffffffULL},
601663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {10, 4, 0x0,  0xffffffffffffffffULL},
602663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {10, 7, 0x0,  0xffffffffffffffffULL},
603663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {10, 9, 0x0,  0xffffffffffffffffULL},
604663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {10, 11, 0x0, 0xffffffffffffffffULL},
605663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {12, 8, 0x0,  0xfff8000000000000ULL},
606663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {12, 14, 0x0, 0xfff8000000000000ULL},
607663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {12, 6, 0x0,  0xfff8000000000000ULL},
608663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {12, 5, 0x0,  0xfff8000000000000ULL},
609663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {12, 4, 0x0,  0xfff8000000000000ULL},
610663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {12, 7, 0x0,  0xfff8000000000000ULL},
611663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {12, 9, 0x0,  0xfff8000000000000ULL},
612663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                   {12, 11, 0x0, 0xfff8000000000000ULL},
613663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng};
614663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
615663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengfp_test_args_t xsnmaddXdp_tests[] = {
616663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                     {8, 8, 0x0,   0x7ff8000000000000ULL},
617663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                     {8, 14, 0x0,  0x7ff0000000000000ULL},
618663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                     {8, 6, 0x0,   0xfff0000000000000ULL},
619663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                     {8, 5, 0x0,   0x7ff0000000000000ULL},
620663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                     {8, 4, 0x0,   0xfff0000000000000ULL},
621663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                     {8, 7, 0x0,   0x7ff8000000000000ULL},
622663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                     {8, 9, 0x0,   0x7fffffffffffffffULL},
623663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                     {8, 11, 0x0,  0x7ff8000000000000ULL},
624663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                     {14, 8, 0x0,  0x7ff0000000000000ULL},
625663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                     {14, 14, 0x0, 0x40d0650f5a07b353ULL},
626663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                     {14, 6, 0x0,  0xc1b0cc9d05eec2a7ULL},
627663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                     {14, 5, 0x0,  0x02039a19ca8fcb5fULL},
628663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                     {14, 4, 0x0,  0xc1b0cc9d05eec2a7ULL},
629663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                     {14, 7, 0x0,  0xfff0000000000000ULL},
630663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                     {14, 9, 0x0,  0x7fffffffffffffffULL},
631663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                     {14, 11, 0x0, 0x7ff8000000000000ULL},
632663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                     {6, 8, 0x0,   0x7ff0000000000000ULL},
633663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                     {6, 14, 0x0,  0x40d0650f5a07b353ULL},
634663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                     {6, 6, 0x0,   0x8000000000000000ULL},
635663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                     {6, 5, 0x0,   0x8000000000000000ULL},
636663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                     {6, 4, 0x0,   0x8123214569900000ULL},
637663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                     {6, 7, 0x0,   0xfff0000000000000ULL},
638663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                     {6, 9, 0x0,   0x7fffffffffffffffULL},
639663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                     {6, 11, 0x0,  0x7ff8000000000000ULL},
640663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                     {5, 8, 0x0,   0x7ff0000000000000ULL},
641663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                     {5, 14, 0x0,  0x40d0650f5a07b353ULL},
642663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                     {5, 6, 0x0,   0x0000000000000000ULL},
643663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                     {5, 5, 0x0,   0x8000000000000000ULL},
644663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                     {5, 4, 0x0,   0x8123214569900000ULL},
645663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                     {5, 7, 0x0,   0xfff0000000000000ULL},
646663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                     {5, 9, 0x0,   0x7fffffffffffffffULL},
647663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                     {5, 11, 0x0,  0x7ff8000000000000ULL},
648663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                     {4, 8, 0x0,   0x7ff0000000000000ULL},
649663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                     {4, 14, 0x0,  0x40d0650f5a07b353ULL},
650663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                     {4, 6, 0x0,   0x02039a19ca8fcb5fULL},
651663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                     {4, 5, 0x0,   0x8000000000000000ULL},
652663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                     {4, 1, 0x0,   0xc04f000000000000ULL},
653663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                     {4, 7, 0x0,   0xfff0000000000000ULL},
654663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                     {4, 9, 0x0,   0x7fffffffffffffffULL},
655663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                     {4, 11, 0x0,  0x7ff8000000000000ULL},
656663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                     {7, 8, 0x0,   0x7ff0000000000000ULL},
657663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                     {7, 14, 0x0,  0xfff0000000000000ULL},
658663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                     {7, 6, 0x0,   0x7ff0000000000000ULL},
659663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                     {7, 5, 0x0,   0xfff0000000000000ULL},
660663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                     {7, 4, 0x0,   0x7ff0000000000000ULL},
661663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                     {7, 7, 0x0,   0xfff0000000000000ULL},
662663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                     {7, 9, 0x0,   0x7fffffffffffffffULL},
663663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                     {7, 11, 0x0,  0x7ff8000000000000ULL},
664663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                     {10, 8, 0x0,  0xffffffffffffffffULL},
665663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                     {10, 14, 0x0, 0xffffffffffffffffULL},
666663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                     {10, 6, 0x0,  0xffffffffffffffffULL},
667663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                     {10, 5, 0x0,  0xffffffffffffffffULL},
668663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                     {10, 4, 0x0,  0xffffffffffffffffULL},
669663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                     {10, 7, 0x0,  0xffffffffffffffffULL},
670663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                     {10, 9, 0x0,  0xffffffffffffffffULL},
671663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                     {10, 11, 0x0, 0xffffffffffffffffULL},
672663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                     {12, 8, 0x0,  0xfff8000000000000ULL},
673663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                     {12, 14, 0x0, 0xfff8000000000000ULL},
674663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                     {12, 6, 0x0,  0xfff8000000000000ULL},
675663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                     {12, 5, 0x0,  0xfff8000000000000ULL},
676663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                     {12, 4, 0x0,  0xfff8000000000000ULL},
677663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                     {12, 7, 0x0,  0xfff8000000000000ULL},
678663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                     {12, 9, 0x0,  0xfff8000000000000ULL},
679663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                     {12, 11, 0x0, 0xfff8000000000000ULL},
680663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng};
681663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
682663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengfp_test_args_t xsmuldp_tests[] = {
683663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                  {8, 8, 0x0,   0x7ff0000000000000ULL},
684663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                  {8, 14, 0x0,  0x7ff0000000000000ULL},
685663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                  {8, 6, 0x0,   0x7ff8000000000000ULL},
686663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                  {8, 5, 0x0,   0x7ff8000000000000ULL},
687663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                  {8, 4, 0x0,   0xfff0000000000000ULL},
688663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                  {8, 7, 0x0,   0xfff0000000000000ULL},
689663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                  {8, 9, 0x0,   0x7fffffffffffffffULL},
690663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                  {8, 11, 0x0,  0x7ff8000000000000ULL},
691663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                  {14, 8, 0x0,  0x7ff0000000000000ULL},
692663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                  {14, 14, 0x0, 0x41b0cc9d05eec2a7ULL},
693663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                  {14, 6, 0x0,  0x0000000000000000ULL},
694663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                  {14, 5, 0x0,  0x8000000000000000ULL},
695663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                  {14, 4, 0x0,  0x82039a19ca8fcb5fULL},
696663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                  {14, 7, 0x0,  0xfff0000000000000ULL},
697663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                  {14, 9, 0x0,  0x7fffffffffffffffULL},
698663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                  {14, 11, 0x0, 0x7ff8000000000000ULL},
699663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                  {6, 8, 0x0,   0x7ff8000000000000ULL},
700663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                  {6, 14, 0x0,  0x0000000000000000ULL},
701663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                  {6, 6, 0x0,   0x0000000000000000ULL},
702663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                  {6, 5, 0x0,   0x8000000000000000ULL},
703663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                  {6, 4, 0x0,   0x8000000000000000ULL},
704663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                  {6, 7, 0x0,   0x7ff8000000000000ULL},
705663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                  {6, 9, 0x0,   0x7fffffffffffffffULL},
706663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                  {6, 11, 0x0,  0x7ff8000000000000ULL},
707663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                  {5, 8, 0x0,   0x7ff8000000000000ULL},
708663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                  {5, 14, 0x0,  0x8000000000000000ULL},
709663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                  {5, 6, 0x0,   0x8000000000000000ULL},
710663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                  {5, 5, 0x0,   0x0000000000000000ULL},
711663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                  {5, 4, 0x0,   0x0000000000000000ULL},
712663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                  {5, 7, 0x0,   0x7ff8000000000000ULL},
713663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                  {5, 9, 0x0,   0x7fffffffffffffffULL},
714663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                  {5, 11, 0x0,  0x7ff8000000000000ULL},
715663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                  {4, 8, 0x0,   0xfff0000000000000ULL},
716663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                  {4, 14, 0x0,  0x82039a19ca8fcb5fULL},
717663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                  {4, 6, 0x0,   0x8000000000000000ULL},
718663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                  {4, 5, 0x0,   0x0000000000000000ULL},
719663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                  {4, 1, 0x0,   0x0182883b3e438000ULL},
720663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                  {4, 7, 0x0,   0x7ff0000000000000ULL},
721663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                  {4, 9, 0x0,   0x7fffffffffffffffULL},
722663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                  {4, 11, 0x0,  0x7ff8000000000000ULL},
723663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                  {7, 8, 0x0,   0xfff0000000000000ULL},
724663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                  {7, 14, 0x0,  0xfff0000000000000ULL},
725663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                  {7, 6, 0x0,   0x7ff8000000000000ULL},
726663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                  {7, 5, 0x0,   0x7ff8000000000000ULL},
727663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                  {7, 4, 0x0,   0x7ff0000000000000ULL},
728663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                  {7, 7, 0x0,   0x7ff0000000000000ULL},
729663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                  {7, 9, 0x0,   0x7fffffffffffffffULL},
730663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                  {7, 11, 0x0,  0x7ff8000000000000ULL},
731663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                  {10, 8, 0x0,  0xffffffffffffffffULL},
732663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                  {10, 14, 0x0, 0xffffffffffffffffULL},
733663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                  {10, 6, 0x0,  0xffffffffffffffffULL},
734663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                  {10, 5, 0x0,  0xffffffffffffffffULL},
735663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                  {10, 4, 0x0,  0xffffffffffffffffULL},
736663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                  {10, 7, 0x0,  0xffffffffffffffffULL},
737663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                  {10, 9, 0x0,  0xffffffffffffffffULL},
738663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                  {10, 11, 0x0, 0xffffffffffffffffULL},
739663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                  {12, 8, 0x0,  0xfff8000000000000ULL},
740663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                  {12, 14, 0x0, 0xfff8000000000000ULL},
741663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                  {12, 6, 0x0,  0xfff8000000000000ULL},
742663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                  {12, 5, 0x0,  0xfff8000000000000ULL},
743663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                  {12, 4, 0x0,  0xfff8000000000000ULL},
744663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                  {12, 7, 0x0,  0xfff8000000000000ULL},
745663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                  {12, 9, 0x0,  0xfff8000000000000ULL},
746663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                  {12, 11, 0x0, 0xfff8000000000000ULL},
747663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng};
748663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
749663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengfp_test_args_t xssubdp_tests[] = {
750663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                  {8, 8, 0x0,   0x7ff8000000000000ULL},
751663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                  {8, 14, 0x0,  0xfff0000000000000ULL},
752663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                  {8, 6, 0x0,   0xfff0000000000000ULL},
753663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                  {8, 5, 0x0,   0xfff0000000000000ULL},
754663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                  {8, 4, 0x0,   0xfff0000000000000ULL},
755663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                  {8, 7, 0x0,   0xfff0000000000000ULL},
756663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                  {8, 9, 0x0,   0x7fffffffffffffffULL},
757663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                  {8, 11, 0x0,  0x7ff8000000000000ULL},
758663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                  {14, 8, 0x0,  0x7ff0000000000000ULL},
759663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                  {14, 14, 0x0, 0x0000000000000000ULL},
760663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                  {14, 6, 0x0,  0xc0d0650f5a07b353ULL},
761663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                  {14, 5, 0x0,  0xc0d0650f5a07b353ULL},
762663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                  {14, 4, 0x0,  0xc0d0650f5a07b353ULL},
763663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                  {14, 7, 0x0,  0xfff0000000000000ULL},
764663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                  {14, 9, 0x0,  0x7fffffffffffffffULL},
765663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                  {14, 11, 0x0, 0x7ff8000000000000ULL},
766663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                  {6, 8, 0x0,   0x7ff0000000000000ULL},
767663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                  {6, 14, 0x0,  0x40d0650f5a07b353ULL},
768663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                  {6, 6, 0x0,   0x0000000000000000ULL},
769663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                  {6, 5, 0x0,   0x8000000000000000ULL},
770663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                  {6, 4, 0x0,   0x8123214569900000ULL},
771663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                  {6, 7, 0x0,   0xfff0000000000000ULL},
772663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                  {6, 9, 0x0,   0x7fffffffffffffffULL},
773663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                  {6, 11, 0x0,  0x7ff8000000000000ULL},
774663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                  {5, 8, 0x0,   0x7ff0000000000000ULL},
775663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                  {5, 14, 0x0,  0x40d0650f5a07b353ULL},
776663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                  {5, 6, 0x0,   0x0000000000000000ULL},
777663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                  {5, 5, 0x0,   0x0000000000000000ULL},
778663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                  {5, 4, 0x0,   0x8123214569900000ULL},
779663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                  {5, 7, 0x0,   0xfff0000000000000ULL},
780663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                  {5, 9, 0x0,   0x7fffffffffffffffULL},
781663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                  {5, 11, 0x0,  0x7ff8000000000000ULL},
782663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                  {4, 8, 0x0,   0x7ff0000000000000ULL},
783663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                  {4, 14, 0x0,  0x40d0650f5a07b353ULL},
784663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                  {4, 6, 0x0,   0x0123214569900000ULL},
785663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                  {4, 5, 0x0,   0x0123214569900000ULL},
786663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                  {4, 1, 0x0,   0xc04f000000000000ULL},
787663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                  {4, 7, 0x0,   0xfff0000000000000ULL},
788663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                  {4, 9, 0x0,   0x7fffffffffffffffULL},
789663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                  {4, 11, 0x0,  0x7ff8000000000000ULL},
790663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                  {7, 8, 0x0,   0x7ff0000000000000ULL},
791663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                  {7, 14, 0x0,  0x7ff0000000000000ULL},
792663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                  {7, 6, 0x0,   0x7ff0000000000000ULL},
793663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                  {7, 5, 0x0,   0x7ff0000000000000ULL},
794663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                  {7, 4, 0x0,   0x7ff0000000000000ULL},
795663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                  {7, 7, 0x0,   0x7ff8000000000000ULL},
796663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                  {7, 9, 0x0,   0x7fffffffffffffffULL},
797663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                  {7, 11, 0x0,  0x7ff8000000000000ULL},
798663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                  {10, 8, 0x0,  0xffffffffffffffffULL},
799663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                  {10, 14, 0x0, 0xffffffffffffffffULL},
800663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                  {10, 6, 0x0,  0xffffffffffffffffULL},
801663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                  {10, 5, 0x0,  0xffffffffffffffffULL},
802663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                  {10, 4, 0x0,  0xffffffffffffffffULL},
803663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                  {10, 7, 0x0,  0xffffffffffffffffULL},
804663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                  {10, 9, 0x0,  0xffffffffffffffffULL},
805663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                  {10, 11, 0x0, 0xffffffffffffffffULL},
806663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                  {12, 8, 0x0,  0xfff8000000000000ULL},
807663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                  {12, 14, 0x0, 0xfff8000000000000ULL},
808663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                  {12, 6, 0x0,  0xfff8000000000000ULL},
809663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                  {12, 5, 0x0,  0xfff8000000000000ULL},
810663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                  {12, 4, 0x0,  0xfff8000000000000ULL},
811663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                  {12, 7, 0x0,  0xfff8000000000000ULL},
812663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                  {12, 9, 0x0,  0xfff8000000000000ULL},
813663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                  {12, 11, 0x0, 0xfff8000000000000ULL},
814663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng};
815663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
816663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
817663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
818663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengstatic int nb_special_fargs;
819663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengstatic double * spec_fargs;
820663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
821663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengstatic void build_special_fargs_table(void)
822663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng{
823663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   /* The special floating point values created below are for
824663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng    * use in the ftdiv tests for setting the fe_flag and fg_flag,
825663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng    * but they can also be used for other tests (e.g., xscmpudp).
826663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng    *
827663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng    * Note that fl_flag is 'always '1' on ppc64 Linux.
828663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng    *
829663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng  Entry  Sign Exp   fraction                  Special value
830663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   0      0   3fd   0x8000000000000ULL         Positive finite number
831663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   1      0   404   0xf000000000000ULL         ...
832663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   2      0   001   0x8000000b77501ULL         ...
833663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   3      0   7fe   0x800000000051bULL         ...
834663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   4      0   012   0x3214569900000ULL         ...
835663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   5      0   000   0x0000000000000ULL         +0.0 (+zero)
836663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   6      1   000   0x0000000000000ULL         -0.0 (-zero)
837663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   7      0   7ff   0x0000000000000ULL         +infinity
838663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   8      1   7ff   0x0000000000000ULL         -infinity
839436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   9      0   7ff   0x7FFFFFFFFFFFFULL         +SNaN
840436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   10     1   7ff   0x7FFFFFFFFFFFFULL         -SNaN
841436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   11     0   7ff   0x8000000000000ULL         +QNaN
842436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   12     1   7ff   0x8000000000000ULL         -QNaN
843663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   13     1   000   0x8340000078000ULL         Denormalized val (zero exp and non-zero fraction)
844663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   14     1   40d   0x0650f5a07b353ULL         Negative finite number
845663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng    */
846663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
847663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   uint64_t mant;
848663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   uint16_t _exp;
849663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   int s;
850663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   int i = 0;
851663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
852663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   if (spec_fargs)
853663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng      return;
854663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
855663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   spec_fargs = malloc( 16 * sizeof(double) );
856663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
857663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   // #0
858663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   s = 0;
859663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   _exp = 0x3fd;
860663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   mant = 0x8000000000000ULL;
861663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   register_farg(&spec_fargs[i++], s, _exp, mant);
862663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
863663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   // #1
864663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   s = 0;
865663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   _exp = 0x404;
866663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   mant = 0xf000000000000ULL;
867663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   register_farg(&spec_fargs[i++], s, _exp, mant);
868663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
869663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   /* None of the ftdiv tests succeed.
870663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng    * FRA = value #0; FRB = value #1
871663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng    * ea_ = -2; e_b = 5
872663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng    * fl_flag || fg_flag || fe_flag = 100
873663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng    */
874663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
875663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   /*************************************************
876663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng    *     fe_flag tests
877663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng    *
878663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng    *************************************************/
879663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
880663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   /* fe_flag <- 1 if FRA is a NaN
881663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng    * FRA = value #9; FRB = value #1
882663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng    * e_a = 1024; e_b = 5
883663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng    * fl_flag || fg_flag || fe_flag = 101
884663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng    */
885663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
886663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   /* fe_flag <- 1 if FRB is a NaN
887663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng    * FRA = value #1; FRB = value #12
888663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng    * e_a = 5; e_b = 1024
889663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng    * fl_flag || fg_flag || fe_flag = 101
890663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng    */
891663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
892663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   /* fe_flag <- 1 if e_b <= -1022
893663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng    * FRA = value #0; FRB = value #2
894663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng    * e_a = -2; e_b = -1022
895663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng    * fl_flag || fg_flag || fe_flag = 101
896663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng    *
897663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng    */
898663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   // #2
899663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   s = 0;
900663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   _exp = 0x001;
901663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   mant = 0x8000000b77501ULL;
902663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   register_farg(&spec_fargs[i++], s, _exp, mant);
903663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
904663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   /* fe_flag <- 1 if e_b >= 1021
905663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng    * FRA = value #1; FRB = value #3
906663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng    * e_a = 5; e_b = 1023
907663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng    * fl_flag || fg_flag || fe_flag = 101
908663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng    */
909663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   // #3
910663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   s = 0;
911663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   _exp = 0x7fe;
912663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   mant = 0x800000000051bULL;
913663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   register_farg(&spec_fargs[i++], s, _exp, mant);
914663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
915663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   /* fe_flag <- 1 if FRA != 0 && e_a - e_b >= 1023
916663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng    * Let FRA = value #3 and FRB be value #0.
917663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng    * e_a = 1023; e_b = -2
918663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng    * fl_flag || fg_flag || fe_flag = 101
919663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng    */
920663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
921663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   /* fe_flag <- 1 if FRA != 0 && e_a - e_b <= -1023
922663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng    * Let FRA = value #0 above and FRB be value #3 above
923663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng    * e_a = -2; e_b = 1023
924663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng    * fl_flag || fg_flag || fe_flag = 101
925663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng    */
926663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
927663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   /* fe_flag <- 1 if FRA != 0 && e_a <= -970
928663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng    * Let FRA = value #4 and FRB be value #0
929663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng    * e_a = -1005; e_b = -2
930663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng    * fl_flag || fg_flag || fe_flag = 101
931663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   */
932663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   // #4
933663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   s = 0;
934663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   _exp = 0x012;
935663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   mant = 0x3214569900000ULL;
936663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   register_farg(&spec_fargs[i++], s, _exp, mant);
937663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
938663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   /*************************************************
939663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng    *     fg_flag tests
940663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng    *
941663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng    *************************************************/
942663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   /* fg_flag <- 1 if FRA is an Infinity
943663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng    * NOTE: FRA = Inf also sets fe_flag
944663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng    * Do two tests, using values #7 and #8 (+/- Inf) for FRA.
945663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng    * Test 1:
946663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng    *   Let FRA be value #7 and FRB be value #1
947663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng    *   e_a = 1024; e_b = 5
948663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng    *   fl_flag || fg_flag || fe_flag = 111
949663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng    *
950663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng    * Test 2:
951663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng    *   Let FRA be value #8 and FRB be value #1
952663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng    *   e_a = 1024; e_b = 5
953663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng    *   fl_flag || fg_flag || fe_flag = 111
954663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng    *
955663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng    */
956663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
957663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   /* fg_flag <- 1 if FRB is an Infinity
958663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng    * NOTE: FRB = Inf also sets fe_flag
959663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng    * Let FRA be value #1 and FRB be value #7
960663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng    * e_a = 5; e_b = 1024
961663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng    * fl_flag || fg_flag || fe_flag = 111
962663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng    */
963663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
964663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   /* fg_flag <- 1 if FRB is denormalized
965663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng    * NOTE: e_b < -1022 ==> fe_flag <- 1
966663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng    * Let FRA be value #0 and FRB be value #13
967663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng    * e_a = -2; e_b = -1023
968663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng    * fl_flag || fg_flag || fe_flag = 111
969663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng    */
970663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
971663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   /* fg_flag <- 1 if FRB is +zero
972663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng    * NOTE: FRA = Inf also sets fe_flag
973663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng    * Let FRA = val #5; FRB = val #5
974663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng    * ea_ = -1023; e_b = -1023
975663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng    * fl_flag || fg_flag || fe_flag = 111
976663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng    */
977663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
978663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   /* fg_flag <- 1 if FRB is -zero
979663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng    * NOTE: FRA = Inf also sets fe_flag
980663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng    * Let FRA = val #5; FRB = val #6
981663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng    * ea_ = -1023; e_b = -1023
982663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng    * fl_flag || fg_flag || fe_flag = 111
983663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng    */
984663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
985663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   /* Special values */
986663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   /* +0.0      : 0 0x000 0x0000000000000 */
987663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   // #5
988663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   s = 0;
989663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   _exp = 0x000;
990663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   mant = 0x0000000000000ULL;
991663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   register_farg(&spec_fargs[i++], s, _exp, mant);
992663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
993663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   /* -0.0      : 1 0x000 0x0000000000000 */
994663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   // #6
995663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   s = 1;
996663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   _exp = 0x000;
997663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   mant = 0x0000000000000ULL;
998663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   register_farg(&spec_fargs[i++], s, _exp, mant);
999663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
1000663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   /* +infinity : 0 0x7FF 0x0000000000000  */
1001663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   // #7
1002663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   s = 0;
1003663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   _exp = 0x7FF;
1004663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   mant = 0x0000000000000ULL;
1005663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   register_farg(&spec_fargs[i++], s, _exp, mant);
1006663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
1007663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   /* -infinity : 1 0x7FF 0x0000000000000 */
1008663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   // #8
1009663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   s = 1;
1010663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   _exp = 0x7FF;
1011663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   mant = 0x0000000000000ULL;
1012663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   register_farg(&spec_fargs[i++], s, _exp, mant);
1013663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
1014436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   /* +SNaN     : 0 0x7FF 0x7FFFFFFFFFFFF */
1015663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   // #9
1016663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   s = 0;
1017663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   _exp = 0x7FF;
1018663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   mant = 0x7FFFFFFFFFFFFULL;
1019663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   register_farg(&spec_fargs[i++], s, _exp, mant);
1020663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
1021436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   /* -SNaN     : 1 0x7FF 0x7FFFFFFFFFFFF */
1022663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   // #10
1023663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   s = 1;
1024663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   _exp = 0x7FF;
1025663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   mant = 0x7FFFFFFFFFFFFULL;
1026663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   register_farg(&spec_fargs[i++], s, _exp, mant);
1027663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
1028436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   /* +QNaN     : 0 0x7FF 0x8000000000000 */
1029663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   // #11
1030663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   s = 0;
1031663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   _exp = 0x7FF;
1032663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   mant = 0x8000000000000ULL;
1033663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   register_farg(&spec_fargs[i++], s, _exp, mant);
1034663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
1035436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   /* -QNaN     : 1 0x7FF 0x8000000000000 */
1036663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   // #12
1037663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   s = 1;
1038663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   _exp = 0x7FF;
1039663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   mant = 0x8000000000000ULL;
1040663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   register_farg(&spec_fargs[i++], s, _exp, mant);
1041663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
1042663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   /* denormalized value */
1043663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   // #13
1044663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   s = 1;
1045663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   _exp = 0x000;
1046663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   mant = 0x8340000078000ULL;
1047663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   register_farg(&spec_fargs[i++], s, _exp, mant);
1048663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
1049663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   /* Negative finite number */
1050663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   // #14
1051663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   s = 1;
1052663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   _exp = 0x40d;
1053663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   mant = 0x0650f5a07b353ULL;
1054663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   register_farg(&spec_fargs[i++], s, _exp, mant);
1055663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
1056663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   nb_special_fargs = i;
1057663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng}
1058663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
1059663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
1060663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengstruct test_table
1061663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng{
1062663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   test_func_t test_category;
1063663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   char * name;
1064663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng};
1065663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
1066663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengstruct p7_fp_test
1067663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng{
1068663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   test_func_t test_func;
1069663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   const char *name;
1070663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   int single;  // 1=single precision result; 0=double precision result
1071663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng};
1072663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
1073663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengtypedef enum {
1074663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   VX_FP_CMP,
1075663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   VX_FP_SMA,
1076663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   VX_FP_SMS,
1077663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   VX_FP_SNMA,
1078663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   VX_FP_OTHER
1079663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng} vx_fp_test_type;
1080663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
1081663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengstruct vx_fp_test
1082663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng{
1083663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   test_func_t test_func;
1084663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   const char *name;
1085663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   fp_test_args_t * targs;
1086663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   int num_tests;
1087663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   vx_fp_test_type test_type;
1088663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng};
1089663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
1090663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengstruct xs_conv_test
1091663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng{
1092663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   test_func_t test_func;
1093663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   const char *name;
1094663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   unsigned long long * results;
1095663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   int num_tests;
1096663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng};
1097663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
1098663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengtypedef enum {
1099663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   VSX_LOAD =1,
1100663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   VSX_LOAD_SPLAT,
1101663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   VSX_STORE
1102663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng} vsx_ldst_type;
1103663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
1104663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengstruct ldst_test
1105663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng{
1106663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   test_func_t test_func;
1107663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   const char *name;
1108663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   void * base_addr;
1109663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   uint32_t offset;
1110663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   int num_words_to_process;
1111663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   vsx_ldst_type type;
1112663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng};
1113663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
1114663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengtypedef enum {
1115663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   VSX_AND = 1,
1116663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   VSX_XOR,
1117663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   VSX_ANDC,
1118663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   VSX_OR,
1119663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   VSX_NOR
1120663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng} vsx_log_op;
1121663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
1122663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengstruct vsx_logic_test
1123663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng{
1124663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   test_func_t test_func;
1125663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   const char *name;
1126663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   vsx_log_op op;
1127663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng};
1128663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
1129663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengstruct vsx_move_test
1130663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng{
1131663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   test_func_t test_func;
1132663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   const char *name;
1133663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   int xa_idx, xb_idx;
1134663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   unsigned long long expected_result;
1135663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng};
1136663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
1137663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengstruct vsx_permute_test
1138663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng{
1139663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   test_func_t test_func;
1140663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   const char *name;
1141663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   unsigned int xa[4];
1142663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   unsigned int xb[4];
1143663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   unsigned int expected_output[4];
1144663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng};
1145663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
1146663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengstatic vector unsigned int vec_out, vec_inA, vec_inB;
1147663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
1148663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengstatic void test_lxsdx(void)
1149663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng{
1150663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   __asm__ __volatile__ ("lxsdx          %x0, %1, %2" : "=wa" (vec_out): "b" (r14),"r" (r15));
1151663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng}
1152663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
1153663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengstatic void
1154663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengtest_lxvd2x(void)
1155663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng{
1156663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   __asm__ __volatile__ ("lxvd2x          %x0, %1, %2" : "=wa" (vec_out): "b" (r14),"r" (r15));
1157663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng}
1158663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
1159663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengstatic void test_lxvdsx(void)
1160663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng{
1161663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   __asm__ __volatile__ ("lxvdsx          %x0, %1, %2" : "=wa" (vec_out): "b" (r14),"r" (r15));
1162663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng}
1163663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
1164663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengstatic void test_lxvw4x(void)
1165663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng{
1166663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   __asm__ __volatile__ ("lxvw4x          %x0, %1, %2" : "=wa" (vec_out): "b" (r14),"r" (r15));
1167663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng}
1168663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
1169663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengstatic void test_stxsdx(void)
1170663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng{
1171663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   __asm__ __volatile__ ("stxsdx          %x0, %1, %2" : : "wa" (vec_inA), "b" (r14),"r" (r15));
1172663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng}
1173663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
1174663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengstatic void test_stxvd2x(void)
1175663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng{
1176663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   __asm__ __volatile__ ("stxvd2x          %x0, %1, %2" : : "wa" (vec_inA), "b" (r14),"r" (r15));
1177663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng}
1178663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
1179663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengstatic void test_stxvw4x(void)
1180663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng{
1181663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   __asm__ __volatile__ ("stxvw4x          %x0, %1, %2" : : "wa" (vec_inA), "b" (r14),"r" (r15));
1182663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng}
1183663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
1184663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengstatic void test_xxlxor(void)
1185663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng{
1186663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   __asm__ __volatile__ ("xxlxor          %x0, %x1, %x2" : "=wa" (vec_out): "wa" (vec_inA),"wa" (vec_inB));
1187663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng}
1188663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
1189663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengstatic void test_xxlor(void)
1190663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng{
1191663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   __asm__ __volatile__ ("xxlor          %x0, %x1, %x2" : "=wa" (vec_out): "wa" (vec_inA),"wa" (vec_inB));
1192663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng}
1193663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
1194663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengstatic void test_xxlnor(void)
1195663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng{
1196663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   __asm__ __volatile__ ("xxlnor          %x0, %x1, %x2" : "=wa" (vec_out): "wa" (vec_inA),"wa" (vec_inB));
1197663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng}
1198663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
1199663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengstatic void test_xxland(void)
1200663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng{
1201663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   __asm__ __volatile__ ("xxland          %x0, %x1, %x2" : "=wa" (vec_out): "wa" (vec_inA),"wa" (vec_inB));
1202663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng}
1203663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
1204663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengstatic void test_xxlandc(void)
1205663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng{
1206663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   __asm__ __volatile__ ("xxlandc          %x0, %x1, %x2" : "=wa" (vec_out): "wa" (vec_inA),"wa" (vec_inB));
1207663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng}
1208663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
1209663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengstatic void test_xxmrghw(void)
1210663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng{
1211663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   __asm__ __volatile__ ("xxmrghw          %x0, %x1, %x2" : "=wa" (vec_out): "wa" (vec_inA),"wa" (vec_inB));
1212663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng}
1213663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
1214663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengstatic void test_xxmrglw(void)
1215663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng{
1216663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   __asm__ __volatile__ ("xxmrglw          %x0, %x1, %x2" : "=wa" (vec_out): "wa" (vec_inA),"wa" (vec_inB));
1217663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng}
1218663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
1219663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengstatic void test_xxpermdi_00(void)
1220663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng{
1221663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   __asm__ __volatile__ ("xxpermdi         %x0, %x1, %x2, 0x0" : "=wa" (vec_out): "wa" (vec_inA),"wa" (vec_inB));
1222663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng}
1223663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
1224663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengstatic void test_xxpermdi_01(void)
1225663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng{
1226663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   __asm__ __volatile__ ("xxpermdi         %x0, %x1, %x2, 0x1" : "=wa" (vec_out): "wa" (vec_inA),"wa" (vec_inB));
1227663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng}
1228663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
1229663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengstatic void test_xxpermdi_10(void)
1230663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng{
1231663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   __asm__ __volatile__ ("xxpermdi         %x0, %x1, %x2, 0x2" : "=wa" (vec_out): "wa" (vec_inA),"wa" (vec_inB));
1232663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng}
1233663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
1234663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengstatic void test_xxpermdi_11(void)
1235663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng{
1236663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   __asm__ __volatile__ ("xxpermdi         %x0, %x1, %x2, 0x3" : "=wa" (vec_out): "wa" (vec_inA),"wa" (vec_inB));
1237663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng}
1238663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
1239663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengstatic void test_xxsldwi_0(void)
1240663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng{
1241663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   __asm__ __volatile__ ("xxsldwi         %x0, %x1, %x2, 0" : "=wa" (vec_out): "wa" (vec_inA),"wa" (vec_inB));
1242663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng}
1243663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
1244663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengstatic void test_xxsldwi_1(void)
1245663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng{
1246663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   __asm__ __volatile__ ("xxsldwi         %x0, %x1, %x2, 1" : "=wa" (vec_out): "wa" (vec_inA),"wa" (vec_inB));
1247663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng}
1248663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
1249663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengstatic void test_xxsldwi_2(void)
1250663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng{
1251663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   __asm__ __volatile__ ("xxsldwi         %x0, %x1, %x2, 2" : "=wa" (vec_out): "wa" (vec_inA),"wa" (vec_inB));
1252663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng}
1253663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
1254663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengstatic void test_xxsldwi_3(void)
1255663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng{
1256663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   __asm__ __volatile__ ("xxsldwi         %x0, %x1, %x2, 3" : "=wa" (vec_out): "wa" (vec_inA),"wa" (vec_inB));
1257663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng}
1258663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
1259663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengstatic void test_fcfids (void)
1260663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng{
1261663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng    __asm__ __volatile__ ("fcfids          %0, %1" : "=f" (f17): "d" (f14));
1262663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng}
1263663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
1264663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengstatic void test_fcfidus (void)
1265663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng{
1266663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng    __asm__ __volatile__ ("fcfidus          %0, %1" : "=f" (f17): "d" (f14));
1267663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng}
1268663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
1269663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengstatic void test_fcfidu (void)
1270663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng{
1271663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng    __asm__ __volatile__ ("fcfidu          %0, %1" : "=f" (f17): "d" (f14));
1272663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng}
1273663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
1274663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengstatic void test_xsabsdp (void)
1275663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng{
1276663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   __asm__ __volatile__ ("xsabsdp          %x0, %x1" : "=wa" (vec_out): "wa" (vec_inB));
1277663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng}
1278663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
1279663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengstatic void test_xscpsgndp (void)
1280663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng{
1281663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   __asm__ __volatile__ ("xscpsgndp          %x0, %x1, %x2" : "=wa" (vec_out): "wa" (vec_inA),"wa" (vec_inB));
1282663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng}
1283663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
1284663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengstatic void test_xsnabsdp (void)
1285663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng{
1286663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   __asm__ __volatile__ ("xsnabsdp          %x0, %x1" : "=wa" (vec_out): "wa" (vec_inB));
1287663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng}
1288663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
1289663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengstatic void test_xsnegdp (void)
1290663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng{
1291663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   __asm__ __volatile__ ("xsnegdp          %x0, %x1" : "=wa" (vec_out): "wa" (vec_inB));
1292663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng}
1293663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
1294663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengstatic int do_cmpudp;
1295663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengstatic void test_xscmp (void)
1296663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng{
1297663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   if (do_cmpudp)
1298663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng      __asm__ __volatile__ ("xscmpudp          cr1, %x0, %x1" : : "wa" (vec_inA),"wa" (vec_inB));
1299663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   else
1300663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng      __asm__ __volatile__ ("xscmpodp          cr1, %x0, %x1" : : "wa" (vec_inA),"wa" (vec_inB));
1301663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng}
1302663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
1303663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengstatic void test_xsadddp(void)
1304663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng{
1305663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   __asm__ __volatile__ ("xsadddp          %x0, %x1, %x2" : "=wa" (vec_out): "wa" (vec_inA),"wa" (vec_inB));
1306663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng}
1307663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
1308663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengstatic void test_xsdivdp(void)
1309663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng{
1310663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   __asm__ __volatile__ ("xsdivdp          %x0, %x1, %x2" : "=wa" (vec_out): "wa" (vec_inA),"wa" (vec_inB));
1311663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng}
1312663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
1313663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengstatic int do_adp;
1314663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengstatic void test_xsmadd(void)
1315663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng{
1316663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   if (do_adp)
1317663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng      __asm__ __volatile__ ("xsmaddadp          %x0, %x1, %x2" : "+wa" (vec_out): "wa" (vec_inA),"wa" (vec_inB));
1318663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   else
1319663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng      __asm__ __volatile__ ("xsmaddmdp          %x0, %x1, %x2" : "+wa" (vec_out): "wa" (vec_inA),"wa" (vec_inB));
1320663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng}
1321663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
1322663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengstatic void test_xsmsub(void)
1323663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng{
1324663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   if (do_adp)
1325663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng      __asm__ __volatile__ ("xsmsubadp          %x0, %x1, %x2" : "+wa" (vec_out): "wa" (vec_inA),"wa" (vec_inB));
1326663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   else
1327663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng      __asm__ __volatile__ ("xsmsubmdp          %x0, %x1, %x2" : "+wa" (vec_out): "wa" (vec_inA),"wa" (vec_inB));
1328663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng}
1329663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
1330663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengstatic void test_xsnmadd(void)
1331663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng{
1332663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   if (do_adp)
1333663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng      __asm__ __volatile__ ("xsnmaddadp          %x0, %x1, %x2" : "+wa" (vec_out): "wa" (vec_inA),"wa" (vec_inB));
1334663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   else
1335663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng      __asm__ __volatile__ ("xsnmaddmdp          %x0, %x1, %x2" : "+wa" (vec_out): "wa" (vec_inA),"wa" (vec_inB));
1336663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng}
1337663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
1338663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengstatic void test_xsmuldp(void)
1339663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng{
1340663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   __asm__ __volatile__ ("xsmuldp          %x0, %x1, %x2" : "=wa" (vec_out): "wa" (vec_inA),"wa" (vec_inB));
1341663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng}
1342663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
1343663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengstatic void test_xssubdp(void)
1344663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng{
1345663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   __asm__ __volatile__ ("xssubdp          %x0, %x1, %x2" : "=wa" (vec_out): "wa" (vec_inA),"wa" (vec_inB));
1346663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng}
1347663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
1348663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengstatic void test_xscvdpsxds (void)
1349663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng{
1350663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   __asm__ __volatile__ ("xscvdpsxds          %x0, %x1" : "=wa" (vec_out): "wa" (vec_inB));
1351663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng}
1352663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
1353663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengstatic void test_xscvsxddp (void)
1354663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng{
1355663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   __asm__ __volatile__ ("xscvsxddp          %x0, %x1" : "=wa" (vec_out): "wa" (vec_inB));
1356663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng}
1357663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
1358663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengstatic void test_xscvuxddp (void)
1359663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng{
1360663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   __asm__ __volatile__ ("xscvuxddp          %x0, %x1" : "=wa" (vec_out): "wa" (vec_inB));
1361663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng}
1362663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
1363663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengstatic unsigned int vstg[] __attribute__ ((aligned (16))) = { 0, 0, 0,0,
1364663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                                              0, 0, 0, 0 };
1365663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
1366663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng#define NUM_VSTG_INTS (sizeof vstg/sizeof vstg[0])
1367663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng#define NUM_VSTG_VECS (NUM_VSTG_INTS/4)
1368663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
1369663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengstatic unsigned int viargs[] __attribute__ ((aligned (16))) = { 0x01234567,
1370663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                                                0x89abcdef,
1371663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                                                0x00112233,
1372663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                                                0x44556677,
1373663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                                                0x8899aabb,
1374663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                                                0x91929394,
1375663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                                                0xa1a2a3a4,
1376663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                                                0xb1b2b3b4,
1377663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                                                0xc1c2c3c4,
1378663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                                                0xd1d2d3d4,
1379663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                                                0x7a6b5d3e
1380663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng};
1381663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng#define NUM_VIARGS_INTS (sizeof viargs/sizeof viargs[0])
1382663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng#define NUM_VIARGS_VECS  (NUM_VIARGS_INTS/4)
1383663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
1384663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengstatic ldst_test_t ldst_tests[] = { { &test_lxsdx, "lxsdx", viargs, 0, 2, VSX_LOAD },
1385663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                     { &test_lxsdx, "lxsdx", viargs, 4, 2, VSX_LOAD },
1386663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                     { &test_lxvd2x, "lxvd2x", viargs, 0, 4, VSX_LOAD },
1387663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                     { &test_lxvd2x, "lxvd2x", viargs, 4, 4, VSX_LOAD },
1388663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                     { &test_lxvdsx, "lxvdsx", viargs, 0, 4, VSX_LOAD_SPLAT },
1389663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                     { &test_lxvdsx, "lxvdsx", viargs, 4, 4, VSX_LOAD_SPLAT },
1390663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                     { &test_lxvw4x, "lxvw4x", viargs, 0, 4, VSX_LOAD },
1391663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                     { &test_lxvw4x, "lxvw4x", viargs, 4, 4, VSX_LOAD },
1392663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                     { &test_stxsdx, "stxsdx", vstg, 0, 2, VSX_STORE },
1393663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                     { &test_stxsdx, "stxsdx", vstg, 4, 2, VSX_STORE },
1394663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                     { &test_stxvd2x, "stxvd2x", vstg, 0, 4, VSX_STORE },
1395663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                     { &test_stxvd2x, "stxvd2x", vstg, 4, 4, VSX_STORE },
1396663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                     { &test_stxvw4x, "stxvw4x", vstg, 0, 4, VSX_STORE },
1397663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                     { &test_stxvw4x, "stxvw4x", vstg, 4, 4, VSX_STORE },
1398663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                     { NULL, NULL, NULL, 0, 0, 0 } };
1399663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
1400663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengstatic logic_test_t logic_tests[] = { { &test_xxlxor, "xxlxor", VSX_XOR },
1401663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                      { &test_xxlor, "xxlor", VSX_OR } ,
1402663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                      { &test_xxlnor, "xxlnor", VSX_NOR },
1403663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                      { &test_xxland, "xxland", VSX_AND },
1404663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                      { &test_xxlandc, "xxlandc", VSX_ANDC },
1405663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                      { NULL, NULL}};
1406663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
1407663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengstatic move_test_t move_tests[] = { { &test_xsabsdp, "xsabsdp", 0, 4, 0x0899aabb91929394ULL },
1408663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                    { &test_xscpsgndp, "xscpsgndp", 4, 0, 0x8123456789abcdefULL },
1409663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                    { &test_xsnabsdp, "xsnabsdp", 7, 3, 0xc45566778899aabbULL, },
1410663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                    { &test_xsnegdp, "xsnegdp", 0, 7, 0x31b2b3b4c1c2c3c4ULL, },
1411663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                    { NULL, NULL, 0, 0, 0 }
1412663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
1413663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng};
1414663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
1415663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengstatic permute_test_t permute_tests[] =
1416663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng{
1417663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng  { &test_xxmrghw, "xxmrghw",
1418663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng    { 0x11111111, 0x22222222, 0x33333333, 0x44444444 }, /* XA input */
1419663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng    { 0x55555555, 0x66666666, 0x77777777, 0x88888888 }, /* XB input */
1420663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng    { 0x11111111, 0x55555555, 0x22222222, 0x66666666 }  /* XT expected output */
1421663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng  },
1422663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng  { &test_xxmrghw, "xxmrghw",
1423663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng    { 0x00112233, 0x44556677, 0x8899aabb, 0xccddeeff }, /* XA input */
1424663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng    { 0x11111111, 0x22222222, 0x33333333, 0x44444444 }, /* XB input */
1425663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng    { 0x00112233, 0x11111111, 0x44556677, 0x22222222 }  /* XT expected output */
1426663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng  },
1427663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng  { &test_xxmrglw, "xxmrglw",
1428663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng    { 0x11111111, 0x22222222, 0x33333333, 0x44444444 }, /* XA input */
1429663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng    { 0x55555555, 0x66666666, 0x77777777, 0x88888888 }, /* XB input */
1430663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng    { 0x33333333, 0x77777777, 0x44444444, 0x88888888 }  /* XT expected output */
1431663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng  },
1432663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng  { &test_xxmrglw, "xxmrglw",
1433663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng    { 0x00112233, 0x44556677, 0x8899aabb, 0xccddeeff}, /* XA input */
1434663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng    { 0x11111111, 0x22222222, 0x33333333, 0x44444444}, /* XB input */
1435663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng    { 0x8899aabb, 0x33333333, 0xccddeeff, 0x44444444}  /* XT expected output */
1436663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng  },
1437663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng  { &test_xxpermdi_00, "xxpermdi DM=00",
1438663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng    { 0x11111111, 0x22222222, 0x33333333, 0x44444444 }, /* XA input */
1439663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng    { 0x55555555, 0x66666666, 0x77777777, 0x88888888 }, /* XB input */
1440663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng    { 0x11111111, 0x22222222, 0x55555555, 0x66666666 }  /* XT expected output */
1441663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng  },
1442663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng  { &test_xxpermdi_01, "xxpermdi DM=01",
1443663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng    { 0x11111111, 0x22222222, 0x33333333, 0x44444444 }, /* XA input */
1444663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng    { 0x55555555, 0x66666666, 0x77777777, 0x88888888 }, /* XB input */
1445663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng    { 0x11111111, 0x22222222, 0x77777777, 0x88888888 }  /* XT expected output */
1446663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng  },
1447663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng  { &test_xxpermdi_10, "xxpermdi DM=10",
1448663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng    { 0x11111111, 0x22222222, 0x33333333, 0x44444444 }, /* XA input */
1449663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng    { 0x55555555, 0x66666666, 0x77777777, 0x88888888 }, /* XB input */
1450663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng    { 0x33333333, 0x44444444, 0x55555555, 0x66666666 }  /* XT expected output */
1451663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng  },
1452663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng  { &test_xxpermdi_11, "xxpermdi DM=11",
1453663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng    { 0x11111111, 0x22222222, 0x33333333, 0x44444444 }, /* XA input */
1454663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng    { 0x55555555, 0x66666666, 0x77777777, 0x88888888 }, /* XB input */
1455663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng    { 0x33333333, 0x44444444, 0x77777777, 0x88888888 }  /* XT expected output */
1456663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng  },
1457663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng  { &test_xxsldwi_0, "xxsldwi SHW=0",
1458663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng    { 0x11111111, 0x22222222, 0x33333333, 0x44444444 }, /* XA input */
1459663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng    { 0x55555555, 0x66666666, 0x77777777, 0x88888888 }, /* XB input */
1460663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng    { 0x11111111, 0x22222222, 0x33333333, 0x44444444 }  /* XT expected output */
1461663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng  },
1462663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng  { &test_xxsldwi_1, "xxsldwi SHW=1",
1463663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng    { 0x11111111, 0x22222222, 0x33333333, 0x44444444 }, /* XA input */
1464663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng    { 0x55555555, 0x66666666, 0x77777777, 0x88888888 }, /* XB input */
1465663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng    { 0x22222222, 0x33333333, 0x44444444, 0x55555555 }  /* XT expected output */
1466663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng  },
1467663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng  { &test_xxsldwi_2, "xxsldwi SHW=2",
1468663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng    { 0x11111111, 0x22222222, 0x33333333, 0x44444444 }, /* XA input */
1469663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng    { 0x55555555, 0x66666666, 0x77777777, 0x88888888 }, /* XB input */
1470663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng    { 0x33333333, 0x44444444, 0x55555555, 0x66666666 }  /* XT expected output */
1471663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng  },
1472663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng  { &test_xxsldwi_3, "xxsldwi SHW=3",
1473663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng    { 0x11111111, 0x22222222, 0x33333333, 0x44444444 }, /* XA input */
1474663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng    { 0x55555555, 0x66666666, 0x77777777, 0x88888888 }, /* XB input */
1475663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng    { 0x44444444, 0x55555555, 0x66666666, 0x77777777 }  /* XT expected output */
1476663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng  },
1477663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng  { NULL, NULL }
1478663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng};
1479663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
1480663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengstatic fp_test_t fp_tests[] = { { &test_fcfids, "fcfids", 1 },
1481663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                { &test_fcfidus, "fcfidus", 1 },
1482663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                { &test_fcfidu, "fcfidu", 1 },
1483663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                { NULL, NULL, 0 },
1484663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
1485663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng};
1486663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
1487663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengstatic vx_fp_test_t vx_fp_tests[] = {
1488663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                     { &test_xscmp, "xscmp", xscmpX_tests, 64, VX_FP_CMP},
1489663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                     { &test_xsadddp, "xsadddp", xsadddp_tests, 64, VX_FP_OTHER},
1490663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                     { &test_xsdivdp, "xsdivdp", xsdivdp_tests, 64, VX_FP_OTHER},
1491663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                     { &test_xsmadd, "xsmadd", xsmaddXdp_tests, 64, VX_FP_SMA},
1492663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                     { &test_xsmsub, "xsmsub", xsmsubXdp_tests, 64, VX_FP_SMS},
1493663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                     { &test_xsnmadd, "xsnmadd", xsnmaddXdp_tests, 64, VX_FP_SNMA},
1494663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                     { & test_xsmuldp, "xsmuldp", xsmuldp_tests, 64, VX_FP_OTHER},
1495663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                     { & test_xssubdp, "xssubdp", xssubdp_tests, 64, VX_FP_OTHER},
1496663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                     { NULL, NULL, NULL, 0, 0 }
1497663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng};
1498663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
1499663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengstatic xs_conv_test_t xs_conv_tests[] = {
1500663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                         { &test_xscvdpsxds, "xscvdpsxds", xscvdpsxds_results, 15},
1501663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                         { &test_xscvsxddp, "xscvsxddp", xscvsxddp_results, 15},
1502663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                         { &test_xscvuxddp, "xscvuxddp", xscvuxddp_results, 15},
1503663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                         { NULL, NULL, NULL, 0}
1504663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng};
1505663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
1506663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng#ifdef __powerpc64__
1507663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengstatic void test_ldbrx(void)
1508663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng{
1509663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   int i, equality;
1510663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   HWord_t reg_out;
1511663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   unsigned char * byteIn, * byteOut;
1512663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   r14 = (HWord_t)viargs;
1513663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   // Just try the instruction an arbitrary number of times at different r15 offsets.
1514663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   for (i = 0; i < 3; i++) {
1515663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng      int j, k;
1516663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng      reg_out = 0;
1517663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng      r15 = i * 4;
1518663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng      equality = 1;
1519663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng      __asm__ __volatile__ ("ldbrx          %0, %1, %2" : "=r" (reg_out): "b" (r14),"r" (r15));
1520663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng      byteIn = ((unsigned char *)(r14 + r15));
1521663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng      byteOut = (unsigned char *)&reg_out;
1522663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
1523663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng      printf("ldbrx:");
1524663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng      for (k = 0; k < 7; k++) {
1525663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng         printf( " %02x", (byteIn[k]));
1526663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng      }
1527663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng      printf(" (reverse) =>");
1528663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng      for (j = 0; j < 8; j++) {
1529663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng         printf( " %02x", (byteOut[j]));
1530663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng      }
1531663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng      printf("\n");
1532663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng      for (j = 0, k = 7; j < 8; j++, k--) {
1533663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng         equality &= (byteIn[k] == byteOut[j]);
1534663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng      }
1535663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng      if (!equality) {
1536663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng         printf("FAILED: load with byte reversal is incorrect\n");
1537663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng         errors++;
1538663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng      }
1539663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   }
1540663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   printf( "\n" );
1541663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng}
1542663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
1543663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengstatic void
1544663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengtest_popcntd(void)
1545663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng{
1546663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   uint64_t res;
1547663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   unsigned long long src = 0x9182736405504536ULL;
1548663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   int i, answer = 0;
1549663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   r14 = src;
1550663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   __asm__ __volatile__ ("popcntd          %0, %1" : "=r" (res): "r" (r14));
1551663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   for (i = 0; i < 64; i++) {
1552663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng      answer += (r14 & 1ULL);
1553663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng      r14 = r14 >> 1;
1554663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   }
1555663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   printf("popcntd: 0x%llx => %d\n", src, (int)res);
1556663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   if (res!= answer) {
1557663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng      printf("Error: unexpected result from popcntd\n");
1558663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng      errors++;
1559663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   }
1560663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   printf( "\n" );
1561663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng}
1562663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng#endif
1563663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
1564663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengstatic void
1565663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengtest_lfiwzx(void)
1566663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng{
1567663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   unsigned int i;
1568663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   unsigned int * src;
1569663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   uint64_t reg_out;
1570663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   r14 = (HWord_t)viargs;
1571663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   // Just try the instruction an arbitrary number of times at different r15 offsets.
1572663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   for (i = 0; i < 3; i++) {
1573663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng      reg_out = 0;
1574663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng      r15 = i * 4;
1575663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng      __asm__ __volatile__ ("lfiwzx          %0, %1, %2" : "=d" (reg_out): "b" (r14),"r" (r15));
1576663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng      src = ((unsigned int *)(r14 + r15));
1577663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng      printf("lfiwzx: %u => %llu.00\n", *src, (unsigned long long)reg_out);
1578663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
1579663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng      if (reg_out > 0xFFFFFFFFULL || *src != (unsigned int)reg_out) {
1580663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng         printf("FAILED: integer load to FP register is incorrect\n");
1581663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng         errors++;
1582663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng      }
1583663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   }
1584663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   printf( "\n" );
1585663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng}
1586663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
1587663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengstatic void test_vx_fp_ops(void)
1588663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng{
1589663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
1590663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   test_func_t func;
1591663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   int k;
1592663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   char * test_name = (char *)malloc(20);
1593663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   k = 0;
1594663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
1595663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   build_special_fargs_table();
1596663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   while ((func = vx_fp_tests[k].test_func)) {
1597663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng      int i, condreg, repeat = 0;
1598663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng      unsigned int flags;
1599663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng      unsigned long long * frap, * frbp, * dst;
1600663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng      vx_fp_test_t test_group = vx_fp_tests[k];
1601663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng      vx_fp_test_type test_type = test_group.test_type;
1602663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
1603663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng      switch (test_type) {
1604663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng         case VX_FP_CMP:
1605663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng            strcpy(test_name, "xscmp");
1606663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng            if (!repeat) {
1607663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng               repeat = 1;
1608663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng               strcat(test_name, "udp");
1609663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng               do_cmpudp = 1;
1610663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng            }
1611663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng            break;
1612663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng         case VX_FP_SMA:
1613663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng         case VX_FP_SMS:
1614663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng         case VX_FP_SNMA:
1615663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng            if (test_type == VX_FP_SMA)
1616663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng               strcpy(test_name, "xsmadd");
1617663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng            else if (test_type == VX_FP_SMS)
1618663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng               strcpy(test_name, "xsmsub");
1619663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng            else
1620663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng               strcpy(test_name, "xsnmadd");
1621663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng            if (!repeat) {
1622663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng               repeat = 1;
1623663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng               strcat(test_name, "adp");
1624663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng               do_adp = 1;
1625663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng            }
1626663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng            break;
1627663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng         case VX_FP_OTHER:
1628663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng            strcpy(test_name, test_group.name);
1629663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng            break;
1630663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng         default:
1631663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng            printf("ERROR:  Invalid VX FP test type %d\n", test_type);
1632663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng            exit(1);
1633663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng      }
1634663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
1635663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengagain:
1636663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng      for (i = 0; i < test_group.num_tests; i++) {
1637663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng         unsigned int * inA, * inB, * pv;
1638663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
1639663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng         fp_test_args_t aTest = test_group.targs[i];
1640663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng         inA = (unsigned int *)&spec_fargs[aTest.fra_idx];
1641663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng         inB = (unsigned int *)&spec_fargs[aTest.frb_idx];
1642663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng         frap = (unsigned long long *)&spec_fargs[aTest.fra_idx];
1643663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng         frbp = (unsigned long long *)&spec_fargs[aTest.frb_idx];
1644663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng         // Only need to copy one doubleword into each vector's element 0
1645663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng         memcpy(&vec_inA, inA, 8);
1646663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng         memcpy(&vec_inB, inB, 8);
1647663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
1648663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng         switch (test_type) {
1649663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng            case VX_FP_CMP:
1650663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng               SET_FPSCR_ZERO;
1651663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng               SET_CR_XER_ZERO;
1652663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng               (*func)();
1653663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng               GET_CR(flags);
1654663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng               condreg = (flags & 0x0f000000) >> 24;
1655663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng               printf("#%d: %s %016llx <=> %016llx ? %x (CRx)\n", i, test_name, *frap, *frbp, condreg);
1656663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng              // printf("\tFRA: %e;  FRB: %e\n", spec_fargs[aTest.fra_idx], spec_fargs[aTest.frb_idx]);
1657663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng               if ( condreg != aTest.cr_flags) {
1658663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                  printf("Error: Expected CR flags 0x%x; actual flags: 0x%x\n", aTest.cr_flags, condreg);
1659663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                  errors++;
1660663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng               }
1661663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng               break;
1662663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng            case VX_FP_SMA:
1663663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng            case VX_FP_SMS:
1664663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng            case VX_FP_SNMA:
1665663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng            case VX_FP_OTHER:
1666663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng            {
1667663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng               int idx;
1668663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng               unsigned long long vsr_XT;
1669663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng               pv = (unsigned int *)&vec_out;
1670663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng               // clear vec_out
1671663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng               for (idx = 0; idx < 4; idx++, pv++)
1672663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                  *pv = 0;
1673663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
1674663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng               if (test_type != VX_FP_OTHER) {
1675663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                  /* Then we need a third src argument, which is stored in element 0 of
1676663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                   * VSX[XT] -- i.e., vec_out.  For the xs<ZZZ>mdp cases, VSX[XT] holds
1677663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                   * src3 and VSX[XB] holds src2; for the xs<ZZZ>adp cases, VSX[XT] holds
1678663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                   * src2 and VSX[XB] holds src3.  The fp_test_args_t that holds the test
1679663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                   * data (input args, result) contain only two inputs, so I arbitrarily
1680663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                   * use spec_fargs elements 4 and 14 (alternating) for the third source
1681663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                   * argument.  We can use the same input data for a given pair of
1682663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                   * adp/mdp-type instructions by swapping the src2 and src3 arguments; thus
1683663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                   * the expected result should be the same.
1684663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                   */
1685663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                  int extra_arg_idx;
1686663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                  if (i % 2)
1687663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                     extra_arg_idx = 4;
1688663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                  else
1689663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                     extra_arg_idx = 14;
1690663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
1691663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                     //memcpy(&vec_out, &spec_fargs[14], 8);
1692663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
1693663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                  if (repeat) {
1694663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                     /* We're on the first time through of one of the VX_FP_SMx
1695663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                      * test types, meaning we're testing a xs<ZZZ>adp case, thus we
1696663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                      * have to swap inputs as described above:
1697663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                      *    src2 <= VSX[XT]
1698663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                      *    src3 <= VSX[XB]
1699663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                      */
1700663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                     memcpy(&vec_out, inB, 8);  // src2
1701663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                     memcpy(&vec_inB, &spec_fargs[extra_arg_idx], 8);  //src3
1702663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                     frbp = (unsigned long long *)&spec_fargs[extra_arg_idx];
1703663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                  } else {
1704663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                     // Don't need to init src2, as it's done before the switch()
1705663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                     memcpy(&vec_out, &spec_fargs[extra_arg_idx], 8);  //src3
1706663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                  }
1707663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                  memcpy(&vsr_XT, &vec_out, 8);
1708663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng               }
1709663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
1710663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng               (*func)();
1711663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng               dst = (unsigned long long *) &vec_out;
1712663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng               if (test_type == VX_FP_OTHER)
1713663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                  printf("#%d: %s %016llx %016llx = %016llx\n", i, test_name, *frap, *frbp, *dst);
1714663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng               else
1715663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                  printf( "#%d: %s %016llx %016llx %016llx = %016llx\n", i,
1716663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                          test_name, vsr_XT, *frap, *frbp, *dst );
1717663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
1718663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng               if ( *dst != aTest.dp_bin_result) {
1719663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                  printf("Error: Expected result %016llx; actual result %016llx\n", aTest.dp_bin_result, *dst);
1720663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                  errors++;
1721663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng               }
1722663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng               /*
1723663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng              {
1724663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                  // Debug code.  Keep this block commented out except when debugging.
1725663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                  double result, expected;
1726663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                  memcpy(&result, dst, 8);
1727663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                  memcpy(&expected, &aTest.dp_bin_result, 8);
1728663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                  printf( "\tFRA + FRB: %e + %e: Expected = %e; Actual = %e\n",
1729663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                          spec_fargs[aTest.fra_idx], spec_fargs[aTest.frb_idx],
1730663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                          expected, result );
1731663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng               }
1732663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng              */
1733663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng               break;
1734663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng            }
1735663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng         }
1736663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
1737663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
1738663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng      }
1739663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng      printf( "\n" );
1740663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
1741663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng      if (repeat) {
1742663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng         repeat = 0;
1743663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng         switch (test_type) {
1744663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng            case VX_FP_CMP:
1745663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng               strcpy(test_name, "xscmp");
1746663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng               strcat(test_name, "odp");
1747663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng               do_cmpudp = 0;
1748663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng               break;
1749663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng            case VX_FP_SMA:
1750663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng            case VX_FP_SMS:
1751663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng            case VX_FP_SNMA:
1752663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng               if (test_type == VX_FP_SMA)
1753663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                  strcpy(test_name, "xsmadd");
1754663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng               else if (test_type == VX_FP_SMS)
1755663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                  strcpy(test_name, "xsmsub");
1756663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng               else
1757663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                  strcpy(test_name, "xsnmadd");
1758663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng               strcat(test_name, "mdp");
1759663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng               do_adp = 0;
1760663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng               break;
1761663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng            case VX_FP_OTHER:
1762663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng               break;
1763663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng         }
1764663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng         goto again;
1765663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng      }
1766663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng      k++;
1767663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   }
1768663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   printf( "\n" );
1769663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   free(test_name);
1770663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng}
1771663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
1772663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengstatic void test_xs_conv_ops(void)
1773663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng{
1774663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
1775663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   test_func_t func;
1776663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   int k = 0;
1777663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
1778663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   build_special_fargs_table();
1779663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   while ((func = xs_conv_tests[k].test_func)) {
1780663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng      int i;
1781663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng      unsigned long long * frbp, * dst;
1782663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng      xs_conv_test_t test_group = xs_conv_tests[k];
1783663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng      for (i = 0; i < test_group.num_tests; i++) {
1784663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng         unsigned int * inB, * pv;
1785663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng         int idx;
1786663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng         unsigned long long exp_result = test_group.results[i];
1787663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng         inB = (unsigned int *)&spec_fargs[i];
1788663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng         frbp = (unsigned long long *)&spec_fargs[i];
1789663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng         memcpy(&vec_inB, inB, 8);
1790663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng         pv = (unsigned int *)&vec_out;
1791663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng         // clear vec_out
1792663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng         for (idx = 0; idx < 4; idx++, pv++)
1793663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng            *pv = 0;
1794663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng         (*func)();
1795663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng         dst = (unsigned long long *) &vec_out;
1796663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng         printf("#%d: %s %016llx => %016llx\n", i, test_group.name, *frbp, *dst);
1797663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
1798663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng         if ( *dst != exp_result) {
1799663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng            printf("Error: Expected result %016llx; actual result %016llx\n", exp_result, *dst);
1800663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng            errors++;
1801663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng         }
1802663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng      }
1803663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng      k++;
1804663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng      printf("\n");
1805663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   }
1806663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   printf( "\n" );
1807663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng}
1808663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
1809663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengstatic void do_load_test(ldst_test_t loadTest)
1810663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng{
1811663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   test_func_t func;
1812663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   unsigned int *src, *dst;
1813663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   int splat = loadTest.type == VSX_LOAD_SPLAT ? 1: 0;
1814663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   int i, j, m, equality;
1815663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   i = j = 0;
1816663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
1817663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   func = loadTest.test_func;
1818663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   for (i = 0, r14 = (HWord_t) loadTest.base_addr; i < NUM_VIARGS_VECS; i++) {
1819663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng      int again;
1820663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng      j = 0;
1821663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng       r14 += i * 16;
1822663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng      do {
1823663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng         unsigned int * pv = (unsigned int *)&vec_out;
1824663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng         int idx;
1825663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng         // clear vec_out
1826663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng         for (idx = 0; idx < 4; idx++, pv+=idx)
1827663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng            *pv = 0;
1828663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
1829663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng         again = 0;
1830663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng         r15 = j;
1831663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
1832663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng         // execute test insn
1833663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng         (*func)();
1834663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
1835663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng         src = (unsigned int*) (((unsigned char *)r14) + j);
1836663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng         dst = (unsigned int*) &vec_out;
1837663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
1838663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng         printf( "%s:", loadTest.name);
1839663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng         for (m = 0; m < loadTest.num_words_to_process; m++) {
1840663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng            printf( " %08x", src[splat ? m % 2 : m]);
1841663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng         }
1842663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng         printf( " =>");
1843663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng         for (m = 0; m < loadTest.num_words_to_process; m++) {
1844663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng            printf( " %08x", dst[m]);
1845663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng         }
1846663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng         printf("\n");
1847663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng         equality = 1;
1848663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng         for (m = 0; m < loadTest.num_words_to_process; m++) {
1849663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng            equality = equality && (src[splat ? m % 2 : m] == dst[m]);
1850663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng         }
1851663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
1852663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng         if (!equality) {
1853663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng            printf("FAILED: loaded vector is incorrect\n");
1854663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng            errors++;
1855663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng         }
1856663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
1857663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng         if (j == 0 && loadTest.offset) {
1858663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng            again = 1;
1859663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng            j += loadTest.offset;
1860663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng         }
1861663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng      }
1862663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng      while (again);
1863663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   }
1864663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng}
1865663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
1866663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengstatic void
1867663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengdo_store_test ( ldst_test_t storeTest )
1868663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng{
1869663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   test_func_t func;
1870663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   unsigned int *src, *dst;
1871663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   int m, equality;
1872663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
1873663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   func = storeTest.test_func;
1874663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   r14 = (HWord_t) storeTest.base_addr;
1875663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   r15 = (HWord_t) storeTest.offset;
1876663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   unsigned int * pv = (unsigned int *) storeTest.base_addr;
1877663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   int idx;
1878663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   // clear out storage destination
1879663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   for (idx = 0; idx < 4; idx++, pv += idx)
1880663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng      *pv = 0;
1881663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
1882663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   memcpy(&vec_inA, &viargs[0], sizeof(vector unsigned char));
1883663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
1884663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   // execute test insn
1885663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   (*func)();
1886663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   src = &viargs[0];
1887663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   dst = (unsigned int*) (((unsigned char *) r14) + storeTest.offset);
1888663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
1889663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   printf( "%s:", storeTest.name );
1890663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   for (m = 0; m < storeTest.num_words_to_process; m++) {
1891663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng      printf( " %08x", src[m] );
1892663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   }
1893663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   printf( " =>" );
1894663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   for (m = 0; m < storeTest.num_words_to_process; m++) {
1895663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng      printf( " %08x", dst[m] );
1896663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   }
1897663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   printf( "\n" );
1898663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   equality = 1;
1899663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   for (m = 0; m < storeTest.num_words_to_process; m++) {
1900663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng      equality = equality && (src[m] == dst[m]);
1901663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   }
1902663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
1903663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   if (!equality) {
1904663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng      printf( "FAILED: vector store result is incorrect\n" );
1905663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng      errors++;
1906663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   }
1907663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
1908663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng}
1909663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
1910663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
1911663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengstatic void test_ldst(void)
1912663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng{
1913663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   int k = 0;
1914663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
1915663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   while (ldst_tests[k].test_func) {
1916663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng      if (ldst_tests[k].type == VSX_STORE)
1917663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng         do_store_test(ldst_tests[k]);
1918663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng      else
1919663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng         do_load_test(ldst_tests[k]);
1920663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng      k++;
1921663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng      printf("\n");
1922663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   }
1923663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng}
1924663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
1925663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengstatic void test_ftdiv(void)
1926663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng{
1927663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   int i, num_tests, crx;
1928663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   unsigned int flags;
1929663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   unsigned long long * frap, * frbp;
1930663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   build_special_fargs_table();
1931663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
1932663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   num_tests = sizeof ftdiv_tests/sizeof ftdiv_tests[0];
1933663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
1934663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   for (i = 0; i < num_tests; i++) {
1935663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng      ftdiv_test_args_t aTest = ftdiv_tests[i];
1936663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng      f14 = spec_fargs[aTest.fra_idx];
1937663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng      f15 = spec_fargs[aTest.frb_idx];
1938663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng      frap = (unsigned long long *)&spec_fargs[aTest.fra_idx];
1939663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng      frbp = (unsigned long long *)&spec_fargs[aTest.frb_idx];
1940663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng      SET_FPSCR_ZERO;
1941663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng      SET_CR_XER_ZERO;
1942663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng      __asm__ __volatile__ ("ftdiv           cr1, %0, %1" : : "d" (f14), "d" (f15));
1943663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng      GET_CR(flags);
1944663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng      crx = (flags & 0x0f000000) >> 24;
1945663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng      printf( "ftdiv: %016llx <=> %016llx ? %x (CRx)\n", *frap, *frbp, crx);
1946663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng//      printf("\tFRA: %e;  FRB: %e\n", f14, f15);
1947663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng      if ( crx != aTest.cr_flags) {
1948663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng         printf("Error: Expected CR flags 0x%x; actual flags: 0x%x\n", aTest.cr_flags, crx);
1949663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng         errors++;
1950663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng      }
1951663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   }
1952663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   printf( "\n" );
1953663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng}
1954663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
1955663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
1956663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengstatic void test_p7_fpops ( void )
1957663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng{
1958663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   int k = 0;
1959663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   test_func_t func;
1960663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
1961663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   build_fargs_table();
1962663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   while ((func = fp_tests[k].test_func)) {
1963663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng      float res;
1964663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng      double resd;
1965663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng      unsigned long long u0;
1966663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng      int i;
1967663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng      int res32 = strcmp(fp_tests[k].name, "fcfidu");
1968663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
1969663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng      for (i = 0; i < nb_fargs; i++) {
1970663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng         u0 = *(unsigned long long *) (&fargs[i]);
1971663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng         f14 = fargs[i];
1972663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng         (*func)();
1973663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng         if (res32) {
1974663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng            res = f17;
1975663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng            printf( "%s %016llx => (raw sp) %08x)",
1976663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                    fp_tests[k].name, u0, *((unsigned int *)&res));
1977663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng         } else {
1978663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng            resd = f17;
1979663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng            printf( "%s %016llx => (raw sp) %016llx)",
1980663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                    fp_tests[k].name, u0, *(unsigned long long *)(&resd));
1981663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng         }
1982663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng         printf( "\n" );
1983663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng      }
1984663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
1985663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng      k++;
1986663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng      printf( "\n" );
1987663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   }
1988663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng}
1989663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
1990663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengstatic void test_vsx_logic(void)
1991663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng{
1992663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   logic_test_t aTest;
1993663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   test_func_t func;
1994663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   int equality, k;
1995663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   k = 0;
1996663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
1997663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   while ((func = logic_tests[k].test_func)) {
1998663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng      unsigned int * pv;
1999663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng      int startA, startB;
2000663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng      unsigned int * inA, * inB, * dst;
2001663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng      int idx, i;
2002663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng      startA = 0;
2003663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng      aTest = logic_tests[k];
2004663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng      for (i = 0; i <= (NUM_VIARGS_INTS - (NUM_VIARGS_VECS * sizeof(int))); i++, startA++) {
2005663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng         startB = startA + 4;
2006663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng         pv = (unsigned int *)&vec_out;
2007663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng         inA = &viargs[startA];
2008663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng         inB = &viargs[startB];
2009663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng         memcpy(&vec_inA, inA, sizeof(vector unsigned char));
2010663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng         memcpy(&vec_inB, inB, sizeof(vector unsigned char));
2011663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng         // clear vec_out
2012663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng         for (idx = 0; idx < 4; idx++, pv++)
2013663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng            *pv = 0;
2014663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
2015663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng         // execute test insn
2016663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng         (*func)();
2017663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng         dst = (unsigned int*) &vec_out;
2018663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
2019663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng         printf( "%s:", aTest.name);
2020663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng         printf( " %08x %08x %08x %08x %s", inA[0], inA[1], inA[2], inA[3], aTest.name);
2021663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng         printf( " %08x %08x %08x %08x", inB[0], inB[1], inB[2], inB[3]);
2022663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng         printf(" => %08x %08x %08x %08x\n", dst[0], dst[1], dst[2], dst[3]);
2023663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
2024663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng         equality = 1;
2025663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng         for (idx = 0; idx < 4; idx++) {
2026663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng            switch (aTest.op) {
2027663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng               case VSX_AND:
2028663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                  equality &= (dst[idx] == (inA[idx] & inB[idx]));
2029663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                  break;
2030663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng               case VSX_ANDC:
2031663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                  equality &= (dst[idx] == (inA[idx] & ~inB[idx]));
2032663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                  break;
2033663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng               case VSX_NOR:
2034663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                  equality &= (dst[idx] == ~(inA[idx] | inB[idx]));
2035663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                  break;
2036663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng               case VSX_XOR:
2037663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                  equality &= (dst[idx] == (inA[idx] ^ inB[idx]));
2038663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                  break;
2039663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng               case VSX_OR:
2040663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                  equality &= (dst[idx] == (inA[idx] | inB[idx]));
2041663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                  break;
2042663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng               default:
2043663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                  fprintf(stderr, "Error in test_vsx_logic(): unknown VSX logical op %d\n", aTest.op);
2044663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                  exit(1);
2045663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng            }
2046663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng         }
2047663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng         if (!equality) {
2048663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng            printf( "FAILED: vector out is incorrect\n" );
2049663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng            errors++;
2050663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng         }
2051663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng      }
2052663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng      k++;
2053663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   }
2054663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   printf( "\n" );
2055663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng}
2056663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
2057663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengstatic void test_move_ops (void)
2058663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng{
2059663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   move_test_t aTest;
2060663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   test_func_t func;
2061663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   int equality, k;
2062663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   k = 0;
2063663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
2064663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   while ((func = move_tests[k].test_func)) {
2065663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng      unsigned int * pv;
2066663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng      int startA, startB;
2067663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng      unsigned int * inA, * inB, * dst;
2068663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng      unsigned long long exp_out;
2069663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng      int idx;
2070663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng      aTest = move_tests[k];
2071663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng      exp_out = aTest.expected_result;
2072663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng      startA = aTest.xa_idx;
2073663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng      startB = aTest.xb_idx;
2074663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng      pv = (unsigned int *)&vec_out;
2075663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng      inA = &viargs[startA];
2076663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng      inB = &viargs[startB];
2077663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng      memcpy(&vec_inA, inA, sizeof(vector unsigned char));
2078663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng      memcpy(&vec_inB, inB, sizeof(vector unsigned char));
2079663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng      // clear vec_out
2080663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng      for (idx = 0; idx < 4; idx++, pv++)
2081663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng         *pv = 0;
2082663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
2083663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng      // execute test insn
2084663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng      (*func)();
2085663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng      dst = (unsigned int*) &vec_out;
2086663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
2087663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng      printf( "%s:", aTest.name);
2088663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng      printf( " %08x %08x %s", inA[0], inA[1], aTest.name);
2089663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng      printf( " %08x %08xx", inB[0], inB[1]);
2090663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng      printf(" => %08x %08x\n", dst[0], dst[1]);
2091663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
2092663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng      equality = 1;
2093663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng      pv = (unsigned int *)&exp_out;
2094663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng      for (idx = 0; idx < 2; idx++) {
2095663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng         equality &= (dst[idx] == pv[idx]);
2096663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng      }
2097663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng      if (!equality) {
2098663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng         printf( "FAILED: vector out is incorrect\n" );
2099663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng         errors++;
2100663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng      }
2101663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng      k++;
2102663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng      printf( "\n" );
2103663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   }
2104663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng}
2105663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
2106663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengstatic void test_permute_ops (void)
2107663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng{
2108663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng  permute_test_t *aTest;
2109663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng  unsigned int *dst = (unsigned int *) &vec_out;
2110663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
2111663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng  for (aTest = &(permute_tests[0]); aTest->test_func != NULL; aTest++)
2112663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng    {
2113663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng      /* Grab test input and clear output vector.  */
2114663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng      memcpy(&vec_inA, aTest->xa, sizeof(vec_inA));
2115663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng      memcpy(&vec_inB, aTest->xb, sizeof(vec_inB));
2116663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng      memset(dst, 0, sizeof(vec_out));
2117663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
2118663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng      /* execute test insn */
2119663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng      aTest->test_func();
2120663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
2121663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng      printf( "%s:\n", aTest->name);
2122663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng      printf( "        XA[%08x,%08x,%08x,%08x]\n",
2123663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng              aTest->xa[0], aTest->xa[1], aTest->xa[2], aTest->xa[3]);
2124663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng      printf( "        XB[%08x,%08x,%08x,%08x]\n",
2125663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng              aTest->xb[0], aTest->xb[1], aTest->xb[2], aTest->xb[3]);
2126663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng      printf( "   =>   XT[%08x,%08x,%08x,%08x]\n",
2127663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng              dst[0], dst[1], dst[2], dst[3]);
2128663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
2129663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng      if (memcmp (dst, &aTest->expected_output, sizeof(vec_out)))
2130663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng       {
2131663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng         printf( "FAILED: vector out is incorrect\n" );
2132663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng         errors++;
2133663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng       }
2134663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng    }
2135663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng  printf( "\n" );
2136663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng}
2137663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
2138663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengstatic test_table_t all_tests[] = { { &test_ldst,
2139663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                       "Test VSX load/store instructions" },
2140663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                     { &test_vsx_logic,
2141663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                       "Test VSX logic instructions" },
2142663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng#ifdef __powerpc64__
2143663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                     { &test_ldbrx,
2144663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                       "Test ldbrx instruction" },
2145663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                     { &test_popcntd,
2146663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                       "Test popcntd instruction" },
2147663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng#endif
2148663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                     { &test_lfiwzx,
2149663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                       "Test lfiwzx instruction" },
2150663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                     { &test_p7_fpops,
2151663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                       "Test P7 floating point convert instructions"},
2152663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                     { &test_ftdiv,
2153663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                       "Test ftdiv instruction" },
2154663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                     { &test_move_ops,
2155663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                       "Test VSX move instructions"},
2156663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                     { &test_permute_ops,
2157663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                       "Test VSX permute instructions"},
2158663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                     { &test_vx_fp_ops,
2159663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                       "Test VSX floating point instructions"},
2160663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                     { &test_xs_conv_ops,
2161663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                       "Test VSX scalar integer conversion instructions" },
2162663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng                                     { NULL, NULL }
2163663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng};
2164663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng#endif // HAS_VSX
2165663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
2166663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengint main(int argc, char *argv[])
2167663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng{
2168663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng#ifdef HAS_VSX
2169663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
2170663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   test_table_t aTest;
2171663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   test_func_t func;
2172663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   int i = 0;
2173663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
2174663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   while ((func = all_tests[i].test_category)) {
2175663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng      aTest = all_tests[i];
2176663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng      printf( "%s\n", aTest.name );
2177663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng      (*func)();
2178663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng      i++;
2179663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   }
2180663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   if (errors)
2181663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng      printf("Testcase FAILED with %d errors \n", errors);
2182663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   else
2183663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng      printf("Testcase PASSED\n");
2184663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
2185663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng#endif // HAS _VSX
2186663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
2187663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   return 0;
2188663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng}
2189