1f34eb496099507090f26dcf94bb780da8b3894e5sewardj/* Copyright (C) 2011 IBM 2f34eb496099507090f26dcf94bb780da8b3894e5sewardj 3f34eb496099507090f26dcf94bb780da8b3894e5sewardj Author: Maynard Johnson <maynardj@us.ibm.com> 4f34eb496099507090f26dcf94bb780da8b3894e5sewardj 5f34eb496099507090f26dcf94bb780da8b3894e5sewardj This program is free software; you can redistribute it and/or 6f34eb496099507090f26dcf94bb780da8b3894e5sewardj modify it under the terms of the GNU General Public License as 7f34eb496099507090f26dcf94bb780da8b3894e5sewardj published by the Free Software Foundation; either version 2 of the 8f34eb496099507090f26dcf94bb780da8b3894e5sewardj License, or (at your option) any later version. 9f34eb496099507090f26dcf94bb780da8b3894e5sewardj 10f34eb496099507090f26dcf94bb780da8b3894e5sewardj This program is distributed in the hope that it will be useful, but 11f34eb496099507090f26dcf94bb780da8b3894e5sewardj WITHOUT ANY WARRANTY; without even the implied warranty of 12f34eb496099507090f26dcf94bb780da8b3894e5sewardj MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13f34eb496099507090f26dcf94bb780da8b3894e5sewardj General Public License for more details. 14f34eb496099507090f26dcf94bb780da8b3894e5sewardj 15f34eb496099507090f26dcf94bb780da8b3894e5sewardj You should have received a copy of the GNU General Public License 16f34eb496099507090f26dcf94bb780da8b3894e5sewardj along with this program; if not, write to the Free Software 17f34eb496099507090f26dcf94bb780da8b3894e5sewardj Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 18f34eb496099507090f26dcf94bb780da8b3894e5sewardj 02111-1307, USA. 19f34eb496099507090f26dcf94bb780da8b3894e5sewardj 20f34eb496099507090f26dcf94bb780da8b3894e5sewardj The GNU General Public License is contained in the file COPYING. 21f34eb496099507090f26dcf94bb780da8b3894e5sewardj */ 22f34eb496099507090f26dcf94bb780da8b3894e5sewardj 23f34eb496099507090f26dcf94bb780da8b3894e5sewardj#ifdef HAS_VSX 24f34eb496099507090f26dcf94bb780da8b3894e5sewardj 25f34eb496099507090f26dcf94bb780da8b3894e5sewardj#include <stdio.h> 26f34eb496099507090f26dcf94bb780da8b3894e5sewardj#include <stdint.h> 27f34eb496099507090f26dcf94bb780da8b3894e5sewardj#include <stdlib.h> 28f34eb496099507090f26dcf94bb780da8b3894e5sewardj#include <string.h> 29f34eb496099507090f26dcf94bb780da8b3894e5sewardj#include <malloc.h> 30f34eb496099507090f26dcf94bb780da8b3894e5sewardj#include <altivec.h> 31f34eb496099507090f26dcf94bb780da8b3894e5sewardj 32f34eb496099507090f26dcf94bb780da8b3894e5sewardj#ifndef __powerpc64__ 33f34eb496099507090f26dcf94bb780da8b3894e5sewardjtypedef uint32_t HWord_t; 34f34eb496099507090f26dcf94bb780da8b3894e5sewardj#else 35f34eb496099507090f26dcf94bb780da8b3894e5sewardjtypedef uint64_t HWord_t; 36f34eb496099507090f26dcf94bb780da8b3894e5sewardj#endif /* __powerpc64__ */ 37f34eb496099507090f26dcf94bb780da8b3894e5sewardj 38dd690bf8d81c9119a7228446be12e3366e202176carll#ifdef VGP_ppc64le_linux 39dd690bf8d81c9119a7228446be12e3366e202176carll#define isLE 1 40dd690bf8d81c9119a7228446be12e3366e202176carll#else 41dd690bf8d81c9119a7228446be12e3366e202176carll#define isLE 0 42dd690bf8d81c9119a7228446be12e3366e202176carll#endif 43dd690bf8d81c9119a7228446be12e3366e202176carll 44f34eb496099507090f26dcf94bb780da8b3894e5sewardjregister HWord_t r14 __asm__ ("r14"); 45f34eb496099507090f26dcf94bb780da8b3894e5sewardjregister HWord_t r15 __asm__ ("r15"); 46f34eb496099507090f26dcf94bb780da8b3894e5sewardjregister HWord_t r16 __asm__ ("r16"); 47f34eb496099507090f26dcf94bb780da8b3894e5sewardjregister HWord_t r17 __asm__ ("r17"); 48f34eb496099507090f26dcf94bb780da8b3894e5sewardjregister double f14 __asm__ ("fr14"); 49f34eb496099507090f26dcf94bb780da8b3894e5sewardjregister double f15 __asm__ ("fr15"); 50f34eb496099507090f26dcf94bb780da8b3894e5sewardjregister double f16 __asm__ ("fr16"); 51f34eb496099507090f26dcf94bb780da8b3894e5sewardjregister double f17 __asm__ ("fr17"); 52f34eb496099507090f26dcf94bb780da8b3894e5sewardj 53f34eb496099507090f26dcf94bb780da8b3894e5sewardjstatic volatile unsigned int cond_reg; 54f34eb496099507090f26dcf94bb780da8b3894e5sewardj 55f34eb496099507090f26dcf94bb780da8b3894e5sewardj#define ALLCR "cr0","cr1","cr2","cr3","cr4","cr5","cr6","cr7" 56f34eb496099507090f26dcf94bb780da8b3894e5sewardj 57f34eb496099507090f26dcf94bb780da8b3894e5sewardj#define SET_CR(_arg) \ 58f34eb496099507090f26dcf94bb780da8b3894e5sewardj __asm__ __volatile__ ("mtcr %0" : : "b"(_arg) : ALLCR ); 59f34eb496099507090f26dcf94bb780da8b3894e5sewardj 60f34eb496099507090f26dcf94bb780da8b3894e5sewardj#define SET_XER(_arg) \ 61f34eb496099507090f26dcf94bb780da8b3894e5sewardj __asm__ __volatile__ ("mtxer %0" : : "b"(_arg) : "xer" ); 62f34eb496099507090f26dcf94bb780da8b3894e5sewardj 63f34eb496099507090f26dcf94bb780da8b3894e5sewardj#define GET_CR(_lval) \ 64f34eb496099507090f26dcf94bb780da8b3894e5sewardj __asm__ __volatile__ ("mfcr %0" : "=b"(_lval) ) 65f34eb496099507090f26dcf94bb780da8b3894e5sewardj 66f34eb496099507090f26dcf94bb780da8b3894e5sewardj#define GET_XER(_lval) \ 67f34eb496099507090f26dcf94bb780da8b3894e5sewardj __asm__ __volatile__ ("mfxer %0" : "=b"(_lval) ) 68f34eb496099507090f26dcf94bb780da8b3894e5sewardj 69f34eb496099507090f26dcf94bb780da8b3894e5sewardj#define GET_CR_XER(_lval_cr,_lval_xer) \ 70f34eb496099507090f26dcf94bb780da8b3894e5sewardj do { GET_CR(_lval_cr); GET_XER(_lval_xer); } while (0) 71f34eb496099507090f26dcf94bb780da8b3894e5sewardj 72f34eb496099507090f26dcf94bb780da8b3894e5sewardj#define SET_CR_ZERO \ 73f34eb496099507090f26dcf94bb780da8b3894e5sewardj SET_CR(0) 74f34eb496099507090f26dcf94bb780da8b3894e5sewardj 75f34eb496099507090f26dcf94bb780da8b3894e5sewardj#define SET_XER_ZERO \ 76f34eb496099507090f26dcf94bb780da8b3894e5sewardj SET_XER(0) 77f34eb496099507090f26dcf94bb780da8b3894e5sewardj 78f34eb496099507090f26dcf94bb780da8b3894e5sewardj#define SET_CR_XER_ZERO \ 79f34eb496099507090f26dcf94bb780da8b3894e5sewardj do { SET_CR_ZERO; SET_XER_ZERO; } while (0) 80f34eb496099507090f26dcf94bb780da8b3894e5sewardj 81f34eb496099507090f26dcf94bb780da8b3894e5sewardj#define SET_FPSCR_ZERO \ 82f34eb496099507090f26dcf94bb780da8b3894e5sewardj do { double _d = 0.0; \ 83f34eb496099507090f26dcf94bb780da8b3894e5sewardj __asm__ __volatile__ ("mtfsf 0xFF, %0" : : "f"(_d) ); \ 84f34eb496099507090f26dcf94bb780da8b3894e5sewardj } while (0) 85f34eb496099507090f26dcf94bb780da8b3894e5sewardj 86f34eb496099507090f26dcf94bb780da8b3894e5sewardj 87f34eb496099507090f26dcf94bb780da8b3894e5sewardjtypedef void (*test_func_t)(void); 88f34eb496099507090f26dcf94bb780da8b3894e5sewardjtypedef struct ldst_test ldst_test_t; 89f34eb496099507090f26dcf94bb780da8b3894e5sewardjtypedef struct vsx_logic_test logic_test_t; 90f34eb496099507090f26dcf94bb780da8b3894e5sewardjtypedef struct xs_conv_test xs_conv_test_t; 91f34eb496099507090f26dcf94bb780da8b3894e5sewardjtypedef struct p7_fp_test fp_test_t; 92f34eb496099507090f26dcf94bb780da8b3894e5sewardjtypedef struct vx_fp_test vx_fp_test_t; 93f34eb496099507090f26dcf94bb780da8b3894e5sewardjtypedef struct vsx_move_test move_test_t; 94f34eb496099507090f26dcf94bb780da8b3894e5sewardjtypedef struct vsx_permute_test permute_test_t; 95f34eb496099507090f26dcf94bb780da8b3894e5sewardjtypedef struct test_table test_table_t; 96f34eb496099507090f26dcf94bb780da8b3894e5sewardj 97f34eb496099507090f26dcf94bb780da8b3894e5sewardjstatic double *fargs = NULL; 98f34eb496099507090f26dcf94bb780da8b3894e5sewardjstatic int nb_fargs; 99f34eb496099507090f26dcf94bb780da8b3894e5sewardj 100f34eb496099507090f26dcf94bb780da8b3894e5sewardj/* These functions below that construct a table of floating point 101f34eb496099507090f26dcf94bb780da8b3894e5sewardj * values were lifted from none/tests/ppc32/jm-insns.c. 102f34eb496099507090f26dcf94bb780da8b3894e5sewardj */ 103f34eb496099507090f26dcf94bb780da8b3894e5sewardj 104f34eb496099507090f26dcf94bb780da8b3894e5sewardj#if defined (DEBUG_ARGS_BUILD) 105f34eb496099507090f26dcf94bb780da8b3894e5sewardj#define AB_DPRINTF(fmt, args...) do { fprintf(stderr, fmt , ##args); } while (0) 106f34eb496099507090f26dcf94bb780da8b3894e5sewardj#else 107f34eb496099507090f26dcf94bb780da8b3894e5sewardj#define AB_DPRINTF(fmt, args...) do { } while (0) 108f34eb496099507090f26dcf94bb780da8b3894e5sewardj#endif 109f34eb496099507090f26dcf94bb780da8b3894e5sewardj 110f34eb496099507090f26dcf94bb780da8b3894e5sewardjstatic inline void register_farg (void *farg, 111f34eb496099507090f26dcf94bb780da8b3894e5sewardj int s, uint16_t _exp, uint64_t mant) 112f34eb496099507090f26dcf94bb780da8b3894e5sewardj{ 113f34eb496099507090f26dcf94bb780da8b3894e5sewardj uint64_t tmp; 114f34eb496099507090f26dcf94bb780da8b3894e5sewardj 115f34eb496099507090f26dcf94bb780da8b3894e5sewardj tmp = ((uint64_t)s << 63) | ((uint64_t)_exp << 52) | mant; 116f34eb496099507090f26dcf94bb780da8b3894e5sewardj *(uint64_t *)farg = tmp; 117f34eb496099507090f26dcf94bb780da8b3894e5sewardj AB_DPRINTF("%d %03x %013llx => %016llx %0e\n", 118f34eb496099507090f26dcf94bb780da8b3894e5sewardj s, _exp, mant, *(uint64_t *)farg, *(double *)farg); 119f34eb496099507090f26dcf94bb780da8b3894e5sewardj} 120f34eb496099507090f26dcf94bb780da8b3894e5sewardj 121f34eb496099507090f26dcf94bb780da8b3894e5sewardjstatic void build_fargs_table(void) 122f34eb496099507090f26dcf94bb780da8b3894e5sewardj/* 123f34eb496099507090f26dcf94bb780da8b3894e5sewardj * Double precision: 124f34eb496099507090f26dcf94bb780da8b3894e5sewardj * Sign goes from zero to one (1 bit) 125f34eb496099507090f26dcf94bb780da8b3894e5sewardj * Exponent goes from 0 to ((1 << 12) - 1) (11 bits) 126f34eb496099507090f26dcf94bb780da8b3894e5sewardj * Mantissa goes from 1 to ((1 << 52) - 1) (52 bits) 127f34eb496099507090f26dcf94bb780da8b3894e5sewardj * + special values: 128f34eb496099507090f26dcf94bb780da8b3894e5sewardj * +0.0 : 0 0x000 0x0000000000000 => 0x0000000000000000 129f34eb496099507090f26dcf94bb780da8b3894e5sewardj * -0.0 : 1 0x000 0x0000000000000 => 0x8000000000000000 130f34eb496099507090f26dcf94bb780da8b3894e5sewardj * +infinity : 0 0x7FF 0x0000000000000 => 0x7FF0000000000000 131f34eb496099507090f26dcf94bb780da8b3894e5sewardj * -infinity : 1 0x7FF 0x0000000000000 => 0xFFF0000000000000 1328efe4e40e702e4a1eafac37076e1df2ccd9b047bcarll * +QNaN : 0 0x7FF 0x8000000000000 => 0x7FF8000000000000 1338efe4e40e702e4a1eafac37076e1df2ccd9b047bcarll * -QNaN : 1 0x7FF 0x8000000000000 => 0xFFF8000000000000 1348efe4e40e702e4a1eafac37076e1df2ccd9b047bcarll * +SNaN : 0 0x7FF 0x7FFFFFFFFFFFF => 0x7FF7FFFFFFFFFFFF 1358efe4e40e702e4a1eafac37076e1df2ccd9b047bcarll * -SNaN : 1 0x7FF 0x7FFFFFFFFFFFF => 0xFFF7FFFFFFFFFFFF 136f34eb496099507090f26dcf94bb780da8b3894e5sewardj * (8 values) 137f34eb496099507090f26dcf94bb780da8b3894e5sewardj * 138f34eb496099507090f26dcf94bb780da8b3894e5sewardj * Single precision 139f34eb496099507090f26dcf94bb780da8b3894e5sewardj * Sign: 1 bit 140f34eb496099507090f26dcf94bb780da8b3894e5sewardj * Exponent: 8 bits 141f34eb496099507090f26dcf94bb780da8b3894e5sewardj * Mantissa: 23 bits 142f34eb496099507090f26dcf94bb780da8b3894e5sewardj * +0.0 : 0 0x00 0x000000 => 0x00000000 143f34eb496099507090f26dcf94bb780da8b3894e5sewardj * -0.0 : 1 0x00 0x000000 => 0x80000000 144f34eb496099507090f26dcf94bb780da8b3894e5sewardj * +infinity : 0 0xFF 0x000000 => 0x7F800000 145f34eb496099507090f26dcf94bb780da8b3894e5sewardj * -infinity : 1 0xFF 0x000000 => 0xFF800000 1468efe4e40e702e4a1eafac37076e1df2ccd9b047bcarll * +QNaN : 0 0xFF 0x400000 => 0x7FC00000 1478efe4e40e702e4a1eafac37076e1df2ccd9b047bcarll * -QNaN : 1 0xFF 0x400000 => 0xFFC00000 1488efe4e40e702e4a1eafac37076e1df2ccd9b047bcarll * +SNaN : 0 0xFF 0x3FFFFF => 0x7FBFFFFF 1498efe4e40e702e4a1eafac37076e1df2ccd9b047bcarll * -SNaN : 1 0xFF 0x3FFFFF => 0xFFBFFFFF 150f34eb496099507090f26dcf94bb780da8b3894e5sewardj*/ 151f34eb496099507090f26dcf94bb780da8b3894e5sewardj{ 152f34eb496099507090f26dcf94bb780da8b3894e5sewardj uint64_t mant; 153f34eb496099507090f26dcf94bb780da8b3894e5sewardj uint16_t _exp, e1; 154f34eb496099507090f26dcf94bb780da8b3894e5sewardj int s; 155f34eb496099507090f26dcf94bb780da8b3894e5sewardj int i=0; 156f34eb496099507090f26dcf94bb780da8b3894e5sewardj 157f34eb496099507090f26dcf94bb780da8b3894e5sewardj if (nb_fargs) 158f34eb496099507090f26dcf94bb780da8b3894e5sewardj return; 159f34eb496099507090f26dcf94bb780da8b3894e5sewardj 160f34eb496099507090f26dcf94bb780da8b3894e5sewardj fargs = malloc( 16 * sizeof(double) ); 161f34eb496099507090f26dcf94bb780da8b3894e5sewardj for (s = 0; s < 2; s++) { 162f34eb496099507090f26dcf94bb780da8b3894e5sewardj for (e1 = 0x001;; e1 = ((e1 + 1) << 13) + 7) { 163f34eb496099507090f26dcf94bb780da8b3894e5sewardj if (e1 >= 0x400) 164f34eb496099507090f26dcf94bb780da8b3894e5sewardj e1 = 0x3fe; 165f34eb496099507090f26dcf94bb780da8b3894e5sewardj _exp = e1; 166f34eb496099507090f26dcf94bb780da8b3894e5sewardj for (mant = 0x0000000000001ULL; mant < (1ULL << 52); 167f34eb496099507090f26dcf94bb780da8b3894e5sewardj /* Add 'random' bits */ 168f34eb496099507090f26dcf94bb780da8b3894e5sewardj mant = ((mant + 0x4A6) << 29) + 0x359) { 169f34eb496099507090f26dcf94bb780da8b3894e5sewardj register_farg( &fargs[i++], s, _exp, mant ); 170f34eb496099507090f26dcf94bb780da8b3894e5sewardj } 171f34eb496099507090f26dcf94bb780da8b3894e5sewardj if (e1 == 0x3fe) 172f34eb496099507090f26dcf94bb780da8b3894e5sewardj break; 173f34eb496099507090f26dcf94bb780da8b3894e5sewardj } 174f34eb496099507090f26dcf94bb780da8b3894e5sewardj } 175f34eb496099507090f26dcf94bb780da8b3894e5sewardj // add a few smaller values to fargs . . . 176f34eb496099507090f26dcf94bb780da8b3894e5sewardj s = 0; 177f34eb496099507090f26dcf94bb780da8b3894e5sewardj _exp = 0x002; 178f34eb496099507090f26dcf94bb780da8b3894e5sewardj mant = 0x0000000000b01ULL; 179f34eb496099507090f26dcf94bb780da8b3894e5sewardj register_farg(&fargs[i++], s, _exp, mant); 180f34eb496099507090f26dcf94bb780da8b3894e5sewardj 181f34eb496099507090f26dcf94bb780da8b3894e5sewardj _exp = 0x000; 182f34eb496099507090f26dcf94bb780da8b3894e5sewardj mant = 0x00000203f0b3dULL; 183f34eb496099507090f26dcf94bb780da8b3894e5sewardj register_farg(&fargs[i++], s, _exp, mant); 184f34eb496099507090f26dcf94bb780da8b3894e5sewardj 185f34eb496099507090f26dcf94bb780da8b3894e5sewardj mant = 0x00000005a203dULL; 186f34eb496099507090f26dcf94bb780da8b3894e5sewardj register_farg(&fargs[i++], s, _exp, mant); 187f34eb496099507090f26dcf94bb780da8b3894e5sewardj 188f34eb496099507090f26dcf94bb780da8b3894e5sewardj s = 1; 189f34eb496099507090f26dcf94bb780da8b3894e5sewardj _exp = 0x002; 190f34eb496099507090f26dcf94bb780da8b3894e5sewardj mant = 0x0000000000b01ULL; 191f34eb496099507090f26dcf94bb780da8b3894e5sewardj register_farg(&fargs[i++], s, _exp, mant); 192f34eb496099507090f26dcf94bb780da8b3894e5sewardj 193f34eb496099507090f26dcf94bb780da8b3894e5sewardj _exp = 0x000; 194f34eb496099507090f26dcf94bb780da8b3894e5sewardj mant = 0x00000203f0b3dULL; 195f34eb496099507090f26dcf94bb780da8b3894e5sewardj register_farg(&fargs[i++], s, _exp, mant); 196f34eb496099507090f26dcf94bb780da8b3894e5sewardj 197f34eb496099507090f26dcf94bb780da8b3894e5sewardj nb_fargs = i; 198f34eb496099507090f26dcf94bb780da8b3894e5sewardj} 199f34eb496099507090f26dcf94bb780da8b3894e5sewardj 200f34eb496099507090f26dcf94bb780da8b3894e5sewardj 201f34eb496099507090f26dcf94bb780da8b3894e5sewardjtypedef struct fp_test_args { 202f34eb496099507090f26dcf94bb780da8b3894e5sewardj int fra_idx; 203f34eb496099507090f26dcf94bb780da8b3894e5sewardj int frb_idx; 204f34eb496099507090f26dcf94bb780da8b3894e5sewardj int cr_flags; 205f34eb496099507090f26dcf94bb780da8b3894e5sewardj} fp_test_args_t; 206f34eb496099507090f26dcf94bb780da8b3894e5sewardj 207f34eb496099507090f26dcf94bb780da8b3894e5sewardj 208dd690bf8d81c9119a7228446be12e3366e202176carllfp_test_args_t ftdiv_tests[] = { 209f34eb496099507090f26dcf94bb780da8b3894e5sewardj {0, 1, 0x8}, 210f34eb496099507090f26dcf94bb780da8b3894e5sewardj {9, 1, 0xa}, 211f34eb496099507090f26dcf94bb780da8b3894e5sewardj {1, 12, 0xa}, 212f34eb496099507090f26dcf94bb780da8b3894e5sewardj {0, 2, 0xa}, 213f34eb496099507090f26dcf94bb780da8b3894e5sewardj {1, 3, 0xa}, 214f34eb496099507090f26dcf94bb780da8b3894e5sewardj {3, 0, 0xa}, 215f34eb496099507090f26dcf94bb780da8b3894e5sewardj {0, 3, 0xa}, 216f34eb496099507090f26dcf94bb780da8b3894e5sewardj {4, 0, 0xa}, 217f34eb496099507090f26dcf94bb780da8b3894e5sewardj {7, 1, 0xe}, 218f34eb496099507090f26dcf94bb780da8b3894e5sewardj {8, 1, 0xe}, 219f34eb496099507090f26dcf94bb780da8b3894e5sewardj {1, 7, 0xe}, 220f34eb496099507090f26dcf94bb780da8b3894e5sewardj {0, 13, 0xe}, 221f34eb496099507090f26dcf94bb780da8b3894e5sewardj {5, 5, 0xe}, 222f34eb496099507090f26dcf94bb780da8b3894e5sewardj {5, 6, 0xe}, 223f34eb496099507090f26dcf94bb780da8b3894e5sewardj}; 224f34eb496099507090f26dcf94bb780da8b3894e5sewardj 225f34eb496099507090f26dcf94bb780da8b3894e5sewardjfp_test_args_t xscmpX_tests[] = { 226dd690bf8d81c9119a7228446be12e3366e202176carll {8, 8, 0x2}, 227dd690bf8d81c9119a7228446be12e3366e202176carll {8, 14, 0x8}, 228dd690bf8d81c9119a7228446be12e3366e202176carll {8, 6, 0x8}, 229dd690bf8d81c9119a7228446be12e3366e202176carll {8, 5, 0x8}, 230dd690bf8d81c9119a7228446be12e3366e202176carll {8, 4, 0x8}, 231dd690bf8d81c9119a7228446be12e3366e202176carll {8, 7, 0x8}, 232dd690bf8d81c9119a7228446be12e3366e202176carll {8, 9, 0x1}, 233dd690bf8d81c9119a7228446be12e3366e202176carll {8, 11, 0x1}, 234dd690bf8d81c9119a7228446be12e3366e202176carll {14, 8, 0x4}, 235dd690bf8d81c9119a7228446be12e3366e202176carll {14, 14, 0x2}, 236dd690bf8d81c9119a7228446be12e3366e202176carll {14, 6, 0x8}, 237dd690bf8d81c9119a7228446be12e3366e202176carll {14, 5, 0x8}, 238dd690bf8d81c9119a7228446be12e3366e202176carll {14, 4, 0x8}, 239dd690bf8d81c9119a7228446be12e3366e202176carll {14, 7, 0x8}, 240dd690bf8d81c9119a7228446be12e3366e202176carll {14, 9, 0x1}, 241dd690bf8d81c9119a7228446be12e3366e202176carll {14, 11, 0x1}, 242dd690bf8d81c9119a7228446be12e3366e202176carll {6, 8, 0x4}, 243dd690bf8d81c9119a7228446be12e3366e202176carll {6, 14, 0x4}, 244dd690bf8d81c9119a7228446be12e3366e202176carll {6, 6, 0x2}, 245dd690bf8d81c9119a7228446be12e3366e202176carll {6, 5, 0x2}, 246dd690bf8d81c9119a7228446be12e3366e202176carll {6, 4, 0x8}, 247dd690bf8d81c9119a7228446be12e3366e202176carll {6, 7, 0x8}, 248dd690bf8d81c9119a7228446be12e3366e202176carll {6, 9, 0x1}, 249dd690bf8d81c9119a7228446be12e3366e202176carll {6, 11, 0x1}, 250dd690bf8d81c9119a7228446be12e3366e202176carll {5, 8, 0x4}, 251dd690bf8d81c9119a7228446be12e3366e202176carll {5, 14, 0x4}, 252dd690bf8d81c9119a7228446be12e3366e202176carll {5, 6, 0x2}, 253dd690bf8d81c9119a7228446be12e3366e202176carll {5, 5, 0x2}, 254dd690bf8d81c9119a7228446be12e3366e202176carll {5, 4, 0x8}, 255dd690bf8d81c9119a7228446be12e3366e202176carll {5, 7, 0x8}, 256dd690bf8d81c9119a7228446be12e3366e202176carll {5, 9, 0x1}, 257dd690bf8d81c9119a7228446be12e3366e202176carll {5, 11, 0x1}, 258dd690bf8d81c9119a7228446be12e3366e202176carll {4, 8, 0x4}, 259dd690bf8d81c9119a7228446be12e3366e202176carll {4, 14, 0x4}, 260dd690bf8d81c9119a7228446be12e3366e202176carll {4, 6, 0x4}, 261dd690bf8d81c9119a7228446be12e3366e202176carll {4, 5, 0x4}, 262dd690bf8d81c9119a7228446be12e3366e202176carll {4, 1, 0x8}, 263dd690bf8d81c9119a7228446be12e3366e202176carll {4, 7, 0x8}, 264dd690bf8d81c9119a7228446be12e3366e202176carll {4, 9, 0x1}, 265dd690bf8d81c9119a7228446be12e3366e202176carll {4, 11, 0x1}, 266dd690bf8d81c9119a7228446be12e3366e202176carll {7, 8, 0x4}, 267dd690bf8d81c9119a7228446be12e3366e202176carll {7, 14, 0x4}, 268dd690bf8d81c9119a7228446be12e3366e202176carll {7, 6, 0x4}, 269dd690bf8d81c9119a7228446be12e3366e202176carll {7, 5, 0x4}, 270dd690bf8d81c9119a7228446be12e3366e202176carll {7, 4, 0x4}, 271dd690bf8d81c9119a7228446be12e3366e202176carll {7, 7, 0x2}, 272dd690bf8d81c9119a7228446be12e3366e202176carll {7, 9, 0x1}, 273dd690bf8d81c9119a7228446be12e3366e202176carll {7, 11, 0x1}, 274dd690bf8d81c9119a7228446be12e3366e202176carll {10, 8, 0x1}, 275dd690bf8d81c9119a7228446be12e3366e202176carll {10, 14, 0x1}, 276dd690bf8d81c9119a7228446be12e3366e202176carll {10, 6, 0x1}, 277dd690bf8d81c9119a7228446be12e3366e202176carll {10, 5, 0x1}, 278dd690bf8d81c9119a7228446be12e3366e202176carll {10, 4, 0x1}, 279dd690bf8d81c9119a7228446be12e3366e202176carll {10, 7, 0x1}, 280dd690bf8d81c9119a7228446be12e3366e202176carll {10, 9, 0x1}, 281dd690bf8d81c9119a7228446be12e3366e202176carll {10, 11, 0x1}, 282dd690bf8d81c9119a7228446be12e3366e202176carll {12, 8, 0x1}, 283dd690bf8d81c9119a7228446be12e3366e202176carll {12, 14, 0x1}, 284dd690bf8d81c9119a7228446be12e3366e202176carll {12, 6, 0x1}, 285dd690bf8d81c9119a7228446be12e3366e202176carll {12, 5, 0x1}, 286dd690bf8d81c9119a7228446be12e3366e202176carll {12, 4, 0x1}, 287dd690bf8d81c9119a7228446be12e3366e202176carll {12, 7, 0x1}, 288dd690bf8d81c9119a7228446be12e3366e202176carll {12, 9, 0x1}, 289dd690bf8d81c9119a7228446be12e3366e202176carll {12, 11, 0x1}, 290f34eb496099507090f26dcf94bb780da8b3894e5sewardj}; 291f34eb496099507090f26dcf94bb780da8b3894e5sewardj 292f34eb496099507090f26dcf94bb780da8b3894e5sewardjfp_test_args_t xsadddp_tests[] = { 293dd690bf8d81c9119a7228446be12e3366e202176carll {8, 8, 0x0}, 294dd690bf8d81c9119a7228446be12e3366e202176carll {8, 14, 0x0}, 295dd690bf8d81c9119a7228446be12e3366e202176carll {8, 6, 0x0}, 296dd690bf8d81c9119a7228446be12e3366e202176carll {8, 5, 0x0}, 297dd690bf8d81c9119a7228446be12e3366e202176carll {8, 4, 0x0}, 298dd690bf8d81c9119a7228446be12e3366e202176carll {8, 7, 0x0}, 299dd690bf8d81c9119a7228446be12e3366e202176carll {8, 9, 0x0}, 300dd690bf8d81c9119a7228446be12e3366e202176carll {8, 11, 0x0}, 301dd690bf8d81c9119a7228446be12e3366e202176carll {14, 8, 0x0}, 302dd690bf8d81c9119a7228446be12e3366e202176carll {14, 14, 0x0}, 303dd690bf8d81c9119a7228446be12e3366e202176carll {14, 6, 0x0}, 304dd690bf8d81c9119a7228446be12e3366e202176carll {14, 5, 0x0}, 305dd690bf8d81c9119a7228446be12e3366e202176carll {14, 4, 0x0}, 306dd690bf8d81c9119a7228446be12e3366e202176carll {14, 7, 0x0}, 307dd690bf8d81c9119a7228446be12e3366e202176carll {14, 9, 0x0}, 308dd690bf8d81c9119a7228446be12e3366e202176carll {14, 11, 0x0}, 309dd690bf8d81c9119a7228446be12e3366e202176carll {6, 8, 0x0}, 310dd690bf8d81c9119a7228446be12e3366e202176carll {6, 14, 0x0}, 311dd690bf8d81c9119a7228446be12e3366e202176carll {6, 6, 0x0}, 312dd690bf8d81c9119a7228446be12e3366e202176carll {6, 5, 0x0}, 313dd690bf8d81c9119a7228446be12e3366e202176carll {6, 4, 0x0}, 314dd690bf8d81c9119a7228446be12e3366e202176carll {6, 7, 0x0}, 315dd690bf8d81c9119a7228446be12e3366e202176carll {6, 9, 0x0}, 316dd690bf8d81c9119a7228446be12e3366e202176carll {6, 11, 0x0}, 317dd690bf8d81c9119a7228446be12e3366e202176carll {5, 8, 0x0}, 318dd690bf8d81c9119a7228446be12e3366e202176carll {5, 14, 0x0}, 319dd690bf8d81c9119a7228446be12e3366e202176carll {5, 6, 0x0}, 320dd690bf8d81c9119a7228446be12e3366e202176carll {5, 5, 0x0}, 321dd690bf8d81c9119a7228446be12e3366e202176carll {5, 4, 0x0}, 322dd690bf8d81c9119a7228446be12e3366e202176carll {5, 7, 0x0}, 323dd690bf8d81c9119a7228446be12e3366e202176carll {5, 9, 0x0}, 324dd690bf8d81c9119a7228446be12e3366e202176carll {5, 11, 0x0}, 325dd690bf8d81c9119a7228446be12e3366e202176carll {4, 8, 0x0}, 326dd690bf8d81c9119a7228446be12e3366e202176carll {4, 14, 0x0}, 327dd690bf8d81c9119a7228446be12e3366e202176carll {4, 6, 0x0}, 328dd690bf8d81c9119a7228446be12e3366e202176carll {4, 5, 0x0}, 329dd690bf8d81c9119a7228446be12e3366e202176carll {4, 1, 0x0}, 330dd690bf8d81c9119a7228446be12e3366e202176carll {4, 7, 0x0}, 331dd690bf8d81c9119a7228446be12e3366e202176carll {4, 9, 0x0}, 332dd690bf8d81c9119a7228446be12e3366e202176carll {4, 11, 0x0}, 333dd690bf8d81c9119a7228446be12e3366e202176carll {7, 8, 0x0}, 334dd690bf8d81c9119a7228446be12e3366e202176carll {7, 14, 0x0}, 335dd690bf8d81c9119a7228446be12e3366e202176carll {7, 6, 0x0}, 336dd690bf8d81c9119a7228446be12e3366e202176carll {7, 5, 0x0}, 337dd690bf8d81c9119a7228446be12e3366e202176carll {7, 4, 0x0}, 338dd690bf8d81c9119a7228446be12e3366e202176carll {7, 7, 0x0}, 339dd690bf8d81c9119a7228446be12e3366e202176carll {7, 9, 0x0}, 340dd690bf8d81c9119a7228446be12e3366e202176carll {7, 11, 0x0}, 341dd690bf8d81c9119a7228446be12e3366e202176carll {10, 8, 0x0}, 342dd690bf8d81c9119a7228446be12e3366e202176carll {10, 14, 0x0}, 343dd690bf8d81c9119a7228446be12e3366e202176carll {10, 6, 0x0}, 344dd690bf8d81c9119a7228446be12e3366e202176carll {10, 5, 0x0}, 345dd690bf8d81c9119a7228446be12e3366e202176carll {10, 4, 0x0}, 346dd690bf8d81c9119a7228446be12e3366e202176carll {10, 7, 0x0}, 347dd690bf8d81c9119a7228446be12e3366e202176carll {10, 9, 0x0}, 348dd690bf8d81c9119a7228446be12e3366e202176carll {10, 11, 0x0}, 349dd690bf8d81c9119a7228446be12e3366e202176carll {12, 8, 0x0}, 350dd690bf8d81c9119a7228446be12e3366e202176carll {12, 14, 0x0}, 351dd690bf8d81c9119a7228446be12e3366e202176carll {12, 6, 0x0}, 352dd690bf8d81c9119a7228446be12e3366e202176carll {12, 5, 0x0}, 353dd690bf8d81c9119a7228446be12e3366e202176carll {12, 4, 0x0}, 354dd690bf8d81c9119a7228446be12e3366e202176carll {12, 7, 0x0}, 355dd690bf8d81c9119a7228446be12e3366e202176carll {12, 9, 0x0}, 356dd690bf8d81c9119a7228446be12e3366e202176carll {12, 11, 0x0}, 357f34eb496099507090f26dcf94bb780da8b3894e5sewardj}; 358f34eb496099507090f26dcf94bb780da8b3894e5sewardj 359f34eb496099507090f26dcf94bb780da8b3894e5sewardjfp_test_args_t xsdivdp_tests[] = { 360dd690bf8d81c9119a7228446be12e3366e202176carll {8, 8, 0x0}, 361dd690bf8d81c9119a7228446be12e3366e202176carll {8, 14, 0x0}, 362dd690bf8d81c9119a7228446be12e3366e202176carll {8, 6, 0x0}, 363dd690bf8d81c9119a7228446be12e3366e202176carll {8, 5, 0x0}, 364dd690bf8d81c9119a7228446be12e3366e202176carll {8, 4, 0x0}, 365dd690bf8d81c9119a7228446be12e3366e202176carll {8, 7, 0x0}, 366dd690bf8d81c9119a7228446be12e3366e202176carll {8, 9, 0x0}, 367dd690bf8d81c9119a7228446be12e3366e202176carll {8, 11, 0x0}, 368dd690bf8d81c9119a7228446be12e3366e202176carll {14, 8, 0x0}, 369dd690bf8d81c9119a7228446be12e3366e202176carll {14, 14, 0x0}, 370dd690bf8d81c9119a7228446be12e3366e202176carll {14, 6, 0x0}, 371dd690bf8d81c9119a7228446be12e3366e202176carll {14, 5, 0x0}, 372dd690bf8d81c9119a7228446be12e3366e202176carll {14, 4, 0x0}, 373dd690bf8d81c9119a7228446be12e3366e202176carll {14, 7, 0x0}, 374dd690bf8d81c9119a7228446be12e3366e202176carll {14, 9, 0x0}, 375dd690bf8d81c9119a7228446be12e3366e202176carll {14, 11, 0x0}, 376dd690bf8d81c9119a7228446be12e3366e202176carll {6, 8, 0x0}, 377dd690bf8d81c9119a7228446be12e3366e202176carll {6, 14, 0x0}, 378dd690bf8d81c9119a7228446be12e3366e202176carll {6, 6, 0x0}, 379dd690bf8d81c9119a7228446be12e3366e202176carll {6, 5, 0x0}, 380dd690bf8d81c9119a7228446be12e3366e202176carll {6, 4, 0x0}, 381dd690bf8d81c9119a7228446be12e3366e202176carll {6, 7, 0x0}, 382dd690bf8d81c9119a7228446be12e3366e202176carll {6, 9, 0x0}, 383dd690bf8d81c9119a7228446be12e3366e202176carll {6, 11, 0x0}, 384dd690bf8d81c9119a7228446be12e3366e202176carll {5, 8, 0x0}, 385dd690bf8d81c9119a7228446be12e3366e202176carll {5, 14, 0x0}, 386dd690bf8d81c9119a7228446be12e3366e202176carll {5, 6, 0x0}, 387dd690bf8d81c9119a7228446be12e3366e202176carll {5, 5, 0x0}, 388dd690bf8d81c9119a7228446be12e3366e202176carll {5, 4, 0x0}, 389dd690bf8d81c9119a7228446be12e3366e202176carll {5, 7, 0x0}, 390dd690bf8d81c9119a7228446be12e3366e202176carll {5, 9, 0x0}, 391dd690bf8d81c9119a7228446be12e3366e202176carll {5, 11, 0x0}, 392dd690bf8d81c9119a7228446be12e3366e202176carll {4, 8, 0x0}, 393dd690bf8d81c9119a7228446be12e3366e202176carll {4, 14, 0x0}, 394dd690bf8d81c9119a7228446be12e3366e202176carll {4, 6, 0x0}, 395dd690bf8d81c9119a7228446be12e3366e202176carll {4, 5, 0x0}, 396dd690bf8d81c9119a7228446be12e3366e202176carll {4, 1, 0x0}, 397dd690bf8d81c9119a7228446be12e3366e202176carll {4, 7, 0x0}, 398dd690bf8d81c9119a7228446be12e3366e202176carll {4, 9, 0x0}, 399dd690bf8d81c9119a7228446be12e3366e202176carll {4, 11, 0x0}, 400dd690bf8d81c9119a7228446be12e3366e202176carll {7, 8, 0x0}, 401dd690bf8d81c9119a7228446be12e3366e202176carll {7, 14, 0x0}, 402dd690bf8d81c9119a7228446be12e3366e202176carll {7, 6, 0x0}, 403dd690bf8d81c9119a7228446be12e3366e202176carll {7, 5, 0x0}, 404dd690bf8d81c9119a7228446be12e3366e202176carll {7, 4, 0x0}, 405dd690bf8d81c9119a7228446be12e3366e202176carll {7, 7, 0x0}, 406dd690bf8d81c9119a7228446be12e3366e202176carll {7, 9, 0x0}, 407dd690bf8d81c9119a7228446be12e3366e202176carll {7, 11, 0x0}, 408dd690bf8d81c9119a7228446be12e3366e202176carll {10, 8, 0x0}, 409dd690bf8d81c9119a7228446be12e3366e202176carll {10, 14, 0x0}, 410dd690bf8d81c9119a7228446be12e3366e202176carll {10, 6, 0x0}, 411dd690bf8d81c9119a7228446be12e3366e202176carll {10, 5, 0x0}, 412dd690bf8d81c9119a7228446be12e3366e202176carll {10, 4, 0x0}, 413dd690bf8d81c9119a7228446be12e3366e202176carll {10, 7, 0x0}, 414dd690bf8d81c9119a7228446be12e3366e202176carll {10, 9, 0x0}, 415dd690bf8d81c9119a7228446be12e3366e202176carll {10, 11, 0x0}, 416dd690bf8d81c9119a7228446be12e3366e202176carll {12, 8, 0x0}, 417dd690bf8d81c9119a7228446be12e3366e202176carll {12, 14, 0x0}, 418dd690bf8d81c9119a7228446be12e3366e202176carll {12, 6, 0x0}, 419dd690bf8d81c9119a7228446be12e3366e202176carll {12, 5, 0x0}, 420dd690bf8d81c9119a7228446be12e3366e202176carll {12, 4, 0x0}, 421dd690bf8d81c9119a7228446be12e3366e202176carll {12, 7, 0x0}, 422dd690bf8d81c9119a7228446be12e3366e202176carll {12, 9, 0x0}, 423dd690bf8d81c9119a7228446be12e3366e202176carll {12, 11, 0x0}, 424f34eb496099507090f26dcf94bb780da8b3894e5sewardj}; 425f34eb496099507090f26dcf94bb780da8b3894e5sewardj 426f34eb496099507090f26dcf94bb780da8b3894e5sewardjfp_test_args_t xsmaddXdp_tests[] = { 427dd690bf8d81c9119a7228446be12e3366e202176carll {8, 8, 0x0}, 428dd690bf8d81c9119a7228446be12e3366e202176carll {8, 14, 0x0}, 429dd690bf8d81c9119a7228446be12e3366e202176carll {8, 6, 0x0}, 430dd690bf8d81c9119a7228446be12e3366e202176carll {8, 5, 0x0}, 431dd690bf8d81c9119a7228446be12e3366e202176carll {8, 4, 0x0}, 432dd690bf8d81c9119a7228446be12e3366e202176carll {8, 7, 0x0}, 433dd690bf8d81c9119a7228446be12e3366e202176carll {8, 9, 0x0}, 434dd690bf8d81c9119a7228446be12e3366e202176carll {8, 11, 0x0}, 435dd690bf8d81c9119a7228446be12e3366e202176carll {14, 8, 0x0}, 436dd690bf8d81c9119a7228446be12e3366e202176carll {14, 14, 0x0}, 437dd690bf8d81c9119a7228446be12e3366e202176carll {14, 6, 0x0}, 438dd690bf8d81c9119a7228446be12e3366e202176carll {14, 5, 0x0}, 439dd690bf8d81c9119a7228446be12e3366e202176carll {14, 4, 0x0}, 440dd690bf8d81c9119a7228446be12e3366e202176carll {14, 7, 0x0}, 441dd690bf8d81c9119a7228446be12e3366e202176carll {14, 9, 0x0}, 442dd690bf8d81c9119a7228446be12e3366e202176carll {14, 11, 0x0}, 443dd690bf8d81c9119a7228446be12e3366e202176carll {6, 8, 0x0}, 444dd690bf8d81c9119a7228446be12e3366e202176carll {6, 14, 0x0}, 445dd690bf8d81c9119a7228446be12e3366e202176carll {6, 6, 0x0}, 446dd690bf8d81c9119a7228446be12e3366e202176carll {6, 5, 0x0}, 447dd690bf8d81c9119a7228446be12e3366e202176carll {6, 4, 0x0}, 448dd690bf8d81c9119a7228446be12e3366e202176carll {6, 7, 0x0}, 449dd690bf8d81c9119a7228446be12e3366e202176carll {6, 9, 0x0}, 450dd690bf8d81c9119a7228446be12e3366e202176carll {6, 11, 0x0}, 451dd690bf8d81c9119a7228446be12e3366e202176carll {5, 8, 0x0}, 452dd690bf8d81c9119a7228446be12e3366e202176carll {5, 14, 0x0}, 453dd690bf8d81c9119a7228446be12e3366e202176carll {5, 6, 0x0}, 454dd690bf8d81c9119a7228446be12e3366e202176carll {5, 5, 0x0}, 455dd690bf8d81c9119a7228446be12e3366e202176carll {5, 4, 0x0}, 456dd690bf8d81c9119a7228446be12e3366e202176carll {5, 7, 0x0}, 457dd690bf8d81c9119a7228446be12e3366e202176carll {5, 9, 0x0}, 458dd690bf8d81c9119a7228446be12e3366e202176carll {5, 11, 0x0}, 459dd690bf8d81c9119a7228446be12e3366e202176carll {4, 8, 0x0}, 460dd690bf8d81c9119a7228446be12e3366e202176carll {4, 14, 0x0}, 461dd690bf8d81c9119a7228446be12e3366e202176carll {4, 6, 0x0}, 462dd690bf8d81c9119a7228446be12e3366e202176carll {4, 5, 0x0}, 463dd690bf8d81c9119a7228446be12e3366e202176carll {4, 1, 0x0}, 464dd690bf8d81c9119a7228446be12e3366e202176carll {4, 7, 0x0}, 465dd690bf8d81c9119a7228446be12e3366e202176carll {4, 9, 0x0}, 466dd690bf8d81c9119a7228446be12e3366e202176carll {4, 11, 0x0}, 467dd690bf8d81c9119a7228446be12e3366e202176carll {7, 8, 0x0}, 468dd690bf8d81c9119a7228446be12e3366e202176carll {7, 14, 0x0}, 469dd690bf8d81c9119a7228446be12e3366e202176carll {7, 6, 0x0}, 470dd690bf8d81c9119a7228446be12e3366e202176carll {7, 5, 0x0}, 471dd690bf8d81c9119a7228446be12e3366e202176carll {7, 4, 0x0}, 472dd690bf8d81c9119a7228446be12e3366e202176carll {7, 7, 0x0}, 473dd690bf8d81c9119a7228446be12e3366e202176carll {7, 9, 0x0}, 474dd690bf8d81c9119a7228446be12e3366e202176carll {7, 11, 0x0}, 475dd690bf8d81c9119a7228446be12e3366e202176carll {10, 8, 0x0}, 476dd690bf8d81c9119a7228446be12e3366e202176carll {10, 14, 0x0}, 477dd690bf8d81c9119a7228446be12e3366e202176carll {10, 6, 0x0}, 478dd690bf8d81c9119a7228446be12e3366e202176carll {10, 5, 0x0}, 479dd690bf8d81c9119a7228446be12e3366e202176carll {10, 4, 0x0}, 480dd690bf8d81c9119a7228446be12e3366e202176carll {10, 7, 0x0}, 481dd690bf8d81c9119a7228446be12e3366e202176carll {10, 9, 0x0}, 482dd690bf8d81c9119a7228446be12e3366e202176carll {10, 11, 0x0}, 483dd690bf8d81c9119a7228446be12e3366e202176carll {12, 8, 0x0}, 484dd690bf8d81c9119a7228446be12e3366e202176carll {12, 14, 0x0}, 485dd690bf8d81c9119a7228446be12e3366e202176carll {12, 6, 0x0}, 486dd690bf8d81c9119a7228446be12e3366e202176carll {12, 5, 0x0}, 487dd690bf8d81c9119a7228446be12e3366e202176carll {12, 4, 0x0}, 488dd690bf8d81c9119a7228446be12e3366e202176carll {12, 7, 0x0}, 489dd690bf8d81c9119a7228446be12e3366e202176carll {12, 9, 0x0}, 490dd690bf8d81c9119a7228446be12e3366e202176carll {12, 11, 0x0}, 491f34eb496099507090f26dcf94bb780da8b3894e5sewardj}; 492f34eb496099507090f26dcf94bb780da8b3894e5sewardj 493f34eb496099507090f26dcf94bb780da8b3894e5sewardjfp_test_args_t xsmsubXdp_tests[] = { 494dd690bf8d81c9119a7228446be12e3366e202176carll {8, 8, 0x0}, 495dd690bf8d81c9119a7228446be12e3366e202176carll {8, 14, 0x0}, 496dd690bf8d81c9119a7228446be12e3366e202176carll {8, 6, 0x0}, 497dd690bf8d81c9119a7228446be12e3366e202176carll {8, 5, 0x0}, 498dd690bf8d81c9119a7228446be12e3366e202176carll {8, 4, 0x0}, 499dd690bf8d81c9119a7228446be12e3366e202176carll {8, 7, 0x0}, 500dd690bf8d81c9119a7228446be12e3366e202176carll {8, 9, 0x0}, 501dd690bf8d81c9119a7228446be12e3366e202176carll {8, 11, 0x0}, 502dd690bf8d81c9119a7228446be12e3366e202176carll {14, 8, 0x0}, 503dd690bf8d81c9119a7228446be12e3366e202176carll {14, 14, 0x0}, 504dd690bf8d81c9119a7228446be12e3366e202176carll {14, 6, 0x0}, 505dd690bf8d81c9119a7228446be12e3366e202176carll {14, 5, 0x0}, 506dd690bf8d81c9119a7228446be12e3366e202176carll {14, 4, 0x0}, 507dd690bf8d81c9119a7228446be12e3366e202176carll {14, 7, 0x0}, 508dd690bf8d81c9119a7228446be12e3366e202176carll {14, 9, 0x0}, 509dd690bf8d81c9119a7228446be12e3366e202176carll {14, 11, 0x0}, 510dd690bf8d81c9119a7228446be12e3366e202176carll {6, 8, 0x0}, 511dd690bf8d81c9119a7228446be12e3366e202176carll {6, 14, 0x0}, 512dd690bf8d81c9119a7228446be12e3366e202176carll {6, 6, 0x0}, 513dd690bf8d81c9119a7228446be12e3366e202176carll {6, 5, 0x0}, 514dd690bf8d81c9119a7228446be12e3366e202176carll {6, 4, 0x0}, 515dd690bf8d81c9119a7228446be12e3366e202176carll {6, 7, 0x0}, 516dd690bf8d81c9119a7228446be12e3366e202176carll {6, 9, 0x0}, 517dd690bf8d81c9119a7228446be12e3366e202176carll {6, 11, 0x0}, 518dd690bf8d81c9119a7228446be12e3366e202176carll {5, 8, 0x0}, 519dd690bf8d81c9119a7228446be12e3366e202176carll {5, 14, 0x0}, 520dd690bf8d81c9119a7228446be12e3366e202176carll {5, 6, 0x0}, 521dd690bf8d81c9119a7228446be12e3366e202176carll {5, 5, 0x0}, 522dd690bf8d81c9119a7228446be12e3366e202176carll {5, 4, 0x0}, 523dd690bf8d81c9119a7228446be12e3366e202176carll {5, 7, 0x0}, 524dd690bf8d81c9119a7228446be12e3366e202176carll {5, 9, 0x0}, 525dd690bf8d81c9119a7228446be12e3366e202176carll {5, 11, 0x0}, 526dd690bf8d81c9119a7228446be12e3366e202176carll {4, 8, 0x0}, 527dd690bf8d81c9119a7228446be12e3366e202176carll {4, 14, 0x0}, 528dd690bf8d81c9119a7228446be12e3366e202176carll {4, 6, 0x0}, 529dd690bf8d81c9119a7228446be12e3366e202176carll {4, 5, 0x0}, 530dd690bf8d81c9119a7228446be12e3366e202176carll {4, 1, 0x0}, 531dd690bf8d81c9119a7228446be12e3366e202176carll {4, 7, 0x0}, 532dd690bf8d81c9119a7228446be12e3366e202176carll {4, 9, 0x0}, 533dd690bf8d81c9119a7228446be12e3366e202176carll {4, 11, 0x0}, 534dd690bf8d81c9119a7228446be12e3366e202176carll {7, 8, 0x0}, 535dd690bf8d81c9119a7228446be12e3366e202176carll {7, 14, 0x0}, 536dd690bf8d81c9119a7228446be12e3366e202176carll {7, 6, 0x0}, 537dd690bf8d81c9119a7228446be12e3366e202176carll {7, 5, 0x0}, 538dd690bf8d81c9119a7228446be12e3366e202176carll {7, 4, 0x0}, 539dd690bf8d81c9119a7228446be12e3366e202176carll {7, 7, 0x0}, 540dd690bf8d81c9119a7228446be12e3366e202176carll {7, 9, 0x0}, 541dd690bf8d81c9119a7228446be12e3366e202176carll {7, 11, 0x0}, 542dd690bf8d81c9119a7228446be12e3366e202176carll {10, 8, 0x0}, 543dd690bf8d81c9119a7228446be12e3366e202176carll {10, 14, 0x0}, 544dd690bf8d81c9119a7228446be12e3366e202176carll {10, 6, 0x0}, 545dd690bf8d81c9119a7228446be12e3366e202176carll {10, 5, 0x0}, 546dd690bf8d81c9119a7228446be12e3366e202176carll {10, 4, 0x0}, 547dd690bf8d81c9119a7228446be12e3366e202176carll {10, 7, 0x0}, 548dd690bf8d81c9119a7228446be12e3366e202176carll {10, 9, 0x0}, 549dd690bf8d81c9119a7228446be12e3366e202176carll {10, 11, 0x0}, 550dd690bf8d81c9119a7228446be12e3366e202176carll {12, 8, 0x0}, 551dd690bf8d81c9119a7228446be12e3366e202176carll {12, 14, 0x0}, 552dd690bf8d81c9119a7228446be12e3366e202176carll {12, 6, 0x0}, 553dd690bf8d81c9119a7228446be12e3366e202176carll {12, 5, 0x0}, 554dd690bf8d81c9119a7228446be12e3366e202176carll {12, 4, 0x0}, 555dd690bf8d81c9119a7228446be12e3366e202176carll {12, 7, 0x0}, 556dd690bf8d81c9119a7228446be12e3366e202176carll {12, 9, 0x0}, 557dd690bf8d81c9119a7228446be12e3366e202176carll {12, 11, 0x0}, 558f34eb496099507090f26dcf94bb780da8b3894e5sewardj}; 559f34eb496099507090f26dcf94bb780da8b3894e5sewardj 560f34eb496099507090f26dcf94bb780da8b3894e5sewardjfp_test_args_t xsnmaddXdp_tests[] = { 561dd690bf8d81c9119a7228446be12e3366e202176carll {8, 8, 0x0}, 562dd690bf8d81c9119a7228446be12e3366e202176carll {8, 14, 0x0}, 563dd690bf8d81c9119a7228446be12e3366e202176carll {8, 6, 0x0}, 564dd690bf8d81c9119a7228446be12e3366e202176carll {8, 5, 0x0}, 565dd690bf8d81c9119a7228446be12e3366e202176carll {8, 4, 0x0}, 566dd690bf8d81c9119a7228446be12e3366e202176carll {8, 7, 0x0}, 567dd690bf8d81c9119a7228446be12e3366e202176carll {8, 9, 0x0}, 568dd690bf8d81c9119a7228446be12e3366e202176carll {8, 11, 0x0}, 569dd690bf8d81c9119a7228446be12e3366e202176carll {14, 8, 0x0}, 570dd690bf8d81c9119a7228446be12e3366e202176carll {14, 14, 0x0}, 571dd690bf8d81c9119a7228446be12e3366e202176carll {14, 6, 0x0}, 572dd690bf8d81c9119a7228446be12e3366e202176carll {14, 5, 0x0}, 573dd690bf8d81c9119a7228446be12e3366e202176carll {14, 4, 0x0}, 574dd690bf8d81c9119a7228446be12e3366e202176carll {14, 7, 0x0}, 575dd690bf8d81c9119a7228446be12e3366e202176carll {14, 9, 0x0}, 576dd690bf8d81c9119a7228446be12e3366e202176carll {14, 11, 0x0}, 577dd690bf8d81c9119a7228446be12e3366e202176carll {6, 8, 0x0}, 578dd690bf8d81c9119a7228446be12e3366e202176carll {6, 14, 0x0}, 579dd690bf8d81c9119a7228446be12e3366e202176carll {6, 6, 0x0}, 580dd690bf8d81c9119a7228446be12e3366e202176carll {6, 5, 0x0}, 581dd690bf8d81c9119a7228446be12e3366e202176carll {6, 4, 0x0}, 582dd690bf8d81c9119a7228446be12e3366e202176carll {6, 7, 0x0}, 583dd690bf8d81c9119a7228446be12e3366e202176carll {6, 9, 0x0}, 584dd690bf8d81c9119a7228446be12e3366e202176carll {6, 11, 0x0}, 585dd690bf8d81c9119a7228446be12e3366e202176carll {5, 8, 0x0}, 586dd690bf8d81c9119a7228446be12e3366e202176carll {5, 14, 0x0}, 587dd690bf8d81c9119a7228446be12e3366e202176carll {5, 6, 0x0}, 588dd690bf8d81c9119a7228446be12e3366e202176carll {5, 5, 0x0}, 589dd690bf8d81c9119a7228446be12e3366e202176carll {5, 4, 0x0}, 590dd690bf8d81c9119a7228446be12e3366e202176carll {5, 7, 0x0}, 591dd690bf8d81c9119a7228446be12e3366e202176carll {5, 9, 0x0}, 592dd690bf8d81c9119a7228446be12e3366e202176carll {5, 11, 0x0}, 593dd690bf8d81c9119a7228446be12e3366e202176carll {4, 8, 0x0}, 594dd690bf8d81c9119a7228446be12e3366e202176carll {4, 14, 0x0}, 595dd690bf8d81c9119a7228446be12e3366e202176carll {4, 6, 0x0}, 596dd690bf8d81c9119a7228446be12e3366e202176carll {4, 5, 0x0}, 597dd690bf8d81c9119a7228446be12e3366e202176carll {4, 1, 0x0}, 598dd690bf8d81c9119a7228446be12e3366e202176carll {4, 7, 0x0}, 599dd690bf8d81c9119a7228446be12e3366e202176carll {4, 9, 0x0}, 600dd690bf8d81c9119a7228446be12e3366e202176carll {4, 11, 0x0}, 601dd690bf8d81c9119a7228446be12e3366e202176carll {7, 8, 0x0}, 602dd690bf8d81c9119a7228446be12e3366e202176carll {7, 14, 0x0}, 603dd690bf8d81c9119a7228446be12e3366e202176carll {7, 6, 0x0}, 604dd690bf8d81c9119a7228446be12e3366e202176carll {7, 5, 0x0}, 605dd690bf8d81c9119a7228446be12e3366e202176carll {7, 4, 0x0}, 606dd690bf8d81c9119a7228446be12e3366e202176carll {7, 7, 0x0}, 607dd690bf8d81c9119a7228446be12e3366e202176carll {7, 9, 0x0}, 608dd690bf8d81c9119a7228446be12e3366e202176carll {7, 11, 0x0}, 609dd690bf8d81c9119a7228446be12e3366e202176carll {10, 8, 0x0}, 610dd690bf8d81c9119a7228446be12e3366e202176carll {10, 14, 0x0}, 611dd690bf8d81c9119a7228446be12e3366e202176carll {10, 6, 0x0}, 612dd690bf8d81c9119a7228446be12e3366e202176carll {10, 5, 0x0}, 613dd690bf8d81c9119a7228446be12e3366e202176carll {10, 4, 0x0}, 614dd690bf8d81c9119a7228446be12e3366e202176carll {10, 7, 0x0}, 615dd690bf8d81c9119a7228446be12e3366e202176carll {10, 9, 0x0}, 616dd690bf8d81c9119a7228446be12e3366e202176carll {10, 11, 0x0}, 617dd690bf8d81c9119a7228446be12e3366e202176carll {12, 8, 0x0}, 618dd690bf8d81c9119a7228446be12e3366e202176carll {12, 14, 0x0}, 619dd690bf8d81c9119a7228446be12e3366e202176carll {12, 6, 0x0}, 620dd690bf8d81c9119a7228446be12e3366e202176carll {12, 5, 0x0}, 621dd690bf8d81c9119a7228446be12e3366e202176carll {12, 4, 0x0}, 622dd690bf8d81c9119a7228446be12e3366e202176carll {12, 7, 0x0}, 623dd690bf8d81c9119a7228446be12e3366e202176carll {12, 9, 0x0}, 624dd690bf8d81c9119a7228446be12e3366e202176carll {12, 11, 0x0}, 625f34eb496099507090f26dcf94bb780da8b3894e5sewardj}; 626f34eb496099507090f26dcf94bb780da8b3894e5sewardj 627f34eb496099507090f26dcf94bb780da8b3894e5sewardjfp_test_args_t xsmuldp_tests[] = { 628dd690bf8d81c9119a7228446be12e3366e202176carll {8, 8, 0x0}, 629dd690bf8d81c9119a7228446be12e3366e202176carll {8, 14, 0x0}, 630dd690bf8d81c9119a7228446be12e3366e202176carll {8, 6, 0x0}, 631dd690bf8d81c9119a7228446be12e3366e202176carll {8, 5, 0x0}, 632dd690bf8d81c9119a7228446be12e3366e202176carll {8, 4, 0x0}, 633dd690bf8d81c9119a7228446be12e3366e202176carll {8, 7, 0x0}, 634dd690bf8d81c9119a7228446be12e3366e202176carll {8, 9, 0x0}, 635dd690bf8d81c9119a7228446be12e3366e202176carll {8, 11, 0x0}, 636dd690bf8d81c9119a7228446be12e3366e202176carll {14, 8, 0x0}, 637dd690bf8d81c9119a7228446be12e3366e202176carll {14, 14, 0x0}, 638dd690bf8d81c9119a7228446be12e3366e202176carll {14, 6, 0x0}, 639dd690bf8d81c9119a7228446be12e3366e202176carll {14, 5, 0x0}, 640dd690bf8d81c9119a7228446be12e3366e202176carll {14, 4, 0x0}, 641dd690bf8d81c9119a7228446be12e3366e202176carll {14, 7, 0x0}, 642dd690bf8d81c9119a7228446be12e3366e202176carll {14, 9, 0x0}, 643dd690bf8d81c9119a7228446be12e3366e202176carll {14, 11, 0x0}, 644dd690bf8d81c9119a7228446be12e3366e202176carll {6, 8, 0x0}, 645dd690bf8d81c9119a7228446be12e3366e202176carll {6, 14, 0x0}, 646dd690bf8d81c9119a7228446be12e3366e202176carll {6, 6, 0x0}, 647dd690bf8d81c9119a7228446be12e3366e202176carll {6, 5, 0x0}, 648dd690bf8d81c9119a7228446be12e3366e202176carll {6, 4, 0x0}, 649dd690bf8d81c9119a7228446be12e3366e202176carll {6, 7, 0x0}, 650dd690bf8d81c9119a7228446be12e3366e202176carll {6, 9, 0x0}, 651dd690bf8d81c9119a7228446be12e3366e202176carll {6, 11, 0x0}, 652dd690bf8d81c9119a7228446be12e3366e202176carll {5, 8, 0x0}, 653dd690bf8d81c9119a7228446be12e3366e202176carll {5, 14, 0x0}, 654dd690bf8d81c9119a7228446be12e3366e202176carll {5, 6, 0x0}, 655dd690bf8d81c9119a7228446be12e3366e202176carll {5, 5, 0x0}, 656dd690bf8d81c9119a7228446be12e3366e202176carll {5, 4, 0x0}, 657dd690bf8d81c9119a7228446be12e3366e202176carll {5, 7, 0x0}, 658dd690bf8d81c9119a7228446be12e3366e202176carll {5, 9, 0x0}, 659dd690bf8d81c9119a7228446be12e3366e202176carll {5, 11, 0x0}, 660dd690bf8d81c9119a7228446be12e3366e202176carll {4, 8, 0x0}, 661dd690bf8d81c9119a7228446be12e3366e202176carll {4, 14, 0x0}, 662dd690bf8d81c9119a7228446be12e3366e202176carll {4, 6, 0x0}, 663dd690bf8d81c9119a7228446be12e3366e202176carll {4, 5, 0x0}, 664dd690bf8d81c9119a7228446be12e3366e202176carll {4, 1, 0x0}, 665dd690bf8d81c9119a7228446be12e3366e202176carll {4, 7, 0x0}, 666dd690bf8d81c9119a7228446be12e3366e202176carll {4, 9, 0x0}, 667dd690bf8d81c9119a7228446be12e3366e202176carll {4, 11, 0x0}, 668dd690bf8d81c9119a7228446be12e3366e202176carll {7, 8, 0x0}, 669dd690bf8d81c9119a7228446be12e3366e202176carll {7, 14, 0x0}, 670dd690bf8d81c9119a7228446be12e3366e202176carll {7, 6, 0x0}, 671dd690bf8d81c9119a7228446be12e3366e202176carll {7, 5, 0x0}, 672dd690bf8d81c9119a7228446be12e3366e202176carll {7, 4, 0x0}, 673dd690bf8d81c9119a7228446be12e3366e202176carll {7, 7, 0x0}, 674dd690bf8d81c9119a7228446be12e3366e202176carll {7, 9, 0x0}, 675dd690bf8d81c9119a7228446be12e3366e202176carll {7, 11, 0x0}, 676dd690bf8d81c9119a7228446be12e3366e202176carll {10, 8, 0x0}, 677dd690bf8d81c9119a7228446be12e3366e202176carll {10, 14, 0x0}, 678dd690bf8d81c9119a7228446be12e3366e202176carll {10, 6, 0x0}, 679dd690bf8d81c9119a7228446be12e3366e202176carll {10, 5, 0x0}, 680dd690bf8d81c9119a7228446be12e3366e202176carll {10, 4, 0x0}, 681dd690bf8d81c9119a7228446be12e3366e202176carll {10, 7, 0x0}, 682dd690bf8d81c9119a7228446be12e3366e202176carll {10, 9, 0x0}, 683dd690bf8d81c9119a7228446be12e3366e202176carll {10, 11, 0x0}, 684dd690bf8d81c9119a7228446be12e3366e202176carll {12, 8, 0x0}, 685dd690bf8d81c9119a7228446be12e3366e202176carll {12, 14, 0x0}, 686dd690bf8d81c9119a7228446be12e3366e202176carll {12, 6, 0x0}, 687dd690bf8d81c9119a7228446be12e3366e202176carll {12, 5, 0x0}, 688dd690bf8d81c9119a7228446be12e3366e202176carll {12, 4, 0x0}, 689dd690bf8d81c9119a7228446be12e3366e202176carll {12, 7, 0x0}, 690dd690bf8d81c9119a7228446be12e3366e202176carll {12, 9, 0x0}, 691dd690bf8d81c9119a7228446be12e3366e202176carll {12, 11, 0x0}, 692f34eb496099507090f26dcf94bb780da8b3894e5sewardj}; 693f34eb496099507090f26dcf94bb780da8b3894e5sewardj 694f34eb496099507090f26dcf94bb780da8b3894e5sewardjfp_test_args_t xssubdp_tests[] = { 695dd690bf8d81c9119a7228446be12e3366e202176carll {8, 8, 0x0}, 696dd690bf8d81c9119a7228446be12e3366e202176carll {8, 14, 0x0}, 697dd690bf8d81c9119a7228446be12e3366e202176carll {8, 6, 0x0}, 698dd690bf8d81c9119a7228446be12e3366e202176carll {8, 5, 0x0}, 699dd690bf8d81c9119a7228446be12e3366e202176carll {8, 4, 0x0}, 700dd690bf8d81c9119a7228446be12e3366e202176carll {8, 7, 0x0}, 701dd690bf8d81c9119a7228446be12e3366e202176carll {8, 9, 0x0}, 702dd690bf8d81c9119a7228446be12e3366e202176carll {8, 11, 0x0}, 703dd690bf8d81c9119a7228446be12e3366e202176carll {14, 8, 0x0}, 704dd690bf8d81c9119a7228446be12e3366e202176carll {14, 14, 0x0}, 705dd690bf8d81c9119a7228446be12e3366e202176carll {14, 6, 0x0}, 706dd690bf8d81c9119a7228446be12e3366e202176carll {14, 5, 0x0}, 707dd690bf8d81c9119a7228446be12e3366e202176carll {14, 4, 0x0}, 708dd690bf8d81c9119a7228446be12e3366e202176carll {14, 7, 0x0}, 709dd690bf8d81c9119a7228446be12e3366e202176carll {14, 9, 0x0}, 710dd690bf8d81c9119a7228446be12e3366e202176carll {14, 11, 0x0}, 711dd690bf8d81c9119a7228446be12e3366e202176carll {6, 8, 0x0}, 712dd690bf8d81c9119a7228446be12e3366e202176carll {6, 14, 0x0}, 713dd690bf8d81c9119a7228446be12e3366e202176carll {6, 6, 0x0}, 714dd690bf8d81c9119a7228446be12e3366e202176carll {6, 5, 0x0}, 715dd690bf8d81c9119a7228446be12e3366e202176carll {6, 4, 0x0}, 716dd690bf8d81c9119a7228446be12e3366e202176carll {6, 7, 0x0}, 717dd690bf8d81c9119a7228446be12e3366e202176carll {6, 9, 0x0}, 718dd690bf8d81c9119a7228446be12e3366e202176carll {6, 11, 0x0}, 719dd690bf8d81c9119a7228446be12e3366e202176carll {5, 8, 0x0}, 720dd690bf8d81c9119a7228446be12e3366e202176carll {5, 14, 0x0}, 721dd690bf8d81c9119a7228446be12e3366e202176carll {5, 6, 0x0}, 722dd690bf8d81c9119a7228446be12e3366e202176carll {5, 5, 0x0}, 723dd690bf8d81c9119a7228446be12e3366e202176carll {5, 4, 0x0}, 724dd690bf8d81c9119a7228446be12e3366e202176carll {5, 7, 0x0}, 725dd690bf8d81c9119a7228446be12e3366e202176carll {5, 9, 0x0}, 726dd690bf8d81c9119a7228446be12e3366e202176carll {5, 11, 0x0}, 727dd690bf8d81c9119a7228446be12e3366e202176carll {4, 8, 0x0}, 728dd690bf8d81c9119a7228446be12e3366e202176carll {4, 14, 0x0}, 729dd690bf8d81c9119a7228446be12e3366e202176carll {4, 6, 0x0}, 730dd690bf8d81c9119a7228446be12e3366e202176carll {4, 5, 0x0}, 731dd690bf8d81c9119a7228446be12e3366e202176carll {4, 1, 0x0}, 732dd690bf8d81c9119a7228446be12e3366e202176carll {4, 7, 0x0}, 733dd690bf8d81c9119a7228446be12e3366e202176carll {4, 9, 0x0}, 734dd690bf8d81c9119a7228446be12e3366e202176carll {4, 11, 0x0}, 735dd690bf8d81c9119a7228446be12e3366e202176carll {7, 8, 0x0}, 736dd690bf8d81c9119a7228446be12e3366e202176carll {7, 14, 0x0}, 737dd690bf8d81c9119a7228446be12e3366e202176carll {7, 6, 0x0}, 738dd690bf8d81c9119a7228446be12e3366e202176carll {7, 5, 0x0}, 739dd690bf8d81c9119a7228446be12e3366e202176carll {7, 4, 0x0}, 740dd690bf8d81c9119a7228446be12e3366e202176carll {7, 7, 0x0}, 741dd690bf8d81c9119a7228446be12e3366e202176carll {7, 9, 0x0}, 742dd690bf8d81c9119a7228446be12e3366e202176carll {7, 11, 0x0}, 743dd690bf8d81c9119a7228446be12e3366e202176carll {10, 8, 0x0}, 744dd690bf8d81c9119a7228446be12e3366e202176carll {10, 14, 0x0}, 745dd690bf8d81c9119a7228446be12e3366e202176carll {10, 6, 0x0}, 746dd690bf8d81c9119a7228446be12e3366e202176carll {10, 5, 0x0}, 747dd690bf8d81c9119a7228446be12e3366e202176carll {10, 4, 0x0}, 748dd690bf8d81c9119a7228446be12e3366e202176carll {10, 7, 0x0}, 749dd690bf8d81c9119a7228446be12e3366e202176carll {10, 9, 0x0}, 750dd690bf8d81c9119a7228446be12e3366e202176carll {10, 11, 0x0}, 751dd690bf8d81c9119a7228446be12e3366e202176carll {12, 8, 0x0}, 752dd690bf8d81c9119a7228446be12e3366e202176carll {12, 14, 0x0}, 753dd690bf8d81c9119a7228446be12e3366e202176carll {12, 6, 0x0}, 754dd690bf8d81c9119a7228446be12e3366e202176carll {12, 5, 0x0}, 755dd690bf8d81c9119a7228446be12e3366e202176carll {12, 4, 0x0}, 756dd690bf8d81c9119a7228446be12e3366e202176carll {12, 7, 0x0}, 757dd690bf8d81c9119a7228446be12e3366e202176carll {12, 9, 0x0}, 758dd690bf8d81c9119a7228446be12e3366e202176carll {12, 11, 0x0}, 759f34eb496099507090f26dcf94bb780da8b3894e5sewardj}; 760f34eb496099507090f26dcf94bb780da8b3894e5sewardj 761f34eb496099507090f26dcf94bb780da8b3894e5sewardj 762f34eb496099507090f26dcf94bb780da8b3894e5sewardj 763f34eb496099507090f26dcf94bb780da8b3894e5sewardjstatic int nb_special_fargs; 764f34eb496099507090f26dcf94bb780da8b3894e5sewardjstatic double * spec_fargs; 765f34eb496099507090f26dcf94bb780da8b3894e5sewardj 766f34eb496099507090f26dcf94bb780da8b3894e5sewardjstatic void build_special_fargs_table(void) 767f34eb496099507090f26dcf94bb780da8b3894e5sewardj{ 768f34eb496099507090f26dcf94bb780da8b3894e5sewardj /* The special floating point values created below are for 769f34eb496099507090f26dcf94bb780da8b3894e5sewardj * use in the ftdiv tests for setting the fe_flag and fg_flag, 770f34eb496099507090f26dcf94bb780da8b3894e5sewardj * but they can also be used for other tests (e.g., xscmpudp). 771f34eb496099507090f26dcf94bb780da8b3894e5sewardj * 772f34eb496099507090f26dcf94bb780da8b3894e5sewardj * Note that fl_flag is 'always '1' on ppc64 Linux. 773f34eb496099507090f26dcf94bb780da8b3894e5sewardj * 774f34eb496099507090f26dcf94bb780da8b3894e5sewardj Entry Sign Exp fraction Special value 775f34eb496099507090f26dcf94bb780da8b3894e5sewardj 0 0 3fd 0x8000000000000ULL Positive finite number 776f34eb496099507090f26dcf94bb780da8b3894e5sewardj 1 0 404 0xf000000000000ULL ... 777f34eb496099507090f26dcf94bb780da8b3894e5sewardj 2 0 001 0x8000000b77501ULL ... 778f34eb496099507090f26dcf94bb780da8b3894e5sewardj 3 0 7fe 0x800000000051bULL ... 779f34eb496099507090f26dcf94bb780da8b3894e5sewardj 4 0 012 0x3214569900000ULL ... 780f34eb496099507090f26dcf94bb780da8b3894e5sewardj 5 0 000 0x0000000000000ULL +0.0 (+zero) 781f34eb496099507090f26dcf94bb780da8b3894e5sewardj 6 1 000 0x0000000000000ULL -0.0 (-zero) 782f34eb496099507090f26dcf94bb780da8b3894e5sewardj 7 0 7ff 0x0000000000000ULL +infinity 783f34eb496099507090f26dcf94bb780da8b3894e5sewardj 8 1 7ff 0x0000000000000ULL -infinity 7848efe4e40e702e4a1eafac37076e1df2ccd9b047bcarll 9 0 7ff 0x7FFFFFFFFFFFFULL +SNaN 7858efe4e40e702e4a1eafac37076e1df2ccd9b047bcarll 10 1 7ff 0x7FFFFFFFFFFFFULL -SNaN 7868efe4e40e702e4a1eafac37076e1df2ccd9b047bcarll 11 0 7ff 0x8000000000000ULL +QNaN 7878efe4e40e702e4a1eafac37076e1df2ccd9b047bcarll 12 1 7ff 0x8000000000000ULL -QNaN 788f34eb496099507090f26dcf94bb780da8b3894e5sewardj 13 1 000 0x8340000078000ULL Denormalized val (zero exp and non-zero fraction) 789f34eb496099507090f26dcf94bb780da8b3894e5sewardj 14 1 40d 0x0650f5a07b353ULL Negative finite number 790f34eb496099507090f26dcf94bb780da8b3894e5sewardj */ 791f34eb496099507090f26dcf94bb780da8b3894e5sewardj 792f34eb496099507090f26dcf94bb780da8b3894e5sewardj uint64_t mant; 793f34eb496099507090f26dcf94bb780da8b3894e5sewardj uint16_t _exp; 794f34eb496099507090f26dcf94bb780da8b3894e5sewardj int s; 795f34eb496099507090f26dcf94bb780da8b3894e5sewardj int i = 0; 796f34eb496099507090f26dcf94bb780da8b3894e5sewardj 797f34eb496099507090f26dcf94bb780da8b3894e5sewardj if (spec_fargs) 798f34eb496099507090f26dcf94bb780da8b3894e5sewardj return; 799f34eb496099507090f26dcf94bb780da8b3894e5sewardj 800f34eb496099507090f26dcf94bb780da8b3894e5sewardj spec_fargs = malloc( 16 * sizeof(double) ); 801f34eb496099507090f26dcf94bb780da8b3894e5sewardj 802f34eb496099507090f26dcf94bb780da8b3894e5sewardj // #0 803f34eb496099507090f26dcf94bb780da8b3894e5sewardj s = 0; 804f34eb496099507090f26dcf94bb780da8b3894e5sewardj _exp = 0x3fd; 805f34eb496099507090f26dcf94bb780da8b3894e5sewardj mant = 0x8000000000000ULL; 806f34eb496099507090f26dcf94bb780da8b3894e5sewardj register_farg(&spec_fargs[i++], s, _exp, mant); 807f34eb496099507090f26dcf94bb780da8b3894e5sewardj 808f34eb496099507090f26dcf94bb780da8b3894e5sewardj // #1 809f34eb496099507090f26dcf94bb780da8b3894e5sewardj s = 0; 810f34eb496099507090f26dcf94bb780da8b3894e5sewardj _exp = 0x404; 811f34eb496099507090f26dcf94bb780da8b3894e5sewardj mant = 0xf000000000000ULL; 812f34eb496099507090f26dcf94bb780da8b3894e5sewardj register_farg(&spec_fargs[i++], s, _exp, mant); 813f34eb496099507090f26dcf94bb780da8b3894e5sewardj 814f34eb496099507090f26dcf94bb780da8b3894e5sewardj /* None of the ftdiv tests succeed. 815f34eb496099507090f26dcf94bb780da8b3894e5sewardj * FRA = value #0; FRB = value #1 816f34eb496099507090f26dcf94bb780da8b3894e5sewardj * ea_ = -2; e_b = 5 817f34eb496099507090f26dcf94bb780da8b3894e5sewardj * fl_flag || fg_flag || fe_flag = 100 818f34eb496099507090f26dcf94bb780da8b3894e5sewardj */ 819f34eb496099507090f26dcf94bb780da8b3894e5sewardj 820f34eb496099507090f26dcf94bb780da8b3894e5sewardj /************************************************* 821f34eb496099507090f26dcf94bb780da8b3894e5sewardj * fe_flag tests 822f34eb496099507090f26dcf94bb780da8b3894e5sewardj * 823f34eb496099507090f26dcf94bb780da8b3894e5sewardj *************************************************/ 824f34eb496099507090f26dcf94bb780da8b3894e5sewardj 825f34eb496099507090f26dcf94bb780da8b3894e5sewardj /* fe_flag <- 1 if FRA is a NaN 826f34eb496099507090f26dcf94bb780da8b3894e5sewardj * FRA = value #9; FRB = value #1 827f34eb496099507090f26dcf94bb780da8b3894e5sewardj * e_a = 1024; e_b = 5 828f34eb496099507090f26dcf94bb780da8b3894e5sewardj * fl_flag || fg_flag || fe_flag = 101 829f34eb496099507090f26dcf94bb780da8b3894e5sewardj */ 830f34eb496099507090f26dcf94bb780da8b3894e5sewardj 831f34eb496099507090f26dcf94bb780da8b3894e5sewardj /* fe_flag <- 1 if FRB is a NaN 832f34eb496099507090f26dcf94bb780da8b3894e5sewardj * FRA = value #1; FRB = value #12 833f34eb496099507090f26dcf94bb780da8b3894e5sewardj * e_a = 5; e_b = 1024 834f34eb496099507090f26dcf94bb780da8b3894e5sewardj * fl_flag || fg_flag || fe_flag = 101 835f34eb496099507090f26dcf94bb780da8b3894e5sewardj */ 836f34eb496099507090f26dcf94bb780da8b3894e5sewardj 837f34eb496099507090f26dcf94bb780da8b3894e5sewardj /* fe_flag <- 1 if e_b <= -1022 838f34eb496099507090f26dcf94bb780da8b3894e5sewardj * FRA = value #0; FRB = value #2 839f34eb496099507090f26dcf94bb780da8b3894e5sewardj * e_a = -2; e_b = -1022 840f34eb496099507090f26dcf94bb780da8b3894e5sewardj * fl_flag || fg_flag || fe_flag = 101 841f34eb496099507090f26dcf94bb780da8b3894e5sewardj * 842f34eb496099507090f26dcf94bb780da8b3894e5sewardj */ 843f34eb496099507090f26dcf94bb780da8b3894e5sewardj // #2 844f34eb496099507090f26dcf94bb780da8b3894e5sewardj s = 0; 845f34eb496099507090f26dcf94bb780da8b3894e5sewardj _exp = 0x001; 846f34eb496099507090f26dcf94bb780da8b3894e5sewardj mant = 0x8000000b77501ULL; 847f34eb496099507090f26dcf94bb780da8b3894e5sewardj register_farg(&spec_fargs[i++], s, _exp, mant); 848f34eb496099507090f26dcf94bb780da8b3894e5sewardj 849f34eb496099507090f26dcf94bb780da8b3894e5sewardj /* fe_flag <- 1 if e_b >= 1021 850f34eb496099507090f26dcf94bb780da8b3894e5sewardj * FRA = value #1; FRB = value #3 851f34eb496099507090f26dcf94bb780da8b3894e5sewardj * e_a = 5; e_b = 1023 852f34eb496099507090f26dcf94bb780da8b3894e5sewardj * fl_flag || fg_flag || fe_flag = 101 853f34eb496099507090f26dcf94bb780da8b3894e5sewardj */ 854f34eb496099507090f26dcf94bb780da8b3894e5sewardj // #3 855f34eb496099507090f26dcf94bb780da8b3894e5sewardj s = 0; 856f34eb496099507090f26dcf94bb780da8b3894e5sewardj _exp = 0x7fe; 857f34eb496099507090f26dcf94bb780da8b3894e5sewardj mant = 0x800000000051bULL; 858f34eb496099507090f26dcf94bb780da8b3894e5sewardj register_farg(&spec_fargs[i++], s, _exp, mant); 859f34eb496099507090f26dcf94bb780da8b3894e5sewardj 860f34eb496099507090f26dcf94bb780da8b3894e5sewardj /* fe_flag <- 1 if FRA != 0 && e_a - e_b >= 1023 861f34eb496099507090f26dcf94bb780da8b3894e5sewardj * Let FRA = value #3 and FRB be value #0. 862f34eb496099507090f26dcf94bb780da8b3894e5sewardj * e_a = 1023; e_b = -2 863f34eb496099507090f26dcf94bb780da8b3894e5sewardj * fl_flag || fg_flag || fe_flag = 101 864f34eb496099507090f26dcf94bb780da8b3894e5sewardj */ 865f34eb496099507090f26dcf94bb780da8b3894e5sewardj 866f34eb496099507090f26dcf94bb780da8b3894e5sewardj /* fe_flag <- 1 if FRA != 0 && e_a - e_b <= -1023 867f34eb496099507090f26dcf94bb780da8b3894e5sewardj * Let FRA = value #0 above and FRB be value #3 above 868f34eb496099507090f26dcf94bb780da8b3894e5sewardj * e_a = -2; e_b = 1023 869f34eb496099507090f26dcf94bb780da8b3894e5sewardj * fl_flag || fg_flag || fe_flag = 101 870f34eb496099507090f26dcf94bb780da8b3894e5sewardj */ 871f34eb496099507090f26dcf94bb780da8b3894e5sewardj 872f34eb496099507090f26dcf94bb780da8b3894e5sewardj /* fe_flag <- 1 if FRA != 0 && e_a <= -970 873f34eb496099507090f26dcf94bb780da8b3894e5sewardj * Let FRA = value #4 and FRB be value #0 874f34eb496099507090f26dcf94bb780da8b3894e5sewardj * e_a = -1005; e_b = -2 875f34eb496099507090f26dcf94bb780da8b3894e5sewardj * fl_flag || fg_flag || fe_flag = 101 876f34eb496099507090f26dcf94bb780da8b3894e5sewardj */ 877f34eb496099507090f26dcf94bb780da8b3894e5sewardj // #4 878f34eb496099507090f26dcf94bb780da8b3894e5sewardj s = 0; 879f34eb496099507090f26dcf94bb780da8b3894e5sewardj _exp = 0x012; 880f34eb496099507090f26dcf94bb780da8b3894e5sewardj mant = 0x3214569900000ULL; 881f34eb496099507090f26dcf94bb780da8b3894e5sewardj register_farg(&spec_fargs[i++], s, _exp, mant); 882f34eb496099507090f26dcf94bb780da8b3894e5sewardj 883f34eb496099507090f26dcf94bb780da8b3894e5sewardj /************************************************* 884f34eb496099507090f26dcf94bb780da8b3894e5sewardj * fg_flag tests 885f34eb496099507090f26dcf94bb780da8b3894e5sewardj * 886f34eb496099507090f26dcf94bb780da8b3894e5sewardj *************************************************/ 887f34eb496099507090f26dcf94bb780da8b3894e5sewardj /* fg_flag <- 1 if FRA is an Infinity 888f34eb496099507090f26dcf94bb780da8b3894e5sewardj * NOTE: FRA = Inf also sets fe_flag 889f34eb496099507090f26dcf94bb780da8b3894e5sewardj * Do two tests, using values #7 and #8 (+/- Inf) for FRA. 890f34eb496099507090f26dcf94bb780da8b3894e5sewardj * Test 1: 891f34eb496099507090f26dcf94bb780da8b3894e5sewardj * Let FRA be value #7 and FRB be value #1 892f34eb496099507090f26dcf94bb780da8b3894e5sewardj * e_a = 1024; e_b = 5 893f34eb496099507090f26dcf94bb780da8b3894e5sewardj * fl_flag || fg_flag || fe_flag = 111 894f34eb496099507090f26dcf94bb780da8b3894e5sewardj * 895f34eb496099507090f26dcf94bb780da8b3894e5sewardj * Test 2: 896f34eb496099507090f26dcf94bb780da8b3894e5sewardj * Let FRA be value #8 and FRB be value #1 897f34eb496099507090f26dcf94bb780da8b3894e5sewardj * e_a = 1024; e_b = 5 898f34eb496099507090f26dcf94bb780da8b3894e5sewardj * fl_flag || fg_flag || fe_flag = 111 899f34eb496099507090f26dcf94bb780da8b3894e5sewardj * 900f34eb496099507090f26dcf94bb780da8b3894e5sewardj */ 901f34eb496099507090f26dcf94bb780da8b3894e5sewardj 902f34eb496099507090f26dcf94bb780da8b3894e5sewardj /* fg_flag <- 1 if FRB is an Infinity 903f34eb496099507090f26dcf94bb780da8b3894e5sewardj * NOTE: FRB = Inf also sets fe_flag 904f34eb496099507090f26dcf94bb780da8b3894e5sewardj * Let FRA be value #1 and FRB be value #7 905f34eb496099507090f26dcf94bb780da8b3894e5sewardj * e_a = 5; e_b = 1024 906f34eb496099507090f26dcf94bb780da8b3894e5sewardj * fl_flag || fg_flag || fe_flag = 111 907f34eb496099507090f26dcf94bb780da8b3894e5sewardj */ 908f34eb496099507090f26dcf94bb780da8b3894e5sewardj 909f34eb496099507090f26dcf94bb780da8b3894e5sewardj /* fg_flag <- 1 if FRB is denormalized 910f34eb496099507090f26dcf94bb780da8b3894e5sewardj * NOTE: e_b < -1022 ==> fe_flag <- 1 911f34eb496099507090f26dcf94bb780da8b3894e5sewardj * Let FRA be value #0 and FRB be value #13 912f34eb496099507090f26dcf94bb780da8b3894e5sewardj * e_a = -2; e_b = -1023 913f34eb496099507090f26dcf94bb780da8b3894e5sewardj * fl_flag || fg_flag || fe_flag = 111 914f34eb496099507090f26dcf94bb780da8b3894e5sewardj */ 915f34eb496099507090f26dcf94bb780da8b3894e5sewardj 916f34eb496099507090f26dcf94bb780da8b3894e5sewardj /* fg_flag <- 1 if FRB is +zero 917f34eb496099507090f26dcf94bb780da8b3894e5sewardj * NOTE: FRA = Inf also sets fe_flag 918f34eb496099507090f26dcf94bb780da8b3894e5sewardj * Let FRA = val #5; FRB = val #5 919f34eb496099507090f26dcf94bb780da8b3894e5sewardj * ea_ = -1023; e_b = -1023 920f34eb496099507090f26dcf94bb780da8b3894e5sewardj * fl_flag || fg_flag || fe_flag = 111 921f34eb496099507090f26dcf94bb780da8b3894e5sewardj */ 922f34eb496099507090f26dcf94bb780da8b3894e5sewardj 923f34eb496099507090f26dcf94bb780da8b3894e5sewardj /* fg_flag <- 1 if FRB is -zero 924f34eb496099507090f26dcf94bb780da8b3894e5sewardj * NOTE: FRA = Inf also sets fe_flag 925f34eb496099507090f26dcf94bb780da8b3894e5sewardj * Let FRA = val #5; FRB = val #6 926f34eb496099507090f26dcf94bb780da8b3894e5sewardj * ea_ = -1023; e_b = -1023 927f34eb496099507090f26dcf94bb780da8b3894e5sewardj * fl_flag || fg_flag || fe_flag = 111 928f34eb496099507090f26dcf94bb780da8b3894e5sewardj */ 929f34eb496099507090f26dcf94bb780da8b3894e5sewardj 930f34eb496099507090f26dcf94bb780da8b3894e5sewardj /* Special values */ 931f34eb496099507090f26dcf94bb780da8b3894e5sewardj /* +0.0 : 0 0x000 0x0000000000000 */ 932f34eb496099507090f26dcf94bb780da8b3894e5sewardj // #5 933f34eb496099507090f26dcf94bb780da8b3894e5sewardj s = 0; 934f34eb496099507090f26dcf94bb780da8b3894e5sewardj _exp = 0x000; 935f34eb496099507090f26dcf94bb780da8b3894e5sewardj mant = 0x0000000000000ULL; 936f34eb496099507090f26dcf94bb780da8b3894e5sewardj register_farg(&spec_fargs[i++], s, _exp, mant); 937f34eb496099507090f26dcf94bb780da8b3894e5sewardj 938f34eb496099507090f26dcf94bb780da8b3894e5sewardj /* -0.0 : 1 0x000 0x0000000000000 */ 939f34eb496099507090f26dcf94bb780da8b3894e5sewardj // #6 940f34eb496099507090f26dcf94bb780da8b3894e5sewardj s = 1; 941f34eb496099507090f26dcf94bb780da8b3894e5sewardj _exp = 0x000; 942f34eb496099507090f26dcf94bb780da8b3894e5sewardj mant = 0x0000000000000ULL; 943f34eb496099507090f26dcf94bb780da8b3894e5sewardj register_farg(&spec_fargs[i++], s, _exp, mant); 944f34eb496099507090f26dcf94bb780da8b3894e5sewardj 945f34eb496099507090f26dcf94bb780da8b3894e5sewardj /* +infinity : 0 0x7FF 0x0000000000000 */ 946f34eb496099507090f26dcf94bb780da8b3894e5sewardj // #7 947f34eb496099507090f26dcf94bb780da8b3894e5sewardj s = 0; 948f34eb496099507090f26dcf94bb780da8b3894e5sewardj _exp = 0x7FF; 949f34eb496099507090f26dcf94bb780da8b3894e5sewardj mant = 0x0000000000000ULL; 950f34eb496099507090f26dcf94bb780da8b3894e5sewardj register_farg(&spec_fargs[i++], s, _exp, mant); 951f34eb496099507090f26dcf94bb780da8b3894e5sewardj 952f34eb496099507090f26dcf94bb780da8b3894e5sewardj /* -infinity : 1 0x7FF 0x0000000000000 */ 953f34eb496099507090f26dcf94bb780da8b3894e5sewardj // #8 954f34eb496099507090f26dcf94bb780da8b3894e5sewardj s = 1; 955f34eb496099507090f26dcf94bb780da8b3894e5sewardj _exp = 0x7FF; 956f34eb496099507090f26dcf94bb780da8b3894e5sewardj mant = 0x0000000000000ULL; 957f34eb496099507090f26dcf94bb780da8b3894e5sewardj register_farg(&spec_fargs[i++], s, _exp, mant); 958f34eb496099507090f26dcf94bb780da8b3894e5sewardj 9598efe4e40e702e4a1eafac37076e1df2ccd9b047bcarll /* +SNaN : 0 0x7FF 0x7FFFFFFFFFFFF */ 960f34eb496099507090f26dcf94bb780da8b3894e5sewardj // #9 961f34eb496099507090f26dcf94bb780da8b3894e5sewardj s = 0; 962f34eb496099507090f26dcf94bb780da8b3894e5sewardj _exp = 0x7FF; 963f34eb496099507090f26dcf94bb780da8b3894e5sewardj mant = 0x7FFFFFFFFFFFFULL; 964f34eb496099507090f26dcf94bb780da8b3894e5sewardj register_farg(&spec_fargs[i++], s, _exp, mant); 965f34eb496099507090f26dcf94bb780da8b3894e5sewardj 9668efe4e40e702e4a1eafac37076e1df2ccd9b047bcarll /* -SNaN : 1 0x7FF 0x7FFFFFFFFFFFF */ 967f34eb496099507090f26dcf94bb780da8b3894e5sewardj // #10 968f34eb496099507090f26dcf94bb780da8b3894e5sewardj s = 1; 969f34eb496099507090f26dcf94bb780da8b3894e5sewardj _exp = 0x7FF; 970f34eb496099507090f26dcf94bb780da8b3894e5sewardj mant = 0x7FFFFFFFFFFFFULL; 971f34eb496099507090f26dcf94bb780da8b3894e5sewardj register_farg(&spec_fargs[i++], s, _exp, mant); 972f34eb496099507090f26dcf94bb780da8b3894e5sewardj 9738efe4e40e702e4a1eafac37076e1df2ccd9b047bcarll /* +QNaN : 0 0x7FF 0x8000000000000 */ 974f34eb496099507090f26dcf94bb780da8b3894e5sewardj // #11 975f34eb496099507090f26dcf94bb780da8b3894e5sewardj s = 0; 976f34eb496099507090f26dcf94bb780da8b3894e5sewardj _exp = 0x7FF; 977f34eb496099507090f26dcf94bb780da8b3894e5sewardj mant = 0x8000000000000ULL; 978f34eb496099507090f26dcf94bb780da8b3894e5sewardj register_farg(&spec_fargs[i++], s, _exp, mant); 979f34eb496099507090f26dcf94bb780da8b3894e5sewardj 9808efe4e40e702e4a1eafac37076e1df2ccd9b047bcarll /* -QNaN : 1 0x7FF 0x8000000000000 */ 981f34eb496099507090f26dcf94bb780da8b3894e5sewardj // #12 982f34eb496099507090f26dcf94bb780da8b3894e5sewardj s = 1; 983f34eb496099507090f26dcf94bb780da8b3894e5sewardj _exp = 0x7FF; 984f34eb496099507090f26dcf94bb780da8b3894e5sewardj mant = 0x8000000000000ULL; 985f34eb496099507090f26dcf94bb780da8b3894e5sewardj register_farg(&spec_fargs[i++], s, _exp, mant); 986f34eb496099507090f26dcf94bb780da8b3894e5sewardj 987f34eb496099507090f26dcf94bb780da8b3894e5sewardj /* denormalized value */ 988f34eb496099507090f26dcf94bb780da8b3894e5sewardj // #13 989f34eb496099507090f26dcf94bb780da8b3894e5sewardj s = 1; 990f34eb496099507090f26dcf94bb780da8b3894e5sewardj _exp = 0x000; 991f34eb496099507090f26dcf94bb780da8b3894e5sewardj mant = 0x8340000078000ULL; 992f34eb496099507090f26dcf94bb780da8b3894e5sewardj register_farg(&spec_fargs[i++], s, _exp, mant); 993f34eb496099507090f26dcf94bb780da8b3894e5sewardj 994f34eb496099507090f26dcf94bb780da8b3894e5sewardj /* Negative finite number */ 995f34eb496099507090f26dcf94bb780da8b3894e5sewardj // #14 996f34eb496099507090f26dcf94bb780da8b3894e5sewardj s = 1; 997f34eb496099507090f26dcf94bb780da8b3894e5sewardj _exp = 0x40d; 998f34eb496099507090f26dcf94bb780da8b3894e5sewardj mant = 0x0650f5a07b353ULL; 999f34eb496099507090f26dcf94bb780da8b3894e5sewardj register_farg(&spec_fargs[i++], s, _exp, mant); 1000f34eb496099507090f26dcf94bb780da8b3894e5sewardj 1001f34eb496099507090f26dcf94bb780da8b3894e5sewardj nb_special_fargs = i; 1002f34eb496099507090f26dcf94bb780da8b3894e5sewardj} 1003f34eb496099507090f26dcf94bb780da8b3894e5sewardj 1004f34eb496099507090f26dcf94bb780da8b3894e5sewardj 1005f34eb496099507090f26dcf94bb780da8b3894e5sewardjstruct test_table 1006f34eb496099507090f26dcf94bb780da8b3894e5sewardj{ 1007f34eb496099507090f26dcf94bb780da8b3894e5sewardj test_func_t test_category; 1008f34eb496099507090f26dcf94bb780da8b3894e5sewardj char * name; 1009f34eb496099507090f26dcf94bb780da8b3894e5sewardj}; 1010f34eb496099507090f26dcf94bb780da8b3894e5sewardj 1011f34eb496099507090f26dcf94bb780da8b3894e5sewardjstruct p7_fp_test 1012f34eb496099507090f26dcf94bb780da8b3894e5sewardj{ 1013f34eb496099507090f26dcf94bb780da8b3894e5sewardj test_func_t test_func; 1014f34eb496099507090f26dcf94bb780da8b3894e5sewardj const char *name; 1015f34eb496099507090f26dcf94bb780da8b3894e5sewardj int single; // 1=single precision result; 0=double precision result 1016f34eb496099507090f26dcf94bb780da8b3894e5sewardj}; 1017f34eb496099507090f26dcf94bb780da8b3894e5sewardj 1018f34eb496099507090f26dcf94bb780da8b3894e5sewardjtypedef enum { 1019f34eb496099507090f26dcf94bb780da8b3894e5sewardj VX_FP_CMP, 1020f34eb496099507090f26dcf94bb780da8b3894e5sewardj VX_FP_SMA, 1021f34eb496099507090f26dcf94bb780da8b3894e5sewardj VX_FP_SMS, 1022f34eb496099507090f26dcf94bb780da8b3894e5sewardj VX_FP_SNMA, 1023f34eb496099507090f26dcf94bb780da8b3894e5sewardj VX_FP_OTHER 1024f34eb496099507090f26dcf94bb780da8b3894e5sewardj} vx_fp_test_type; 1025f34eb496099507090f26dcf94bb780da8b3894e5sewardj 1026f34eb496099507090f26dcf94bb780da8b3894e5sewardjstruct vx_fp_test 1027f34eb496099507090f26dcf94bb780da8b3894e5sewardj{ 1028f34eb496099507090f26dcf94bb780da8b3894e5sewardj test_func_t test_func; 1029f34eb496099507090f26dcf94bb780da8b3894e5sewardj const char *name; 1030f34eb496099507090f26dcf94bb780da8b3894e5sewardj fp_test_args_t * targs; 1031f34eb496099507090f26dcf94bb780da8b3894e5sewardj int num_tests; 1032f34eb496099507090f26dcf94bb780da8b3894e5sewardj vx_fp_test_type test_type; 1033f34eb496099507090f26dcf94bb780da8b3894e5sewardj}; 1034f34eb496099507090f26dcf94bb780da8b3894e5sewardj 1035f34eb496099507090f26dcf94bb780da8b3894e5sewardjstruct xs_conv_test 1036f34eb496099507090f26dcf94bb780da8b3894e5sewardj{ 1037f34eb496099507090f26dcf94bb780da8b3894e5sewardj test_func_t test_func; 1038f34eb496099507090f26dcf94bb780da8b3894e5sewardj const char *name; 1039f34eb496099507090f26dcf94bb780da8b3894e5sewardj int num_tests; 1040f34eb496099507090f26dcf94bb780da8b3894e5sewardj}; 1041f34eb496099507090f26dcf94bb780da8b3894e5sewardj 1042f34eb496099507090f26dcf94bb780da8b3894e5sewardjtypedef enum { 1043f34eb496099507090f26dcf94bb780da8b3894e5sewardj VSX_LOAD =1, 1044f34eb496099507090f26dcf94bb780da8b3894e5sewardj VSX_LOAD_SPLAT, 1045f34eb496099507090f26dcf94bb780da8b3894e5sewardj VSX_STORE 1046f34eb496099507090f26dcf94bb780da8b3894e5sewardj} vsx_ldst_type; 1047f34eb496099507090f26dcf94bb780da8b3894e5sewardj 1048f34eb496099507090f26dcf94bb780da8b3894e5sewardjstruct ldst_test 1049f34eb496099507090f26dcf94bb780da8b3894e5sewardj{ 1050f34eb496099507090f26dcf94bb780da8b3894e5sewardj test_func_t test_func; 1051f34eb496099507090f26dcf94bb780da8b3894e5sewardj const char *name; 1052f34eb496099507090f26dcf94bb780da8b3894e5sewardj void * base_addr; 1053f34eb496099507090f26dcf94bb780da8b3894e5sewardj uint32_t offset; 1054f34eb496099507090f26dcf94bb780da8b3894e5sewardj int num_words_to_process; 1055f34eb496099507090f26dcf94bb780da8b3894e5sewardj vsx_ldst_type type; 1056f34eb496099507090f26dcf94bb780da8b3894e5sewardj}; 1057f34eb496099507090f26dcf94bb780da8b3894e5sewardj 1058f34eb496099507090f26dcf94bb780da8b3894e5sewardjtypedef enum { 1059f34eb496099507090f26dcf94bb780da8b3894e5sewardj VSX_AND = 1, 1060f34eb496099507090f26dcf94bb780da8b3894e5sewardj VSX_XOR, 1061f34eb496099507090f26dcf94bb780da8b3894e5sewardj VSX_ANDC, 1062f34eb496099507090f26dcf94bb780da8b3894e5sewardj VSX_OR, 1063f34eb496099507090f26dcf94bb780da8b3894e5sewardj VSX_NOR 1064f34eb496099507090f26dcf94bb780da8b3894e5sewardj} vsx_log_op; 1065f34eb496099507090f26dcf94bb780da8b3894e5sewardj 1066f34eb496099507090f26dcf94bb780da8b3894e5sewardjstruct vsx_logic_test 1067f34eb496099507090f26dcf94bb780da8b3894e5sewardj{ 1068f34eb496099507090f26dcf94bb780da8b3894e5sewardj test_func_t test_func; 1069f34eb496099507090f26dcf94bb780da8b3894e5sewardj const char *name; 1070f34eb496099507090f26dcf94bb780da8b3894e5sewardj vsx_log_op op; 1071f34eb496099507090f26dcf94bb780da8b3894e5sewardj}; 1072f34eb496099507090f26dcf94bb780da8b3894e5sewardj 1073f34eb496099507090f26dcf94bb780da8b3894e5sewardjstruct vsx_move_test 1074f34eb496099507090f26dcf94bb780da8b3894e5sewardj{ 1075f34eb496099507090f26dcf94bb780da8b3894e5sewardj test_func_t test_func; 1076f34eb496099507090f26dcf94bb780da8b3894e5sewardj const char *name; 1077f34eb496099507090f26dcf94bb780da8b3894e5sewardj}; 1078f34eb496099507090f26dcf94bb780da8b3894e5sewardj 1079f34eb496099507090f26dcf94bb780da8b3894e5sewardjstruct vsx_permute_test 1080f34eb496099507090f26dcf94bb780da8b3894e5sewardj{ 1081f34eb496099507090f26dcf94bb780da8b3894e5sewardj test_func_t test_func; 1082f34eb496099507090f26dcf94bb780da8b3894e5sewardj const char *name; 1083f34eb496099507090f26dcf94bb780da8b3894e5sewardj unsigned int xa[4]; 1084f34eb496099507090f26dcf94bb780da8b3894e5sewardj unsigned int xb[4]; 1085f34eb496099507090f26dcf94bb780da8b3894e5sewardj}; 1086f34eb496099507090f26dcf94bb780da8b3894e5sewardj 1087f34eb496099507090f26dcf94bb780da8b3894e5sewardjstatic vector unsigned int vec_out, vec_inA, vec_inB; 1088f34eb496099507090f26dcf94bb780da8b3894e5sewardj 1089f34eb496099507090f26dcf94bb780da8b3894e5sewardjstatic void test_lxsdx(void) 1090f34eb496099507090f26dcf94bb780da8b3894e5sewardj{ 1091f34eb496099507090f26dcf94bb780da8b3894e5sewardj __asm__ __volatile__ ("lxsdx %x0, %1, %2" : "=wa" (vec_out): "b" (r14),"r" (r15)); 1092f34eb496099507090f26dcf94bb780da8b3894e5sewardj} 1093f34eb496099507090f26dcf94bb780da8b3894e5sewardj 1094f34eb496099507090f26dcf94bb780da8b3894e5sewardjstatic void 1095f34eb496099507090f26dcf94bb780da8b3894e5sewardjtest_lxvd2x(void) 1096f34eb496099507090f26dcf94bb780da8b3894e5sewardj{ 1097f34eb496099507090f26dcf94bb780da8b3894e5sewardj __asm__ __volatile__ ("lxvd2x %x0, %1, %2" : "=wa" (vec_out): "b" (r14),"r" (r15)); 1098f34eb496099507090f26dcf94bb780da8b3894e5sewardj} 1099f34eb496099507090f26dcf94bb780da8b3894e5sewardj 1100f34eb496099507090f26dcf94bb780da8b3894e5sewardjstatic void test_lxvdsx(void) 1101f34eb496099507090f26dcf94bb780da8b3894e5sewardj{ 1102f34eb496099507090f26dcf94bb780da8b3894e5sewardj __asm__ __volatile__ ("lxvdsx %x0, %1, %2" : "=wa" (vec_out): "b" (r14),"r" (r15)); 1103f34eb496099507090f26dcf94bb780da8b3894e5sewardj} 1104f34eb496099507090f26dcf94bb780da8b3894e5sewardj 1105f34eb496099507090f26dcf94bb780da8b3894e5sewardjstatic void test_lxvw4x(void) 1106f34eb496099507090f26dcf94bb780da8b3894e5sewardj{ 1107f34eb496099507090f26dcf94bb780da8b3894e5sewardj __asm__ __volatile__ ("lxvw4x %x0, %1, %2" : "=wa" (vec_out): "b" (r14),"r" (r15)); 1108f34eb496099507090f26dcf94bb780da8b3894e5sewardj} 1109f34eb496099507090f26dcf94bb780da8b3894e5sewardj 1110f34eb496099507090f26dcf94bb780da8b3894e5sewardjstatic void test_stxsdx(void) 1111f34eb496099507090f26dcf94bb780da8b3894e5sewardj{ 1112f34eb496099507090f26dcf94bb780da8b3894e5sewardj __asm__ __volatile__ ("stxsdx %x0, %1, %2" : : "wa" (vec_inA), "b" (r14),"r" (r15)); 1113f34eb496099507090f26dcf94bb780da8b3894e5sewardj} 1114f34eb496099507090f26dcf94bb780da8b3894e5sewardj 1115f34eb496099507090f26dcf94bb780da8b3894e5sewardjstatic void test_stxvd2x(void) 1116f34eb496099507090f26dcf94bb780da8b3894e5sewardj{ 1117f34eb496099507090f26dcf94bb780da8b3894e5sewardj __asm__ __volatile__ ("stxvd2x %x0, %1, %2" : : "wa" (vec_inA), "b" (r14),"r" (r15)); 1118f34eb496099507090f26dcf94bb780da8b3894e5sewardj} 1119f34eb496099507090f26dcf94bb780da8b3894e5sewardj 1120f34eb496099507090f26dcf94bb780da8b3894e5sewardjstatic void test_stxvw4x(void) 1121f34eb496099507090f26dcf94bb780da8b3894e5sewardj{ 1122f34eb496099507090f26dcf94bb780da8b3894e5sewardj __asm__ __volatile__ ("stxvw4x %x0, %1, %2" : : "wa" (vec_inA), "b" (r14),"r" (r15)); 1123f34eb496099507090f26dcf94bb780da8b3894e5sewardj} 1124f34eb496099507090f26dcf94bb780da8b3894e5sewardj 1125f34eb496099507090f26dcf94bb780da8b3894e5sewardjstatic void test_xxlxor(void) 1126f34eb496099507090f26dcf94bb780da8b3894e5sewardj{ 1127f34eb496099507090f26dcf94bb780da8b3894e5sewardj __asm__ __volatile__ ("xxlxor %x0, %x1, %x2" : "=wa" (vec_out): "wa" (vec_inA),"wa" (vec_inB)); 1128f34eb496099507090f26dcf94bb780da8b3894e5sewardj} 1129f34eb496099507090f26dcf94bb780da8b3894e5sewardj 1130f34eb496099507090f26dcf94bb780da8b3894e5sewardjstatic void test_xxlor(void) 1131f34eb496099507090f26dcf94bb780da8b3894e5sewardj{ 1132f34eb496099507090f26dcf94bb780da8b3894e5sewardj __asm__ __volatile__ ("xxlor %x0, %x1, %x2" : "=wa" (vec_out): "wa" (vec_inA),"wa" (vec_inB)); 1133f34eb496099507090f26dcf94bb780da8b3894e5sewardj} 1134f34eb496099507090f26dcf94bb780da8b3894e5sewardj 1135f34eb496099507090f26dcf94bb780da8b3894e5sewardjstatic void test_xxlnor(void) 1136f34eb496099507090f26dcf94bb780da8b3894e5sewardj{ 1137f34eb496099507090f26dcf94bb780da8b3894e5sewardj __asm__ __volatile__ ("xxlnor %x0, %x1, %x2" : "=wa" (vec_out): "wa" (vec_inA),"wa" (vec_inB)); 1138f34eb496099507090f26dcf94bb780da8b3894e5sewardj} 1139f34eb496099507090f26dcf94bb780da8b3894e5sewardj 1140f34eb496099507090f26dcf94bb780da8b3894e5sewardjstatic void test_xxland(void) 1141f34eb496099507090f26dcf94bb780da8b3894e5sewardj{ 1142f34eb496099507090f26dcf94bb780da8b3894e5sewardj __asm__ __volatile__ ("xxland %x0, %x1, %x2" : "=wa" (vec_out): "wa" (vec_inA),"wa" (vec_inB)); 1143f34eb496099507090f26dcf94bb780da8b3894e5sewardj} 1144f34eb496099507090f26dcf94bb780da8b3894e5sewardj 1145f34eb496099507090f26dcf94bb780da8b3894e5sewardjstatic void test_xxlandc(void) 1146f34eb496099507090f26dcf94bb780da8b3894e5sewardj{ 1147f34eb496099507090f26dcf94bb780da8b3894e5sewardj __asm__ __volatile__ ("xxlandc %x0, %x1, %x2" : "=wa" (vec_out): "wa" (vec_inA),"wa" (vec_inB)); 1148f34eb496099507090f26dcf94bb780da8b3894e5sewardj} 1149f34eb496099507090f26dcf94bb780da8b3894e5sewardj 1150f34eb496099507090f26dcf94bb780da8b3894e5sewardjstatic void test_xxmrghw(void) 1151f34eb496099507090f26dcf94bb780da8b3894e5sewardj{ 1152f34eb496099507090f26dcf94bb780da8b3894e5sewardj __asm__ __volatile__ ("xxmrghw %x0, %x1, %x2" : "=wa" (vec_out): "wa" (vec_inA),"wa" (vec_inB)); 1153f34eb496099507090f26dcf94bb780da8b3894e5sewardj} 1154f34eb496099507090f26dcf94bb780da8b3894e5sewardj 1155f34eb496099507090f26dcf94bb780da8b3894e5sewardjstatic void test_xxmrglw(void) 1156f34eb496099507090f26dcf94bb780da8b3894e5sewardj{ 1157f34eb496099507090f26dcf94bb780da8b3894e5sewardj __asm__ __volatile__ ("xxmrglw %x0, %x1, %x2" : "=wa" (vec_out): "wa" (vec_inA),"wa" (vec_inB)); 1158f34eb496099507090f26dcf94bb780da8b3894e5sewardj} 1159f34eb496099507090f26dcf94bb780da8b3894e5sewardj 1160f34eb496099507090f26dcf94bb780da8b3894e5sewardjstatic void test_xxpermdi_00(void) 1161f34eb496099507090f26dcf94bb780da8b3894e5sewardj{ 1162f34eb496099507090f26dcf94bb780da8b3894e5sewardj __asm__ __volatile__ ("xxpermdi %x0, %x1, %x2, 0x0" : "=wa" (vec_out): "wa" (vec_inA),"wa" (vec_inB)); 1163f34eb496099507090f26dcf94bb780da8b3894e5sewardj} 1164f34eb496099507090f26dcf94bb780da8b3894e5sewardj 1165f34eb496099507090f26dcf94bb780da8b3894e5sewardjstatic void test_xxpermdi_01(void) 1166f34eb496099507090f26dcf94bb780da8b3894e5sewardj{ 1167f34eb496099507090f26dcf94bb780da8b3894e5sewardj __asm__ __volatile__ ("xxpermdi %x0, %x1, %x2, 0x1" : "=wa" (vec_out): "wa" (vec_inA),"wa" (vec_inB)); 1168f34eb496099507090f26dcf94bb780da8b3894e5sewardj} 1169f34eb496099507090f26dcf94bb780da8b3894e5sewardj 1170f34eb496099507090f26dcf94bb780da8b3894e5sewardjstatic void test_xxpermdi_10(void) 1171f34eb496099507090f26dcf94bb780da8b3894e5sewardj{ 1172f34eb496099507090f26dcf94bb780da8b3894e5sewardj __asm__ __volatile__ ("xxpermdi %x0, %x1, %x2, 0x2" : "=wa" (vec_out): "wa" (vec_inA),"wa" (vec_inB)); 1173f34eb496099507090f26dcf94bb780da8b3894e5sewardj} 1174f34eb496099507090f26dcf94bb780da8b3894e5sewardj 1175f34eb496099507090f26dcf94bb780da8b3894e5sewardjstatic void test_xxpermdi_11(void) 1176f34eb496099507090f26dcf94bb780da8b3894e5sewardj{ 1177f34eb496099507090f26dcf94bb780da8b3894e5sewardj __asm__ __volatile__ ("xxpermdi %x0, %x1, %x2, 0x3" : "=wa" (vec_out): "wa" (vec_inA),"wa" (vec_inB)); 1178f34eb496099507090f26dcf94bb780da8b3894e5sewardj} 1179f34eb496099507090f26dcf94bb780da8b3894e5sewardj 1180f34eb496099507090f26dcf94bb780da8b3894e5sewardjstatic void test_xxsldwi_0(void) 1181f34eb496099507090f26dcf94bb780da8b3894e5sewardj{ 1182f34eb496099507090f26dcf94bb780da8b3894e5sewardj __asm__ __volatile__ ("xxsldwi %x0, %x1, %x2, 0" : "=wa" (vec_out): "wa" (vec_inA),"wa" (vec_inB)); 1183f34eb496099507090f26dcf94bb780da8b3894e5sewardj} 1184f34eb496099507090f26dcf94bb780da8b3894e5sewardj 1185f34eb496099507090f26dcf94bb780da8b3894e5sewardjstatic void test_xxsldwi_1(void) 1186f34eb496099507090f26dcf94bb780da8b3894e5sewardj{ 1187f34eb496099507090f26dcf94bb780da8b3894e5sewardj __asm__ __volatile__ ("xxsldwi %x0, %x1, %x2, 1" : "=wa" (vec_out): "wa" (vec_inA),"wa" (vec_inB)); 1188f34eb496099507090f26dcf94bb780da8b3894e5sewardj} 1189f34eb496099507090f26dcf94bb780da8b3894e5sewardj 1190f34eb496099507090f26dcf94bb780da8b3894e5sewardjstatic void test_xxsldwi_2(void) 1191f34eb496099507090f26dcf94bb780da8b3894e5sewardj{ 1192f34eb496099507090f26dcf94bb780da8b3894e5sewardj __asm__ __volatile__ ("xxsldwi %x0, %x1, %x2, 2" : "=wa" (vec_out): "wa" (vec_inA),"wa" (vec_inB)); 1193f34eb496099507090f26dcf94bb780da8b3894e5sewardj} 1194f34eb496099507090f26dcf94bb780da8b3894e5sewardj 1195f34eb496099507090f26dcf94bb780da8b3894e5sewardjstatic void test_xxsldwi_3(void) 1196f34eb496099507090f26dcf94bb780da8b3894e5sewardj{ 1197f34eb496099507090f26dcf94bb780da8b3894e5sewardj __asm__ __volatile__ ("xxsldwi %x0, %x1, %x2, 3" : "=wa" (vec_out): "wa" (vec_inA),"wa" (vec_inB)); 1198f34eb496099507090f26dcf94bb780da8b3894e5sewardj} 1199f34eb496099507090f26dcf94bb780da8b3894e5sewardj 1200f34eb496099507090f26dcf94bb780da8b3894e5sewardjstatic void test_fcfids (void) 1201f34eb496099507090f26dcf94bb780da8b3894e5sewardj{ 1202f34eb496099507090f26dcf94bb780da8b3894e5sewardj __asm__ __volatile__ ("fcfids %0, %1" : "=f" (f17): "d" (f14)); 1203f34eb496099507090f26dcf94bb780da8b3894e5sewardj} 1204f34eb496099507090f26dcf94bb780da8b3894e5sewardj 1205f34eb496099507090f26dcf94bb780da8b3894e5sewardjstatic void test_fcfidus (void) 1206f34eb496099507090f26dcf94bb780da8b3894e5sewardj{ 1207f34eb496099507090f26dcf94bb780da8b3894e5sewardj __asm__ __volatile__ ("fcfidus %0, %1" : "=f" (f17): "d" (f14)); 1208f34eb496099507090f26dcf94bb780da8b3894e5sewardj} 1209f34eb496099507090f26dcf94bb780da8b3894e5sewardj 1210f34eb496099507090f26dcf94bb780da8b3894e5sewardjstatic void test_fcfidu (void) 1211f34eb496099507090f26dcf94bb780da8b3894e5sewardj{ 1212f34eb496099507090f26dcf94bb780da8b3894e5sewardj __asm__ __volatile__ ("fcfidu %0, %1" : "=f" (f17): "d" (f14)); 1213f34eb496099507090f26dcf94bb780da8b3894e5sewardj} 1214f34eb496099507090f26dcf94bb780da8b3894e5sewardj 1215f34eb496099507090f26dcf94bb780da8b3894e5sewardjstatic void test_xsabsdp (void) 1216f34eb496099507090f26dcf94bb780da8b3894e5sewardj{ 1217f34eb496099507090f26dcf94bb780da8b3894e5sewardj __asm__ __volatile__ ("xsabsdp %x0, %x1" : "=wa" (vec_out): "wa" (vec_inB)); 1218f34eb496099507090f26dcf94bb780da8b3894e5sewardj} 1219f34eb496099507090f26dcf94bb780da8b3894e5sewardj 1220f34eb496099507090f26dcf94bb780da8b3894e5sewardjstatic void test_xscpsgndp (void) 1221f34eb496099507090f26dcf94bb780da8b3894e5sewardj{ 1222f34eb496099507090f26dcf94bb780da8b3894e5sewardj __asm__ __volatile__ ("xscpsgndp %x0, %x1, %x2" : "=wa" (vec_out): "wa" (vec_inA),"wa" (vec_inB)); 1223f34eb496099507090f26dcf94bb780da8b3894e5sewardj} 1224f34eb496099507090f26dcf94bb780da8b3894e5sewardj 1225f34eb496099507090f26dcf94bb780da8b3894e5sewardjstatic void test_xsnabsdp (void) 1226f34eb496099507090f26dcf94bb780da8b3894e5sewardj{ 1227f34eb496099507090f26dcf94bb780da8b3894e5sewardj __asm__ __volatile__ ("xsnabsdp %x0, %x1" : "=wa" (vec_out): "wa" (vec_inB)); 1228f34eb496099507090f26dcf94bb780da8b3894e5sewardj} 1229f34eb496099507090f26dcf94bb780da8b3894e5sewardj 1230f34eb496099507090f26dcf94bb780da8b3894e5sewardjstatic void test_xsnegdp (void) 1231f34eb496099507090f26dcf94bb780da8b3894e5sewardj{ 1232f34eb496099507090f26dcf94bb780da8b3894e5sewardj __asm__ __volatile__ ("xsnegdp %x0, %x1" : "=wa" (vec_out): "wa" (vec_inB)); 1233f34eb496099507090f26dcf94bb780da8b3894e5sewardj} 1234f34eb496099507090f26dcf94bb780da8b3894e5sewardj 1235f34eb496099507090f26dcf94bb780da8b3894e5sewardjstatic int do_cmpudp; 1236f34eb496099507090f26dcf94bb780da8b3894e5sewardjstatic void test_xscmp (void) 1237f34eb496099507090f26dcf94bb780da8b3894e5sewardj{ 1238f34eb496099507090f26dcf94bb780da8b3894e5sewardj if (do_cmpudp) 1239f34eb496099507090f26dcf94bb780da8b3894e5sewardj __asm__ __volatile__ ("xscmpudp cr1, %x0, %x1" : : "wa" (vec_inA),"wa" (vec_inB)); 1240f34eb496099507090f26dcf94bb780da8b3894e5sewardj else 1241f34eb496099507090f26dcf94bb780da8b3894e5sewardj __asm__ __volatile__ ("xscmpodp cr1, %x0, %x1" : : "wa" (vec_inA),"wa" (vec_inB)); 1242f34eb496099507090f26dcf94bb780da8b3894e5sewardj} 1243f34eb496099507090f26dcf94bb780da8b3894e5sewardj 1244f34eb496099507090f26dcf94bb780da8b3894e5sewardjstatic void test_xsadddp(void) 1245f34eb496099507090f26dcf94bb780da8b3894e5sewardj{ 1246f34eb496099507090f26dcf94bb780da8b3894e5sewardj __asm__ __volatile__ ("xsadddp %x0, %x1, %x2" : "=wa" (vec_out): "wa" (vec_inA),"wa" (vec_inB)); 1247f34eb496099507090f26dcf94bb780da8b3894e5sewardj} 1248f34eb496099507090f26dcf94bb780da8b3894e5sewardj 1249f34eb496099507090f26dcf94bb780da8b3894e5sewardjstatic void test_xsdivdp(void) 1250f34eb496099507090f26dcf94bb780da8b3894e5sewardj{ 1251f34eb496099507090f26dcf94bb780da8b3894e5sewardj __asm__ __volatile__ ("xsdivdp %x0, %x1, %x2" : "=wa" (vec_out): "wa" (vec_inA),"wa" (vec_inB)); 1252f34eb496099507090f26dcf94bb780da8b3894e5sewardj} 1253f34eb496099507090f26dcf94bb780da8b3894e5sewardj 1254f34eb496099507090f26dcf94bb780da8b3894e5sewardjstatic int do_adp; 1255f34eb496099507090f26dcf94bb780da8b3894e5sewardjstatic void test_xsmadd(void) 1256f34eb496099507090f26dcf94bb780da8b3894e5sewardj{ 1257f34eb496099507090f26dcf94bb780da8b3894e5sewardj if (do_adp) 1258f34eb496099507090f26dcf94bb780da8b3894e5sewardj __asm__ __volatile__ ("xsmaddadp %x0, %x1, %x2" : "+wa" (vec_out): "wa" (vec_inA),"wa" (vec_inB)); 1259f34eb496099507090f26dcf94bb780da8b3894e5sewardj else 1260f34eb496099507090f26dcf94bb780da8b3894e5sewardj __asm__ __volatile__ ("xsmaddmdp %x0, %x1, %x2" : "+wa" (vec_out): "wa" (vec_inA),"wa" (vec_inB)); 1261f34eb496099507090f26dcf94bb780da8b3894e5sewardj} 1262f34eb496099507090f26dcf94bb780da8b3894e5sewardj 1263f34eb496099507090f26dcf94bb780da8b3894e5sewardjstatic void test_xsmsub(void) 1264f34eb496099507090f26dcf94bb780da8b3894e5sewardj{ 1265f34eb496099507090f26dcf94bb780da8b3894e5sewardj if (do_adp) 1266f34eb496099507090f26dcf94bb780da8b3894e5sewardj __asm__ __volatile__ ("xsmsubadp %x0, %x1, %x2" : "+wa" (vec_out): "wa" (vec_inA),"wa" (vec_inB)); 1267f34eb496099507090f26dcf94bb780da8b3894e5sewardj else 1268f34eb496099507090f26dcf94bb780da8b3894e5sewardj __asm__ __volatile__ ("xsmsubmdp %x0, %x1, %x2" : "+wa" (vec_out): "wa" (vec_inA),"wa" (vec_inB)); 1269f34eb496099507090f26dcf94bb780da8b3894e5sewardj} 1270f34eb496099507090f26dcf94bb780da8b3894e5sewardj 1271f34eb496099507090f26dcf94bb780da8b3894e5sewardjstatic void test_xsnmadd(void) 1272f34eb496099507090f26dcf94bb780da8b3894e5sewardj{ 1273f34eb496099507090f26dcf94bb780da8b3894e5sewardj if (do_adp) 1274f34eb496099507090f26dcf94bb780da8b3894e5sewardj __asm__ __volatile__ ("xsnmaddadp %x0, %x1, %x2" : "+wa" (vec_out): "wa" (vec_inA),"wa" (vec_inB)); 1275f34eb496099507090f26dcf94bb780da8b3894e5sewardj else 1276f34eb496099507090f26dcf94bb780da8b3894e5sewardj __asm__ __volatile__ ("xsnmaddmdp %x0, %x1, %x2" : "+wa" (vec_out): "wa" (vec_inA),"wa" (vec_inB)); 1277f34eb496099507090f26dcf94bb780da8b3894e5sewardj} 1278f34eb496099507090f26dcf94bb780da8b3894e5sewardj 1279f34eb496099507090f26dcf94bb780da8b3894e5sewardjstatic void test_xsmuldp(void) 1280f34eb496099507090f26dcf94bb780da8b3894e5sewardj{ 1281f34eb496099507090f26dcf94bb780da8b3894e5sewardj __asm__ __volatile__ ("xsmuldp %x0, %x1, %x2" : "=wa" (vec_out): "wa" (vec_inA),"wa" (vec_inB)); 1282f34eb496099507090f26dcf94bb780da8b3894e5sewardj} 1283f34eb496099507090f26dcf94bb780da8b3894e5sewardj 1284f34eb496099507090f26dcf94bb780da8b3894e5sewardjstatic void test_xssubdp(void) 1285f34eb496099507090f26dcf94bb780da8b3894e5sewardj{ 1286f34eb496099507090f26dcf94bb780da8b3894e5sewardj __asm__ __volatile__ ("xssubdp %x0, %x1, %x2" : "=wa" (vec_out): "wa" (vec_inA),"wa" (vec_inB)); 1287f34eb496099507090f26dcf94bb780da8b3894e5sewardj} 1288f34eb496099507090f26dcf94bb780da8b3894e5sewardj 1289f34eb496099507090f26dcf94bb780da8b3894e5sewardjstatic void test_xscvdpsxds (void) 1290f34eb496099507090f26dcf94bb780da8b3894e5sewardj{ 1291f34eb496099507090f26dcf94bb780da8b3894e5sewardj __asm__ __volatile__ ("xscvdpsxds %x0, %x1" : "=wa" (vec_out): "wa" (vec_inB)); 1292f34eb496099507090f26dcf94bb780da8b3894e5sewardj} 1293f34eb496099507090f26dcf94bb780da8b3894e5sewardj 1294f34eb496099507090f26dcf94bb780da8b3894e5sewardjstatic void test_xscvsxddp (void) 1295f34eb496099507090f26dcf94bb780da8b3894e5sewardj{ 1296f34eb496099507090f26dcf94bb780da8b3894e5sewardj __asm__ __volatile__ ("xscvsxddp %x0, %x1" : "=wa" (vec_out): "wa" (vec_inB)); 1297f34eb496099507090f26dcf94bb780da8b3894e5sewardj} 1298f34eb496099507090f26dcf94bb780da8b3894e5sewardj 1299f34eb496099507090f26dcf94bb780da8b3894e5sewardjstatic void test_xscvuxddp (void) 1300f34eb496099507090f26dcf94bb780da8b3894e5sewardj{ 1301f34eb496099507090f26dcf94bb780da8b3894e5sewardj __asm__ __volatile__ ("xscvuxddp %x0, %x1" : "=wa" (vec_out): "wa" (vec_inB)); 1302f34eb496099507090f26dcf94bb780da8b3894e5sewardj} 1303f34eb496099507090f26dcf94bb780da8b3894e5sewardj 1304f34eb496099507090f26dcf94bb780da8b3894e5sewardjstatic unsigned int vstg[] __attribute__ ((aligned (16))) = { 0, 0, 0,0, 1305f34eb496099507090f26dcf94bb780da8b3894e5sewardj 0, 0, 0, 0 }; 1306f34eb496099507090f26dcf94bb780da8b3894e5sewardj 1307f34eb496099507090f26dcf94bb780da8b3894e5sewardj#define NUM_VSTG_INTS (sizeof vstg/sizeof vstg[0]) 1308f34eb496099507090f26dcf94bb780da8b3894e5sewardj#define NUM_VSTG_VECS (NUM_VSTG_INTS/4) 1309f34eb496099507090f26dcf94bb780da8b3894e5sewardj 1310f34eb496099507090f26dcf94bb780da8b3894e5sewardjstatic unsigned int viargs[] __attribute__ ((aligned (16))) = { 0x01234567, 1311f34eb496099507090f26dcf94bb780da8b3894e5sewardj 0x89abcdef, 1312f34eb496099507090f26dcf94bb780da8b3894e5sewardj 0x00112233, 1313f34eb496099507090f26dcf94bb780da8b3894e5sewardj 0x44556677, 1314f34eb496099507090f26dcf94bb780da8b3894e5sewardj 0x8899aabb, 1315f34eb496099507090f26dcf94bb780da8b3894e5sewardj 0x91929394, 1316f34eb496099507090f26dcf94bb780da8b3894e5sewardj 0xa1a2a3a4, 1317f34eb496099507090f26dcf94bb780da8b3894e5sewardj 0xb1b2b3b4, 1318f34eb496099507090f26dcf94bb780da8b3894e5sewardj 0xc1c2c3c4, 1319f34eb496099507090f26dcf94bb780da8b3894e5sewardj 0xd1d2d3d4, 1320f34eb496099507090f26dcf94bb780da8b3894e5sewardj 0x7a6b5d3e 1321f34eb496099507090f26dcf94bb780da8b3894e5sewardj}; 1322f34eb496099507090f26dcf94bb780da8b3894e5sewardj#define NUM_VIARGS_INTS (sizeof viargs/sizeof viargs[0]) 1323f34eb496099507090f26dcf94bb780da8b3894e5sewardj#define NUM_VIARGS_VECS (NUM_VIARGS_INTS/4) 1324f34eb496099507090f26dcf94bb780da8b3894e5sewardj 1325f34eb496099507090f26dcf94bb780da8b3894e5sewardjstatic ldst_test_t ldst_tests[] = { { &test_lxsdx, "lxsdx", viargs, 0, 2, VSX_LOAD }, 1326f34eb496099507090f26dcf94bb780da8b3894e5sewardj { &test_lxsdx, "lxsdx", viargs, 4, 2, VSX_LOAD }, 1327f34eb496099507090f26dcf94bb780da8b3894e5sewardj { &test_lxvd2x, "lxvd2x", viargs, 0, 4, VSX_LOAD }, 1328f34eb496099507090f26dcf94bb780da8b3894e5sewardj { &test_lxvd2x, "lxvd2x", viargs, 4, 4, VSX_LOAD }, 1329f34eb496099507090f26dcf94bb780da8b3894e5sewardj { &test_lxvdsx, "lxvdsx", viargs, 0, 4, VSX_LOAD_SPLAT }, 1330f34eb496099507090f26dcf94bb780da8b3894e5sewardj { &test_lxvdsx, "lxvdsx", viargs, 4, 4, VSX_LOAD_SPLAT }, 1331f34eb496099507090f26dcf94bb780da8b3894e5sewardj { &test_lxvw4x, "lxvw4x", viargs, 0, 4, VSX_LOAD }, 1332f34eb496099507090f26dcf94bb780da8b3894e5sewardj { &test_lxvw4x, "lxvw4x", viargs, 4, 4, VSX_LOAD }, 1333f34eb496099507090f26dcf94bb780da8b3894e5sewardj { &test_stxsdx, "stxsdx", vstg, 0, 2, VSX_STORE }, 1334f34eb496099507090f26dcf94bb780da8b3894e5sewardj { &test_stxsdx, "stxsdx", vstg, 4, 2, VSX_STORE }, 1335f34eb496099507090f26dcf94bb780da8b3894e5sewardj { &test_stxvd2x, "stxvd2x", vstg, 0, 4, VSX_STORE }, 1336f34eb496099507090f26dcf94bb780da8b3894e5sewardj { &test_stxvd2x, "stxvd2x", vstg, 4, 4, VSX_STORE }, 1337f34eb496099507090f26dcf94bb780da8b3894e5sewardj { &test_stxvw4x, "stxvw4x", vstg, 0, 4, VSX_STORE }, 1338f34eb496099507090f26dcf94bb780da8b3894e5sewardj { &test_stxvw4x, "stxvw4x", vstg, 4, 4, VSX_STORE }, 1339f34eb496099507090f26dcf94bb780da8b3894e5sewardj { NULL, NULL, NULL, 0, 0, 0 } }; 1340f34eb496099507090f26dcf94bb780da8b3894e5sewardj 1341f34eb496099507090f26dcf94bb780da8b3894e5sewardjstatic logic_test_t logic_tests[] = { { &test_xxlxor, "xxlxor", VSX_XOR }, 1342f34eb496099507090f26dcf94bb780da8b3894e5sewardj { &test_xxlor, "xxlor", VSX_OR } , 1343f34eb496099507090f26dcf94bb780da8b3894e5sewardj { &test_xxlnor, "xxlnor", VSX_NOR }, 1344f34eb496099507090f26dcf94bb780da8b3894e5sewardj { &test_xxland, "xxland", VSX_AND }, 1345f34eb496099507090f26dcf94bb780da8b3894e5sewardj { &test_xxlandc, "xxlandc", VSX_ANDC }, 1346dd690bf8d81c9119a7228446be12e3366e202176carll { NULL, NULL, 0}}; 1347f34eb496099507090f26dcf94bb780da8b3894e5sewardj 1348dd690bf8d81c9119a7228446be12e3366e202176carllstatic move_test_t move_tests[] = { { &test_xsabsdp, "xsabsdp" }, 1349dd690bf8d81c9119a7228446be12e3366e202176carll { &test_xscpsgndp, "xscpsgndp" }, 1350dd690bf8d81c9119a7228446be12e3366e202176carll { &test_xsnabsdp, "xsnabsdp" }, 1351dd690bf8d81c9119a7228446be12e3366e202176carll { &test_xsnegdp, "xsnegdp" }, 1352dd690bf8d81c9119a7228446be12e3366e202176carll { NULL, NULL } 1353f34eb496099507090f26dcf94bb780da8b3894e5sewardj 1354f34eb496099507090f26dcf94bb780da8b3894e5sewardj}; 1355f34eb496099507090f26dcf94bb780da8b3894e5sewardj 1356f34eb496099507090f26dcf94bb780da8b3894e5sewardjstatic permute_test_t permute_tests[] = 1357f34eb496099507090f26dcf94bb780da8b3894e5sewardj{ 1358f34eb496099507090f26dcf94bb780da8b3894e5sewardj { &test_xxmrghw, "xxmrghw", 1359f34eb496099507090f26dcf94bb780da8b3894e5sewardj { 0x11111111, 0x22222222, 0x33333333, 0x44444444 }, /* XA input */ 1360f34eb496099507090f26dcf94bb780da8b3894e5sewardj { 0x55555555, 0x66666666, 0x77777777, 0x88888888 }, /* XB input */ 1361f34eb496099507090f26dcf94bb780da8b3894e5sewardj }, 1362f34eb496099507090f26dcf94bb780da8b3894e5sewardj { &test_xxmrghw, "xxmrghw", 1363f34eb496099507090f26dcf94bb780da8b3894e5sewardj { 0x00112233, 0x44556677, 0x8899aabb, 0xccddeeff }, /* XA input */ 1364f34eb496099507090f26dcf94bb780da8b3894e5sewardj { 0x11111111, 0x22222222, 0x33333333, 0x44444444 }, /* XB input */ 1365f34eb496099507090f26dcf94bb780da8b3894e5sewardj }, 1366f34eb496099507090f26dcf94bb780da8b3894e5sewardj { &test_xxmrglw, "xxmrglw", 1367f34eb496099507090f26dcf94bb780da8b3894e5sewardj { 0x11111111, 0x22222222, 0x33333333, 0x44444444 }, /* XA input */ 1368f34eb496099507090f26dcf94bb780da8b3894e5sewardj { 0x55555555, 0x66666666, 0x77777777, 0x88888888 }, /* XB input */ 1369f34eb496099507090f26dcf94bb780da8b3894e5sewardj }, 1370f34eb496099507090f26dcf94bb780da8b3894e5sewardj { &test_xxmrglw, "xxmrglw", 1371f34eb496099507090f26dcf94bb780da8b3894e5sewardj { 0x00112233, 0x44556677, 0x8899aabb, 0xccddeeff}, /* XA input */ 1372f34eb496099507090f26dcf94bb780da8b3894e5sewardj { 0x11111111, 0x22222222, 0x33333333, 0x44444444}, /* XB input */ 1373f34eb496099507090f26dcf94bb780da8b3894e5sewardj }, 1374f34eb496099507090f26dcf94bb780da8b3894e5sewardj { &test_xxpermdi_00, "xxpermdi DM=00", 1375f34eb496099507090f26dcf94bb780da8b3894e5sewardj { 0x11111111, 0x22222222, 0x33333333, 0x44444444 }, /* XA input */ 1376f34eb496099507090f26dcf94bb780da8b3894e5sewardj { 0x55555555, 0x66666666, 0x77777777, 0x88888888 }, /* XB input */ 1377f34eb496099507090f26dcf94bb780da8b3894e5sewardj }, 1378f34eb496099507090f26dcf94bb780da8b3894e5sewardj { &test_xxpermdi_01, "xxpermdi DM=01", 1379f34eb496099507090f26dcf94bb780da8b3894e5sewardj { 0x11111111, 0x22222222, 0x33333333, 0x44444444 }, /* XA input */ 1380f34eb496099507090f26dcf94bb780da8b3894e5sewardj { 0x55555555, 0x66666666, 0x77777777, 0x88888888 }, /* XB input */ 1381f34eb496099507090f26dcf94bb780da8b3894e5sewardj }, 1382f34eb496099507090f26dcf94bb780da8b3894e5sewardj { &test_xxpermdi_10, "xxpermdi DM=10", 1383f34eb496099507090f26dcf94bb780da8b3894e5sewardj { 0x11111111, 0x22222222, 0x33333333, 0x44444444 }, /* XA input */ 1384f34eb496099507090f26dcf94bb780da8b3894e5sewardj { 0x55555555, 0x66666666, 0x77777777, 0x88888888 }, /* XB input */ 1385f34eb496099507090f26dcf94bb780da8b3894e5sewardj }, 1386f34eb496099507090f26dcf94bb780da8b3894e5sewardj { &test_xxpermdi_11, "xxpermdi DM=11", 1387f34eb496099507090f26dcf94bb780da8b3894e5sewardj { 0x11111111, 0x22222222, 0x33333333, 0x44444444 }, /* XA input */ 1388f34eb496099507090f26dcf94bb780da8b3894e5sewardj { 0x55555555, 0x66666666, 0x77777777, 0x88888888 }, /* XB input */ 1389f34eb496099507090f26dcf94bb780da8b3894e5sewardj }, 1390f34eb496099507090f26dcf94bb780da8b3894e5sewardj { &test_xxsldwi_0, "xxsldwi SHW=0", 1391f34eb496099507090f26dcf94bb780da8b3894e5sewardj { 0x11111111, 0x22222222, 0x33333333, 0x44444444 }, /* XA input */ 1392f34eb496099507090f26dcf94bb780da8b3894e5sewardj { 0x55555555, 0x66666666, 0x77777777, 0x88888888 }, /* XB input */ 1393f34eb496099507090f26dcf94bb780da8b3894e5sewardj }, 1394f34eb496099507090f26dcf94bb780da8b3894e5sewardj { &test_xxsldwi_1, "xxsldwi SHW=1", 1395f34eb496099507090f26dcf94bb780da8b3894e5sewardj { 0x11111111, 0x22222222, 0x33333333, 0x44444444 }, /* XA input */ 1396f34eb496099507090f26dcf94bb780da8b3894e5sewardj { 0x55555555, 0x66666666, 0x77777777, 0x88888888 }, /* XB input */ 1397f34eb496099507090f26dcf94bb780da8b3894e5sewardj }, 1398f34eb496099507090f26dcf94bb780da8b3894e5sewardj { &test_xxsldwi_2, "xxsldwi SHW=2", 1399f34eb496099507090f26dcf94bb780da8b3894e5sewardj { 0x11111111, 0x22222222, 0x33333333, 0x44444444 }, /* XA input */ 1400f34eb496099507090f26dcf94bb780da8b3894e5sewardj { 0x55555555, 0x66666666, 0x77777777, 0x88888888 }, /* XB input */ 1401f34eb496099507090f26dcf94bb780da8b3894e5sewardj }, 1402f34eb496099507090f26dcf94bb780da8b3894e5sewardj { &test_xxsldwi_3, "xxsldwi SHW=3", 1403f34eb496099507090f26dcf94bb780da8b3894e5sewardj { 0x11111111, 0x22222222, 0x33333333, 0x44444444 }, /* XA input */ 1404f34eb496099507090f26dcf94bb780da8b3894e5sewardj { 0x55555555, 0x66666666, 0x77777777, 0x88888888 }, /* XB input */ 1405f34eb496099507090f26dcf94bb780da8b3894e5sewardj }, 1406f34eb496099507090f26dcf94bb780da8b3894e5sewardj { NULL, NULL } 1407f34eb496099507090f26dcf94bb780da8b3894e5sewardj}; 1408f34eb496099507090f26dcf94bb780da8b3894e5sewardj 1409f34eb496099507090f26dcf94bb780da8b3894e5sewardjstatic fp_test_t fp_tests[] = { { &test_fcfids, "fcfids", 1 }, 1410f34eb496099507090f26dcf94bb780da8b3894e5sewardj { &test_fcfidus, "fcfidus", 1 }, 1411f34eb496099507090f26dcf94bb780da8b3894e5sewardj { &test_fcfidu, "fcfidu", 1 }, 1412f34eb496099507090f26dcf94bb780da8b3894e5sewardj { NULL, NULL, 0 }, 1413f34eb496099507090f26dcf94bb780da8b3894e5sewardj 1414f34eb496099507090f26dcf94bb780da8b3894e5sewardj}; 1415f34eb496099507090f26dcf94bb780da8b3894e5sewardj 1416f34eb496099507090f26dcf94bb780da8b3894e5sewardjstatic vx_fp_test_t vx_fp_tests[] = { 1417f34eb496099507090f26dcf94bb780da8b3894e5sewardj { &test_xscmp, "xscmp", xscmpX_tests, 64, VX_FP_CMP}, 1418f34eb496099507090f26dcf94bb780da8b3894e5sewardj { &test_xsadddp, "xsadddp", xsadddp_tests, 64, VX_FP_OTHER}, 1419f34eb496099507090f26dcf94bb780da8b3894e5sewardj { &test_xsdivdp, "xsdivdp", xsdivdp_tests, 64, VX_FP_OTHER}, 1420f34eb496099507090f26dcf94bb780da8b3894e5sewardj { &test_xsmadd, "xsmadd", xsmaddXdp_tests, 64, VX_FP_SMA}, 1421f34eb496099507090f26dcf94bb780da8b3894e5sewardj { &test_xsmsub, "xsmsub", xsmsubXdp_tests, 64, VX_FP_SMS}, 1422f34eb496099507090f26dcf94bb780da8b3894e5sewardj { &test_xsnmadd, "xsnmadd", xsnmaddXdp_tests, 64, VX_FP_SNMA}, 1423f34eb496099507090f26dcf94bb780da8b3894e5sewardj { & test_xsmuldp, "xsmuldp", xsmuldp_tests, 64, VX_FP_OTHER}, 1424f34eb496099507090f26dcf94bb780da8b3894e5sewardj { & test_xssubdp, "xssubdp", xssubdp_tests, 64, VX_FP_OTHER}, 1425f34eb496099507090f26dcf94bb780da8b3894e5sewardj { NULL, NULL, NULL, 0, 0 } 1426f34eb496099507090f26dcf94bb780da8b3894e5sewardj}; 1427f34eb496099507090f26dcf94bb780da8b3894e5sewardj 1428f34eb496099507090f26dcf94bb780da8b3894e5sewardjstatic xs_conv_test_t xs_conv_tests[] = { 1429dd690bf8d81c9119a7228446be12e3366e202176carll { &test_xscvdpsxds, "xscvdpsxds", 15}, 1430dd690bf8d81c9119a7228446be12e3366e202176carll { &test_xscvsxddp, "xscvsxddp", 15}, 1431dd690bf8d81c9119a7228446be12e3366e202176carll { &test_xscvuxddp, "xscvuxddp", 15}, 1432dd690bf8d81c9119a7228446be12e3366e202176carll { NULL, NULL, 0} 1433f34eb496099507090f26dcf94bb780da8b3894e5sewardj}; 1434f34eb496099507090f26dcf94bb780da8b3894e5sewardj 1435f34eb496099507090f26dcf94bb780da8b3894e5sewardj#ifdef __powerpc64__ 1436f34eb496099507090f26dcf94bb780da8b3894e5sewardjstatic void test_ldbrx(void) 1437f34eb496099507090f26dcf94bb780da8b3894e5sewardj{ 1438dd690bf8d81c9119a7228446be12e3366e202176carll int i; 1439f34eb496099507090f26dcf94bb780da8b3894e5sewardj HWord_t reg_out; 1440f34eb496099507090f26dcf94bb780da8b3894e5sewardj unsigned char * byteIn, * byteOut; 1441f34eb496099507090f26dcf94bb780da8b3894e5sewardj r14 = (HWord_t)viargs; 1442f34eb496099507090f26dcf94bb780da8b3894e5sewardj // Just try the instruction an arbitrary number of times at different r15 offsets. 1443f34eb496099507090f26dcf94bb780da8b3894e5sewardj for (i = 0; i < 3; i++) { 1444f34eb496099507090f26dcf94bb780da8b3894e5sewardj int j, k; 1445f34eb496099507090f26dcf94bb780da8b3894e5sewardj reg_out = 0; 1446f34eb496099507090f26dcf94bb780da8b3894e5sewardj r15 = i * 4; 1447f34eb496099507090f26dcf94bb780da8b3894e5sewardj __asm__ __volatile__ ("ldbrx %0, %1, %2" : "=r" (reg_out): "b" (r14),"r" (r15)); 1448f34eb496099507090f26dcf94bb780da8b3894e5sewardj byteIn = ((unsigned char *)(r14 + r15)); 1449f34eb496099507090f26dcf94bb780da8b3894e5sewardj byteOut = (unsigned char *)®_out; 1450f34eb496099507090f26dcf94bb780da8b3894e5sewardj 1451f34eb496099507090f26dcf94bb780da8b3894e5sewardj printf("ldbrx:"); 1452dd690bf8d81c9119a7228446be12e3366e202176carll for (k = 0; k < 8; k++) { 1453f34eb496099507090f26dcf94bb780da8b3894e5sewardj printf( " %02x", (byteIn[k])); 1454f34eb496099507090f26dcf94bb780da8b3894e5sewardj } 1455f34eb496099507090f26dcf94bb780da8b3894e5sewardj printf(" (reverse) =>"); 1456f34eb496099507090f26dcf94bb780da8b3894e5sewardj for (j = 0; j < 8; j++) { 1457f34eb496099507090f26dcf94bb780da8b3894e5sewardj printf( " %02x", (byteOut[j])); 1458f34eb496099507090f26dcf94bb780da8b3894e5sewardj } 1459f34eb496099507090f26dcf94bb780da8b3894e5sewardj printf("\n"); 1460f34eb496099507090f26dcf94bb780da8b3894e5sewardj } 1461f34eb496099507090f26dcf94bb780da8b3894e5sewardj printf( "\n" ); 1462f34eb496099507090f26dcf94bb780da8b3894e5sewardj} 1463f34eb496099507090f26dcf94bb780da8b3894e5sewardj 1464f34eb496099507090f26dcf94bb780da8b3894e5sewardjstatic void 1465f34eb496099507090f26dcf94bb780da8b3894e5sewardjtest_popcntd(void) 1466f34eb496099507090f26dcf94bb780da8b3894e5sewardj{ 1467f34eb496099507090f26dcf94bb780da8b3894e5sewardj uint64_t res; 1468f34eb496099507090f26dcf94bb780da8b3894e5sewardj unsigned long long src = 0x9182736405504536ULL; 1469f34eb496099507090f26dcf94bb780da8b3894e5sewardj r14 = src; 1470f34eb496099507090f26dcf94bb780da8b3894e5sewardj __asm__ __volatile__ ("popcntd %0, %1" : "=r" (res): "r" (r14)); 1471f34eb496099507090f26dcf94bb780da8b3894e5sewardj printf("popcntd: 0x%llx => %d\n", src, (int)res); 1472f34eb496099507090f26dcf94bb780da8b3894e5sewardj printf( "\n" ); 1473f34eb496099507090f26dcf94bb780da8b3894e5sewardj} 1474f34eb496099507090f26dcf94bb780da8b3894e5sewardj#endif 1475f34eb496099507090f26dcf94bb780da8b3894e5sewardj 1476f34eb496099507090f26dcf94bb780da8b3894e5sewardjstatic void 1477f34eb496099507090f26dcf94bb780da8b3894e5sewardjtest_lfiwzx(void) 1478f34eb496099507090f26dcf94bb780da8b3894e5sewardj{ 1479f34eb496099507090f26dcf94bb780da8b3894e5sewardj unsigned int i; 1480f34eb496099507090f26dcf94bb780da8b3894e5sewardj unsigned int * src; 1481f34eb496099507090f26dcf94bb780da8b3894e5sewardj uint64_t reg_out; 1482f34eb496099507090f26dcf94bb780da8b3894e5sewardj r14 = (HWord_t)viargs; 1483f34eb496099507090f26dcf94bb780da8b3894e5sewardj // Just try the instruction an arbitrary number of times at different r15 offsets. 1484f34eb496099507090f26dcf94bb780da8b3894e5sewardj for (i = 0; i < 3; i++) { 1485f34eb496099507090f26dcf94bb780da8b3894e5sewardj reg_out = 0; 1486f34eb496099507090f26dcf94bb780da8b3894e5sewardj r15 = i * 4; 1487f34eb496099507090f26dcf94bb780da8b3894e5sewardj __asm__ __volatile__ ("lfiwzx %0, %1, %2" : "=d" (reg_out): "b" (r14),"r" (r15)); 1488f34eb496099507090f26dcf94bb780da8b3894e5sewardj src = ((unsigned int *)(r14 + r15)); 1489f34eb496099507090f26dcf94bb780da8b3894e5sewardj printf("lfiwzx: %u => %llu.00\n", *src, (unsigned long long)reg_out); 1490f34eb496099507090f26dcf94bb780da8b3894e5sewardj 1491f34eb496099507090f26dcf94bb780da8b3894e5sewardj } 1492f34eb496099507090f26dcf94bb780da8b3894e5sewardj printf( "\n" ); 1493f34eb496099507090f26dcf94bb780da8b3894e5sewardj} 1494f34eb496099507090f26dcf94bb780da8b3894e5sewardj 1495f34eb496099507090f26dcf94bb780da8b3894e5sewardjstatic void test_vx_fp_ops(void) 1496f34eb496099507090f26dcf94bb780da8b3894e5sewardj{ 1497f34eb496099507090f26dcf94bb780da8b3894e5sewardj 1498f34eb496099507090f26dcf94bb780da8b3894e5sewardj test_func_t func; 1499f34eb496099507090f26dcf94bb780da8b3894e5sewardj int k; 1500f34eb496099507090f26dcf94bb780da8b3894e5sewardj char * test_name = (char *)malloc(20); 1501f34eb496099507090f26dcf94bb780da8b3894e5sewardj k = 0; 1502f34eb496099507090f26dcf94bb780da8b3894e5sewardj 1503f34eb496099507090f26dcf94bb780da8b3894e5sewardj build_special_fargs_table(); 1504f34eb496099507090f26dcf94bb780da8b3894e5sewardj while ((func = vx_fp_tests[k].test_func)) { 1505f34eb496099507090f26dcf94bb780da8b3894e5sewardj int i, condreg, repeat = 0; 1506f34eb496099507090f26dcf94bb780da8b3894e5sewardj unsigned int flags; 1507f34eb496099507090f26dcf94bb780da8b3894e5sewardj unsigned long long * frap, * frbp, * dst; 1508f34eb496099507090f26dcf94bb780da8b3894e5sewardj vx_fp_test_t test_group = vx_fp_tests[k]; 1509f34eb496099507090f26dcf94bb780da8b3894e5sewardj vx_fp_test_type test_type = test_group.test_type; 1510f34eb496099507090f26dcf94bb780da8b3894e5sewardj 1511f34eb496099507090f26dcf94bb780da8b3894e5sewardj switch (test_type) { 1512f34eb496099507090f26dcf94bb780da8b3894e5sewardj case VX_FP_CMP: 1513f34eb496099507090f26dcf94bb780da8b3894e5sewardj strcpy(test_name, "xscmp"); 1514f34eb496099507090f26dcf94bb780da8b3894e5sewardj if (!repeat) { 1515f34eb496099507090f26dcf94bb780da8b3894e5sewardj repeat = 1; 1516f34eb496099507090f26dcf94bb780da8b3894e5sewardj strcat(test_name, "udp"); 1517f34eb496099507090f26dcf94bb780da8b3894e5sewardj do_cmpudp = 1; 1518f34eb496099507090f26dcf94bb780da8b3894e5sewardj } 1519f34eb496099507090f26dcf94bb780da8b3894e5sewardj break; 1520f34eb496099507090f26dcf94bb780da8b3894e5sewardj case VX_FP_SMA: 1521f34eb496099507090f26dcf94bb780da8b3894e5sewardj case VX_FP_SMS: 1522f34eb496099507090f26dcf94bb780da8b3894e5sewardj case VX_FP_SNMA: 1523f34eb496099507090f26dcf94bb780da8b3894e5sewardj if (test_type == VX_FP_SMA) 1524f34eb496099507090f26dcf94bb780da8b3894e5sewardj strcpy(test_name, "xsmadd"); 1525f34eb496099507090f26dcf94bb780da8b3894e5sewardj else if (test_type == VX_FP_SMS) 1526f34eb496099507090f26dcf94bb780da8b3894e5sewardj strcpy(test_name, "xsmsub"); 1527f34eb496099507090f26dcf94bb780da8b3894e5sewardj else 1528f34eb496099507090f26dcf94bb780da8b3894e5sewardj strcpy(test_name, "xsnmadd"); 1529f34eb496099507090f26dcf94bb780da8b3894e5sewardj if (!repeat) { 1530f34eb496099507090f26dcf94bb780da8b3894e5sewardj repeat = 1; 1531f34eb496099507090f26dcf94bb780da8b3894e5sewardj strcat(test_name, "adp"); 1532f34eb496099507090f26dcf94bb780da8b3894e5sewardj do_adp = 1; 1533f34eb496099507090f26dcf94bb780da8b3894e5sewardj } 1534f34eb496099507090f26dcf94bb780da8b3894e5sewardj break; 1535f34eb496099507090f26dcf94bb780da8b3894e5sewardj case VX_FP_OTHER: 1536f34eb496099507090f26dcf94bb780da8b3894e5sewardj strcpy(test_name, test_group.name); 1537f34eb496099507090f26dcf94bb780da8b3894e5sewardj break; 1538f34eb496099507090f26dcf94bb780da8b3894e5sewardj default: 1539f34eb496099507090f26dcf94bb780da8b3894e5sewardj printf("ERROR: Invalid VX FP test type %d\n", test_type); 1540f34eb496099507090f26dcf94bb780da8b3894e5sewardj exit(1); 1541f34eb496099507090f26dcf94bb780da8b3894e5sewardj } 1542f34eb496099507090f26dcf94bb780da8b3894e5sewardj 1543f34eb496099507090f26dcf94bb780da8b3894e5sewardjagain: 1544f34eb496099507090f26dcf94bb780da8b3894e5sewardj for (i = 0; i < test_group.num_tests; i++) { 1545f34eb496099507090f26dcf94bb780da8b3894e5sewardj unsigned int * inA, * inB, * pv; 1546dd690bf8d81c9119a7228446be12e3366e202176carll double * dpA = (double *)&vec_inA; 1547dd690bf8d81c9119a7228446be12e3366e202176carll double * dpB = (double *)&vec_inB; 1548dd690bf8d81c9119a7228446be12e3366e202176carll double * dpT = (double *)&vec_out; 1549f34eb496099507090f26dcf94bb780da8b3894e5sewardj 1550f34eb496099507090f26dcf94bb780da8b3894e5sewardj fp_test_args_t aTest = test_group.targs[i]; 1551f34eb496099507090f26dcf94bb780da8b3894e5sewardj inA = (unsigned int *)&spec_fargs[aTest.fra_idx]; 1552f34eb496099507090f26dcf94bb780da8b3894e5sewardj inB = (unsigned int *)&spec_fargs[aTest.frb_idx]; 1553f34eb496099507090f26dcf94bb780da8b3894e5sewardj frap = (unsigned long long *)&spec_fargs[aTest.fra_idx]; 1554f34eb496099507090f26dcf94bb780da8b3894e5sewardj frbp = (unsigned long long *)&spec_fargs[aTest.frb_idx]; 1555f34eb496099507090f26dcf94bb780da8b3894e5sewardj // Only need to copy one doubleword into each vector's element 0 1556dd690bf8d81c9119a7228446be12e3366e202176carll if (isLE) { 1557dd690bf8d81c9119a7228446be12e3366e202176carll // With LE, vector element 0 is the second doubleword from the left 1558dd690bf8d81c9119a7228446be12e3366e202176carll memset(dpA, 0, 8); 1559dd690bf8d81c9119a7228446be12e3366e202176carll memset(dpB, 0, 8); 1560dd690bf8d81c9119a7228446be12e3366e202176carll dpA++; 1561dd690bf8d81c9119a7228446be12e3366e202176carll dpB++; 1562dd690bf8d81c9119a7228446be12e3366e202176carll } 1563dd690bf8d81c9119a7228446be12e3366e202176carll memcpy(dpA, inA, 8); 1564dd690bf8d81c9119a7228446be12e3366e202176carll memcpy(dpB, inB, 8); 1565f34eb496099507090f26dcf94bb780da8b3894e5sewardj 1566f34eb496099507090f26dcf94bb780da8b3894e5sewardj switch (test_type) { 1567f34eb496099507090f26dcf94bb780da8b3894e5sewardj case VX_FP_CMP: 1568f34eb496099507090f26dcf94bb780da8b3894e5sewardj SET_FPSCR_ZERO; 1569f34eb496099507090f26dcf94bb780da8b3894e5sewardj SET_CR_XER_ZERO; 1570f34eb496099507090f26dcf94bb780da8b3894e5sewardj (*func)(); 1571f34eb496099507090f26dcf94bb780da8b3894e5sewardj GET_CR(flags); 1572f34eb496099507090f26dcf94bb780da8b3894e5sewardj condreg = (flags & 0x0f000000) >> 24; 1573f34eb496099507090f26dcf94bb780da8b3894e5sewardj printf("#%d: %s %016llx <=> %016llx ? %x (CRx)\n", i, test_name, *frap, *frbp, condreg); 1574f34eb496099507090f26dcf94bb780da8b3894e5sewardj // printf("\tFRA: %e; FRB: %e\n", spec_fargs[aTest.fra_idx], spec_fargs[aTest.frb_idx]); 1575f34eb496099507090f26dcf94bb780da8b3894e5sewardj if ( condreg != aTest.cr_flags) { 1576f34eb496099507090f26dcf94bb780da8b3894e5sewardj printf("Error: Expected CR flags 0x%x; actual flags: 0x%x\n", aTest.cr_flags, condreg); 1577f34eb496099507090f26dcf94bb780da8b3894e5sewardj } 1578f34eb496099507090f26dcf94bb780da8b3894e5sewardj break; 1579f34eb496099507090f26dcf94bb780da8b3894e5sewardj case VX_FP_SMA: 1580f34eb496099507090f26dcf94bb780da8b3894e5sewardj case VX_FP_SMS: 1581f34eb496099507090f26dcf94bb780da8b3894e5sewardj case VX_FP_SNMA: 1582f34eb496099507090f26dcf94bb780da8b3894e5sewardj case VX_FP_OTHER: 1583f34eb496099507090f26dcf94bb780da8b3894e5sewardj { 1584f34eb496099507090f26dcf94bb780da8b3894e5sewardj int idx; 1585f34eb496099507090f26dcf94bb780da8b3894e5sewardj unsigned long long vsr_XT; 1586f34eb496099507090f26dcf94bb780da8b3894e5sewardj pv = (unsigned int *)&vec_out; 1587f34eb496099507090f26dcf94bb780da8b3894e5sewardj // clear vec_out 1588f34eb496099507090f26dcf94bb780da8b3894e5sewardj for (idx = 0; idx < 4; idx++, pv++) 1589f34eb496099507090f26dcf94bb780da8b3894e5sewardj *pv = 0; 1590f34eb496099507090f26dcf94bb780da8b3894e5sewardj 1591f34eb496099507090f26dcf94bb780da8b3894e5sewardj if (test_type != VX_FP_OTHER) { 1592f34eb496099507090f26dcf94bb780da8b3894e5sewardj /* Then we need a third src argument, which is stored in element 0 of 1593f34eb496099507090f26dcf94bb780da8b3894e5sewardj * VSX[XT] -- i.e., vec_out. For the xs<ZZZ>mdp cases, VSX[XT] holds 1594f34eb496099507090f26dcf94bb780da8b3894e5sewardj * src3 and VSX[XB] holds src2; for the xs<ZZZ>adp cases, VSX[XT] holds 1595f34eb496099507090f26dcf94bb780da8b3894e5sewardj * src2 and VSX[XB] holds src3. The fp_test_args_t that holds the test 1596dd690bf8d81c9119a7228446be12e3366e202176carll * data (input args) contain only two inputs, so I arbitrarily 1597f34eb496099507090f26dcf94bb780da8b3894e5sewardj * use spec_fargs elements 4 and 14 (alternating) for the third source 1598f34eb496099507090f26dcf94bb780da8b3894e5sewardj * argument. We can use the same input data for a given pair of 1599f34eb496099507090f26dcf94bb780da8b3894e5sewardj * adp/mdp-type instructions by swapping the src2 and src3 arguments; thus 1600f34eb496099507090f26dcf94bb780da8b3894e5sewardj * the expected result should be the same. 1601f34eb496099507090f26dcf94bb780da8b3894e5sewardj */ 1602f34eb496099507090f26dcf94bb780da8b3894e5sewardj int extra_arg_idx; 1603f34eb496099507090f26dcf94bb780da8b3894e5sewardj if (i % 2) 1604f34eb496099507090f26dcf94bb780da8b3894e5sewardj extra_arg_idx = 4; 1605f34eb496099507090f26dcf94bb780da8b3894e5sewardj else 1606f34eb496099507090f26dcf94bb780da8b3894e5sewardj extra_arg_idx = 14; 1607f34eb496099507090f26dcf94bb780da8b3894e5sewardj 1608f34eb496099507090f26dcf94bb780da8b3894e5sewardj if (repeat) { 1609f34eb496099507090f26dcf94bb780da8b3894e5sewardj /* We're on the first time through of one of the VX_FP_SMx 1610f34eb496099507090f26dcf94bb780da8b3894e5sewardj * test types, meaning we're testing a xs<ZZZ>adp case, thus we 1611f34eb496099507090f26dcf94bb780da8b3894e5sewardj * have to swap inputs as described above: 1612f34eb496099507090f26dcf94bb780da8b3894e5sewardj * src2 <= VSX[XT] 1613f34eb496099507090f26dcf94bb780da8b3894e5sewardj * src3 <= VSX[XB] 1614f34eb496099507090f26dcf94bb780da8b3894e5sewardj */ 1615dd690bf8d81c9119a7228446be12e3366e202176carll if (isLE) 1616dd690bf8d81c9119a7228446be12e3366e202176carll dpT++; 1617dd690bf8d81c9119a7228446be12e3366e202176carll memcpy(dpT, inB, 8); // src2 1618dd690bf8d81c9119a7228446be12e3366e202176carll memcpy(dpB, &spec_fargs[extra_arg_idx], 8); //src3 1619f34eb496099507090f26dcf94bb780da8b3894e5sewardj frbp = (unsigned long long *)&spec_fargs[extra_arg_idx]; 1620f34eb496099507090f26dcf94bb780da8b3894e5sewardj } else { 1621f34eb496099507090f26dcf94bb780da8b3894e5sewardj // Don't need to init src2, as it's done before the switch() 1622dd690bf8d81c9119a7228446be12e3366e202176carll if (isLE) 1623dd690bf8d81c9119a7228446be12e3366e202176carll dpT++; 1624dd690bf8d81c9119a7228446be12e3366e202176carll memcpy(dpT, &spec_fargs[extra_arg_idx], 8); //src3 1625f34eb496099507090f26dcf94bb780da8b3894e5sewardj } 1626dd690bf8d81c9119a7228446be12e3366e202176carll memcpy(&vsr_XT, dpT, 8); 1627f34eb496099507090f26dcf94bb780da8b3894e5sewardj } 1628f34eb496099507090f26dcf94bb780da8b3894e5sewardj 1629f34eb496099507090f26dcf94bb780da8b3894e5sewardj (*func)(); 1630f34eb496099507090f26dcf94bb780da8b3894e5sewardj dst = (unsigned long long *) &vec_out; 1631dd690bf8d81c9119a7228446be12e3366e202176carll if (isLE) 1632dd690bf8d81c9119a7228446be12e3366e202176carll dst++; 1633f34eb496099507090f26dcf94bb780da8b3894e5sewardj if (test_type == VX_FP_OTHER) 1634f34eb496099507090f26dcf94bb780da8b3894e5sewardj printf("#%d: %s %016llx %016llx = %016llx\n", i, test_name, *frap, *frbp, *dst); 1635f34eb496099507090f26dcf94bb780da8b3894e5sewardj else 1636f34eb496099507090f26dcf94bb780da8b3894e5sewardj printf( "#%d: %s %016llx %016llx %016llx = %016llx\n", i, 1637f34eb496099507090f26dcf94bb780da8b3894e5sewardj test_name, vsr_XT, *frap, *frbp, *dst ); 1638f34eb496099507090f26dcf94bb780da8b3894e5sewardj 1639f34eb496099507090f26dcf94bb780da8b3894e5sewardj /* 1640f34eb496099507090f26dcf94bb780da8b3894e5sewardj { 1641f34eb496099507090f26dcf94bb780da8b3894e5sewardj // Debug code. Keep this block commented out except when debugging. 1642f34eb496099507090f26dcf94bb780da8b3894e5sewardj double result, expected; 1643f34eb496099507090f26dcf94bb780da8b3894e5sewardj memcpy(&result, dst, 8); 1644f34eb496099507090f26dcf94bb780da8b3894e5sewardj memcpy(&expected, &aTest.dp_bin_result, 8); 1645f34eb496099507090f26dcf94bb780da8b3894e5sewardj printf( "\tFRA + FRB: %e + %e: Expected = %e; Actual = %e\n", 1646f34eb496099507090f26dcf94bb780da8b3894e5sewardj spec_fargs[aTest.fra_idx], spec_fargs[aTest.frb_idx], 1647f34eb496099507090f26dcf94bb780da8b3894e5sewardj expected, result ); 1648f34eb496099507090f26dcf94bb780da8b3894e5sewardj } 1649f34eb496099507090f26dcf94bb780da8b3894e5sewardj */ 1650f34eb496099507090f26dcf94bb780da8b3894e5sewardj break; 1651f34eb496099507090f26dcf94bb780da8b3894e5sewardj } 1652f34eb496099507090f26dcf94bb780da8b3894e5sewardj } 1653f34eb496099507090f26dcf94bb780da8b3894e5sewardj 1654f34eb496099507090f26dcf94bb780da8b3894e5sewardj 1655f34eb496099507090f26dcf94bb780da8b3894e5sewardj } 1656f34eb496099507090f26dcf94bb780da8b3894e5sewardj printf( "\n" ); 1657f34eb496099507090f26dcf94bb780da8b3894e5sewardj 1658f34eb496099507090f26dcf94bb780da8b3894e5sewardj if (repeat) { 1659f34eb496099507090f26dcf94bb780da8b3894e5sewardj repeat = 0; 1660f34eb496099507090f26dcf94bb780da8b3894e5sewardj switch (test_type) { 1661f34eb496099507090f26dcf94bb780da8b3894e5sewardj case VX_FP_CMP: 1662f34eb496099507090f26dcf94bb780da8b3894e5sewardj strcpy(test_name, "xscmp"); 1663f34eb496099507090f26dcf94bb780da8b3894e5sewardj strcat(test_name, "odp"); 1664f34eb496099507090f26dcf94bb780da8b3894e5sewardj do_cmpudp = 0; 1665f34eb496099507090f26dcf94bb780da8b3894e5sewardj break; 1666f34eb496099507090f26dcf94bb780da8b3894e5sewardj case VX_FP_SMA: 1667f34eb496099507090f26dcf94bb780da8b3894e5sewardj case VX_FP_SMS: 1668f34eb496099507090f26dcf94bb780da8b3894e5sewardj case VX_FP_SNMA: 1669f34eb496099507090f26dcf94bb780da8b3894e5sewardj if (test_type == VX_FP_SMA) 1670f34eb496099507090f26dcf94bb780da8b3894e5sewardj strcpy(test_name, "xsmadd"); 1671f34eb496099507090f26dcf94bb780da8b3894e5sewardj else if (test_type == VX_FP_SMS) 1672f34eb496099507090f26dcf94bb780da8b3894e5sewardj strcpy(test_name, "xsmsub"); 1673f34eb496099507090f26dcf94bb780da8b3894e5sewardj else 1674f34eb496099507090f26dcf94bb780da8b3894e5sewardj strcpy(test_name, "xsnmadd"); 1675f34eb496099507090f26dcf94bb780da8b3894e5sewardj strcat(test_name, "mdp"); 1676f34eb496099507090f26dcf94bb780da8b3894e5sewardj do_adp = 0; 1677f34eb496099507090f26dcf94bb780da8b3894e5sewardj break; 1678f34eb496099507090f26dcf94bb780da8b3894e5sewardj case VX_FP_OTHER: 1679f34eb496099507090f26dcf94bb780da8b3894e5sewardj break; 1680f34eb496099507090f26dcf94bb780da8b3894e5sewardj } 1681f34eb496099507090f26dcf94bb780da8b3894e5sewardj goto again; 1682f34eb496099507090f26dcf94bb780da8b3894e5sewardj } 1683f34eb496099507090f26dcf94bb780da8b3894e5sewardj k++; 1684f34eb496099507090f26dcf94bb780da8b3894e5sewardj } 1685f34eb496099507090f26dcf94bb780da8b3894e5sewardj printf( "\n" ); 1686f34eb496099507090f26dcf94bb780da8b3894e5sewardj free(test_name); 1687f34eb496099507090f26dcf94bb780da8b3894e5sewardj} 1688f34eb496099507090f26dcf94bb780da8b3894e5sewardj 1689f34eb496099507090f26dcf94bb780da8b3894e5sewardjstatic void test_xs_conv_ops(void) 1690f34eb496099507090f26dcf94bb780da8b3894e5sewardj{ 1691f34eb496099507090f26dcf94bb780da8b3894e5sewardj 1692f34eb496099507090f26dcf94bb780da8b3894e5sewardj test_func_t func; 1693f34eb496099507090f26dcf94bb780da8b3894e5sewardj int k = 0; 1694dd690bf8d81c9119a7228446be12e3366e202176carll double * dpB = (double *)&vec_inB; 1695dd690bf8d81c9119a7228446be12e3366e202176carll if (isLE) { 1696dd690bf8d81c9119a7228446be12e3366e202176carll memset(dpB, 0, 8); 1697dd690bf8d81c9119a7228446be12e3366e202176carll dpB++; 1698dd690bf8d81c9119a7228446be12e3366e202176carll } 1699f34eb496099507090f26dcf94bb780da8b3894e5sewardj 1700f34eb496099507090f26dcf94bb780da8b3894e5sewardj build_special_fargs_table(); 1701f34eb496099507090f26dcf94bb780da8b3894e5sewardj while ((func = xs_conv_tests[k].test_func)) { 1702f34eb496099507090f26dcf94bb780da8b3894e5sewardj int i; 1703f34eb496099507090f26dcf94bb780da8b3894e5sewardj unsigned long long * frbp, * dst; 1704f34eb496099507090f26dcf94bb780da8b3894e5sewardj xs_conv_test_t test_group = xs_conv_tests[k]; 1705f34eb496099507090f26dcf94bb780da8b3894e5sewardj for (i = 0; i < test_group.num_tests; i++) { 1706f34eb496099507090f26dcf94bb780da8b3894e5sewardj unsigned int * inB, * pv; 1707f34eb496099507090f26dcf94bb780da8b3894e5sewardj int idx; 1708f34eb496099507090f26dcf94bb780da8b3894e5sewardj inB = (unsigned int *)&spec_fargs[i]; 1709f34eb496099507090f26dcf94bb780da8b3894e5sewardj frbp = (unsigned long long *)&spec_fargs[i]; 1710dd690bf8d81c9119a7228446be12e3366e202176carll 1711dd690bf8d81c9119a7228446be12e3366e202176carll memcpy(dpB, inB, 8); 1712f34eb496099507090f26dcf94bb780da8b3894e5sewardj pv = (unsigned int *)&vec_out; 1713f34eb496099507090f26dcf94bb780da8b3894e5sewardj // clear vec_out 1714f34eb496099507090f26dcf94bb780da8b3894e5sewardj for (idx = 0; idx < 4; idx++, pv++) 1715f34eb496099507090f26dcf94bb780da8b3894e5sewardj *pv = 0; 1716f34eb496099507090f26dcf94bb780da8b3894e5sewardj (*func)(); 1717f34eb496099507090f26dcf94bb780da8b3894e5sewardj dst = (unsigned long long *) &vec_out; 1718dd690bf8d81c9119a7228446be12e3366e202176carll if (isLE) 1719dd690bf8d81c9119a7228446be12e3366e202176carll dst++; 1720f34eb496099507090f26dcf94bb780da8b3894e5sewardj printf("#%d: %s %016llx => %016llx\n", i, test_group.name, *frbp, *dst); 1721f34eb496099507090f26dcf94bb780da8b3894e5sewardj 1722f34eb496099507090f26dcf94bb780da8b3894e5sewardj } 1723f34eb496099507090f26dcf94bb780da8b3894e5sewardj k++; 1724f34eb496099507090f26dcf94bb780da8b3894e5sewardj printf("\n"); 1725f34eb496099507090f26dcf94bb780da8b3894e5sewardj } 1726f34eb496099507090f26dcf94bb780da8b3894e5sewardj printf( "\n" ); 1727f34eb496099507090f26dcf94bb780da8b3894e5sewardj} 1728f34eb496099507090f26dcf94bb780da8b3894e5sewardj 1729f34eb496099507090f26dcf94bb780da8b3894e5sewardjstatic void do_load_test(ldst_test_t loadTest) 1730f34eb496099507090f26dcf94bb780da8b3894e5sewardj{ 1731f34eb496099507090f26dcf94bb780da8b3894e5sewardj test_func_t func; 1732f34eb496099507090f26dcf94bb780da8b3894e5sewardj unsigned int *src, *dst; 1733f34eb496099507090f26dcf94bb780da8b3894e5sewardj int splat = loadTest.type == VSX_LOAD_SPLAT ? 1: 0; 1734dd690bf8d81c9119a7228446be12e3366e202176carll int i, j, m, k; 1735f34eb496099507090f26dcf94bb780da8b3894e5sewardj i = j = 0; 1736f34eb496099507090f26dcf94bb780da8b3894e5sewardj 1737f34eb496099507090f26dcf94bb780da8b3894e5sewardj func = loadTest.test_func; 1738f34eb496099507090f26dcf94bb780da8b3894e5sewardj for (i = 0, r14 = (HWord_t) loadTest.base_addr; i < NUM_VIARGS_VECS; i++) { 1739f34eb496099507090f26dcf94bb780da8b3894e5sewardj int again; 1740f34eb496099507090f26dcf94bb780da8b3894e5sewardj j = 0; 1741f34eb496099507090f26dcf94bb780da8b3894e5sewardj r14 += i * 16; 1742f34eb496099507090f26dcf94bb780da8b3894e5sewardj do { 1743f34eb496099507090f26dcf94bb780da8b3894e5sewardj unsigned int * pv = (unsigned int *)&vec_out; 1744f34eb496099507090f26dcf94bb780da8b3894e5sewardj int idx; 1745f34eb496099507090f26dcf94bb780da8b3894e5sewardj // clear vec_out 1746f34eb496099507090f26dcf94bb780da8b3894e5sewardj for (idx = 0; idx < 4; idx++, pv+=idx) 1747f34eb496099507090f26dcf94bb780da8b3894e5sewardj *pv = 0; 1748f34eb496099507090f26dcf94bb780da8b3894e5sewardj 1749f34eb496099507090f26dcf94bb780da8b3894e5sewardj again = 0; 1750f34eb496099507090f26dcf94bb780da8b3894e5sewardj r15 = j; 1751f34eb496099507090f26dcf94bb780da8b3894e5sewardj 1752f34eb496099507090f26dcf94bb780da8b3894e5sewardj // execute test insn 1753f34eb496099507090f26dcf94bb780da8b3894e5sewardj (*func)(); 1754f34eb496099507090f26dcf94bb780da8b3894e5sewardj 1755f34eb496099507090f26dcf94bb780da8b3894e5sewardj src = (unsigned int*) (((unsigned char *)r14) + j); 1756f34eb496099507090f26dcf94bb780da8b3894e5sewardj dst = (unsigned int*) &vec_out; 1757f34eb496099507090f26dcf94bb780da8b3894e5sewardj 1758f34eb496099507090f26dcf94bb780da8b3894e5sewardj printf( "%s:", loadTest.name); 1759f34eb496099507090f26dcf94bb780da8b3894e5sewardj for (m = 0; m < loadTest.num_words_to_process; m++) { 1760f34eb496099507090f26dcf94bb780da8b3894e5sewardj printf( " %08x", src[splat ? m % 2 : m]); 1761f34eb496099507090f26dcf94bb780da8b3894e5sewardj } 1762f34eb496099507090f26dcf94bb780da8b3894e5sewardj printf( " =>"); 1763dd690bf8d81c9119a7228446be12e3366e202176carll m = 0; 1764dd690bf8d81c9119a7228446be12e3366e202176carll k = loadTest.num_words_to_process; 1765dd690bf8d81c9119a7228446be12e3366e202176carll if (isLE) { 1766dd690bf8d81c9119a7228446be12e3366e202176carll if (loadTest.num_words_to_process == 2) { 1767dd690bf8d81c9119a7228446be12e3366e202176carll m = 2; 1768dd690bf8d81c9119a7228446be12e3366e202176carll k += 2; 1769dd690bf8d81c9119a7228446be12e3366e202176carll } 1770f34eb496099507090f26dcf94bb780da8b3894e5sewardj } 1771f34eb496099507090f26dcf94bb780da8b3894e5sewardj 1772dd690bf8d81c9119a7228446be12e3366e202176carll for (; m < k; m++) { 1773dd690bf8d81c9119a7228446be12e3366e202176carll printf( " %08x", dst[m]); 1774f34eb496099507090f26dcf94bb780da8b3894e5sewardj } 1775dd690bf8d81c9119a7228446be12e3366e202176carll printf("\n"); 1776f34eb496099507090f26dcf94bb780da8b3894e5sewardj if (j == 0 && loadTest.offset) { 1777f34eb496099507090f26dcf94bb780da8b3894e5sewardj again = 1; 1778f34eb496099507090f26dcf94bb780da8b3894e5sewardj j += loadTest.offset; 1779f34eb496099507090f26dcf94bb780da8b3894e5sewardj } 1780f34eb496099507090f26dcf94bb780da8b3894e5sewardj } 1781f34eb496099507090f26dcf94bb780da8b3894e5sewardj while (again); 1782f34eb496099507090f26dcf94bb780da8b3894e5sewardj } 1783f34eb496099507090f26dcf94bb780da8b3894e5sewardj} 1784f34eb496099507090f26dcf94bb780da8b3894e5sewardj 1785f34eb496099507090f26dcf94bb780da8b3894e5sewardjstatic void 1786f34eb496099507090f26dcf94bb780da8b3894e5sewardjdo_store_test ( ldst_test_t storeTest ) 1787f34eb496099507090f26dcf94bb780da8b3894e5sewardj{ 1788f34eb496099507090f26dcf94bb780da8b3894e5sewardj test_func_t func; 1789f34eb496099507090f26dcf94bb780da8b3894e5sewardj unsigned int *src, *dst; 1790dd690bf8d81c9119a7228446be12e3366e202176carll int m; 1791f34eb496099507090f26dcf94bb780da8b3894e5sewardj 1792f34eb496099507090f26dcf94bb780da8b3894e5sewardj func = storeTest.test_func; 1793f34eb496099507090f26dcf94bb780da8b3894e5sewardj r14 = (HWord_t) storeTest.base_addr; 1794f34eb496099507090f26dcf94bb780da8b3894e5sewardj r15 = (HWord_t) storeTest.offset; 1795f34eb496099507090f26dcf94bb780da8b3894e5sewardj unsigned int * pv = (unsigned int *) storeTest.base_addr; 1796f34eb496099507090f26dcf94bb780da8b3894e5sewardj int idx; 1797f34eb496099507090f26dcf94bb780da8b3894e5sewardj // clear out storage destination 1798f34eb496099507090f26dcf94bb780da8b3894e5sewardj for (idx = 0; idx < 4; idx++, pv += idx) 1799f34eb496099507090f26dcf94bb780da8b3894e5sewardj *pv = 0; 1800f34eb496099507090f26dcf94bb780da8b3894e5sewardj 1801f34eb496099507090f26dcf94bb780da8b3894e5sewardj memcpy(&vec_inA, &viargs[0], sizeof(vector unsigned char)); 1802f34eb496099507090f26dcf94bb780da8b3894e5sewardj 1803f34eb496099507090f26dcf94bb780da8b3894e5sewardj // execute test insn 1804f34eb496099507090f26dcf94bb780da8b3894e5sewardj (*func)(); 1805f34eb496099507090f26dcf94bb780da8b3894e5sewardj src = &viargs[0]; 1806f34eb496099507090f26dcf94bb780da8b3894e5sewardj dst = (unsigned int*) (((unsigned char *) r14) + storeTest.offset); 1807f34eb496099507090f26dcf94bb780da8b3894e5sewardj 1808f34eb496099507090f26dcf94bb780da8b3894e5sewardj printf( "%s:", storeTest.name ); 1809f34eb496099507090f26dcf94bb780da8b3894e5sewardj for (m = 0; m < storeTest.num_words_to_process; m++) { 1810f34eb496099507090f26dcf94bb780da8b3894e5sewardj printf( " %08x", src[m] ); 1811f34eb496099507090f26dcf94bb780da8b3894e5sewardj } 1812f34eb496099507090f26dcf94bb780da8b3894e5sewardj printf( " =>" ); 1813f34eb496099507090f26dcf94bb780da8b3894e5sewardj for (m = 0; m < storeTest.num_words_to_process; m++) { 1814f34eb496099507090f26dcf94bb780da8b3894e5sewardj printf( " %08x", dst[m] ); 1815f34eb496099507090f26dcf94bb780da8b3894e5sewardj } 1816f34eb496099507090f26dcf94bb780da8b3894e5sewardj printf( "\n" ); 1817f34eb496099507090f26dcf94bb780da8b3894e5sewardj} 1818f34eb496099507090f26dcf94bb780da8b3894e5sewardj 1819f34eb496099507090f26dcf94bb780da8b3894e5sewardj 1820f34eb496099507090f26dcf94bb780da8b3894e5sewardjstatic void test_ldst(void) 1821f34eb496099507090f26dcf94bb780da8b3894e5sewardj{ 1822f34eb496099507090f26dcf94bb780da8b3894e5sewardj int k = 0; 1823f34eb496099507090f26dcf94bb780da8b3894e5sewardj 1824f34eb496099507090f26dcf94bb780da8b3894e5sewardj while (ldst_tests[k].test_func) { 1825f34eb496099507090f26dcf94bb780da8b3894e5sewardj if (ldst_tests[k].type == VSX_STORE) 1826f34eb496099507090f26dcf94bb780da8b3894e5sewardj do_store_test(ldst_tests[k]); 1827f34eb496099507090f26dcf94bb780da8b3894e5sewardj else 1828f34eb496099507090f26dcf94bb780da8b3894e5sewardj do_load_test(ldst_tests[k]); 1829f34eb496099507090f26dcf94bb780da8b3894e5sewardj k++; 1830f34eb496099507090f26dcf94bb780da8b3894e5sewardj printf("\n"); 1831f34eb496099507090f26dcf94bb780da8b3894e5sewardj } 1832f34eb496099507090f26dcf94bb780da8b3894e5sewardj} 1833f34eb496099507090f26dcf94bb780da8b3894e5sewardj 1834f34eb496099507090f26dcf94bb780da8b3894e5sewardjstatic void test_ftdiv(void) 1835f34eb496099507090f26dcf94bb780da8b3894e5sewardj{ 1836f34eb496099507090f26dcf94bb780da8b3894e5sewardj int i, num_tests, crx; 1837f34eb496099507090f26dcf94bb780da8b3894e5sewardj unsigned int flags; 1838f34eb496099507090f26dcf94bb780da8b3894e5sewardj unsigned long long * frap, * frbp; 1839f34eb496099507090f26dcf94bb780da8b3894e5sewardj build_special_fargs_table(); 1840f34eb496099507090f26dcf94bb780da8b3894e5sewardj 1841f34eb496099507090f26dcf94bb780da8b3894e5sewardj num_tests = sizeof ftdiv_tests/sizeof ftdiv_tests[0]; 1842f34eb496099507090f26dcf94bb780da8b3894e5sewardj 1843f34eb496099507090f26dcf94bb780da8b3894e5sewardj for (i = 0; i < num_tests; i++) { 1844dd690bf8d81c9119a7228446be12e3366e202176carll fp_test_args_t aTest = ftdiv_tests[i]; 1845f34eb496099507090f26dcf94bb780da8b3894e5sewardj f14 = spec_fargs[aTest.fra_idx]; 1846f34eb496099507090f26dcf94bb780da8b3894e5sewardj f15 = spec_fargs[aTest.frb_idx]; 1847f34eb496099507090f26dcf94bb780da8b3894e5sewardj frap = (unsigned long long *)&spec_fargs[aTest.fra_idx]; 1848f34eb496099507090f26dcf94bb780da8b3894e5sewardj frbp = (unsigned long long *)&spec_fargs[aTest.frb_idx]; 1849f34eb496099507090f26dcf94bb780da8b3894e5sewardj SET_FPSCR_ZERO; 1850f34eb496099507090f26dcf94bb780da8b3894e5sewardj SET_CR_XER_ZERO; 1851f34eb496099507090f26dcf94bb780da8b3894e5sewardj __asm__ __volatile__ ("ftdiv cr1, %0, %1" : : "d" (f14), "d" (f15)); 1852f34eb496099507090f26dcf94bb780da8b3894e5sewardj GET_CR(flags); 1853f34eb496099507090f26dcf94bb780da8b3894e5sewardj crx = (flags & 0x0f000000) >> 24; 1854f34eb496099507090f26dcf94bb780da8b3894e5sewardj printf( "ftdiv: %016llx <=> %016llx ? %x (CRx)\n", *frap, *frbp, crx); 1855f34eb496099507090f26dcf94bb780da8b3894e5sewardj// printf("\tFRA: %e; FRB: %e\n", f14, f15); 1856f34eb496099507090f26dcf94bb780da8b3894e5sewardj if ( crx != aTest.cr_flags) { 1857f34eb496099507090f26dcf94bb780da8b3894e5sewardj printf("Error: Expected CR flags 0x%x; actual flags: 0x%x\n", aTest.cr_flags, crx); 1858f34eb496099507090f26dcf94bb780da8b3894e5sewardj } 1859f34eb496099507090f26dcf94bb780da8b3894e5sewardj } 1860f34eb496099507090f26dcf94bb780da8b3894e5sewardj printf( "\n" ); 1861f34eb496099507090f26dcf94bb780da8b3894e5sewardj} 1862f34eb496099507090f26dcf94bb780da8b3894e5sewardj 1863f34eb496099507090f26dcf94bb780da8b3894e5sewardj 1864f34eb496099507090f26dcf94bb780da8b3894e5sewardjstatic void test_p7_fpops ( void ) 1865f34eb496099507090f26dcf94bb780da8b3894e5sewardj{ 1866f34eb496099507090f26dcf94bb780da8b3894e5sewardj int k = 0; 1867f34eb496099507090f26dcf94bb780da8b3894e5sewardj test_func_t func; 1868f34eb496099507090f26dcf94bb780da8b3894e5sewardj 1869f34eb496099507090f26dcf94bb780da8b3894e5sewardj build_fargs_table(); 1870f34eb496099507090f26dcf94bb780da8b3894e5sewardj while ((func = fp_tests[k].test_func)) { 1871f34eb496099507090f26dcf94bb780da8b3894e5sewardj float res; 1872f34eb496099507090f26dcf94bb780da8b3894e5sewardj double resd; 1873f34eb496099507090f26dcf94bb780da8b3894e5sewardj unsigned long long u0; 1874f34eb496099507090f26dcf94bb780da8b3894e5sewardj int i; 1875f34eb496099507090f26dcf94bb780da8b3894e5sewardj int res32 = strcmp(fp_tests[k].name, "fcfidu"); 1876f34eb496099507090f26dcf94bb780da8b3894e5sewardj 1877f34eb496099507090f26dcf94bb780da8b3894e5sewardj for (i = 0; i < nb_fargs; i++) { 1878f34eb496099507090f26dcf94bb780da8b3894e5sewardj u0 = *(unsigned long long *) (&fargs[i]); 1879f34eb496099507090f26dcf94bb780da8b3894e5sewardj f14 = fargs[i]; 1880f34eb496099507090f26dcf94bb780da8b3894e5sewardj (*func)(); 1881f34eb496099507090f26dcf94bb780da8b3894e5sewardj if (res32) { 1882f34eb496099507090f26dcf94bb780da8b3894e5sewardj res = f17; 1883f34eb496099507090f26dcf94bb780da8b3894e5sewardj printf( "%s %016llx => (raw sp) %08x)", 1884f34eb496099507090f26dcf94bb780da8b3894e5sewardj fp_tests[k].name, u0, *((unsigned int *)&res)); 1885f34eb496099507090f26dcf94bb780da8b3894e5sewardj } else { 1886f34eb496099507090f26dcf94bb780da8b3894e5sewardj resd = f17; 1887f34eb496099507090f26dcf94bb780da8b3894e5sewardj printf( "%s %016llx => (raw sp) %016llx)", 1888f34eb496099507090f26dcf94bb780da8b3894e5sewardj fp_tests[k].name, u0, *(unsigned long long *)(&resd)); 1889f34eb496099507090f26dcf94bb780da8b3894e5sewardj } 1890f34eb496099507090f26dcf94bb780da8b3894e5sewardj printf( "\n" ); 1891f34eb496099507090f26dcf94bb780da8b3894e5sewardj } 1892f34eb496099507090f26dcf94bb780da8b3894e5sewardj 1893f34eb496099507090f26dcf94bb780da8b3894e5sewardj k++; 1894f34eb496099507090f26dcf94bb780da8b3894e5sewardj printf( "\n" ); 1895f34eb496099507090f26dcf94bb780da8b3894e5sewardj } 1896f34eb496099507090f26dcf94bb780da8b3894e5sewardj} 1897f34eb496099507090f26dcf94bb780da8b3894e5sewardj 1898f34eb496099507090f26dcf94bb780da8b3894e5sewardjstatic void test_vsx_logic(void) 1899f34eb496099507090f26dcf94bb780da8b3894e5sewardj{ 1900f34eb496099507090f26dcf94bb780da8b3894e5sewardj logic_test_t aTest; 1901f34eb496099507090f26dcf94bb780da8b3894e5sewardj test_func_t func; 1902dd690bf8d81c9119a7228446be12e3366e202176carll int k; 1903f34eb496099507090f26dcf94bb780da8b3894e5sewardj k = 0; 1904f34eb496099507090f26dcf94bb780da8b3894e5sewardj 1905f34eb496099507090f26dcf94bb780da8b3894e5sewardj while ((func = logic_tests[k].test_func)) { 1906f34eb496099507090f26dcf94bb780da8b3894e5sewardj unsigned int * pv; 1907f34eb496099507090f26dcf94bb780da8b3894e5sewardj int startA, startB; 1908f34eb496099507090f26dcf94bb780da8b3894e5sewardj unsigned int * inA, * inB, * dst; 1909f34eb496099507090f26dcf94bb780da8b3894e5sewardj int idx, i; 1910f34eb496099507090f26dcf94bb780da8b3894e5sewardj startA = 0; 1911f34eb496099507090f26dcf94bb780da8b3894e5sewardj aTest = logic_tests[k]; 1912f34eb496099507090f26dcf94bb780da8b3894e5sewardj for (i = 0; i <= (NUM_VIARGS_INTS - (NUM_VIARGS_VECS * sizeof(int))); i++, startA++) { 1913f34eb496099507090f26dcf94bb780da8b3894e5sewardj startB = startA + 4; 1914f34eb496099507090f26dcf94bb780da8b3894e5sewardj pv = (unsigned int *)&vec_out; 1915f34eb496099507090f26dcf94bb780da8b3894e5sewardj inA = &viargs[startA]; 1916f34eb496099507090f26dcf94bb780da8b3894e5sewardj inB = &viargs[startB]; 1917f34eb496099507090f26dcf94bb780da8b3894e5sewardj memcpy(&vec_inA, inA, sizeof(vector unsigned char)); 1918f34eb496099507090f26dcf94bb780da8b3894e5sewardj memcpy(&vec_inB, inB, sizeof(vector unsigned char)); 1919f34eb496099507090f26dcf94bb780da8b3894e5sewardj // clear vec_out 1920f34eb496099507090f26dcf94bb780da8b3894e5sewardj for (idx = 0; idx < 4; idx++, pv++) 1921f34eb496099507090f26dcf94bb780da8b3894e5sewardj *pv = 0; 1922f34eb496099507090f26dcf94bb780da8b3894e5sewardj 1923f34eb496099507090f26dcf94bb780da8b3894e5sewardj // execute test insn 1924f34eb496099507090f26dcf94bb780da8b3894e5sewardj (*func)(); 1925f34eb496099507090f26dcf94bb780da8b3894e5sewardj dst = (unsigned int*) &vec_out; 1926f34eb496099507090f26dcf94bb780da8b3894e5sewardj 1927f34eb496099507090f26dcf94bb780da8b3894e5sewardj printf( "%s:", aTest.name); 1928f34eb496099507090f26dcf94bb780da8b3894e5sewardj printf( " %08x %08x %08x %08x %s", inA[0], inA[1], inA[2], inA[3], aTest.name); 1929f34eb496099507090f26dcf94bb780da8b3894e5sewardj printf( " %08x %08x %08x %08x", inB[0], inB[1], inB[2], inB[3]); 1930f34eb496099507090f26dcf94bb780da8b3894e5sewardj printf(" => %08x %08x %08x %08x\n", dst[0], dst[1], dst[2], dst[3]); 1931f34eb496099507090f26dcf94bb780da8b3894e5sewardj 1932f34eb496099507090f26dcf94bb780da8b3894e5sewardj } 1933f34eb496099507090f26dcf94bb780da8b3894e5sewardj k++; 1934f34eb496099507090f26dcf94bb780da8b3894e5sewardj } 1935f34eb496099507090f26dcf94bb780da8b3894e5sewardj printf( "\n" ); 1936f34eb496099507090f26dcf94bb780da8b3894e5sewardj} 1937f34eb496099507090f26dcf94bb780da8b3894e5sewardj 1938dd690bf8d81c9119a7228446be12e3366e202176carllstatic vector unsigned long long vec_args[] __attribute__ ((aligned (16))) = 1939dd690bf8d81c9119a7228446be12e3366e202176carll{ 1940dd690bf8d81c9119a7228446be12e3366e202176carll { 0x0123456789abcdefULL, 0x0011223344556677ULL}, 1941dd690bf8d81c9119a7228446be12e3366e202176carll { 0x8899aabb19293942ULL, 0xa1a2a3a4b1b2b3b4ULL}, 1942dd690bf8d81c9119a7228446be12e3366e202176carll { 0xc1c2c3c4d1d2d3d4ULL, 0x7a6b5d3efc032778ULL} 1943dd690bf8d81c9119a7228446be12e3366e202176carll}; 1944dd690bf8d81c9119a7228446be12e3366e202176carll#define NUM_VEC_ARGS_LONGS (sizeof vec_args/sizeof vec_args[0]) 1945dd690bf8d81c9119a7228446be12e3366e202176carll 1946f34eb496099507090f26dcf94bb780da8b3894e5sewardjstatic void test_move_ops (void) 1947f34eb496099507090f26dcf94bb780da8b3894e5sewardj{ 1948f34eb496099507090f26dcf94bb780da8b3894e5sewardj move_test_t aTest; 1949f34eb496099507090f26dcf94bb780da8b3894e5sewardj test_func_t func; 1950dd690bf8d81c9119a7228446be12e3366e202176carll int k; 1951f34eb496099507090f26dcf94bb780da8b3894e5sewardj k = 0; 1952f34eb496099507090f26dcf94bb780da8b3894e5sewardj 1953f34eb496099507090f26dcf94bb780da8b3894e5sewardj while ((func = move_tests[k].test_func)) { 1954f34eb496099507090f26dcf94bb780da8b3894e5sewardj unsigned int * pv; 1955f34eb496099507090f26dcf94bb780da8b3894e5sewardj int startA, startB; 1956dd690bf8d81c9119a7228446be12e3366e202176carll unsigned long long * inA, * inB, * dst; 1957dd690bf8d81c9119a7228446be12e3366e202176carll int use_vecA = (strcmp(move_tests[k].name, "xscpsgndp") == 0); 1958f34eb496099507090f26dcf94bb780da8b3894e5sewardj int idx; 1959dd690bf8d81c9119a7228446be12e3366e202176carll inA = NULL; 1960f34eb496099507090f26dcf94bb780da8b3894e5sewardj aTest = move_tests[k]; 1961dd690bf8d81c9119a7228446be12e3366e202176carll for (startB = 0; startB < NUM_VEC_ARGS_LONGS; startB++) { 1962dd690bf8d81c9119a7228446be12e3366e202176carll inB = (unsigned long long *)&vec_args[startB]; 1963dd690bf8d81c9119a7228446be12e3366e202176carll memcpy(&vec_inB, inB, sizeof(vector unsigned char)); 1964dd690bf8d81c9119a7228446be12e3366e202176carll if (isLE) 1965dd690bf8d81c9119a7228446be12e3366e202176carll inB++; 1966dd690bf8d81c9119a7228446be12e3366e202176carll startA = 0; 1967dd690bf8d81c9119a7228446be12e3366e202176carllrepeat: 1968dd690bf8d81c9119a7228446be12e3366e202176carll if (use_vecA) { 1969dd690bf8d81c9119a7228446be12e3366e202176carll inA = (unsigned long long *)&vec_args[startA]; 1970dd690bf8d81c9119a7228446be12e3366e202176carll memcpy(&vec_inA, inA, sizeof(vector unsigned char)); 1971dd690bf8d81c9119a7228446be12e3366e202176carll startA++; 1972dd690bf8d81c9119a7228446be12e3366e202176carll } 1973dd690bf8d81c9119a7228446be12e3366e202176carll pv = (unsigned int *)&vec_out; 1974dd690bf8d81c9119a7228446be12e3366e202176carll // clear vec_out 1975dd690bf8d81c9119a7228446be12e3366e202176carll for (idx = 0; idx < 4; idx++, pv++) 1976dd690bf8d81c9119a7228446be12e3366e202176carll *pv = 0; 1977f34eb496099507090f26dcf94bb780da8b3894e5sewardj 1978dd690bf8d81c9119a7228446be12e3366e202176carll // execute test insn 1979dd690bf8d81c9119a7228446be12e3366e202176carll (*func)(); 1980dd690bf8d81c9119a7228446be12e3366e202176carll dst = (unsigned long long *) &vec_out; 1981dd690bf8d81c9119a7228446be12e3366e202176carll if (isLE) { 1982dd690bf8d81c9119a7228446be12e3366e202176carll dst++; 1983dd690bf8d81c9119a7228446be12e3366e202176carll inA++; 1984dd690bf8d81c9119a7228446be12e3366e202176carll } 1985f34eb496099507090f26dcf94bb780da8b3894e5sewardj 1986dd690bf8d81c9119a7228446be12e3366e202176carll printf( "%s:", aTest.name); 1987dd690bf8d81c9119a7228446be12e3366e202176carll if (use_vecA) 1988dd690bf8d81c9119a7228446be12e3366e202176carll printf( " X[A]: %016llx ", *inA); 1989dd690bf8d81c9119a7228446be12e3366e202176carll printf( " X[B]: %016llx", *inB); 1990dd690bf8d81c9119a7228446be12e3366e202176carll printf(" => %016llx\n", *dst); 1991dd690bf8d81c9119a7228446be12e3366e202176carll 1992dd690bf8d81c9119a7228446be12e3366e202176carll if (use_vecA && startA < NUM_VEC_ARGS_LONGS) 1993dd690bf8d81c9119a7228446be12e3366e202176carll goto repeat; 1994f34eb496099507090f26dcf94bb780da8b3894e5sewardj } 1995f34eb496099507090f26dcf94bb780da8b3894e5sewardj k++; 1996f34eb496099507090f26dcf94bb780da8b3894e5sewardj printf( "\n" ); 1997f34eb496099507090f26dcf94bb780da8b3894e5sewardj } 1998f34eb496099507090f26dcf94bb780da8b3894e5sewardj} 1999f34eb496099507090f26dcf94bb780da8b3894e5sewardj 2000f34eb496099507090f26dcf94bb780da8b3894e5sewardjstatic void test_permute_ops (void) 2001f34eb496099507090f26dcf94bb780da8b3894e5sewardj{ 2002f34eb496099507090f26dcf94bb780da8b3894e5sewardj permute_test_t *aTest; 2003f34eb496099507090f26dcf94bb780da8b3894e5sewardj unsigned int *dst = (unsigned int *) &vec_out; 2004f34eb496099507090f26dcf94bb780da8b3894e5sewardj 2005f34eb496099507090f26dcf94bb780da8b3894e5sewardj for (aTest = &(permute_tests[0]); aTest->test_func != NULL; aTest++) 2006f34eb496099507090f26dcf94bb780da8b3894e5sewardj { 2007f34eb496099507090f26dcf94bb780da8b3894e5sewardj /* Grab test input and clear output vector. */ 2008f34eb496099507090f26dcf94bb780da8b3894e5sewardj memcpy(&vec_inA, aTest->xa, sizeof(vec_inA)); 2009f34eb496099507090f26dcf94bb780da8b3894e5sewardj memcpy(&vec_inB, aTest->xb, sizeof(vec_inB)); 2010f34eb496099507090f26dcf94bb780da8b3894e5sewardj memset(dst, 0, sizeof(vec_out)); 2011f34eb496099507090f26dcf94bb780da8b3894e5sewardj 2012f34eb496099507090f26dcf94bb780da8b3894e5sewardj /* execute test insn */ 2013f34eb496099507090f26dcf94bb780da8b3894e5sewardj aTest->test_func(); 2014f34eb496099507090f26dcf94bb780da8b3894e5sewardj 2015f34eb496099507090f26dcf94bb780da8b3894e5sewardj printf( "%s:\n", aTest->name); 2016f34eb496099507090f26dcf94bb780da8b3894e5sewardj printf( " XA[%08x,%08x,%08x,%08x]\n", 2017f34eb496099507090f26dcf94bb780da8b3894e5sewardj aTest->xa[0], aTest->xa[1], aTest->xa[2], aTest->xa[3]); 2018f34eb496099507090f26dcf94bb780da8b3894e5sewardj printf( " XB[%08x,%08x,%08x,%08x]\n", 2019f34eb496099507090f26dcf94bb780da8b3894e5sewardj aTest->xb[0], aTest->xb[1], aTest->xb[2], aTest->xb[3]); 2020f34eb496099507090f26dcf94bb780da8b3894e5sewardj printf( " => XT[%08x,%08x,%08x,%08x]\n", 2021f34eb496099507090f26dcf94bb780da8b3894e5sewardj dst[0], dst[1], dst[2], dst[3]); 2022f34eb496099507090f26dcf94bb780da8b3894e5sewardj 2023f34eb496099507090f26dcf94bb780da8b3894e5sewardj } 2024f34eb496099507090f26dcf94bb780da8b3894e5sewardj printf( "\n" ); 2025f34eb496099507090f26dcf94bb780da8b3894e5sewardj} 2026f34eb496099507090f26dcf94bb780da8b3894e5sewardj 2027f34eb496099507090f26dcf94bb780da8b3894e5sewardjstatic test_table_t all_tests[] = { { &test_ldst, 2028f34eb496099507090f26dcf94bb780da8b3894e5sewardj "Test VSX load/store instructions" }, 2029f34eb496099507090f26dcf94bb780da8b3894e5sewardj { &test_vsx_logic, 2030f34eb496099507090f26dcf94bb780da8b3894e5sewardj "Test VSX logic instructions" }, 2031f34eb496099507090f26dcf94bb780da8b3894e5sewardj#ifdef __powerpc64__ 2032f34eb496099507090f26dcf94bb780da8b3894e5sewardj { &test_ldbrx, 2033f34eb496099507090f26dcf94bb780da8b3894e5sewardj "Test ldbrx instruction" }, 2034f34eb496099507090f26dcf94bb780da8b3894e5sewardj { &test_popcntd, 2035f34eb496099507090f26dcf94bb780da8b3894e5sewardj "Test popcntd instruction" }, 2036f34eb496099507090f26dcf94bb780da8b3894e5sewardj#endif 2037f34eb496099507090f26dcf94bb780da8b3894e5sewardj { &test_lfiwzx, 2038f34eb496099507090f26dcf94bb780da8b3894e5sewardj "Test lfiwzx instruction" }, 2039f34eb496099507090f26dcf94bb780da8b3894e5sewardj { &test_p7_fpops, 2040f34eb496099507090f26dcf94bb780da8b3894e5sewardj "Test P7 floating point convert instructions"}, 2041f34eb496099507090f26dcf94bb780da8b3894e5sewardj { &test_ftdiv, 2042f34eb496099507090f26dcf94bb780da8b3894e5sewardj "Test ftdiv instruction" }, 2043f34eb496099507090f26dcf94bb780da8b3894e5sewardj { &test_move_ops, 2044f34eb496099507090f26dcf94bb780da8b3894e5sewardj "Test VSX move instructions"}, 2045f34eb496099507090f26dcf94bb780da8b3894e5sewardj { &test_permute_ops, 2046f34eb496099507090f26dcf94bb780da8b3894e5sewardj "Test VSX permute instructions"}, 2047f34eb496099507090f26dcf94bb780da8b3894e5sewardj { &test_vx_fp_ops, 2048f34eb496099507090f26dcf94bb780da8b3894e5sewardj "Test VSX floating point instructions"}, 2049f34eb496099507090f26dcf94bb780da8b3894e5sewardj { &test_xs_conv_ops, 2050f34eb496099507090f26dcf94bb780da8b3894e5sewardj "Test VSX scalar integer conversion instructions" }, 2051f34eb496099507090f26dcf94bb780da8b3894e5sewardj { NULL, NULL } 2052f34eb496099507090f26dcf94bb780da8b3894e5sewardj}; 2053f34eb496099507090f26dcf94bb780da8b3894e5sewardj#endif // HAS_VSX 2054f34eb496099507090f26dcf94bb780da8b3894e5sewardj 2055f34eb496099507090f26dcf94bb780da8b3894e5sewardjint main(int argc, char *argv[]) 2056f34eb496099507090f26dcf94bb780da8b3894e5sewardj{ 2057f34eb496099507090f26dcf94bb780da8b3894e5sewardj#ifdef HAS_VSX 2058f34eb496099507090f26dcf94bb780da8b3894e5sewardj 2059f34eb496099507090f26dcf94bb780da8b3894e5sewardj test_table_t aTest; 2060f34eb496099507090f26dcf94bb780da8b3894e5sewardj test_func_t func; 2061f34eb496099507090f26dcf94bb780da8b3894e5sewardj int i = 0; 2062f34eb496099507090f26dcf94bb780da8b3894e5sewardj 2063f34eb496099507090f26dcf94bb780da8b3894e5sewardj while ((func = all_tests[i].test_category)) { 2064f34eb496099507090f26dcf94bb780da8b3894e5sewardj aTest = all_tests[i]; 2065f34eb496099507090f26dcf94bb780da8b3894e5sewardj printf( "%s\n", aTest.name ); 2066f34eb496099507090f26dcf94bb780da8b3894e5sewardj (*func)(); 2067f34eb496099507090f26dcf94bb780da8b3894e5sewardj i++; 2068f34eb496099507090f26dcf94bb780da8b3894e5sewardj } 2069f34eb496099507090f26dcf94bb780da8b3894e5sewardj 2070f34eb496099507090f26dcf94bb780da8b3894e5sewardj#endif // HAS _VSX 2071f34eb496099507090f26dcf94bb780da8b3894e5sewardj 2072f34eb496099507090f26dcf94bb780da8b3894e5sewardj return 0; 2073f34eb496099507090f26dcf94bb780da8b3894e5sewardj} 2074