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 *)®_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