|
From: <sv...@va...> - 2011-07-24 14:40:50
|
Author: sewardj
Date: 2011-07-24 15:35:58 +0100 (Sun, 24 Jul 2011)
New Revision: 11909
Log:
Change this file to be a symlink to the identical version
in the 32-bit equivalent directory
(none/tests/ppc32/test_isa_2_06_part1.c). Bug #277199.
Added:
trunk/none/tests/ppc64/test_isa_2_06_part1.c
Removed:
trunk/none/tests/ppc64/test_isa_2_06_part1.c
Deleted: trunk/none/tests/ppc64/test_isa_2_06_part1.c
===================================================================
--- trunk/none/tests/ppc64/test_isa_2_06_part1.c 2011-07-24 14:20:11 UTC (rev 11908)
+++ trunk/none/tests/ppc64/test_isa_2_06_part1.c 2011-07-24 14:35:58 UTC (rev 11909)
@@ -1,2189 +0,0 @@
-/* Copyright (C) 2011 IBM
-
- Author: Maynard Johnson <may...@us...>
-
- This program is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public License as
- published by the Free Software Foundation; either version 2 of the
- License, or (at your option) any later version.
-
- This program is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
- 02111-1307, USA.
-
- The GNU General Public License is contained in the file COPYING.
- */
-
-#ifdef HAS_VSX
-
-#include <stdio.h>
-#include <stdint.h>
-#include <stdlib.h>
-#include <string.h>
-#include <malloc.h>
-#include <altivec.h>
-
-#ifndef __powerpc64__
-typedef uint32_t HWord_t;
-#else
-typedef uint64_t HWord_t;
-#endif /* __powerpc64__ */
-
-static int errors;
-register HWord_t r14 __asm__ ("r14");
-register HWord_t r15 __asm__ ("r15");
-register HWord_t r16 __asm__ ("r16");
-register HWord_t r17 __asm__ ("r17");
-register double f14 __asm__ ("fr14");
-register double f15 __asm__ ("fr15");
-register double f16 __asm__ ("fr16");
-register double f17 __asm__ ("fr17");
-
-static volatile unsigned int cond_reg;
-
-#define ALLCR "cr0","cr1","cr2","cr3","cr4","cr5","cr6","cr7"
-
-#define SET_CR(_arg) \
- __asm__ __volatile__ ("mtcr %0" : : "b"(_arg) : ALLCR );
-
-#define SET_XER(_arg) \
- __asm__ __volatile__ ("mtxer %0" : : "b"(_arg) : "xer" );
-
-#define GET_CR(_lval) \
- __asm__ __volatile__ ("mfcr %0" : "=b"(_lval) )
-
-#define GET_XER(_lval) \
- __asm__ __volatile__ ("mfxer %0" : "=b"(_lval) )
-
-#define GET_CR_XER(_lval_cr,_lval_xer) \
- do { GET_CR(_lval_cr); GET_XER(_lval_xer); } while (0)
-
-#define SET_CR_ZERO \
- SET_CR(0)
-
-#define SET_XER_ZERO \
- SET_XER(0)
-
-#define SET_CR_XER_ZERO \
- do { SET_CR_ZERO; SET_XER_ZERO; } while (0)
-
-#define SET_FPSCR_ZERO \
- do { double _d = 0.0; \
- __asm__ __volatile__ ("mtfsf 0xFF, %0" : : "f"(_d) ); \
- } while (0)
-
-
-typedef void (*test_func_t)(void);
-typedef struct ldst_test ldst_test_t;
-typedef struct vsx_logic_test logic_test_t;
-typedef struct xs_conv_test xs_conv_test_t;
-typedef struct p7_fp_test fp_test_t;
-typedef struct vx_fp_test vx_fp_test_t;
-typedef struct vsx_move_test move_test_t;
-typedef struct vsx_permute_test permute_test_t;
-typedef struct test_table test_table_t;
-
-static double *fargs = NULL;
-static int nb_fargs;
-
-/* These functions below that construct a table of floating point
- * values were lifted from none/tests/ppc32/jm-insns.c.
- */
-
-#if defined (DEBUG_ARGS_BUILD)
-#define AB_DPRINTF(fmt, args...) do { fprintf(stderr, fmt , ##args); } while (0)
-#else
-#define AB_DPRINTF(fmt, args...) do { } while (0)
-#endif
-
-static inline void register_farg (void *farg,
- int s, uint16_t _exp, uint64_t mant)
-{
- uint64_t tmp;
-
- tmp = ((uint64_t)s << 63) | ((uint64_t)_exp << 52) | mant;
- *(uint64_t *)farg = tmp;
- AB_DPRINTF("%d %03x %013llx => %016llx %0e\n",
- s, _exp, mant, *(uint64_t *)farg, *(double *)farg);
-}
-
-static void build_fargs_table(void)
-/*
- * Double precision:
- * Sign goes from zero to one (1 bit)
- * Exponent goes from 0 to ((1 << 12) - 1) (11 bits)
- * Mantissa goes from 1 to ((1 << 52) - 1) (52 bits)
- * + special values:
- * +0.0 : 0 0x000 0x0000000000000 => 0x0000000000000000
- * -0.0 : 1 0x000 0x0000000000000 => 0x8000000000000000
- * +infinity : 0 0x7FF 0x0000000000000 => 0x7FF0000000000000
- * -infinity : 1 0x7FF 0x0000000000000 => 0xFFF0000000000000
- * +QNaN : 0 0x7FF 0x7FFFFFFFFFFFF => 0x7FF7FFFFFFFFFFFF
- * -QNaN : 1 0x7FF 0x7FFFFFFFFFFFF => 0xFFF7FFFFFFFFFFFF
- * +SNaN : 0 0x7FF 0x8000000000000 => 0x7FF8000000000000
- * -SNaN : 1 0x7FF 0x8000000000000 => 0xFFF8000000000000
- * (8 values)
- *
- * Single precision
- * Sign: 1 bit
- * Exponent: 8 bits
- * Mantissa: 23 bits
- * +0.0 : 0 0x00 0x000000 => 0x00000000
- * -0.0 : 1 0x00 0x000000 => 0x80000000
- * +infinity : 0 0xFF 0x000000 => 0x7F800000
- * -infinity : 1 0xFF 0x000000 => 0xFF800000
- * +QNaN : 0 0xFF 0x3FFFFF => 0x7FBFFFFF
- * -QNaN : 1 0xFF 0x3FFFFF => 0xFFBFFFFF
- * +SNaN : 0 0xFF 0x400000 => 0x7FC00000
- * -SNaN : 1 0xFF 0x400000 => 0xFFC00000
-*/
-{
- uint64_t mant;
- uint16_t _exp, e1;
- int s;
- int i=0;
-
- if (nb_fargs)
- return;
-
- fargs = malloc( 16 * sizeof(double) );
- for (s = 0; s < 2; s++) {
- for (e1 = 0x001;; e1 = ((e1 + 1) << 13) + 7) {
- if (e1 >= 0x400)
- e1 = 0x3fe;
- _exp = e1;
- for (mant = 0x0000000000001ULL; mant < (1ULL << 52);
- /* Add 'random' bits */
- mant = ((mant + 0x4A6) << 29) + 0x359) {
- register_farg( &fargs[i++], s, _exp, mant );
- }
- if (e1 == 0x3fe)
- break;
- }
- }
- // add a few smaller values to fargs . . .
- s = 0;
- _exp = 0x002;
- mant = 0x0000000000b01ULL;
- register_farg(&fargs[i++], s, _exp, mant);
-
- _exp = 0x000;
- mant = 0x00000203f0b3dULL;
- register_farg(&fargs[i++], s, _exp, mant);
-
- mant = 0x00000005a203dULL;
- register_farg(&fargs[i++], s, _exp, mant);
-
- s = 1;
- _exp = 0x002;
- mant = 0x0000000000b01ULL;
- register_farg(&fargs[i++], s, _exp, mant);
-
- _exp = 0x000;
- mant = 0x00000203f0b3dULL;
- register_farg(&fargs[i++], s, _exp, mant);
-
- nb_fargs = i;
-}
-
-
-typedef struct ftdiv_test {
- int fra_idx;
- int frb_idx;
- int cr_flags;
-} ftdiv_test_args_t;
-
-typedef struct fp_test_args {
- int fra_idx;
- int frb_idx;
- int cr_flags;
- unsigned long long dp_bin_result;
-} fp_test_args_t;
-
-unsigned long long xscvuxddp_results[] = {
- 0x43cfec0000000000ULL,
- 0x43d013c000000000ULL,
- 0x4338000000b77501ULL,
- 0x43dffa0000000001ULL,
- 0x4372321456990000ULL,
- 0x0000000000000000ULL,
- 0x43e0000000000000ULL,
- 0x43dffc0000000000ULL,
- 0x43effe0000000000ULL,
- 0x43dffe0000000000ULL,
- 0x43efff0000000000ULL,
- 0x43dffe0000000000ULL,
- 0x43efff0000000000ULL,
- 0x43e00106800000f0ULL,
- 0x43e81a0ca1eb40f6ULL
-};
-
-unsigned long long xscvsxddp_results[] = {
- 0x43cfec0000000000ULL,
- 0x43d013c000000000ULL,
- 0x4338000000b77501ULL,
- 0x43dffa0000000001ULL,
- 0x4372321456990000ULL,
- 0x0000000000000000ULL,
- 0xc3e0000000000000ULL,
- 0x43dffc0000000000ULL,
- 0xc330000000000000ULL,
- 0x43dffe0000000000ULL,
- 0xc320000000000002ULL,
- 0x43dffe0000000000ULL,
- 0xc320000000000000ULL,
- 0xc3dffdf2fffffe20ULL,
- 0xc3cf97cd7852fc26ULL,
-};
-
-unsigned long long xscvdpsxds_results[] = {
- 0x0000000000000000ULL,
- 0x000000000000003eULL,
- 0x0000000000000000ULL,
- 0x7fffffffffffffffULL,
- 0x0000000000000000ULL,
- 0x0000000000000000ULL,
- 0x0000000000000000ULL,
- 0x7fffffffffffffffULL,
- 0x8000000000000000ULL,
- 0x8000000000000000ULL,
- 0x8000000000000000ULL,
- 0x8000000000000000ULL,
- 0x8000000000000000ULL,
- 0x0000000000000000ULL,
- 0xffffffffffffbe6cULL
-};
-
-ftdiv_test_args_t ftdiv_tests[] = {
- {0, 1, 0x8},
- {9, 1, 0xa},
- {1, 12, 0xa},
- {0, 2, 0xa},
- {1, 3, 0xa},
- {3, 0, 0xa},
- {0, 3, 0xa},
- {4, 0, 0xa},
- {7, 1, 0xe},
- {8, 1, 0xe},
- {1, 7, 0xe},
- {0, 13, 0xe},
- {5, 5, 0xe},
- {5, 6, 0xe},
-};
-
-fp_test_args_t xscmpX_tests[] = {
- {8, 8, 0x2, 0ULL},
- {8, 14, 0x8, 0ULL},
- {8, 6, 0x8, 0ULL},
- {8, 5, 0x8, 0ULL},
- {8, 4, 0x8, 0ULL},
- {8, 7, 0x8, 0ULL},
- {8, 9, 0x1, 0ULL},
- {8, 11, 0x1, 0ULL},
- {14, 8, 0x4, 0ULL},
- {14, 14, 0x2, 0ULL},
- {14, 6, 0x8, 0ULL},
- {14, 5, 0x8, 0ULL},
- {14, 4, 0x8, 0ULL},
- {14, 7, 0x8, 0ULL},
- {14, 9, 0x1, 0ULL},
- {14, 11, 0x1, 0ULL},
- {6, 8, 0x4, 0ULL},
- {6, 14, 0x4, 0ULL},
- {6, 6, 0x2, 0ULL},
- {6, 5, 0x2, 0ULL},
- {6, 4, 0x8, 0ULL},
- {6, 7, 0x8, 0ULL},
- {6, 9, 0x1, 0ULL},
- {6, 11, 0x1, 0ULL},
- {5, 8, 0x4, 0ULL},
- {5, 14, 0x4, 0ULL},
- {5, 6, 0x2, 0ULL},
- {5, 5, 0x2, 0ULL},
- {5, 4, 0x8, 0ULL},
- {5, 7, 0x8, 0ULL},
- {5, 9, 0x1, 0ULL},
- {5, 11, 0x1, 0ULL},
- {4, 8, 0x4, 0ULL},
- {4, 14, 0x4, 0ULL},
- {4, 6, 0x4, 0ULL},
- {4, 5, 0x4, 0ULL},
- {4, 1, 0x8, 0ULL},
- {4, 7, 0x8, 0ULL},
- {4, 9, 0x1, 0ULL},
- {4, 11, 0x1, 0ULL},
- {7, 8, 0x4, 0ULL},
- {7, 14, 0x4, 0ULL},
- {7, 6, 0x4, 0ULL},
- {7, 5, 0x4, 0ULL},
- {7, 4, 0x4, 0ULL},
- {7, 7, 0x2, 0ULL},
- {7, 9, 0x1, 0ULL},
- {7, 11, 0x1, 0ULL},
- {10, 8, 0x1, 0ULL},
- {10, 14, 0x1, 0ULL},
- {10, 6, 0x1, 0ULL},
- {10, 5, 0x1, 0ULL},
- {10, 4, 0x1, 0ULL},
- {10, 7, 0x1, 0ULL},
- {10, 9, 0x1, 0ULL},
- {10, 11, 0x1, 0ULL},
- {12, 8, 0x1, 0ULL},
- {12, 14, 0x1, 0ULL},
- {12, 6, 0x1, 0ULL},
- {12, 5, 0x1, 0ULL},
- {12, 4, 0x1, 0ULL},
- {12, 7, 0x1, 0ULL},
- {12, 9, 0x1, 0ULL},
- {12, 11, 0x1, 0ULL},
-};
-
-fp_test_args_t xsadddp_tests[] = {
- {8, 8, 0x0, 0xfff0000000000000ULL},
- {8, 14, 0x0, 0xfff0000000000000ULL},
- {8, 6, 0x0, 0xfff0000000000000ULL},
- {8, 5, 0x0, 0xfff0000000000000ULL},
- {8, 4, 0x0, 0xfff0000000000000ULL},
- {8, 7, 0x0, 0x7ff8000000000000ULL},
- {8, 9, 0x0, 0x7fffffffffffffffULL},
- {8, 11, 0x0, 0x7ff8000000000000ULL},
- {14, 8, 0x0, 0xfff0000000000000ULL},
- {14, 14, 0x0, 0xc0e0650f5a07b353ULL},
- {14, 6, 0x0, 0xc0d0650f5a07b353ULL},
- {14, 5, 0x0, 0xc0d0650f5a07b353ULL},
- {14, 4, 0x0, 0xc0d0650f5a07b353ULL},
- {14, 7, 0x0, 0x7ff0000000000000ULL},
- {14, 9, 0x0, 0x7fffffffffffffffULL},
- {14, 11, 0x0, 0x7ff8000000000000ULL},
- {6, 8, 0x0, 0xfff0000000000000ULL},
- {6, 14, 0x0, 0xc0d0650f5a07b353ULL},
- {6, 6, 0x0, 0x8000000000000000ULL},
- {6, 5, 0x0, 0x0000000000000000ULL},
- {6, 4, 0x0, 0x0123214569900000ULL},
- {6, 7, 0x0, 0x7ff0000000000000ULL},
- {6, 9, 0x0, 0x7fffffffffffffffULL},
- {6, 11, 0x0, 0x7ff8000000000000ULL},
- {5, 8, 0x0, 0xfff0000000000000ULL},
- {5, 14, 0x0, 0xc0d0650f5a07b353ULL},
- {5, 6, 0x0, 0x0000000000000000ULL},
- {5, 5, 0x0, 0x0000000000000000ULL},
- {5, 4, 0x0, 0x0123214569900000ULL},
- {5, 7, 0x0, 0x7ff0000000000000ULL},
- {5, 9, 0x0, 0x7fffffffffffffffULL},
- {5, 11, 0x0, 0x7ff8000000000000ULL},
- {4, 8, 0x0, 0xfff0000000000000ULL},
- {4, 14, 0x0, 0xc0d0650f5a07b353ULL},
- {4, 6, 0x0, 0x0123214569900000ULL},
- {4, 5, 0x0, 0x0123214569900000ULL},
- {4, 1, 0x0, 0x404f000000000000ULL},
- {4, 7, 0x0, 0x7ff0000000000000ULL},
- {4, 9, 0x0, 0x7fffffffffffffffULL},
- {4, 11, 0x0, 0x7ff8000000000000ULL},
- {7, 8, 0x0, 0x7ff8000000000000ULL},
- {7, 14, 0x0, 0x7ff0000000000000ULL},
- {7, 6, 0x0, 0x7ff0000000000000ULL},
- {7, 5, 0x0, 0x7ff0000000000000ULL},
- {7, 4, 0x0, 0x7ff0000000000000ULL},
- {7, 7, 0x0, 0x7ff0000000000000ULL},
- {7, 9, 0x0, 0x7fffffffffffffffULL},
- {7, 11, 0x0, 0x7ff8000000000000ULL},
- {10, 8, 0x0, 0xffffffffffffffffULL},
- {10, 14, 0x0, 0xffffffffffffffffULL},
- {10, 6, 0x0, 0xffffffffffffffffULL},
- {10, 5, 0x0, 0xffffffffffffffffULL},
- {10, 4, 0x0, 0xffffffffffffffffULL},
- {10, 7, 0x0, 0xffffffffffffffffULL},
- {10, 9, 0x0, 0xffffffffffffffffULL},
- {10, 11, 0x0, 0xffffffffffffffffULL},
- {12, 8, 0x0, 0xfff8000000000000ULL},
- {12, 14, 0x0, 0xfff8000000000000ULL},
- {12, 6, 0x0, 0xfff8000000000000ULL},
- {12, 5, 0x0, 0xfff8000000000000ULL},
- {12, 4, 0x0, 0xfff8000000000000ULL},
- {12, 7, 0x0, 0xfff8000000000000ULL},
- {12, 9, 0x0, 0xfff8000000000000ULL},
- {12, 11, 0x0, 0xfff8000000000000ULL},
-};
-
-fp_test_args_t xsdivdp_tests[] = {
- {8, 8, 0x0, 0x7ff8000000000000ULL},
- {8, 14, 0x0, 0x7ff0000000000000ULL},
- {8, 6, 0x0, 0x7ff0000000000000ULL},
- {8, 5, 0x0, 0xfff0000000000000ULL},
- {8, 4, 0x0, 0xfff0000000000000ULL},
- {8, 7, 0x0, 0x7ff8000000000000ULL},
- {8, 9, 0x0, 0x7fffffffffffffffULL},
- {8, 11, 0x0, 0x7ff8000000000000ULL},
- {14, 8, 0x0, 0x0000000000000000ULL},
- {14, 14, 0x0, 0x3ff0000000000000ULL},
- {14, 6, 0x0, 0x7ff0000000000000ULL},
- {14, 5, 0x0, 0xfff0000000000000ULL},
- {14, 4, 0x0, 0xff9b6cb57ca13c00ULL},
- {14, 7, 0x0, 0x8000000000000000ULL},
- {14, 9, 0x0, 0x7fffffffffffffffULL},
- {14, 11, 0x0, 0x7ff8000000000000ULL},
- {6, 8, 0x0, 0x0000000000000000ULL},
- {6, 14, 0x0, 0x0000000000000000ULL},
- {6, 6, 0x0, 0x7ff8000000000000ULL},
- {6, 5, 0x0, 0x7ff8000000000000ULL},
- {6, 4, 0x0, 0x8000000000000000ULL},
- {6, 7, 0x0, 0x8000000000000000ULL},
- {6, 9, 0x0, 0x7fffffffffffffffULL},
- {6, 11, 0x0, 0x7ff8000000000000ULL},
- {5, 8, 0x0, 0x8000000000000000ULL},
- {5, 14, 0x0, 0x8000000000000000ULL},
- {5, 6, 0x0, 0x7ff8000000000000ULL},
- {5, 5, 0x0, 0x7ff8000000000000ULL},
- {5, 4, 0x0, 0x0000000000000000ULL},
- {5, 7, 0x0, 0x0000000000000000ULL},
- {5, 9, 0x0, 0x7fffffffffffffffULL},
- {5, 11, 0x0, 0x7ff8000000000000ULL},
- {4, 8, 0x0, 0x8000000000000000ULL},
- {4, 14, 0x0, 0x8042ab59d8b6ec87ULL},
- {4, 6, 0x0, 0xfff0000000000000ULL},
- {4, 5, 0x0, 0x7ff0000000000000ULL},
- {4, 1, 0x0, 0x00c3bf3f64b5ad6bULL},
- {4, 7, 0x0, 0x0000000000000000ULL},
- {4, 9, 0x0, 0x7fffffffffffffffULL},
- {4, 11, 0x0, 0x7ff8000000000000ULL},
- {7, 8, 0x0, 0x7ff8000000000000ULL},
- {7, 14, 0x0, 0xfff0000000000000ULL},
- {7, 6, 0x0, 0xfff0000000000000ULL},
- {7, 5, 0x0, 0x7ff0000000000000ULL},
- {7, 4, 0x0, 0x7ff0000000000000ULL},
- {7, 7, 0x0, 0x7ff8000000000000ULL},
- {7, 9, 0x0, 0x7fffffffffffffffULL},
- {7, 11, 0x0, 0x7ff8000000000000ULL},
- {10, 8, 0x0, 0xffffffffffffffffULL},
- {10, 14, 0x0, 0xffffffffffffffffULL},
- {10, 6, 0x0, 0xffffffffffffffffULL},
- {10, 5, 0x0, 0xffffffffffffffffULL},
- {10, 4, 0x0, 0xffffffffffffffffULL},
- {10, 7, 0x0, 0xffffffffffffffffULL},
- {10, 9, 0x0, 0xffffffffffffffffULL},
- {10, 11, 0x0, 0xffffffffffffffffULL},
- {12, 8, 0x0, 0xfff8000000000000ULL},
- {12, 14, 0x0, 0xfff8000000000000ULL},
- {12, 6, 0x0, 0xfff8000000000000ULL},
- {12, 5, 0x0, 0xfff8000000000000ULL},
- {12, 4, 0x0, 0xfff8000000000000ULL},
- {12, 7, 0x0, 0xfff8000000000000ULL},
- {12, 9, 0x0, 0xfff8000000000000ULL},
- {12, 11, 0x0, 0xfff8000000000000ULL},
-};
-
-fp_test_args_t xsmaddXdp_tests[] = {
- {8, 8, 0x0, 0x7ff8000000000000ULL},
- {8, 14, 0x0, 0xfff0000000000000ULL},
- {8, 6, 0x0, 0x7ff0000000000000ULL},
- {8, 5, 0x0, 0xfff0000000000000ULL},
- {8, 4, 0x0, 0x7ff0000000000000ULL},
- {8, 7, 0x0, 0x7ff8000000000000ULL},
- {8, 9, 0x0, 0x7fffffffffffffffULL},
- {8, 11, 0x0, 0x7ff8000000000000ULL},
- {14, 8, 0x0, 0xfff0000000000000ULL},
- {14, 14, 0x0, 0xc0d0650f5a07b353ULL},
- {14, 6, 0x0, 0x41b0cc9d05eec2a7ULL},
- {14, 5, 0x0, 0x82039a19ca8fcb5fULL},
- {14, 4, 0x0, 0x41b0cc9d05eec2a7ULL},
- {14, 7, 0x0, 0x7ff0000000000000ULL},
- {14, 9, 0x0, 0x7fffffffffffffffULL},
- {14, 11, 0x0, 0x7ff8000000000000ULL},
- {6, 8, 0x0, 0xfff0000000000000ULL},
- {6, 14, 0x0, 0xc0d0650f5a07b353ULL},
- {6, 6, 0x0, 0x0000000000000000ULL},
- {6, 5, 0x0, 0x0000000000000000ULL},
- {6, 4, 0x0, 0x0123214569900000ULL},
- {6, 7, 0x0, 0x7ff0000000000000ULL},
- {6, 9, 0x0, 0x7fffffffffffffffULL},
- {6, 11, 0x0, 0x7ff8000000000000ULL},
- {5, 8, 0x0, 0xfff0000000000000ULL},
- {5, 14, 0x0, 0xc0d0650f5a07b353ULL},
- {5, 6, 0x0, 0x8000000000000000ULL},
- {5, 5, 0x0, 0x0000000000000000ULL},
- {5, 4, 0x0, 0x0123214569900000ULL},
- {5, 7, 0x0, 0x7ff0000000000000ULL},
- {5, 9, 0x0, 0x7fffffffffffffffULL},
- {5, 11, 0x0, 0x7ff8000000000000ULL},
- {4, 8, 0x0, 0xfff0000000000000ULL},
- {4, 14, 0x0, 0xc0d0650f5a07b353ULL},
- {4, 6, 0x0, 0x82039a19ca8fcb5fULL},
- {4, 5, 0x0, 0x0000000000000000ULL},
- {4, 1, 0x0, 0x404f000000000000ULL},
- {4, 7, 0x0, 0x7ff0000000000000ULL},
- {4, 9, 0x0, 0x7fffffffffffffffULL},
- {4, 11, 0x0, 0x7ff8000000000000ULL},
- {7, 8, 0x0, 0xfff0000000000000ULL},
- {7, 14, 0x0, 0x7ff0000000000000ULL},
- {7, 6, 0x0, 0xfff0000000000000ULL},
- {7, 5, 0x0, 0x7ff0000000000000ULL},
- {7, 4, 0x0, 0xfff0000000000000ULL},
- {7, 7, 0x0, 0x7ff0000000000000ULL},
- {7, 9, 0x0, 0x7fffffffffffffffULL},
- {7, 11, 0x0, 0x7ff8000000000000ULL},
- {10, 8, 0x0, 0xffffffffffffffffULL},
- {10, 14, 0x0, 0xffffffffffffffffULL},
- {10, 6, 0x0, 0xffffffffffffffffULL},
- {10, 5, 0x0, 0xffffffffffffffffULL},
- {10, 4, 0x0, 0xffffffffffffffffULL},
- {10, 7, 0x0, 0xffffffffffffffffULL},
- {10, 9, 0x0, 0xffffffffffffffffULL},
- {10, 11, 0x0, 0xffffffffffffffffULL},
- {12, 8, 0x0, 0xfff8000000000000ULL},
- {12, 14, 0x0, 0xfff8000000000000ULL},
- {12, 6, 0x0, 0xfff8000000000000ULL},
- {12, 5, 0x0, 0xfff8000000000000ULL},
- {12, 4, 0x0, 0xfff8000000000000ULL},
- {12, 7, 0x0, 0xfff8000000000000ULL},
- {12, 9, 0x0, 0xfff8000000000000ULL},
- {12, 11, 0x0, 0xfff8000000000000ULL},
-};
-
-fp_test_args_t xsmsubXdp_tests[] = {
- {8, 8, 0x0, 0x7ff0000000000000ULL},
- {8, 14, 0x0, 0xfff0000000000000ULL},
- {8, 6, 0x0, 0x7ff0000000000000ULL},
- {8, 5, 0x0, 0xfff0000000000000ULL},
- {8, 4, 0x0, 0x7ff0000000000000ULL},
- {8, 7, 0x0, 0xfff0000000000000ULL},
- {8, 9, 0x0, 0x7fffffffffffffffULL},
- {8, 11, 0x0, 0x7ff8000000000000ULL},
- {14, 8, 0x0, 0x7ff0000000000000ULL},
- {14, 14, 0x0, 0x40d0650f5a07b353ULL},
- {14, 6, 0x0, 0x41b0cc9d05eec2a7ULL},
- {14, 5, 0x0, 0x82039a19ca8fcb5fULL},
- {14, 4, 0x0, 0x41b0cc9d05eec2a7ULL},
- {14, 7, 0x0, 0xfff0000000000000ULL},
- {14, 9, 0x0, 0x7fffffffffffffffULL},
- {14, 11, 0x0, 0x7ff8000000000000ULL},
- {6, 8, 0x0, 0x7ff0000000000000ULL},
- {6, 14, 0x0, 0x40d0650f5a07b353ULL},
- {6, 6, 0x0, 0x0000000000000000ULL},
- {6, 5, 0x0, 0x8000000000000000ULL},
- {6, 4, 0x0, 0x8123214569900000ULL},
- {6, 7, 0x0, 0xfff0000000000000ULL},
- {6, 9, 0x0, 0x7fffffffffffffffULL},
- {6, 11, 0x0, 0x7ff8000000000000ULL},
- {5, 8, 0x0, 0x7ff0000000000000ULL},
- {5, 14, 0x0, 0x40d0650f5a07b353ULL},
- {5, 6, 0x0, 0x0000000000000000ULL},
- {5, 5, 0x0, 0x0000000000000000ULL},
- {5, 4, 0x0, 0x8123214569900000ULL},
- {5, 7, 0x0, 0xfff0000000000000ULL},
- {5, 9, 0x0, 0x7fffffffffffffffULL},
- {5, 11, 0x0, 0x7ff8000000000000ULL},
- {4, 8, 0x0, 0x7ff0000000000000ULL},
- {4, 14, 0x0, 0x40d0650f5a07b353ULL},
- {4, 6, 0x0, 0x82039a19ca8fcb5fULL},
- {4, 5, 0x0, 0x0000000000000000ULL},
- {4, 1, 0x0, 0xc04f000000000000ULL},
- {4, 7, 0x0, 0xfff0000000000000ULL},
- {4, 9, 0x0, 0x7fffffffffffffffULL},
- {4, 11, 0x0, 0x7ff8000000000000ULL},
- {7, 8, 0x0, 0x7ff8000000000000ULL},
- {7, 14, 0x0, 0x7ff0000000000000ULL},
- {7, 6, 0x0, 0xfff0000000000000ULL},
- {7, 5, 0x0, 0x7ff0000000000000ULL},
- {7, 4, 0x0, 0xfff0000000000000ULL},
- {7, 7, 0x0, 0x7ff8000000000000ULL},
- {7, 9, 0x0, 0x7fffffffffffffffULL},
- {7, 11, 0x0, 0x7ff8000000000000ULL},
- {10, 8, 0x0, 0xffffffffffffffffULL},
- {10, 14, 0x0, 0xffffffffffffffffULL},
- {10, 6, 0x0, 0xffffffffffffffffULL},
- {10, 5, 0x0, 0xffffffffffffffffULL},
- {10, 4, 0x0, 0xffffffffffffffffULL},
- {10, 7, 0x0, 0xffffffffffffffffULL},
- {10, 9, 0x0, 0xffffffffffffffffULL},
- {10, 11, 0x0, 0xffffffffffffffffULL},
- {12, 8, 0x0, 0xfff8000000000000ULL},
- {12, 14, 0x0, 0xfff8000000000000ULL},
- {12, 6, 0x0, 0xfff8000000000000ULL},
- {12, 5, 0x0, 0xfff8000000000000ULL},
- {12, 4, 0x0, 0xfff8000000000000ULL},
- {12, 7, 0x0, 0xfff8000000000000ULL},
- {12, 9, 0x0, 0xfff8000000000000ULL},
- {12, 11, 0x0, 0xfff8000000000000ULL},
-};
-
-fp_test_args_t xsnmaddXdp_tests[] = {
- {8, 8, 0x0, 0x7ff8000000000000ULL},
- {8, 14, 0x0, 0x7ff0000000000000ULL},
- {8, 6, 0x0, 0xfff0000000000000ULL},
- {8, 5, 0x0, 0x7ff0000000000000ULL},
- {8, 4, 0x0, 0xfff0000000000000ULL},
- {8, 7, 0x0, 0x7ff8000000000000ULL},
- {8, 9, 0x0, 0x7fffffffffffffffULL},
- {8, 11, 0x0, 0x7ff8000000000000ULL},
- {14, 8, 0x0, 0x7ff0000000000000ULL},
- {14, 14, 0x0, 0x40d0650f5a07b353ULL},
- {14, 6, 0x0, 0xc1b0cc9d05eec2a7ULL},
- {14, 5, 0x0, 0x02039a19ca8fcb5fULL},
- {14, 4, 0x0, 0xc1b0cc9d05eec2a7ULL},
- {14, 7, 0x0, 0xfff0000000000000ULL},
- {14, 9, 0x0, 0x7fffffffffffffffULL},
- {14, 11, 0x0, 0x7ff8000000000000ULL},
- {6, 8, 0x0, 0x7ff0000000000000ULL},
- {6, 14, 0x0, 0x40d0650f5a07b353ULL},
- {6, 6, 0x0, 0x8000000000000000ULL},
- {6, 5, 0x0, 0x8000000000000000ULL},
- {6, 4, 0x0, 0x8123214569900000ULL},
- {6, 7, 0x0, 0xfff0000000000000ULL},
- {6, 9, 0x0, 0x7fffffffffffffffULL},
- {6, 11, 0x0, 0x7ff8000000000000ULL},
- {5, 8, 0x0, 0x7ff0000000000000ULL},
- {5, 14, 0x0, 0x40d0650f5a07b353ULL},
- {5, 6, 0x0, 0x0000000000000000ULL},
- {5, 5, 0x0, 0x8000000000000000ULL},
- {5, 4, 0x0, 0x8123214569900000ULL},
- {5, 7, 0x0, 0xfff0000000000000ULL},
- {5, 9, 0x0, 0x7fffffffffffffffULL},
- {5, 11, 0x0, 0x7ff8000000000000ULL},
- {4, 8, 0x0, 0x7ff0000000000000ULL},
- {4, 14, 0x0, 0x40d0650f5a07b353ULL},
- {4, 6, 0x0, 0x02039a19ca8fcb5fULL},
- {4, 5, 0x0, 0x8000000000000000ULL},
- {4, 1, 0x0, 0xc04f000000000000ULL},
- {4, 7, 0x0, 0xfff0000000000000ULL},
- {4, 9, 0x0, 0x7fffffffffffffffULL},
- {4, 11, 0x0, 0x7ff8000000000000ULL},
- {7, 8, 0x0, 0x7ff0000000000000ULL},
- {7, 14, 0x0, 0xfff0000000000000ULL},
- {7, 6, 0x0, 0x7ff0000000000000ULL},
- {7, 5, 0x0, 0xfff0000000000000ULL},
- {7, 4, 0x0, 0x7ff0000000000000ULL},
- {7, 7, 0x0, 0xfff0000000000000ULL},
- {7, 9, 0x0, 0x7fffffffffffffffULL},
- {7, 11, 0x0, 0x7ff8000000000000ULL},
- {10, 8, 0x0, 0xffffffffffffffffULL},
- {10, 14, 0x0, 0xffffffffffffffffULL},
- {10, 6, 0x0, 0xffffffffffffffffULL},
- {10, 5, 0x0, 0xffffffffffffffffULL},
- {10, 4, 0x0, 0xffffffffffffffffULL},
- {10, 7, 0x0, 0xffffffffffffffffULL},
- {10, 9, 0x0, 0xffffffffffffffffULL},
- {10, 11, 0x0, 0xffffffffffffffffULL},
- {12, 8, 0x0, 0xfff8000000000000ULL},
- {12, 14, 0x0, 0xfff8000000000000ULL},
- {12, 6, 0x0, 0xfff8000000000000ULL},
- {12, 5, 0x0, 0xfff8000000000000ULL},
- {12, 4, 0x0, 0xfff8000000000000ULL},
- {12, 7, 0x0, 0xfff8000000000000ULL},
- {12, 9, 0x0, 0xfff8000000000000ULL},
- {12, 11, 0x0, 0xfff8000000000000ULL},
-};
-
-fp_test_args_t xsmuldp_tests[] = {
- {8, 8, 0x0, 0x7ff0000000000000ULL},
- {8, 14, 0x0, 0x7ff0000000000000ULL},
- {8, 6, 0x0, 0x7ff8000000000000ULL},
- {8, 5, 0x0, 0x7ff8000000000000ULL},
- {8, 4, 0x0, 0xfff0000000000000ULL},
- {8, 7, 0x0, 0xfff0000000000000ULL},
- {8, 9, 0x0, 0x7fffffffffffffffULL},
- {8, 11, 0x0, 0x7ff8000000000000ULL},
- {14, 8, 0x0, 0x7ff0000000000000ULL},
- {14, 14, 0x0, 0x41b0cc9d05eec2a7ULL},
- {14, 6, 0x0, 0x0000000000000000ULL},
- {14, 5, 0x0, 0x8000000000000000ULL},
- {14, 4, 0x0, 0x82039a19ca8fcb5fULL},
- {14, 7, 0x0, 0xfff0000000000000ULL},
- {14, 9, 0x0, 0x7fffffffffffffffULL},
- {14, 11, 0x0, 0x7ff8000000000000ULL},
- {6, 8, 0x0, 0x7ff8000000000000ULL},
- {6, 14, 0x0, 0x0000000000000000ULL},
- {6, 6, 0x0, 0x0000000000000000ULL},
- {6, 5, 0x0, 0x8000000000000000ULL},
- {6, 4, 0x0, 0x8000000000000000ULL},
- {6, 7, 0x0, 0x7ff8000000000000ULL},
- {6, 9, 0x0, 0x7fffffffffffffffULL},
- {6, 11, 0x0, 0x7ff8000000000000ULL},
- {5, 8, 0x0, 0x7ff8000000000000ULL},
- {5, 14, 0x0, 0x8000000000000000ULL},
- {5, 6, 0x0, 0x8000000000000000ULL},
- {5, 5, 0x0, 0x0000000000000000ULL},
- {5, 4, 0x0, 0x0000000000000000ULL},
- {5, 7, 0x0, 0x7ff8000000000000ULL},
- {5, 9, 0x0, 0x7fffffffffffffffULL},
- {5, 11, 0x0, 0x7ff8000000000000ULL},
- {4, 8, 0x0, 0xfff0000000000000ULL},
- {4, 14, 0x0, 0x82039a19ca8fcb5fULL},
- {4, 6, 0x0, 0x8000000000000000ULL},
- {4, 5, 0x0, 0x0000000000000000ULL},
- {4, 1, 0x0, 0x0182883b3e438000ULL},
- {4, 7, 0x0, 0x7ff0000000000000ULL},
- {4, 9, 0x0, 0x7fffffffffffffffULL},
- {4, 11, 0x0, 0x7ff8000000000000ULL},
- {7, 8, 0x0, 0xfff0000000000000ULL},
- {7, 14, 0x0, 0xfff0000000000000ULL},
- {7, 6, 0x0, 0x7ff8000000000000ULL},
- {7, 5, 0x0, 0x7ff8000000000000ULL},
- {7, 4, 0x0, 0x7ff0000000000000ULL},
- {7, 7, 0x0, 0x7ff0000000000000ULL},
- {7, 9, 0x0, 0x7fffffffffffffffULL},
- {7, 11, 0x0, 0x7ff8000000000000ULL},
- {10, 8, 0x0, 0xffffffffffffffffULL},
- {10, 14, 0x0, 0xffffffffffffffffULL},
- {10, 6, 0x0, 0xffffffffffffffffULL},
- {10, 5, 0x0, 0xffffffffffffffffULL},
- {10, 4, 0x0, 0xffffffffffffffffULL},
- {10, 7, 0x0, 0xffffffffffffffffULL},
- {10, 9, 0x0, 0xffffffffffffffffULL},
- {10, 11, 0x0, 0xffffffffffffffffULL},
- {12, 8, 0x0, 0xfff8000000000000ULL},
- {12, 14, 0x0, 0xfff8000000000000ULL},
- {12, 6, 0x0, 0xfff8000000000000ULL},
- {12, 5, 0x0, 0xfff8000000000000ULL},
- {12, 4, 0x0, 0xfff8000000000000ULL},
- {12, 7, 0x0, 0xfff8000000000000ULL},
- {12, 9, 0x0, 0xfff8000000000000ULL},
- {12, 11, 0x0, 0xfff8000000000000ULL},
-};
-
-fp_test_args_t xssubdp_tests[] = {
- {8, 8, 0x0, 0x7ff8000000000000ULL},
- {8, 14, 0x0, 0xfff0000000000000ULL},
- {8, 6, 0x0, 0xfff0000000000000ULL},
- {8, 5, 0x0, 0xfff0000000000000ULL},
- {8, 4, 0x0, 0xfff0000000000000ULL},
- {8, 7, 0x0, 0xfff0000000000000ULL},
- {8, 9, 0x0, 0x7fffffffffffffffULL},
- {8, 11, 0x0, 0x7ff8000000000000ULL},
- {14, 8, 0x0, 0x7ff0000000000000ULL},
- {14, 14, 0x0, 0x0000000000000000ULL},
- {14, 6, 0x0, 0xc0d0650f5a07b353ULL},
- {14, 5, 0x0, 0xc0d0650f5a07b353ULL},
- {14, 4, 0x0, 0xc0d0650f5a07b353ULL},
- {14, 7, 0x0, 0xfff0000000000000ULL},
- {14, 9, 0x0, 0x7fffffffffffffffULL},
- {14, 11, 0x0, 0x7ff8000000000000ULL},
- {6, 8, 0x0, 0x7ff0000000000000ULL},
- {6, 14, 0x0, 0x40d0650f5a07b353ULL},
- {6, 6, 0x0, 0x0000000000000000ULL},
- {6, 5, 0x0, 0x8000000000000000ULL},
- {6, 4, 0x0, 0x8123214569900000ULL},
- {6, 7, 0x0, 0xfff0000000000000ULL},
- {6, 9, 0x0, 0x7fffffffffffffffULL},
- {6, 11, 0x0, 0x7ff8000000000000ULL},
- {5, 8, 0x0, 0x7ff0000000000000ULL},
- {5, 14, 0x0, 0x40d0650f5a07b353ULL},
- {5, 6, 0x0, 0x0000000000000000ULL},
- {5, 5, 0x0, 0x0000000000000000ULL},
- {5, 4, 0x0, 0x8123214569900000ULL},
- {5, 7, 0x0, 0xfff0000000000000ULL},
- {5, 9, 0x0, 0x7fffffffffffffffULL},
- {5, 11, 0x0, 0x7ff8000000000000ULL},
- {4, 8, 0x0, 0x7ff0000000000000ULL},
- {4, 14, 0x0, 0x40d0650f5a07b353ULL},
- {4, 6, 0x0, 0x0123214569900000ULL},
- {4, 5, 0x0, 0x0123214569900000ULL},
- {4, 1, 0x0, 0xc04f000000000000ULL},
- {4, 7, 0x0, 0xfff0000000000000ULL},
- {4, 9, 0x0, 0x7fffffffffffffffULL},
- {4, 11, 0x0, 0x7ff8000000000000ULL},
- {7, 8, 0x0, 0x7ff0000000000000ULL},
- {7, 14, 0x0, 0x7ff0000000000000ULL},
- {7, 6, 0x0, 0x7ff0000000000000ULL},
- {7, 5, 0x0, 0x7ff0000000000000ULL},
- {7, 4, 0x0, 0x7ff0000000000000ULL},
- {7, 7, 0x0, 0x7ff8000000000000ULL},
- {7, 9, 0x0, 0x7fffffffffffffffULL},
- {7, 11, 0x0, 0x7ff8000000000000ULL},
- {10, 8, 0x0, 0xffffffffffffffffULL},
- {10, 14, 0x0, 0xffffffffffffffffULL},
- {10, 6, 0x0, 0xffffffffffffffffULL},
- {10, 5, 0x0, 0xffffffffffffffffULL},
- {10, 4, 0x0, 0xffffffffffffffffULL},
- {10, 7, 0x0, 0xffffffffffffffffULL},
- {10, 9, 0x0, 0xffffffffffffffffULL},
- {10, 11, 0x0, 0xffffffffffffffffULL},
- {12, 8, 0x0, 0xfff8000000000000ULL},
- {12, 14, 0x0, 0xfff8000000000000ULL},
- {12, 6, 0x0, 0xfff8000000000000ULL},
- {12, 5, 0x0, 0xfff8000000000000ULL},
- {12, 4, 0x0, 0xfff8000000000000ULL},
- {12, 7, 0x0, 0xfff8000000000000ULL},
- {12, 9, 0x0, 0xfff8000000000000ULL},
- {12, 11, 0x0, 0xfff8000000000000ULL},
-};
-
-
-
-static int nb_special_fargs;
-static double * spec_fargs;
-
-static void build_special_fargs_table(void)
-{
- /* The special floating point values created below are for
- * use in the ftdiv tests for setting the fe_flag and fg_flag,
- * but they can also be used for other tests (e.g., xscmpudp).
- *
- * Note that fl_flag is 'always '1' on ppc64 Linux.
- *
- Entry Sign Exp fraction Special value
- 0 0 3fd 0x8000000000000ULL Positive finite number
- 1 0 404 0xf000000000000ULL ...
- 2 0 001 0x8000000b77501ULL ...
- 3 0 7fe 0x800000000051bULL ...
- 4 0 012 0x3214569900000ULL ...
- 5 0 000 0x0000000000000ULL +0.0 (+zero)
- 6 1 000 0x0000000000000ULL -0.0 (-zero)
- 7 0 7ff 0x0000000000000ULL +infinity
- 8 1 7ff 0x0000000000000ULL -infinity
- 9 0 7ff 0x7FFFFFFFFFFFFULL +QNaN
- 10 1 7ff 0x7FFFFFFFFFFFFULL -QNaN
- 11 0 7ff 0x8000000000000ULL +SNaN
- 12 1 7ff 0x8000000000000ULL -SNaN
- 13 1 000 0x8340000078000ULL Denormalized val (zero exp and non-zero fraction)
- 14 1 40d 0x0650f5a07b353ULL Negative finite number
- */
-
- uint64_t mant;
- uint16_t _exp;
- int s;
- int i = 0;
-
- if (spec_fargs)
- return;
-
- spec_fargs = malloc( 16 * sizeof(double) );
-
- // #0
- s = 0;
- _exp = 0x3fd;
- mant = 0x8000000000000ULL;
- register_farg(&spec_fargs[i++], s, _exp, mant);
-
- // #1
- s = 0;
- _exp = 0x404;
- mant = 0xf000000000000ULL;
- register_farg(&spec_fargs[i++], s, _exp, mant);
-
- /* None of the ftdiv tests succeed.
- * FRA = value #0; FRB = value #1
- * ea_ = -2; e_b = 5
- * fl_flag || fg_flag || fe_flag = 100
- */
-
- /*************************************************
- * fe_flag tests
- *
- *************************************************/
-
- /* fe_flag <- 1 if FRA is a NaN
- * FRA = value #9; FRB = value #1
- * e_a = 1024; e_b = 5
- * fl_flag || fg_flag || fe_flag = 101
- */
-
- /* fe_flag <- 1 if FRB is a NaN
- * FRA = value #1; FRB = value #12
- * e_a = 5; e_b = 1024
- * fl_flag || fg_flag || fe_flag = 101
- */
-
- /* fe_flag <- 1 if e_b <= -1022
- * FRA = value #0; FRB = value #2
- * e_a = -2; e_b = -1022
- * fl_flag || fg_flag || fe_flag = 101
- *
- */
- // #2
- s = 0;
- _exp = 0x001;
- mant = 0x8000000b77501ULL;
- register_farg(&spec_fargs[i++], s, _exp, mant);
-
- /* fe_flag <- 1 if e_b >= 1021
- * FRA = value #1; FRB = value #3
- * e_a = 5; e_b = 1023
- * fl_flag || fg_flag || fe_flag = 101
- */
- // #3
- s = 0;
- _exp = 0x7fe;
- mant = 0x800000000051bULL;
- register_farg(&spec_fargs[i++], s, _exp, mant);
-
- /* fe_flag <- 1 if FRA != 0 && e_a - e_b >= 1023
- * Let FRA = value #3 and FRB be value #0.
- * e_a = 1023; e_b = -2
- * fl_flag || fg_flag || fe_flag = 101
- */
-
- /* fe_flag <- 1 if FRA != 0 && e_a - e_b <= -1023
- * Let FRA = value #0 above and FRB be value #3 above
- * e_a = -2; e_b = 1023
- * fl_flag || fg_flag || fe_flag = 101
- */
-
- /* fe_flag <- 1 if FRA != 0 && e_a <= -970
- * Let FRA = value #4 and FRB be value #0
- * e_a = -1005; e_b = -2
- * fl_flag || fg_flag || fe_flag = 101
- */
- // #4
- s = 0;
- _exp = 0x012;
- mant = 0x3214569900000ULL;
- register_farg(&spec_fargs[i++], s, _exp, mant);
-
- /*************************************************
- * fg_flag tests
- *
- *************************************************/
- /* fg_flag <- 1 if FRA is an Infinity
- * NOTE: FRA = Inf also sets fe_flag
- * Do two tests, using values #7 and #8 (+/- Inf) for FRA.
- * Test 1:
- * Let FRA be value #7 and FRB be value #1
- * e_a = 1024; e_b = 5
- * fl_flag || fg_flag || fe_flag = 111
- *
- * Test 2:
- * Let FRA be value #8 and FRB be value #1
- * e_a = 1024; e_b = 5
- * fl_flag || fg_flag || fe_flag = 111
- *
- */
-
- /* fg_flag <- 1 if FRB is an Infinity
- * NOTE: FRB = Inf also sets fe_flag
- * Let FRA be value #1 and FRB be value #7
- * e_a = 5; e_b = 1024
- * fl_flag || fg_flag || fe_flag = 111
- */
-
- /* fg_flag <- 1 if FRB is denormalized
- * NOTE: e_b < -1022 ==> fe_flag <- 1
- * Let FRA be value #0 and FRB be value #13
- * e_a = -2; e_b = -1023
- * fl_flag || fg_flag || fe_flag = 111
- */
-
- /* fg_flag <- 1 if FRB is +zero
- * NOTE: FRA = Inf also sets fe_flag
- * Let FRA = val #5; FRB = val #5
- * ea_ = -1023; e_b = -1023
- * fl_flag || fg_flag || fe_flag = 111
- */
-
- /* fg_flag <- 1 if FRB is -zero
- * NOTE: FRA = Inf also sets fe_flag
- * Let FRA = val #5; FRB = val #6
- * ea_ = -1023; e_b = -1023
- * fl_flag || fg_flag || fe_flag = 111
- */
-
- /* Special values */
- /* +0.0 : 0 0x000 0x0000000000000 */
- // #5
- s = 0;
- _exp = 0x000;
- mant = 0x0000000000000ULL;
- register_farg(&spec_fargs[i++], s, _exp, mant);
-
- /* -0.0 : 1 0x000 0x0000000000000 */
- // #6
- s = 1;
- _exp = 0x000;
- mant = 0x0000000000000ULL;
- register_farg(&spec_fargs[i++], s, _exp, mant);
-
- /* +infinity : 0 0x7FF 0x0000000000000 */
- // #7
- s = 0;
- _exp = 0x7FF;
- mant = 0x0000000000000ULL;
- register_farg(&spec_fargs[i++], s, _exp, mant);
-
- /* -infinity : 1 0x7FF 0x0000000000000 */
- // #8
- s = 1;
- _exp = 0x7FF;
- mant = 0x0000000000000ULL;
- register_farg(&spec_fargs[i++], s, _exp, mant);
-
- /* +QNaN : 0 0x7FF 0x7FFFFFFFFFFFF */
- // #9
- s = 0;
- _exp = 0x7FF;
- mant = 0x7FFFFFFFFFFFFULL;
- register_farg(&spec_fargs[i++], s, _exp, mant);
-
- /* -QNaN : 1 0x7FF 0x7FFFFFFFFFFFF */
- // #10
- s = 1;
- _exp = 0x7FF;
- mant = 0x7FFFFFFFFFFFFULL;
- register_farg(&spec_fargs[i++], s, _exp, mant);
-
- /* +SNaN : 0 0x7FF 0x8000000000000 */
- // #11
- s = 0;
- _exp = 0x7FF;
- mant = 0x8000000000000ULL;
- register_farg(&spec_fargs[i++], s, _exp, mant);
-
- /* -SNaN : 1 0x7FF 0x8000000000000 */
- // #12
- s = 1;
- _exp = 0x7FF;
- mant = 0x8000000000000ULL;
- register_farg(&spec_fargs[i++], s, _exp, mant);
-
- /* denormalized value */
- // #13
- s = 1;
- _exp = 0x000;
- mant = 0x8340000078000ULL;
- register_farg(&spec_fargs[i++], s, _exp, mant);
-
- /* Negative finite number */
- // #14
- s = 1;
- _exp = 0x40d;
- mant = 0x0650f5a07b353ULL;
- register_farg(&spec_fargs[i++], s, _exp, mant);
-
- nb_special_fargs = i;
-}
-
-
-struct test_table
-{
- test_func_t test_category;
- char * name;
-};
-
-struct p7_fp_test
-{
- test_func_t test_func;
- const char *name;
- int single; // 1=single precision result; 0=double precision result
-};
-
-typedef enum {
- VX_FP_CMP,
- VX_FP_SMA,
- VX_FP_SMS,
- VX_FP_SNMA,
- VX_FP_OTHER
-} vx_fp_test_type;
-
-struct vx_fp_test
-{
- test_func_t test_func;
- const char *name;
- fp_test_args_t * targs;
- int num_tests;
- vx_fp_test_type test_type;
-};
-
-struct xs_conv_test
-{
- test_func_t test_func;
- const char *name;
- unsigned long long * results;
- int num_tests;
-};
-
-typedef enum {
- VSX_LOAD =1,
- VSX_LOAD_SPLAT,
- VSX_STORE
-} vsx_ldst_type;
-
-struct ldst_test
-{
- test_func_t test_func;
- const char *name;
- void * base_addr;
- uint32_t offset;
- int num_words_to_process;
- vsx_ldst_type type;
-};
-
-typedef enum {
- VSX_AND = 1,
- VSX_XOR,
- VSX_ANDC,
- VSX_OR,
- VSX_NOR
-} vsx_log_op;
-
-struct vsx_logic_test
-{
- test_func_t test_func;
- const char *name;
- vsx_log_op op;
-};
-
-struct vsx_move_test
-{
- test_func_t test_func;
- const char *name;
- int xa_idx, xb_idx;
- unsigned long long expected_result;
-};
-
-struct vsx_permute_test
-{
- test_func_t test_func;
- const char *name;
- unsigned int xa[4];
- unsigned int xb[4];
- unsigned int expected_output[4];
-};
-
-static vector unsigned int vec_out, vec_inA, vec_inB;
-
-static void test_lxsdx(void)
-{
- __asm__ __volatile__ ("lxsdx %x0, %1, %2" : "=wa" (vec_out): "b" (r14),"r" (r15));
-}
-
-static void
-test_lxvd2x(void)
-{
- __asm__ __volatile__ ("lxvd2x %x0, %1, %2" : "=wa" (vec_out): "b" (r14),"r" (r15));
-}
-
-static void test_lxvdsx(void)
-{
- __asm__ __volatile__ ("lxvdsx %x0, %1, %2" : "=wa" (vec_out): "b" (r14),"r" (r15));
-}
-
-static void test_lxvw4x(void)
-{
- __asm__ __volatile__ ("lxvw4x %x0, %1, %2" : "=wa" (vec_out): "b" (r14),"r" (r15));
-}
-
-static void test_stxsdx(void)
-{
- __asm__ __volatile__ ("stxsdx %x0, %1, %2" : : "wa" (vec_inA), "b" (r14),"r" (r15));
-}
-
-static void test_stxvd2x(void)
-{
- __asm__ __volatile__ ("stxvd2x %x0, %1, %2" : : "wa" (vec_inA), "b" (r14),"r" (r15));
-}
-
-static void test_stxvw4x(void)
-{
- __asm__ __volatile__ ("stxvw4x %x0, %1, %2" : : "wa" (vec_inA), "b" (r14),"r" (r15));
-}
-
-static void test_xxlxor(void)
-{
- __asm__ __volatile__ ("xxlxor %x0, %x1, %x2" : "=wa" (vec_out): "wa" (vec_inA),"wa" (vec_inB));
-}
-
-static void test_xxlor(void)
-{
- __asm__ __volatile__ ("xxlor %x0, %x1, %x2" : "=wa" (vec_out): "wa" (vec_inA),"wa" (vec_inB));
-}
-
-static void test_xxlnor(void)
-{
- __asm__ __volatile__ ("xxlnor %x0, %x1, %x2" : "=wa" (vec_out): "wa" (vec_inA),"wa" (vec_inB));
-}
-
-static void test_xxland(void)
-{
- __asm__ __volatile__ ("xxland %x0, %x1, %x2" : "=wa" (vec_out): "wa" (vec_inA),"wa" (vec_inB));
-}
-
-static void test_xxlandc(void)
-{
- __asm__ __volatile__ ("xxlandc %x0, %x1, %x2" : "=wa" (vec_out): "wa" (vec_inA),"wa" (vec_inB));
-}
-
-static void test_xxmrghw(void)
-{
- __asm__ __volatile__ ("xxmrghw %x0, %x1, %x2" : "=wa" (vec_out): "wa" (vec_inA),"wa" (vec_inB));
-}
-
-static void test_xxmrglw(void)
-{
- __asm__ __volatile__ ("xxmrglw %x0, %x1, %x2" : "=wa" (vec_out): "wa" (vec_inA),"wa" (vec_inB));
-}
-
-static void test_xxpermdi_00(void)
-{
- __asm__ __volatile__ ("xxpermdi %x0, %x1, %x2, 0x0" : "=wa" (vec_out): "wa" (vec_inA),"wa" (vec_inB));
-}
-
-static void test_xxpermdi_01(void)
-{
- __asm__ __volatile__ ("xxpermdi %x0, %x1, %x2, 0x1" : "=wa" (vec_out): "wa" (vec_inA),"wa" (vec_inB));
-}
-
-static void test_xxpermdi_10(void)
-{
- __asm__ __volatile__ ("xxpermdi %x0, %x1, %x2, 0x2" : "=wa" (vec_out): "wa" (vec_inA),"wa" (vec_inB));
-}
-
-static void test_xxpermdi_11(void)
-{
- __asm__ __volatile__ ("xxpermdi %x0, %x1, %x2, 0x3" : "=wa" (vec_out): "wa" (vec_inA),"wa" (vec_inB));
-}
-
-static void test_xxsldwi_0(void)
-{
- __asm__ __volatile__ ("xxsldwi %x0, %x1, %x2, 0" : "=wa" (vec_out): "wa" (vec_inA),"wa" (vec_inB));
-}
-
-static void test_xxsldwi_1(void)
-{
- __asm__ __volatile__ ("xxsldwi %x0, %x1, %x2, 1" : "=wa" (vec_out): "wa" (vec_inA),"wa" (vec_inB));
-}
-
-static void test_xxsldwi_2(void)
-{
- __asm__ __volatile__ ("xxsldwi %x0, %x1, %x2, 2" : "=wa" (vec_out): "wa" (vec_inA),"wa" (vec_inB));
-}
-
-static void test_xxsldwi_3(void)
-{
- __asm__ __volatile__ ("xxsldwi %x0, %x1, %x2, 3" : "=wa" (vec_out): "wa" (vec_inA),"wa" (vec_inB));
-}
-
-static void test_fcfids (void)
-{
- __asm__ __volatile__ ("fcfids %0, %1" : "=f" (f17): "d" (f14));
-}
-
-static void test_fcfidus (void)
-{
- __asm__ __volatile__ ("fcfidus %0, %1" : "=f" (f17): "d" (f14));
-}
-
-static void test_fcfidu (void)
-{
- __asm__ __volatile__ ("fcfidu %0, %1" : "=f" (f17): "d" (f14));
-}
-
-static void test_xsabsdp (void)
-{
- __asm__ __volatile__ ("xsabsdp %x0, %x1" : "=wa" (vec_out): "wa" (vec_inB));
-}
-
-static void test_xscpsgndp (void)
-{
- __asm__ __volatile__ ("xscpsgndp %x0, %x1, %x2" : "=wa" (vec_out): "wa" (vec_inA),"wa" (vec_inB));
-}
-
-static void test_xsnabsdp (void)
-{
- __asm__ __volatile__ ("xsnabsdp %x0, %x1" : "=wa" (vec_out): "wa" (vec_inB));
-}
-
-static void test_xsnegdp (void)
-{
- __asm__ __volatile__ ("xsnegdp %x0, %x1" : "=wa" (vec_out): "wa" (vec_inB));
-}
-
-static int do_cmpudp;
-static void test_xscmp (void)
-{
- if (do_cmpudp)
- __asm__ __volatile__ ("xscmpudp cr1, %x0, %x1" : : "wa" (vec_inA),"wa" (vec_inB));
- else
- __asm__ __volatile__ ("xscmpodp cr1, %x0, %x1" : : "wa" (vec_inA),"wa" (vec_inB));
-}
-
-static void test_xsadddp(void)
-{
- __asm__ __volatile__ ("xsadddp %x0, %x1, %x2" : "=wa" (vec_out): "wa" (vec_inA),"wa" (vec_inB));
-}
-
-static void test_xsdivdp(void)
-{
- __asm__ __volatile__ ("xsdivdp %x0, %x1, %x2" : "=wa" (vec_out): "wa" (vec_inA),"wa" (vec_inB));
-}
-
-static int do_adp;
-static void test_xsmadd(void)
-{
- if (do_adp)
- __asm__ __volatile__ ("xsmaddadp %x0, %x1, %x2" : "+wa" (vec_out): "wa" (vec_inA),"wa" (vec_inB));
- else
- __asm_...
[truncated message content] |