valgrind/vg_bug270794_r11697.patch

7634 lines
375 KiB
Diff

Index: configure.in
===================================================================
--- configure.in.orig
+++ configure.in
@@ -968,6 +968,38 @@ CFLAGS=$safe_CFLAGS
AM_CONDITIONAL([HAS_ALTIVEC], [test x$ac_have_altivec = xyes])
+# Check that both: the compiler supports -mvsx and that the assembler
+# understands VSX instructions. If either of those doesn't work,
+# conclude that we can't do VSX. NOTE: basically this is a kludge
+# in that it conflates two things that should be separate -- whether
+# the compiler understands the flag vs whether the assembler
+# understands the opcodes. This really ought to be cleaned up
+# and done properly, like it is for x86/x86_64.
+
+AC_MSG_CHECKING([for VSX])
+
+safe_CFLAGS=$CFLAGS
+CFLAGS="-mvsx"
+
+AC_TRY_COMPILE(
+[
+#include <altivec.h>
+], [
+ vector unsigned int v;
+ __asm__ __volatile__("xsmaddadp %vs32, %vs32, %vs33" ::: "memory","cc");
+],
+[
+ac_have_vsx=yes
+AC_MSG_RESULT([yes])
+], [
+ac_have_vsx=no
+AC_MSG_RESULT([no])
+])
+CFLAGS=$safe_CFLAGS
+
+AM_CONDITIONAL(HAS_VSX, test x$ac_have_vsx = xyes)
+
+
# Check for pthread_create@GLIBC2.0
AC_MSG_CHECKING([for pthread_create@GLIBC2.0()])
Index: coregrind/m_coredump/coredump-elf.c
===================================================================
--- coregrind/m_coredump/coredump-elf.c.orig
+++ coregrind/m_coredump/coredump-elf.c
@@ -410,8 +410,9 @@ static void fill_fpu(const ThreadState *
#elif defined(VGP_ppc32_linux)
/* The guest state has the FPR fields declared as ULongs, so need
- to fish out the values without converting them. */
-# define DO(n) (*fpu)[n] = *(double*)(&arch->vex.guest_FPR##n)
+ to fish out the values without converting them.
+ NOTE: The 32 FP registers map to the first 32 VSX registers.*/
+# define DO(n) (*fpu)[n] = *(double*)(&arch->vex.guest_VSR##n)
DO(0); DO(1); DO(2); DO(3); DO(4); DO(5); DO(6); DO(7);
DO(8); DO(9); DO(10); DO(11); DO(12); DO(13); DO(14); DO(15);
DO(16); DO(17); DO(18); DO(19); DO(20); DO(21); DO(22); DO(23);
@@ -420,8 +421,9 @@ static void fill_fpu(const ThreadState *
#elif defined(VGP_ppc64_linux)
/* The guest state has the FPR fields declared as ULongs, so need
- to fish out the values without converting them. */
-# define DO(n) (*fpu)[n] = *(double*)(&arch->vex.guest_FPR##n)
+ to fish out the values without converting them.
+ NOTE: The 32 FP registers map to the first 32 VSX registers.*/
+# define DO(n) (*fpu)[n] = *(double*)(&arch->vex.guest_VSR##n)
DO(0); DO(1); DO(2); DO(3); DO(4); DO(5); DO(6); DO(7);
DO(8); DO(9); DO(10); DO(11); DO(12); DO(13); DO(14); DO(15);
DO(16); DO(17); DO(18); DO(19); DO(20); DO(21); DO(22); DO(23);
Index: coregrind/m_machine.c
===================================================================
--- coregrind/m_machine.c.orig
+++ coregrind/m_machine.c
@@ -652,7 +652,7 @@ Bool VG_(machine_get_hwcaps)( void )
vki_sigaction_fromK_t saved_sigill_act, saved_sigfpe_act;
vki_sigaction_toK_t tmp_sigill_act, tmp_sigfpe_act;
- volatile Bool have_F, have_V, have_FX, have_GX;
+ volatile Bool have_F, have_V, have_FX, have_GX, have_VX;
Int r;
/* This is a kludge. Really we ought to back-convert saved_act
@@ -741,8 +741,9 @@ Bool VG_(machine_get_hwcaps)( void )
vg_assert(r == 0);
r = VG_(sigprocmask)(VKI_SIG_SETMASK, &saved_set, NULL);
vg_assert(r == 0);
- VG_(debugLog)(1, "machine", "F %d V %d FX %d GX %d\n",
- (Int)have_F, (Int)have_V, (Int)have_FX, (Int)have_GX);
+ VG_(debugLog)(1, "machine", "F %d V %d FX %d GX %d VX %d\n",
+ (Int)have_F, (Int)have_V, (Int)have_FX,
+ (Int)have_GX, (Int)have_VX);
/* Make FP a prerequisite for VMX (bogusly so), and for FX and GX. */
if (have_V && !have_F)
have_V = False;
@@ -761,6 +762,7 @@ Bool VG_(machine_get_hwcaps)( void )
if (have_V) vai.hwcaps |= VEX_HWCAPS_PPC32_V;
if (have_FX) vai.hwcaps |= VEX_HWCAPS_PPC32_FX;
if (have_GX) vai.hwcaps |= VEX_HWCAPS_PPC32_GX;
+ if (have_VX) vai.hwcaps |= VEX_HWCAPS_PPC32_VX;
/* But we're not done yet: VG_(machine_ppc32_set_clszB) must be
called before we're ready to go. */
@@ -774,7 +776,7 @@ Bool VG_(machine_get_hwcaps)( void )
vki_sigaction_fromK_t saved_sigill_act, saved_sigfpe_act;
vki_sigaction_toK_t tmp_sigill_act, tmp_sigfpe_act;
- volatile Bool have_F, have_V, have_FX, have_GX;
+ volatile Bool have_F, have_V, have_FX, have_GX, have_VX;
Int r;
/* This is a kludge. Really we ought to back-convert saved_act
@@ -845,6 +847,23 @@ Bool VG_(machine_get_hwcaps)( void )
__asm__ __volatile__(".long 0xFC000034"); /*frsqrte 0,0*/
}
+ /* VSX support implies Power ISA 2.06 */
+ have_VX = True;
+ if (VG_MINIMAL_SETJMP(env_unsup_insn)) {
+ have_VX = False;
+ } else {
+ __asm__ __volatile__(".long 0xf0000564"); /* xsabsdp XT,XB */
+ }
+
+
+ /* VSX support implies Power ISA 2.06 */
+ have_VX = True;
+ if (VG_MINIMAL_SETJMP(env_unsup_insn)) {
+ have_VX = False;
+ } else {
+ __asm__ __volatile__(".long 0xf0000564"); /* xsabsdp XT,XB */
+ }
+
/* determine dcbz/dcbzl sizes while we still have the signal
* handlers registered */
find_ppc_dcbz_sz(&vai);
@@ -852,8 +871,9 @@ Bool VG_(machine_get_hwcaps)( void )
VG_(sigaction)(VKI_SIGILL, &saved_sigill_act, NULL);
VG_(sigaction)(VKI_SIGFPE, &saved_sigfpe_act, NULL);
VG_(sigprocmask)(VKI_SIG_SETMASK, &saved_set, NULL);
- VG_(debugLog)(1, "machine", "F %d V %d FX %d GX %d\n",
- (Int)have_F, (Int)have_V, (Int)have_FX, (Int)have_GX);
+ VG_(debugLog)(1, "machine", "F %d V %d FX %d GX %d VX %d\n",
+ (Int)have_F, (Int)have_V, (Int)have_FX,
+ (Int)have_GX, (Int)have_VX);
/* on ppc64, if we don't even have FP, just give up. */
if (!have_F)
return False;
@@ -866,6 +886,7 @@ Bool VG_(machine_get_hwcaps)( void )
if (have_V) vai.hwcaps |= VEX_HWCAPS_PPC64_V;
if (have_FX) vai.hwcaps |= VEX_HWCAPS_PPC64_FX;
if (have_GX) vai.hwcaps |= VEX_HWCAPS_PPC64_GX;
+ if (have_VX) vai.hwcaps |= VEX_HWCAPS_PPC64_VX;
/* But we're not done yet: VG_(machine_ppc64_set_clszB) must be
called before we're ready to go. */
Index: coregrind/m_scheduler/scheduler.c
===================================================================
--- coregrind/m_scheduler/scheduler.c.orig
+++ coregrind/m_scheduler/scheduler.c
@@ -658,13 +658,13 @@ static void do_pre_run_checks ( ThreadSt
# if defined(VGA_ppc32) || defined(VGA_ppc64)
/* ppc guest_state vector regs must be 16 byte aligned for
loads/stores. This is important! */
- vg_assert(VG_IS_16_ALIGNED(& tst->arch.vex.guest_VR0));
- vg_assert(VG_IS_16_ALIGNED(& tst->arch.vex_shadow1.guest_VR0));
- vg_assert(VG_IS_16_ALIGNED(& tst->arch.vex_shadow2.guest_VR0));
+ vg_assert(VG_IS_16_ALIGNED(& tst->arch.vex.guest_VSR0));
+ vg_assert(VG_IS_16_ALIGNED(& tst->arch.vex_shadow1.guest_VSR0));
+ vg_assert(VG_IS_16_ALIGNED(& tst->arch.vex_shadow2.guest_VSR0));
/* be extra paranoid .. */
- vg_assert(VG_IS_16_ALIGNED(& tst->arch.vex.guest_VR1));
- vg_assert(VG_IS_16_ALIGNED(& tst->arch.vex_shadow1.guest_VR1));
- vg_assert(VG_IS_16_ALIGNED(& tst->arch.vex_shadow2.guest_VR1));
+ vg_assert(VG_IS_16_ALIGNED(& tst->arch.vex.guest_VSR1));
+ vg_assert(VG_IS_16_ALIGNED(& tst->arch.vex_shadow1.guest_VSR1));
+ vg_assert(VG_IS_16_ALIGNED(& tst->arch.vex_shadow2.guest_VSR1));
# endif
# if defined(VGA_arm)
Index: exp-ptrcheck/h_main.c
===================================================================
--- exp-ptrcheck/h_main.c.orig
+++ exp-ptrcheck/h_main.c
@@ -1574,77 +1574,118 @@ static void get_IntRegInfo ( /*OUT*/IntR
if (o == GOF(CR7_0)) goto none;
}
+ // With ISA 2.06, the "Vector-Scalar Floating-point" category
+ // provides facilities to support vector and scalar binary floating-
+ // point operations. A unified register file is an integral part
+ // of this new facility, combining floating point and vector registers
+ // using a 64x128-bit vector. These are referred to as VSR[0..63].
+ // The floating point registers are now mapped into double word element 0
+ // of VSR[0..31]. The 32x128-bit vector registers defined by the "Vector
+ // Facility [Category: Vector]" are now mapped to VSR[32..63].
+
/* Exact accesses to FP registers */
- if (o == GOF(FPR0) && is8) goto none;
- if (o == GOF(FPR1) && is8) goto none;
- if (o == GOF(FPR2) && is8) goto none;
- if (o == GOF(FPR3) && is8) goto none;
- if (o == GOF(FPR4) && is8) goto none;
- if (o == GOF(FPR5) && is8) goto none;
- if (o == GOF(FPR6) && is8) goto none;
- if (o == GOF(FPR7) && is8) goto none;
- if (o == GOF(FPR8) && is8) goto none;
- if (o == GOF(FPR9) && is8) goto none;
- if (o == GOF(FPR10) && is8) goto none;
- if (o == GOF(FPR11) && is8) goto none;
- if (o == GOF(FPR12) && is8) goto none;
- if (o == GOF(FPR13) && is8) goto none;
- if (o == GOF(FPR14) && is8) goto none;
- if (o == GOF(FPR15) && is8) goto none;
- if (o == GOF(FPR16) && is8) goto none;
- if (o == GOF(FPR17) && is8) goto none;
- if (o == GOF(FPR18) && is8) goto none;
- if (o == GOF(FPR19) && is8) goto none;
- if (o == GOF(FPR20) && is8) goto none;
- if (o == GOF(FPR21) && is8) goto none;
- if (o == GOF(FPR22) && is8) goto none;
- if (o == GOF(FPR23) && is8) goto none;
- if (o == GOF(FPR24) && is8) goto none;
- if (o == GOF(FPR25) && is8) goto none;
- if (o == GOF(FPR26) && is8) goto none;
- if (o == GOF(FPR27) && is8) goto none;
- if (o == GOF(FPR28) && is8) goto none;
- if (o == GOF(FPR29) && is8) goto none;
- if (o == GOF(FPR30) && is8) goto none;
- if (o == GOF(FPR31) && is8) goto none;
+ if (o == GOF(VSR0) && is8) goto none;
+ if (o == GOF(VSR1) && is8) goto none;
+ if (o == GOF(VSR2) && is8) goto none;
+ if (o == GOF(VSR3) && is8) goto none;
+ if (o == GOF(VSR4) && is8) goto none;
+ if (o == GOF(VSR5) && is8) goto none;
+ if (o == GOF(VSR6) && is8) goto none;
+ if (o == GOF(VSR7) && is8) goto none;
+ if (o == GOF(VSR8) && is8) goto none;
+ if (o == GOF(VSR9) && is8) goto none;
+ if (o == GOF(VSR10) && is8) goto none;
+ if (o == GOF(VSR11) && is8) goto none;
+ if (o == GOF(VSR12) && is8) goto none;
+ if (o == GOF(VSR13) && is8) goto none;
+ if (o == GOF(VSR14) && is8) goto none;
+ if (o == GOF(VSR15) && is8) goto none;
+ if (o == GOF(VSR16) && is8) goto none;
+ if (o == GOF(VSR17) && is8) goto none;
+ if (o == GOF(VSR18) && is8) goto none;
+ if (o == GOF(VSR19) && is8) goto none;
+ if (o == GOF(VSR20) && is8) goto none;
+ if (o == GOF(VSR21) && is8) goto none;
+ if (o == GOF(VSR22) && is8) goto none;
+ if (o == GOF(VSR23) && is8) goto none;
+ if (o == GOF(VSR24) && is8) goto none;
+ if (o == GOF(VSR25) && is8) goto none;
+ if (o == GOF(VSR26) && is8) goto none;
+ if (o == GOF(VSR27) && is8) goto none;
+ if (o == GOF(VSR28) && is8) goto none;
+ if (o == GOF(VSR29) && is8) goto none;
+ if (o == GOF(VSR30) && is8) goto none;
+ if (o == GOF(VSR31) && is8) goto none;
/* FP admin related */
if (o == GOF(FPROUND) && is4) goto none;
if (o == GOF(EMWARN) && is4) goto none;
- /* Altivec registers */
- if (o == GOF(VR0) && sz == 16) goto none;
- if (o == GOF(VR1) && sz == 16) goto none;
- if (o == GOF(VR2) && sz == 16) goto none;
- if (o == GOF(VR3) && sz == 16) goto none;
- if (o == GOF(VR4) && sz == 16) goto none;
- if (o == GOF(VR5) && sz == 16) goto none;
- if (o == GOF(VR6) && sz == 16) goto none;
- if (o == GOF(VR7) && sz == 16) goto none;
- if (o == GOF(VR8) && sz == 16) goto none;
- if (o == GOF(VR9) && sz == 16) goto none;
- if (o == GOF(VR10) && sz == 16) goto none;
- if (o == GOF(VR11) && sz == 16) goto none;
- if (o == GOF(VR12) && sz == 16) goto none;
- if (o == GOF(VR13) && sz == 16) goto none;
- if (o == GOF(VR14) && sz == 16) goto none;
- if (o == GOF(VR15) && sz == 16) goto none;
- if (o == GOF(VR16) && sz == 16) goto none;
- if (o == GOF(VR17) && sz == 16) goto none;
- if (o == GOF(VR18) && sz == 16) goto none;
- if (o == GOF(VR19) && sz == 16) goto none;
- if (o == GOF(VR20) && sz == 16) goto none;
- if (o == GOF(VR21) && sz == 16) goto none;
- if (o == GOF(VR22) && sz == 16) goto none;
- if (o == GOF(VR23) && sz == 16) goto none;
- if (o == GOF(VR24) && sz == 16) goto none;
- if (o == GOF(VR25) && sz == 16) goto none;
- if (o == GOF(VR26) && sz == 16) goto none;
- if (o == GOF(VR27) && sz == 16) goto none;
- if (o == GOF(VR28) && sz == 16) goto none;
- if (o == GOF(VR29) && sz == 16) goto none;
- if (o == GOF(VR30) && sz == 16) goto none;
- if (o == GOF(VR31) && sz == 16) goto none;
+ /* Vector registers */
+ if (o == GOF(VSR0) && sz == 16) goto none;
+ if (o == GOF(VSR1) && sz == 16) goto none;
+ if (o == GOF(VSR2) && sz == 16) goto none;
+ if (o == GOF(VSR3) && sz == 16) goto none;
+ if (o == GOF(VSR4) && sz == 16) goto none;
+ if (o == GOF(VSR5) && sz == 16) goto none;
+ if (o == GOF(VSR6) && sz == 16) goto none;
+ if (o == GOF(VSR7) && sz == 16) goto none;
+ if (o == GOF(VSR8) && sz == 16) goto none;
+ if (o == GOF(VSR9) && sz == 16) goto none;
+ if (o == GOF(VSR10) && sz == 16) goto none;
+ if (o == GOF(VSR11) && sz == 16) goto none;
+ if (o == GOF(VSR12) && sz == 16) goto none;
+ if (o == GOF(VSR13) && sz == 16) goto none;
+ if (o == GOF(VSR14) && sz == 16) goto none;
+ if (o == GOF(VSR15) && sz == 16) goto none;
+ if (o == GOF(VSR16) && sz == 16) goto none;
+ if (o == GOF(VSR17) && sz == 16) goto none;
+ if (o == GOF(VSR18) && sz == 16) goto none;
+ if (o == GOF(VSR19) && sz == 16) goto none;
+ if (o == GOF(VSR20) && sz == 16) goto none;
+ if (o == GOF(VSR21) && sz == 16) goto none;
+ if (o == GOF(VSR22) && sz == 16) goto none;
+ if (o == GOF(VSR23) && sz == 16) goto none;
+ if (o == GOF(VSR24) && sz == 16) goto none;
+ if (o == GOF(VSR25) && sz == 16) goto none;
+ if (o == GOF(VSR26) && sz == 16) goto none;
+ if (o == GOF(VSR27) && sz == 16) goto none;
+ if (o == GOF(VSR28) && sz == 16) goto none;
+ if (o == GOF(VSR29) && sz == 16) goto none;
+ if (o == GOF(VSR30) && sz == 16) goto none;
+ if (o == GOF(VSR31) && sz == 16) goto none;
+ if (o == GOF(VSR32) && sz == 16) goto none;
+ if (o == GOF(VSR33) && sz == 16) goto none;
+ if (o == GOF(VSR34) && sz == 16) goto none;
+ if (o == GOF(VSR35) && sz == 16) goto none;
+ if (o == GOF(VSR36) && sz == 16) goto none;
+ if (o == GOF(VSR37) && sz == 16) goto none;
+ if (o == GOF(VSR38) && sz == 16) goto none;
+ if (o == GOF(VSR39) && sz == 16) goto none;
+ if (o == GOF(VSR40) && sz == 16) goto none;
+ if (o == GOF(VSR41) && sz == 16) goto none;
+ if (o == GOF(VSR42) && sz == 16) goto none;
+ if (o == GOF(VSR43) && sz == 16) goto none;
+ if (o == GOF(VSR44) && sz == 16) goto none;
+ if (o == GOF(VSR45) && sz == 16) goto none;
+ if (o == GOF(VSR46) && sz == 16) goto none;
+ if (o == GOF(VSR47) && sz == 16) goto none;
+ if (o == GOF(VSR48) && sz == 16) goto none;
+ if (o == GOF(VSR49) && sz == 16) goto none;
+ if (o == GOF(VSR50) && sz == 16) goto none;
+ if (o == GOF(VSR51) && sz == 16) goto none;
+ if (o == GOF(VSR52) && sz == 16) goto none;
+ if (o == GOF(VSR53) && sz == 16) goto none;
+ if (o == GOF(VSR54) && sz == 16) goto none;
+ if (o == GOF(VSR55) && sz == 16) goto none;
+ if (o == GOF(VSR56) && sz == 16) goto none;
+ if (o == GOF(VSR57) && sz == 16) goto none;
+ if (o == GOF(VSR58) && sz == 16) goto none;
+ if (o == GOF(VSR59) && sz == 16) goto none;
+ if (o == GOF(VSR60) && sz == 16) goto none;
+ if (o == GOF(VSR61) && sz == 16) goto none;
+ if (o == GOF(VSR62) && sz == 16) goto none;
+ if (o == GOF(VSR63) && sz == 16) goto none;
/* Altivec admin related */
if (o == GOF(VRSAVE) && is4) goto none;
@@ -1737,77 +1778,118 @@ static void get_IntRegInfo ( /*OUT*/IntR
if (o == GOF(CR7_0)) goto none;
}
+ // With ISA 2.06, the "Vector-Scalar Floating-point" category
+ // provides facilities to support vector and scalar binary floating-
+ // point operations. A unified register file is an integral part
+ // of this new facility, combining floating point and vector registers
+ // using a 64x128-bit vector. These are referred to as VSR[0..63].
+ // The floating point registers are now mapped into double word element 0
+ // of VSR[0..31]. The 32x128-bit vector registers defined by the "Vector
+ // Facility [Category: Vector]" are now mapped to VSR[32..63].
+
/* Exact accesses to FP registers */
- if (o == GOF(FPR0) && is8) goto none;
- if (o == GOF(FPR1) && is8) goto none;
- if (o == GOF(FPR2) && is8) goto none;
- if (o == GOF(FPR3) && is8) goto none;
- if (o == GOF(FPR4) && is8) goto none;
- if (o == GOF(FPR5) && is8) goto none;
- if (o == GOF(FPR6) && is8) goto none;
- if (o == GOF(FPR7) && is8) goto none;
- if (o == GOF(FPR8) && is8) goto none;
- if (o == GOF(FPR9) && is8) goto none;
- if (o == GOF(FPR10) && is8) goto none;
- if (o == GOF(FPR11) && is8) goto none;
- if (o == GOF(FPR12) && is8) goto none;
- if (o == GOF(FPR13) && is8) goto none;
- if (o == GOF(FPR14) && is8) goto none;
- if (o == GOF(FPR15) && is8) goto none;
- if (o == GOF(FPR16) && is8) goto none;
- if (o == GOF(FPR17) && is8) goto none;
- if (o == GOF(FPR18) && is8) goto none;
- if (o == GOF(FPR19) && is8) goto none;
- if (o == GOF(FPR20) && is8) goto none;
- if (o == GOF(FPR21) && is8) goto none;
- if (o == GOF(FPR22) && is8) goto none;
- if (o == GOF(FPR23) && is8) goto none;
- if (o == GOF(FPR24) && is8) goto none;
- if (o == GOF(FPR25) && is8) goto none;
- if (o == GOF(FPR26) && is8) goto none;
- if (o == GOF(FPR27) && is8) goto none;
- if (o == GOF(FPR28) && is8) goto none;
- if (o == GOF(FPR29) && is8) goto none;
- if (o == GOF(FPR30) && is8) goto none;
- if (o == GOF(FPR31) && is8) goto none;
+ if (o == GOF(VSR0) && is8) goto none;
+ if (o == GOF(VSR1) && is8) goto none;
+ if (o == GOF(VSR2) && is8) goto none;
+ if (o == GOF(VSR3) && is8) goto none;
+ if (o == GOF(VSR4) && is8) goto none;
+ if (o == GOF(VSR5) && is8) goto none;
+ if (o == GOF(VSR6) && is8) goto none;
+ if (o == GOF(VSR7) && is8) goto none;
+ if (o == GOF(VSR8) && is8) goto none;
+ if (o == GOF(VSR9) && is8) goto none;
+ if (o == GOF(VSR10) && is8) goto none;
+ if (o == GOF(VSR11) && is8) goto none;
+ if (o == GOF(VSR12) && is8) goto none;
+ if (o == GOF(VSR13) && is8) goto none;
+ if (o == GOF(VSR14) && is8) goto none;
+ if (o == GOF(VSR15) && is8) goto none;
+ if (o == GOF(VSR16) && is8) goto none;
+ if (o == GOF(VSR17) && is8) goto none;
+ if (o == GOF(VSR18) && is8) goto none;
+ if (o == GOF(VSR19) && is8) goto none;
+ if (o == GOF(VSR20) && is8) goto none;
+ if (o == GOF(VSR21) && is8) goto none;
+ if (o == GOF(VSR22) && is8) goto none;
+ if (o == GOF(VSR23) && is8) goto none;
+ if (o == GOF(VSR24) && is8) goto none;
+ if (o == GOF(VSR25) && is8) goto none;
+ if (o == GOF(VSR26) && is8) goto none;
+ if (o == GOF(VSR27) && is8) goto none;
+ if (o == GOF(VSR28) && is8) goto none;
+ if (o == GOF(VSR29) && is8) goto none;
+ if (o == GOF(VSR30) && is8) goto none;
+ if (o == GOF(VSR31) && is8) goto none;
/* FP admin related */
if (o == GOF(FPROUND) && is4) goto none;
if (o == GOF(EMWARN) && is4) goto none;
- /* Altivec registers */
- if (o == GOF(VR0) && sz == 16) goto none;
- if (o == GOF(VR1) && sz == 16) goto none;
- if (o == GOF(VR2) && sz == 16) goto none;
- if (o == GOF(VR3) && sz == 16) goto none;
- if (o == GOF(VR4) && sz == 16) goto none;
- if (o == GOF(VR5) && sz == 16) goto none;
- if (o == GOF(VR6) && sz == 16) goto none;
- if (o == GOF(VR7) && sz == 16) goto none;
- if (o == GOF(VR8) && sz == 16) goto none;
- if (o == GOF(VR9) && sz == 16) goto none;
- if (o == GOF(VR10) && sz == 16) goto none;
- if (o == GOF(VR11) && sz == 16) goto none;
- if (o == GOF(VR12) && sz == 16) goto none;
- if (o == GOF(VR13) && sz == 16) goto none;
- if (o == GOF(VR14) && sz == 16) goto none;
- if (o == GOF(VR15) && sz == 16) goto none;
- if (o == GOF(VR16) && sz == 16) goto none;
- if (o == GOF(VR17) && sz == 16) goto none;
- if (o == GOF(VR18) && sz == 16) goto none;
- if (o == GOF(VR19) && sz == 16) goto none;
- if (o == GOF(VR20) && sz == 16) goto none;
- if (o == GOF(VR21) && sz == 16) goto none;
- if (o == GOF(VR22) && sz == 16) goto none;
- if (o == GOF(VR23) && sz == 16) goto none;
- if (o == GOF(VR24) && sz == 16) goto none;
- if (o == GOF(VR25) && sz == 16) goto none;
- if (o == GOF(VR26) && sz == 16) goto none;
- if (o == GOF(VR27) && sz == 16) goto none;
- if (o == GOF(VR28) && sz == 16) goto none;
- if (o == GOF(VR29) && sz == 16) goto none;
- if (o == GOF(VR30) && sz == 16) goto none;
- if (o == GOF(VR31) && sz == 16) goto none;
+ /* Vector registers */
+ if (o == GOF(VSR0) && sz == 16) goto none;
+ if (o == GOF(VSR1) && sz == 16) goto none;
+ if (o == GOF(VSR2) && sz == 16) goto none;
+ if (o == GOF(VSR3) && sz == 16) goto none;
+ if (o == GOF(VSR4) && sz == 16) goto none;
+ if (o == GOF(VSR5) && sz == 16) goto none;
+ if (o == GOF(VSR6) && sz == 16) goto none;
+ if (o == GOF(VSR7) && sz == 16) goto none;
+ if (o == GOF(VSR8) && sz == 16) goto none;
+ if (o == GOF(VSR9) && sz == 16) goto none;
+ if (o == GOF(VSR10) && sz == 16) goto none;
+ if (o == GOF(VSR11) && sz == 16) goto none;
+ if (o == GOF(VSR12) && sz == 16) goto none;
+ if (o == GOF(VSR13) && sz == 16) goto none;
+ if (o == GOF(VSR14) && sz == 16) goto none;
+ if (o == GOF(VSR15) && sz == 16) goto none;
+ if (o == GOF(VSR16) && sz == 16) goto none;
+ if (o == GOF(VSR17) && sz == 16) goto none;
+ if (o == GOF(VSR18) && sz == 16) goto none;
+ if (o == GOF(VSR19) && sz == 16) goto none;
+ if (o == GOF(VSR20) && sz == 16) goto none;
+ if (o == GOF(VSR21) && sz == 16) goto none;
+ if (o == GOF(VSR22) && sz == 16) goto none;
+ if (o == GOF(VSR23) && sz == 16) goto none;
+ if (o == GOF(VSR24) && sz == 16) goto none;
+ if (o == GOF(VSR25) && sz == 16) goto none;
+ if (o == GOF(VSR26) && sz == 16) goto none;
+ if (o == GOF(VSR27) && sz == 16) goto none;
+ if (o == GOF(VSR28) && sz == 16) goto none;
+ if (o == GOF(VSR29) && sz == 16) goto none;
+ if (o == GOF(VSR30) && sz == 16) goto none;
+ if (o == GOF(VSR31) && sz == 16) goto none;
+ if (o == GOF(VSR32) && sz == 16) goto none;
+ if (o == GOF(VSR33) && sz == 16) goto none;
+ if (o == GOF(VSR34) && sz == 16) goto none;
+ if (o == GOF(VSR35) && sz == 16) goto none;
+ if (o == GOF(VSR36) && sz == 16) goto none;
+ if (o == GOF(VSR37) && sz == 16) goto none;
+ if (o == GOF(VSR38) && sz == 16) goto none;
+ if (o == GOF(VSR39) && sz == 16) goto none;
+ if (o == GOF(VSR40) && sz == 16) goto none;
+ if (o == GOF(VSR41) && sz == 16) goto none;
+ if (o == GOF(VSR42) && sz == 16) goto none;
+ if (o == GOF(VSR43) && sz == 16) goto none;
+ if (o == GOF(VSR44) && sz == 16) goto none;
+ if (o == GOF(VSR45) && sz == 16) goto none;
+ if (o == GOF(VSR46) && sz == 16) goto none;
+ if (o == GOF(VSR47) && sz == 16) goto none;
+ if (o == GOF(VSR48) && sz == 16) goto none;
+ if (o == GOF(VSR49) && sz == 16) goto none;
+ if (o == GOF(VSR50) && sz == 16) goto none;
+ if (o == GOF(VSR51) && sz == 16) goto none;
+ if (o == GOF(VSR52) && sz == 16) goto none;
+ if (o == GOF(VSR53) && sz == 16) goto none;
+ if (o == GOF(VSR54) && sz == 16) goto none;
+ if (o == GOF(VSR55) && sz == 16) goto none;
+ if (o == GOF(VSR56) && sz == 16) goto none;
+ if (o == GOF(VSR57) && sz == 16) goto none;
+ if (o == GOF(VSR58) && sz == 16) goto none;
+ if (o == GOF(VSR59) && sz == 16) goto none;
+ if (o == GOF(VSR60) && sz == 16) goto none;
+ if (o == GOF(VSR61) && sz == 16) goto none;
+ if (o == GOF(VSR62) && sz == 16) goto none;
+ if (o == GOF(VSR63) && sz == 16) goto none;
/* Altivec admin related */
if (o == GOF(VRSAVE) && is4) goto none;
Index: memcheck/mc_machine.c
===================================================================
--- memcheck/mc_machine.c.orig
+++ memcheck/mc_machine.c
@@ -200,98 +200,139 @@ static Int get_otrack_shadow_offset_wrk
if (o == GOF(VRSAVE) && sz == 4) return -1;
if (o == GOF(REDIR_SP) && sz == 8) return -1;
- tl_assert(SZB(FPR0) == 8);
- if (o == GOF(FPR0) && sz == 8) return o;
- if (o == GOF(FPR1) && sz == 8) return o;
- if (o == GOF(FPR2) && sz == 8) return o;
- if (o == GOF(FPR3) && sz == 8) return o;
- if (o == GOF(FPR4) && sz == 8) return o;
- if (o == GOF(FPR5) && sz == 8) return o;
- if (o == GOF(FPR6) && sz == 8) return o;
- if (o == GOF(FPR7) && sz == 8) return o;
- if (o == GOF(FPR8) && sz == 8) return o;
- if (o == GOF(FPR9) && sz == 8) return o;
- if (o == GOF(FPR10) && sz == 8) return o;
- if (o == GOF(FPR11) && sz == 8) return o;
- if (o == GOF(FPR12) && sz == 8) return o;
- if (o == GOF(FPR13) && sz == 8) return o;
- if (o == GOF(FPR14) && sz == 8) return o;
- if (o == GOF(FPR15) && sz == 8) return o;
- if (o == GOF(FPR16) && sz == 8) return o;
- if (o == GOF(FPR17) && sz == 8) return o;
- if (o == GOF(FPR18) && sz == 8) return o;
- if (o == GOF(FPR19) && sz == 8) return o;
- if (o == GOF(FPR20) && sz == 8) return o;
- if (o == GOF(FPR21) && sz == 8) return o;
- if (o == GOF(FPR22) && sz == 8) return o;
- if (o == GOF(FPR23) && sz == 8) return o;
- if (o == GOF(FPR24) && sz == 8) return o;
- if (o == GOF(FPR25) && sz == 8) return o;
- if (o == GOF(FPR26) && sz == 8) return o;
- if (o == GOF(FPR27) && sz == 8) return o;
- if (o == GOF(FPR28) && sz == 8) return o;
- if (o == GOF(FPR29) && sz == 8) return o;
- if (o == GOF(FPR30) && sz == 8) return o;
- if (o == GOF(FPR31) && sz == 8) return o;
+ // With ISA 2.06, the "Vector-Scalar Floating-point" category
+ // provides facilities to support vector and scalar binary floating-
+ // point operations. A unified register file is an integral part
+ // of this new facility, combining floating point and vector registers
+ // using a 64x128-bit vector. These are referred to as VSR[0..63].
+ // The floating point registers are now mapped into double word element 0
+ // of VSR[0..31]. The 32x128-bit vector registers defined by the "Vector
+ // Facility [Category: Vector]" are now mapped to VSR[32..63].
+
+ // Floating point registers . . .
+ if (o == GOF(VSR0) && sz == 8) return o;
+ if (o == GOF(VSR1) && sz == 8) return o;
+ if (o == GOF(VSR2) && sz == 8) return o;
+ if (o == GOF(VSR3) && sz == 8) return o;
+ if (o == GOF(VSR4) && sz == 8) return o;
+ if (o == GOF(VSR5) && sz == 8) return o;
+ if (o == GOF(VSR6) && sz == 8) return o;
+ if (o == GOF(VSR7) && sz == 8) return o;
+ if (o == GOF(VSR8) && sz == 8) return o;
+ if (o == GOF(VSR9) && sz == 8) return o;
+ if (o == GOF(VSR10) && sz == 8) return o;
+ if (o == GOF(VSR11) && sz == 8) return o;
+ if (o == GOF(VSR12) && sz == 8) return o;
+ if (o == GOF(VSR13) && sz == 8) return o;
+ if (o == GOF(VSR14) && sz == 8) return o;
+ if (o == GOF(VSR15) && sz == 8) return o;
+ if (o == GOF(VSR16) && sz == 8) return o;
+ if (o == GOF(VSR17) && sz == 8) return o;
+ if (o == GOF(VSR18) && sz == 8) return o;
+ if (o == GOF(VSR19) && sz == 8) return o;
+ if (o == GOF(VSR20) && sz == 8) return o;
+ if (o == GOF(VSR21) && sz == 8) return o;
+ if (o == GOF(VSR22) && sz == 8) return o;
+ if (o == GOF(VSR23) && sz == 8) return o;
+ if (o == GOF(VSR24) && sz == 8) return o;
+ if (o == GOF(VSR25) && sz == 8) return o;
+ if (o == GOF(VSR26) && sz == 8) return o;
+ if (o == GOF(VSR27) && sz == 8) return o;
+ if (o == GOF(VSR28) && sz == 8) return o;
+ if (o == GOF(VSR29) && sz == 8) return o;
+ if (o == GOF(VSR30) && sz == 8) return o;
+ if (o == GOF(VSR31) && sz == 8) return o;
/* For the various byte sized XER/CR pieces, use offset 8
- in VR0 .. VR31. */
- tl_assert(SZB(VR0) == 16);
- if (o == GOF(XER_SO) && sz == 1) return 8 +GOF(VR0);
- if (o == GOF(XER_OV) && sz == 1) return 8 +GOF(VR1);
- if (o == GOF(XER_CA) && sz == 1) return 8 +GOF(VR2);
- if (o == GOF(XER_BC) && sz == 1) return 8 +GOF(VR3);
-
- if (o == GOF(CR0_321) && sz == 1) return 8 +GOF(VR4);
- if (o == GOF(CR0_0) && sz == 1) return 8 +GOF(VR5);
- if (o == GOF(CR1_321) && sz == 1) return 8 +GOF(VR6);
- if (o == GOF(CR1_0) && sz == 1) return 8 +GOF(VR7);
- if (o == GOF(CR2_321) && sz == 1) return 8 +GOF(VR8);
- if (o == GOF(CR2_0) && sz == 1) return 8 +GOF(VR9);
- if (o == GOF(CR3_321) && sz == 1) return 8 +GOF(VR10);
- if (o == GOF(CR3_0) && sz == 1) return 8 +GOF(VR11);
- if (o == GOF(CR4_321) && sz == 1) return 8 +GOF(VR12);
- if (o == GOF(CR4_0) && sz == 1) return 8 +GOF(VR13);
- if (o == GOF(CR5_321) && sz == 1) return 8 +GOF(VR14);
- if (o == GOF(CR5_0) && sz == 1) return 8 +GOF(VR15);
- if (o == GOF(CR6_321) && sz == 1) return 8 +GOF(VR16);
- if (o == GOF(CR6_0) && sz == 1) return 8 +GOF(VR17);
- if (o == GOF(CR7_321) && sz == 1) return 8 +GOF(VR18);
- if (o == GOF(CR7_0) && sz == 1) return 8 +GOF(VR19);
-
- /* Vector registers .. use offset 0 in VR0 .. VR31. */
- if (o >= GOF(VR0) && o+sz <= GOF(VR0) +SZB(VR0)) return 0+ GOF(VR0);
- if (o >= GOF(VR1) && o+sz <= GOF(VR1) +SZB(VR1)) return 0+ GOF(VR1);
- if (o >= GOF(VR2) && o+sz <= GOF(VR2) +SZB(VR2)) return 0+ GOF(VR2);
- if (o >= GOF(VR3) && o+sz <= GOF(VR3) +SZB(VR3)) return 0+ GOF(VR3);
- if (o >= GOF(VR4) && o+sz <= GOF(VR4) +SZB(VR4)) return 0+ GOF(VR4);
- if (o >= GOF(VR5) && o+sz <= GOF(VR5) +SZB(VR5)) return 0+ GOF(VR5);
- if (o >= GOF(VR6) && o+sz <= GOF(VR6) +SZB(VR6)) return 0+ GOF(VR6);
- if (o >= GOF(VR7) && o+sz <= GOF(VR7) +SZB(VR7)) return 0+ GOF(VR7);
- if (o >= GOF(VR8) && o+sz <= GOF(VR8) +SZB(VR8)) return 0+ GOF(VR8);
- if (o >= GOF(VR9) && o+sz <= GOF(VR9) +SZB(VR9)) return 0+ GOF(VR9);
- if (o >= GOF(VR10) && o+sz <= GOF(VR10)+SZB(VR10)) return 0+ GOF(VR10);
- if (o >= GOF(VR11) && o+sz <= GOF(VR11)+SZB(VR11)) return 0+ GOF(VR11);
- if (o >= GOF(VR12) && o+sz <= GOF(VR12)+SZB(VR12)) return 0+ GOF(VR12);
- if (o >= GOF(VR13) && o+sz <= GOF(VR13)+SZB(VR13)) return 0+ GOF(VR13);
- if (o >= GOF(VR14) && o+sz <= GOF(VR14)+SZB(VR14)) return 0+ GOF(VR14);
- if (o >= GOF(VR15) && o+sz <= GOF(VR15)+SZB(VR15)) return 0+ GOF(VR15);
- if (o >= GOF(VR16) && o+sz <= GOF(VR16)+SZB(VR16)) return 0+ GOF(VR16);
- if (o >= GOF(VR17) && o+sz <= GOF(VR17)+SZB(VR17)) return 0+ GOF(VR17);
- if (o >= GOF(VR18) && o+sz <= GOF(VR18)+SZB(VR18)) return 0+ GOF(VR18);
- if (o >= GOF(VR19) && o+sz <= GOF(VR19)+SZB(VR19)) return 0+ GOF(VR19);
- if (o >= GOF(VR20) && o+sz <= GOF(VR20)+SZB(VR20)) return 0+ GOF(VR20);
- if (o >= GOF(VR21) && o+sz <= GOF(VR21)+SZB(VR21)) return 0+ GOF(VR21);
- if (o >= GOF(VR22) && o+sz <= GOF(VR22)+SZB(VR22)) return 0+ GOF(VR22);
- if (o >= GOF(VR23) && o+sz <= GOF(VR23)+SZB(VR23)) return 0+ GOF(VR23);
- if (o >= GOF(VR24) && o+sz <= GOF(VR24)+SZB(VR24)) return 0+ GOF(VR24);
- if (o >= GOF(VR25) && o+sz <= GOF(VR25)+SZB(VR25)) return 0+ GOF(VR25);
- if (o >= GOF(VR26) && o+sz <= GOF(VR26)+SZB(VR26)) return 0+ GOF(VR26);
- if (o >= GOF(VR27) && o+sz <= GOF(VR27)+SZB(VR27)) return 0+ GOF(VR27);
- if (o >= GOF(VR28) && o+sz <= GOF(VR28)+SZB(VR28)) return 0+ GOF(VR28);
- if (o >= GOF(VR29) && o+sz <= GOF(VR29)+SZB(VR29)) return 0+ GOF(VR29);
- if (o >= GOF(VR30) && o+sz <= GOF(VR30)+SZB(VR30)) return 0+ GOF(VR30);
- if (o >= GOF(VR31) && o+sz <= GOF(VR31)+SZB(VR31)) return 0+ GOF(VR31);
+ in VSR0 .. VSR19. */
+ tl_assert(SZB(VSR0) == 16);
+ if (o == GOF(XER_SO) && sz == 1) return 8 +GOF(VSR0);
+ if (o == GOF(XER_OV) && sz == 1) return 8 +GOF(VSR1);
+ if (o == GOF(XER_CA) && sz == 1) return 8 +GOF(VSR2);
+ if (o == GOF(XER_BC) && sz == 1) return 8 +GOF(VSR3);
+
+ if (o == GOF(CR0_321) && sz == 1) return 8 +GOF(VSR4);
+ if (o == GOF(CR0_0) && sz == 1) return 8 +GOF(VSR5);
+ if (o == GOF(CR1_321) && sz == 1) return 8 +GOF(VSR6);
+ if (o == GOF(CR1_0) && sz == 1) return 8 +GOF(VSR7);
+ if (o == GOF(CR2_321) && sz == 1) return 8 +GOF(VSR8);
+ if (o == GOF(CR2_0) && sz == 1) return 8 +GOF(VSR9);
+ if (o == GOF(CR3_321) && sz == 1) return 8 +GOF(VSR10);
+ if (o == GOF(CR3_0) && sz == 1) return 8 +GOF(VSR11);
+ if (o == GOF(CR4_321) && sz == 1) return 8 +GOF(VSR12);
+ if (o == GOF(CR4_0) && sz == 1) return 8 +GOF(VSR13);
+ if (o == GOF(CR5_321) && sz == 1) return 8 +GOF(VSR14);
+ if (o == GOF(CR5_0) && sz == 1) return 8 +GOF(VSR15);
+ if (o == GOF(CR6_321) && sz == 1) return 8 +GOF(VSR16);
+ if (o == GOF(CR6_0) && sz == 1) return 8 +GOF(VSR17);
+ if (o == GOF(CR7_321) && sz == 1) return 8 +GOF(VSR18);
+ if (o == GOF(CR7_0) && sz == 1) return 8 +GOF(VSR19);
+
+ /* Vector registers .. use offset 0 in VSR0 .. VSR63. */
+ if (o >= GOF(VSR0) && o+sz <= GOF(VSR0) +SZB(VSR0)) return 0+ GOF(VSR0);
+ if (o >= GOF(VSR1) && o+sz <= GOF(VSR1) +SZB(VSR1)) return 0+ GOF(VSR1);
+ if (o >= GOF(VSR2) && o+sz <= GOF(VSR2) +SZB(VSR2)) return 0+ GOF(VSR2);
+ if (o >= GOF(VSR3) && o+sz <= GOF(VSR3) +SZB(VSR3)) return 0+ GOF(VSR3);
+ if (o >= GOF(VSR4) && o+sz <= GOF(VSR4) +SZB(VSR4)) return 0+ GOF(VSR4);
+ if (o >= GOF(VSR5) && o+sz <= GOF(VSR5) +SZB(VSR5)) return 0+ GOF(VSR5);
+ if (o >= GOF(VSR6) && o+sz <= GOF(VSR6) +SZB(VSR6)) return 0+ GOF(VSR6);
+ if (o >= GOF(VSR7) && o+sz <= GOF(VSR7) +SZB(VSR7)) return 0+ GOF(VSR7);
+ if (o >= GOF(VSR8) && o+sz <= GOF(VSR8) +SZB(VSR8)) return 0+ GOF(VSR8);
+ if (o >= GOF(VSR9) && o+sz <= GOF(VSR9) +SZB(VSR9)) return 0+ GOF(VSR9);
+ if (o >= GOF(VSR10) && o+sz <= GOF(VSR10)+SZB(VSR10)) return 0+ GOF(VSR10);
+ if (o >= GOF(VSR11) && o+sz <= GOF(VSR11)+SZB(VSR11)) return 0+ GOF(VSR11);
+ if (o >= GOF(VSR12) && o+sz <= GOF(VSR12)+SZB(VSR12)) return 0+ GOF(VSR12);
+ if (o >= GOF(VSR13) && o+sz <= GOF(VSR13)+SZB(VSR13)) return 0+ GOF(VSR13);
+ if (o >= GOF(VSR14) && o+sz <= GOF(VSR14)+SZB(VSR14)) return 0+ GOF(VSR14);
+ if (o >= GOF(VSR15) && o+sz <= GOF(VSR15)+SZB(VSR15)) return 0+ GOF(VSR15);
+ if (o >= GOF(VSR16) && o+sz <= GOF(VSR16)+SZB(VSR16)) return 0+ GOF(VSR16);
+ if (o >= GOF(VSR17) && o+sz <= GOF(VSR17)+SZB(VSR17)) return 0+ GOF(VSR17);
+ if (o >= GOF(VSR18) && o+sz <= GOF(VSR18)+SZB(VSR18)) return 0+ GOF(VSR18);
+ if (o >= GOF(VSR19) && o+sz <= GOF(VSR19)+SZB(VSR19)) return 0+ GOF(VSR19);
+ if (o >= GOF(VSR20) && o+sz <= GOF(VSR20)+SZB(VSR20)) return 0+ GOF(VSR20);
+ if (o >= GOF(VSR21) && o+sz <= GOF(VSR21)+SZB(VSR21)) return 0+ GOF(VSR21);
+ if (o >= GOF(VSR22) && o+sz <= GOF(VSR22)+SZB(VSR22)) return 0+ GOF(VSR22);
+ if (o >= GOF(VSR23) && o+sz <= GOF(VSR23)+SZB(VSR23)) return 0+ GOF(VSR23);
+ if (o >= GOF(VSR24) && o+sz <= GOF(VSR24)+SZB(VSR24)) return 0+ GOF(VSR24);
+ if (o >= GOF(VSR25) && o+sz <= GOF(VSR25)+SZB(VSR25)) return 0+ GOF(VSR25);
+ if (o >= GOF(VSR26) && o+sz <= GOF(VSR26)+SZB(VSR26)) return 0+ GOF(VSR26);
+ if (o >= GOF(VSR27) && o+sz <= GOF(VSR27)+SZB(VSR27)) return 0+ GOF(VSR27);
+ if (o >= GOF(VSR28) && o+sz <= GOF(VSR28)+SZB(VSR28)) return 0+ GOF(VSR28);
+ if (o >= GOF(VSR29) && o+sz <= GOF(VSR29)+SZB(VSR29)) return 0+ GOF(VSR29);
+ if (o >= GOF(VSR30) && o+sz <= GOF(VSR30)+SZB(VSR30)) return 0+ GOF(VSR30);
+ if (o >= GOF(VSR31) && o+sz <= GOF(VSR31)+SZB(VSR31)) return 0+ GOF(VSR31);
+ if (o >= GOF(VSR32) && o+sz <= GOF(VSR32)+SZB(VSR32)) return 0+ GOF(VSR32);
+ if (o >= GOF(VSR33) && o+sz <= GOF(VSR33)+SZB(VSR33)) return 0+ GOF(VSR33);
+ if (o >= GOF(VSR34) && o+sz <= GOF(VSR34)+SZB(VSR34)) return 0+ GOF(VSR34);
+ if (o >= GOF(VSR35) && o+sz <= GOF(VSR35)+SZB(VSR35)) return 0+ GOF(VSR35);
+ if (o >= GOF(VSR36) && o+sz <= GOF(VSR36)+SZB(VSR36)) return 0+ GOF(VSR36);
+ if (o >= GOF(VSR37) && o+sz <= GOF(VSR37)+SZB(VSR37)) return 0+ GOF(VSR37);
+ if (o >= GOF(VSR38) && o+sz <= GOF(VSR38)+SZB(VSR38)) return 0+ GOF(VSR38);
+ if (o >= GOF(VSR39) && o+sz <= GOF(VSR39)+SZB(VSR39)) return 0+ GOF(VSR39);
+ if (o >= GOF(VSR40) && o+sz <= GOF(VSR40)+SZB(VSR40)) return 0+ GOF(VSR40);
+ if (o >= GOF(VSR41) && o+sz <= GOF(VSR41)+SZB(VSR41)) return 0+ GOF(VSR41);
+ if (o >= GOF(VSR42) && o+sz <= GOF(VSR42)+SZB(VSR42)) return 0+ GOF(VSR42);
+ if (o >= GOF(VSR43) && o+sz <= GOF(VSR43)+SZB(VSR43)) return 0+ GOF(VSR43);
+ if (o >= GOF(VSR44) && o+sz <= GOF(VSR44)+SZB(VSR44)) return 0+ GOF(VSR44);
+ if (o >= GOF(VSR45) && o+sz <= GOF(VSR45)+SZB(VSR45)) return 0+ GOF(VSR45);
+ if (o >= GOF(VSR46) && o+sz <= GOF(VSR46)+SZB(VSR46)) return 0+ GOF(VSR46);
+ if (o >= GOF(VSR47) && o+sz <= GOF(VSR47)+SZB(VSR47)) return 0+ GOF(VSR47);
+ if (o >= GOF(VSR48) && o+sz <= GOF(VSR48)+SZB(VSR48)) return 0+ GOF(VSR48);
+ if (o >= GOF(VSR49) && o+sz <= GOF(VSR49)+SZB(VSR49)) return 0+ GOF(VSR49);
+ if (o >= GOF(VSR50) && o+sz <= GOF(VSR50)+SZB(VSR50)) return 0+ GOF(VSR50);
+ if (o >= GOF(VSR51) && o+sz <= GOF(VSR51)+SZB(VSR51)) return 0+ GOF(VSR51);
+ if (o >= GOF(VSR52) && o+sz <= GOF(VSR52)+SZB(VSR52)) return 0+ GOF(VSR52);
+ if (o >= GOF(VSR53) && o+sz <= GOF(VSR53)+SZB(VSR53)) return 0+ GOF(VSR53);
+ if (o >= GOF(VSR54) && o+sz <= GOF(VSR54)+SZB(VSR54)) return 0+ GOF(VSR54);
+ if (o >= GOF(VSR55) && o+sz <= GOF(VSR55)+SZB(VSR55)) return 0+ GOF(VSR55);
+ if (o >= GOF(VSR56) && o+sz <= GOF(VSR56)+SZB(VSR56)) return 0+ GOF(VSR56);
+ if (o >= GOF(VSR57) && o+sz <= GOF(VSR57)+SZB(VSR57)) return 0+ GOF(VSR57);
+ if (o >= GOF(VSR58) && o+sz <= GOF(VSR58)+SZB(VSR58)) return 0+ GOF(VSR58);
+ if (o >= GOF(VSR59) && o+sz <= GOF(VSR59)+SZB(VSR59)) return 0+ GOF(VSR59);
+ if (o >= GOF(VSR60) && o+sz <= GOF(VSR60)+SZB(VSR60)) return 0+ GOF(VSR60);
+ if (o >= GOF(VSR61) && o+sz <= GOF(VSR61)+SZB(VSR61)) return 0+ GOF(VSR61);
+ if (o >= GOF(VSR62) && o+sz <= GOF(VSR62)+SZB(VSR62)) return 0+ GOF(VSR62);
+ if (o >= GOF(VSR63) && o+sz <= GOF(VSR63)+SZB(VSR63)) return 0+ GOF(VSR63);
VG_(printf)("MC_(get_otrack_shadow_offset)(ppc64)(off=%d,sz=%d)\n",
offset,szB);
@@ -359,98 +400,139 @@ static Int get_otrack_shadow_offset_wrk
if (o == GOF(REDIR_SP) && sz == 4) return -1;
if (o == GOF(SPRG3_RO) && sz == 4) return -1;
- tl_assert(SZB(FPR0) == 8);
- if (o == GOF(FPR0) && sz == 8) return o;
- if (o == GOF(FPR1) && sz == 8) return o;
- if (o == GOF(FPR2) && sz == 8) return o;
- if (o == GOF(FPR3) && sz == 8) return o;
- if (o == GOF(FPR4) && sz == 8) return o;
- if (o == GOF(FPR5) && sz == 8) return o;
- if (o == GOF(FPR6) && sz == 8) return o;
- if (o == GOF(FPR7) && sz == 8) return o;
- if (o == GOF(FPR8) && sz == 8) return o;
- if (o == GOF(FPR9) && sz == 8) return o;
- if (o == GOF(FPR10) && sz == 8) return o;
- if (o == GOF(FPR11) && sz == 8) return o;
- if (o == GOF(FPR12) && sz == 8) return o;
- if (o == GOF(FPR13) && sz == 8) return o;
- if (o == GOF(FPR14) && sz == 8) return o;
- if (o == GOF(FPR15) && sz == 8) return o;
- if (o == GOF(FPR16) && sz == 8) return o;
- if (o == GOF(FPR17) && sz == 8) return o;
- if (o == GOF(FPR18) && sz == 8) return o;
- if (o == GOF(FPR19) && sz == 8) return o;
- if (o == GOF(FPR20) && sz == 8) return o;
- if (o == GOF(FPR21) && sz == 8) return o;
- if (o == GOF(FPR22) && sz == 8) return o;
- if (o == GOF(FPR23) && sz == 8) return o;
- if (o == GOF(FPR24) && sz == 8) return o;
- if (o == GOF(FPR25) && sz == 8) return o;
- if (o == GOF(FPR26) && sz == 8) return o;
- if (o == GOF(FPR27) && sz == 8) return o;
- if (o == GOF(FPR28) && sz == 8) return o;
- if (o == GOF(FPR29) && sz == 8) return o;
- if (o == GOF(FPR30) && sz == 8) return o;
- if (o == GOF(FPR31) && sz == 8) return o;
+ // With ISA 2.06, the "Vector-Scalar Floating-point" category
+ // provides facilities to support vector and scalar binary floating-
+ // point operations. A unified register file is an integral part
+ // of this new facility, combining floating point and vector registers
+ // using a 64x128-bit vector. These are referred to as VSR[0..63].
+ // The floating point registers are now mapped into double word element 0
+ // of VSR[0..31]. The 32x128-bit vector registers defined by the "Vector
+ // Facility [Category: Vector]" are now mapped to VSR[32..63].
+
+ // Floating point registers . . .
+ if (o == GOF(VSR0) && sz == 8) return o;
+ if (o == GOF(VSR1) && sz == 8) return o;
+ if (o == GOF(VSR2) && sz == 8) return o;
+ if (o == GOF(VSR3) && sz == 8) return o;
+ if (o == GOF(VSR4) && sz == 8) return o;
+ if (o == GOF(VSR5) && sz == 8) return o;
+ if (o == GOF(VSR6) && sz == 8) return o;
+ if (o == GOF(VSR7) && sz == 8) return o;
+ if (o == GOF(VSR8) && sz == 8) return o;
+ if (o == GOF(VSR9) && sz == 8) return o;
+ if (o == GOF(VSR10) && sz == 8) return o;
+ if (o == GOF(VSR11) && sz == 8) return o;
+ if (o == GOF(VSR12) && sz == 8) return o;
+ if (o == GOF(VSR13) && sz == 8) return o;
+ if (o == GOF(VSR14) && sz == 8) return o;
+ if (o == GOF(VSR15) && sz == 8) return o;
+ if (o == GOF(VSR16) && sz == 8) return o;
+ if (o == GOF(VSR17) && sz == 8) return o;
+ if (o == GOF(VSR18) && sz == 8) return o;
+ if (o == GOF(VSR19) && sz == 8) return o;
+ if (o == GOF(VSR20) && sz == 8) return o;
+ if (o == GOF(VSR21) && sz == 8) return o;
+ if (o == GOF(VSR22) && sz == 8) return o;
+ if (o == GOF(VSR23) && sz == 8) return o;
+ if (o == GOF(VSR24) && sz == 8) return o;
+ if (o == GOF(VSR25) && sz == 8) return o;
+ if (o == GOF(VSR26) && sz == 8) return o;
+ if (o == GOF(VSR27) && sz == 8) return o;
+ if (o == GOF(VSR28) && sz == 8) return o;
+ if (o == GOF(VSR29) && sz == 8) return o;
+ if (o == GOF(VSR30) && sz == 8) return o;
+ if (o == GOF(VSR31) && sz == 8) return o;
/* For the various byte sized XER/CR pieces, use offset 8
- in VR0 .. VR31. */
- tl_assert(SZB(VR0) == 16);
- if (o == GOF(XER_SO) && sz == 1) return 8 +GOF(VR0);
- if (o == GOF(XER_OV) && sz == 1) return 8 +GOF(VR1);
- if (o == GOF(XER_CA) && sz == 1) return 8 +GOF(VR2);
- if (o == GOF(XER_BC) && sz == 1) return 8 +GOF(VR3);
-
- if (o == GOF(CR0_321) && sz == 1) return 8 +GOF(VR4);
- if (o == GOF(CR0_0) && sz == 1) return 8 +GOF(VR5);
- if (o == GOF(CR1_321) && sz == 1) return 8 +GOF(VR6);
- if (o == GOF(CR1_0) && sz == 1) return 8 +GOF(VR7);
- if (o == GOF(CR2_321) && sz == 1) return 8 +GOF(VR8);
- if (o == GOF(CR2_0) && sz == 1) return 8 +GOF(VR9);
- if (o == GOF(CR3_321) && sz == 1) return 8 +GOF(VR10);
- if (o == GOF(CR3_0) && sz == 1) return 8 +GOF(VR11);
- if (o == GOF(CR4_321) && sz == 1) return 8 +GOF(VR12);
- if (o == GOF(CR4_0) && sz == 1) return 8 +GOF(VR13);
- if (o == GOF(CR5_321) && sz == 1) return 8 +GOF(VR14);
- if (o == GOF(CR5_0) && sz == 1) return 8 +GOF(VR15);
- if (o == GOF(CR6_321) && sz == 1) return 8 +GOF(VR16);
- if (o == GOF(CR6_0) && sz == 1) return 8 +GOF(VR17);
- if (o == GOF(CR7_321) && sz == 1) return 8 +GOF(VR18);
- if (o == GOF(CR7_0) && sz == 1) return 8 +GOF(VR19);
-
- /* Vector registers .. use offset 0 in VR0 .. VR31. */
- if (o >= GOF(VR0) && o+sz <= GOF(VR0) +SZB(VR0)) return 0+ GOF(VR0);
- if (o >= GOF(VR1) && o+sz <= GOF(VR1) +SZB(VR1)) return 0+ GOF(VR1);
- if (o >= GOF(VR2) && o+sz <= GOF(VR2) +SZB(VR2)) return 0+ GOF(VR2);
- if (o >= GOF(VR3) && o+sz <= GOF(VR3) +SZB(VR3)) return 0+ GOF(VR3);
- if (o >= GOF(VR4) && o+sz <= GOF(VR4) +SZB(VR4)) return 0+ GOF(VR4);
- if (o >= GOF(VR5) && o+sz <= GOF(VR5) +SZB(VR5)) return 0+ GOF(VR5);
- if (o >= GOF(VR6) && o+sz <= GOF(VR6) +SZB(VR6)) return 0+ GOF(VR6);
- if (o >= GOF(VR7) && o+sz <= GOF(VR7) +SZB(VR7)) return 0+ GOF(VR7);
- if (o >= GOF(VR8) && o+sz <= GOF(VR8) +SZB(VR8)) return 0+ GOF(VR8);
- if (o >= GOF(VR9) && o+sz <= GOF(VR9) +SZB(VR9)) return 0+ GOF(VR9);
- if (o >= GOF(VR10) && o+sz <= GOF(VR10)+SZB(VR10)) return 0+ GOF(VR10);
- if (o >= GOF(VR11) && o+sz <= GOF(VR11)+SZB(VR11)) return 0+ GOF(VR11);
- if (o >= GOF(VR12) && o+sz <= GOF(VR12)+SZB(VR12)) return 0+ GOF(VR12);
- if (o >= GOF(VR13) && o+sz <= GOF(VR13)+SZB(VR13)) return 0+ GOF(VR13);
- if (o >= GOF(VR14) && o+sz <= GOF(VR14)+SZB(VR14)) return 0+ GOF(VR14);
- if (o >= GOF(VR15) && o+sz <= GOF(VR15)+SZB(VR15)) return 0+ GOF(VR15);
- if (o >= GOF(VR16) && o+sz <= GOF(VR16)+SZB(VR16)) return 0+ GOF(VR16);
- if (o >= GOF(VR17) && o+sz <= GOF(VR17)+SZB(VR17)) return 0+ GOF(VR17);
- if (o >= GOF(VR18) && o+sz <= GOF(VR18)+SZB(VR18)) return 0+ GOF(VR18);
- if (o >= GOF(VR19) && o+sz <= GOF(VR19)+SZB(VR19)) return 0+ GOF(VR19);
- if (o >= GOF(VR20) && o+sz <= GOF(VR20)+SZB(VR20)) return 0+ GOF(VR20);
- if (o >= GOF(VR21) && o+sz <= GOF(VR21)+SZB(VR21)) return 0+ GOF(VR21);
- if (o >= GOF(VR22) && o+sz <= GOF(VR22)+SZB(VR22)) return 0+ GOF(VR22);
- if (o >= GOF(VR23) && o+sz <= GOF(VR23)+SZB(VR23)) return 0+ GOF(VR23);
- if (o >= GOF(VR24) && o+sz <= GOF(VR24)+SZB(VR24)) return 0+ GOF(VR24);
- if (o >= GOF(VR25) && o+sz <= GOF(VR25)+SZB(VR25)) return 0+ GOF(VR25);
- if (o >= GOF(VR26) && o+sz <= GOF(VR26)+SZB(VR26)) return 0+ GOF(VR26);
- if (o >= GOF(VR27) && o+sz <= GOF(VR27)+SZB(VR27)) return 0+ GOF(VR27);
- if (o >= GOF(VR28) && o+sz <= GOF(VR28)+SZB(VR28)) return 0+ GOF(VR28);
- if (o >= GOF(VR29) && o+sz <= GOF(VR29)+SZB(VR29)) return 0+ GOF(VR29);
- if (o >= GOF(VR30) && o+sz <= GOF(VR30)+SZB(VR30)) return 0+ GOF(VR30);
- if (o >= GOF(VR31) && o+sz <= GOF(VR31)+SZB(VR31)) return 0+ GOF(VR31);
+ in VSR0 .. VSR19. */
+ tl_assert(SZB(VSR0) == 16);
+ if (o == GOF(XER_SO) && sz == 1) return 8 +GOF(VSR0);
+ if (o == GOF(XER_OV) && sz == 1) return 8 +GOF(VSR1);
+ if (o == GOF(XER_CA) && sz == 1) return 8 +GOF(VSR2);
+ if (o == GOF(XER_BC) && sz == 1) return 8 +GOF(VSR3);
+
+ if (o == GOF(CR0_321) && sz == 1) return 8 +GOF(VSR4);
+ if (o == GOF(CR0_0) && sz == 1) return 8 +GOF(VSR5);
+ if (o == GOF(CR1_321) && sz == 1) return 8 +GOF(VSR6);
+ if (o == GOF(CR1_0) && sz == 1) return 8 +GOF(VSR7);
+ if (o == GOF(CR2_321) && sz == 1) return 8 +GOF(VSR8);
+ if (o == GOF(CR2_0) && sz == 1) return 8 +GOF(VSR9);
+ if (o == GOF(CR3_321) && sz == 1) return 8 +GOF(VSR10);
+ if (o == GOF(CR3_0) && sz == 1) return 8 +GOF(VSR11);
+ if (o == GOF(CR4_321) && sz == 1) return 8 +GOF(VSR12);
+ if (o == GOF(CR4_0) && sz == 1) return 8 +GOF(VSR13);
+ if (o == GOF(CR5_321) && sz == 1) return 8 +GOF(VSR14);
+ if (o == GOF(CR5_0) && sz == 1) return 8 +GOF(VSR15);
+ if (o == GOF(CR6_321) && sz == 1) return 8 +GOF(VSR16);
+ if (o == GOF(CR6_0) && sz == 1) return 8 +GOF(VSR17);
+ if (o == GOF(CR7_321) && sz == 1) return 8 +GOF(VSR18);
+ if (o == GOF(CR7_0) && sz == 1) return 8 +GOF(VSR19);
+
+ /* Vector registers .. use offset 0 in VSR0 .. VSR63. */
+ if (o >= GOF(VSR0) && o+sz <= GOF(VSR0) +SZB(VSR0)) return 0+ GOF(VSR0);
+ if (o >= GOF(VSR1) && o+sz <= GOF(VSR1) +SZB(VSR1)) return 0+ GOF(VSR1);
+ if (o >= GOF(VSR2) && o+sz <= GOF(VSR2) +SZB(VSR2)) return 0+ GOF(VSR2);
+ if (o >= GOF(VSR3) && o+sz <= GOF(VSR3) +SZB(VSR3)) return 0+ GOF(VSR3);
+ if (o >= GOF(VSR4) && o+sz <= GOF(VSR4) +SZB(VSR4)) return 0+ GOF(VSR4);
+ if (o >= GOF(VSR5) && o+sz <= GOF(VSR5) +SZB(VSR5)) return 0+ GOF(VSR5);
+ if (o >= GOF(VSR6) && o+sz <= GOF(VSR6) +SZB(VSR6)) return 0+ GOF(VSR6);
+ if (o >= GOF(VSR7) && o+sz <= GOF(VSR7) +SZB(VSR7)) return 0+ GOF(VSR7);
+ if (o >= GOF(VSR8) && o+sz <= GOF(VSR8) +SZB(VSR8)) return 0+ GOF(VSR8);
+ if (o >= GOF(VSR9) && o+sz <= GOF(VSR9) +SZB(VSR9)) return 0+ GOF(VSR9);
+ if (o >= GOF(VSR10) && o+sz <= GOF(VSR10)+SZB(VSR10)) return 0+ GOF(VSR10);
+ if (o >= GOF(VSR11) && o+sz <= GOF(VSR11)+SZB(VSR11)) return 0+ GOF(VSR11);
+ if (o >= GOF(VSR12) && o+sz <= GOF(VSR12)+SZB(VSR12)) return 0+ GOF(VSR12);
+ if (o >= GOF(VSR13) && o+sz <= GOF(VSR13)+SZB(VSR13)) return 0+ GOF(VSR13);
+ if (o >= GOF(VSR14) && o+sz <= GOF(VSR14)+SZB(VSR14)) return 0+ GOF(VSR14);
+ if (o >= GOF(VSR15) && o+sz <= GOF(VSR15)+SZB(VSR15)) return 0+ GOF(VSR15);
+ if (o >= GOF(VSR16) && o+sz <= GOF(VSR16)+SZB(VSR16)) return 0+ GOF(VSR16);
+ if (o >= GOF(VSR17) && o+sz <= GOF(VSR17)+SZB(VSR17)) return 0+ GOF(VSR17);
+ if (o >= GOF(VSR18) && o+sz <= GOF(VSR18)+SZB(VSR18)) return 0+ GOF(VSR18);
+ if (o >= GOF(VSR19) && o+sz <= GOF(VSR19)+SZB(VSR19)) return 0+ GOF(VSR19);
+ if (o >= GOF(VSR20) && o+sz <= GOF(VSR20)+SZB(VSR20)) return 0+ GOF(VSR20);
+ if (o >= GOF(VSR21) && o+sz <= GOF(VSR21)+SZB(VSR21)) return 0+ GOF(VSR21);
+ if (o >= GOF(VSR22) && o+sz <= GOF(VSR22)+SZB(VSR22)) return 0+ GOF(VSR22);
+ if (o >= GOF(VSR23) && o+sz <= GOF(VSR23)+SZB(VSR23)) return 0+ GOF(VSR23);
+ if (o >= GOF(VSR24) && o+sz <= GOF(VSR24)+SZB(VSR24)) return 0+ GOF(VSR24);
+ if (o >= GOF(VSR25) && o+sz <= GOF(VSR25)+SZB(VSR25)) return 0+ GOF(VSR25);
+ if (o >= GOF(VSR26) && o+sz <= GOF(VSR26)+SZB(VSR26)) return 0+ GOF(VSR26);
+ if (o >= GOF(VSR27) && o+sz <= GOF(VSR27)+SZB(VSR27)) return 0+ GOF(VSR27);
+ if (o >= GOF(VSR28) && o+sz <= GOF(VSR28)+SZB(VSR28)) return 0+ GOF(VSR28);
+ if (o >= GOF(VSR29) && o+sz <= GOF(VSR29)+SZB(VSR29)) return 0+ GOF(VSR29);
+ if (o >= GOF(VSR30) && o+sz <= GOF(VSR30)+SZB(VSR30)) return 0+ GOF(VSR30);
+ if (o >= GOF(VSR31) && o+sz <= GOF(VSR31)+SZB(VSR31)) return 0+ GOF(VSR31);
+ if (o >= GOF(VSR32) && o+sz <= GOF(VSR32)+SZB(VSR32)) return 0+ GOF(VSR32);
+ if (o >= GOF(VSR33) && o+sz <= GOF(VSR33)+SZB(VSR33)) return 0+ GOF(VSR33);
+ if (o >= GOF(VSR34) && o+sz <= GOF(VSR34)+SZB(VSR34)) return 0+ GOF(VSR34);
+ if (o >= GOF(VSR35) && o+sz <= GOF(VSR35)+SZB(VSR35)) return 0+ GOF(VSR35);
+ if (o >= GOF(VSR36) && o+sz <= GOF(VSR36)+SZB(VSR36)) return 0+ GOF(VSR36);
+ if (o >= GOF(VSR37) && o+sz <= GOF(VSR37)+SZB(VSR37)) return 0+ GOF(VSR37);
+ if (o >= GOF(VSR38) && o+sz <= GOF(VSR38)+SZB(VSR38)) return 0+ GOF(VSR38);
+ if (o >= GOF(VSR39) && o+sz <= GOF(VSR39)+SZB(VSR39)) return 0+ GOF(VSR39);
+ if (o >= GOF(VSR40) && o+sz <= GOF(VSR40)+SZB(VSR40)) return 0+ GOF(VSR40);
+ if (o >= GOF(VSR41) && o+sz <= GOF(VSR41)+SZB(VSR41)) return 0+ GOF(VSR41);
+ if (o >= GOF(VSR42) && o+sz <= GOF(VSR42)+SZB(VSR42)) return 0+ GOF(VSR42);
+ if (o >= GOF(VSR43) && o+sz <= GOF(VSR43)+SZB(VSR43)) return 0+ GOF(VSR43);
+ if (o >= GOF(VSR44) && o+sz <= GOF(VSR44)+SZB(VSR44)) return 0+ GOF(VSR44);
+ if (o >= GOF(VSR45) && o+sz <= GOF(VSR45)+SZB(VSR45)) return 0+ GOF(VSR45);
+ if (o >= GOF(VSR46) && o+sz <= GOF(VSR46)+SZB(VSR46)) return 0+ GOF(VSR46);
+ if (o >= GOF(VSR47) && o+sz <= GOF(VSR47)+SZB(VSR47)) return 0+ GOF(VSR47);
+ if (o >= GOF(VSR48) && o+sz <= GOF(VSR48)+SZB(VSR48)) return 0+ GOF(VSR48);
+ if (o >= GOF(VSR49) && o+sz <= GOF(VSR49)+SZB(VSR49)) return 0+ GOF(VSR49);
+ if (o >= GOF(VSR50) && o+sz <= GOF(VSR50)+SZB(VSR50)) return 0+ GOF(VSR50);
+ if (o >= GOF(VSR51) && o+sz <= GOF(VSR51)+SZB(VSR51)) return 0+ GOF(VSR51);
+ if (o >= GOF(VSR52) && o+sz <= GOF(VSR52)+SZB(VSR52)) return 0+ GOF(VSR52);
+ if (o >= GOF(VSR53) && o+sz <= GOF(VSR53)+SZB(VSR53)) return 0+ GOF(VSR53);
+ if (o >= GOF(VSR54) && o+sz <= GOF(VSR54)+SZB(VSR54)) return 0+ GOF(VSR54);
+ if (o >= GOF(VSR55) && o+sz <= GOF(VSR55)+SZB(VSR55)) return 0+ GOF(VSR55);
+ if (o >= GOF(VSR56) && o+sz <= GOF(VSR56)+SZB(VSR56)) return 0+ GOF(VSR56);
+ if (o >= GOF(VSR57) && o+sz <= GOF(VSR57)+SZB(VSR57)) return 0+ GOF(VSR57);
+ if (o >= GOF(VSR58) && o+sz <= GOF(VSR58)+SZB(VSR58)) return 0+ GOF(VSR58);
+ if (o >= GOF(VSR59) && o+sz <= GOF(VSR59)+SZB(VSR59)) return 0+ GOF(VSR59);
+ if (o >= GOF(VSR60) && o+sz <= GOF(VSR60)+SZB(VSR60)) return 0+ GOF(VSR60);
+ if (o >= GOF(VSR61) && o+sz <= GOF(VSR61)+SZB(VSR61)) return 0+ GOF(VSR61);
+ if (o >= GOF(VSR62) && o+sz <= GOF(VSR62)+SZB(VSR62)) return 0+ GOF(VSR62);
+ if (o >= GOF(VSR63) && o+sz <= GOF(VSR63)+SZB(VSR63)) return 0+ GOF(VSR63);
VG_(printf)("MC_(get_otrack_shadow_offset)(ppc32)(off=%d,sz=%d)\n",
offset,szB);
Index: memcheck/mc_main.c
===================================================================
--- memcheck/mc_main.c.orig
+++ memcheck/mc_main.c
@@ -3864,7 +3864,7 @@ static UInt mb_get_origin_for_guest_offs
static void mc_post_reg_write ( CorePart part, ThreadId tid,
PtrdiffT offset, SizeT size)
{
-# define MAX_REG_WRITE_SIZE 1408
+# define MAX_REG_WRITE_SIZE 1664
UChar area[MAX_REG_WRITE_SIZE];
tl_assert(size <= MAX_REG_WRITE_SIZE);
VG_(memset)(area, V_BITS8_DEFINED, size);
Index: memcheck/mc_translate.c
===================================================================
--- memcheck/mc_translate.c.orig
+++ memcheck/mc_translate.c
@@ -2936,6 +2936,7 @@ IRAtom* expr2vbits_Binop ( MCEnv* mce,
case Iop_RoundF64toF32:
case Iop_F64toI64S:
case Iop_I64StoF64:
+ case Iop_I64UtoF64:
case Iop_SinF64:
case Iop_CosF64:
case Iop_TanF64:
@@ -2972,6 +2973,7 @@ IRAtom* expr2vbits_Binop ( MCEnv* mce,
case Iop_F64toI32U:
case Iop_F64toI32S:
case Iop_F64toF32:
+ case Iop_I64UtoF32:
/* First arg is I32 (rounding mode), second is F64 (data). */
return mkLazy2(mce, Ity_I32, vatom1, vatom2);
@@ -3452,6 +3454,7 @@ IRExpr* expr2vbits_Unop ( MCEnv* mce, IR
return mkPCast16x8(mce,
assignNew('V', mce, Ity_V128, unop(op, mkPCast8x16(mce, vatom))));
+ case Iop_I64UtoF32:
default:
ppIROp(op);
VG_(tool_panic)("memcheck:expr2vbits_Unop");
Index: none/tests/ppc32/Makefile.am
===================================================================
--- none/tests/ppc32/Makefile.am.orig
+++ none/tests/ppc32/Makefile.am
@@ -23,13 +23,15 @@ EXTRA_DIST = \
tw.stderr.exp tw.stdout.exp tw.vgtest \
xlc_dbl_u32.stderr.exp xlc_dbl_u32.stdout.exp xlc_dbl_u32.vgtest \
power5+_round.stderr.exp power5+_round.stdout.exp power5+_round.vgtest \
- power6_bcmp.stderr.exp power6_bcmp.stdout.exp power6_bcmp.vgtest
+ power6_bcmp.stderr.exp power6_bcmp.stdout.exp power6_bcmp.vgtest \
+ test_isa_2_06_part1.stderr.exp test_isa_2_06_part1.stdout.exp test_isa_2_06_part1.vgtest
check_PROGRAMS = \
bug129390-ppc32 \
bug139050-ppc32 \
ldstrev lsw jm-insns mftocrf mcrfs round test_fx test_gx \
- testVMX twi tw xlc_dbl_u32 power5+_round power6_bcmp
+ testVMX twi tw xlc_dbl_u32 power5+_round power6_bcmp \
+ test_isa_2_06_part1
AM_CFLAGS += @FLAG_M32@
AM_CXXFLAGS += @FLAG_M32@
@@ -41,8 +43,20 @@ else
ALTIVEC_FLAG =
endif
+if HAS_VSX
+BUILD_FLAG_VSX = -mvsx
+VSX_FLAG = -DHAS_VSX
+else
+BUILD_FLAG_VSX =
+VSX_FLAG =
+endif
+
jm_insns_CFLAGS = $(AM_CFLAGS) -Winline -Wall -O -g -mregnames -maltivec \
@FLAG_M32@ $(ALTIVEC_FLAG)
testVMX_CFLAGS = $(AM_CFLAGS) -O -g -Wall -maltivec -mabi=altivec -DALTIVEC \
-DGCC_COMPILER @FLAG_M32@
+
+test_isa_2_06_part1_CFLAGS = $(AM_CFLAGS) -Winline -Wall -O -g -mregnames $(VSX_FLAG) \
+ @FLAG_M32@ $(ALTIVEC_FLAG) $(BUILD_FLAG_VSX)
+
Index: none/tests/ppc32/test_isa_2_06_part1.c
===================================================================
--- /dev/null
+++ none/tests/ppc32/test_isa_2_06_part1.c
@@ -0,0 +1,2189 @@
+/* Copyright (C) 2011 IBM
+
+ Author: Maynard Johnson <maynardj@us.ibm.com>
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation; either version 2 of the
+ License, or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307, USA.
+
+ The GNU General Public License is contained in the file COPYING.
+ */
+
+#ifdef HAS_VSX
+
+#include <stdio.h>
+#include <stdint.h>
+#include <stdlib.h>
+#include <string.h>
+#include <malloc.h>
+#include <altivec.h>
+
+#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__ __volatile__ ("xsmaddmdp %x0, %x1, %x2" : "+wa" (vec_out): "wa" (vec_inA),"wa" (vec_inB));
+}
+
+static void test_xsmsub(void)
+{
+ if (do_adp)
+ __asm__ __volatile__ ("xsmsubadp %x0, %x1, %x2" : "+wa" (vec_out): "wa" (vec_inA),"wa" (vec_inB));
+ else
+ __asm__ __volatile__ ("xsmsubmdp %x0, %x1, %x2" : "+wa" (vec_out): "wa" (vec_inA),"wa" (vec_inB));
+}
+
+static void test_xsnmadd(void)
+{
+ if (do_adp)
+ __asm__ __volatile__ ("xsnmaddadp %x0, %x1, %x2" : "+wa" (vec_out): "wa" (vec_inA),"wa" (vec_inB));
+ else
+ __asm__ __volatile__ ("xsnmaddmdp %x0, %x1, %x2" : "+wa" (vec_out): "wa" (vec_inA),"wa" (vec_inB));
+}
+
+static void test_xsmuldp(void)
+{
+ __asm__ __volatile__ ("xsmuldp %x0, %x1, %x2" : "=wa" (vec_out): "wa" (vec_inA),"wa" (vec_inB));
+}
+
+static void test_xssubdp(void)
+{
+ __asm__ __volatile__ ("xssubdp %x0, %x1, %x2" : "=wa" (vec_out): "wa" (vec_inA),"wa" (vec_inB));
+}
+
+static void test_xscvdpsxds (void)
+{
+ __asm__ __volatile__ ("xscvdpsxds %x0, %x1" : "=wa" (vec_out): "wa" (vec_inB));
+}
+
+static void test_xscvsxddp (void)
+{
+ __asm__ __volatile__ ("xscvsxddp %x0, %x1" : "=wa" (vec_out): "wa" (vec_inB));
+}
+
+static void test_xscvuxddp (void)
+{
+ __asm__ __volatile__ ("xscvuxddp %x0, %x1" : "=wa" (vec_out): "wa" (vec_inB));
+}
+
+static unsigned int vstg[] __attribute__ ((aligned (16))) = { 0, 0, 0,0,
+ 0, 0, 0, 0 };
+
+#define NUM_VSTG_INTS (sizeof vstg/sizeof vstg[0])
+#define NUM_VSTG_VECS (NUM_VSTG_INTS/4)
+
+static unsigned int viargs[] __attribute__ ((aligned (16))) = { 0x01234567,
+ 0x89abcdef,
+ 0x00112233,
+ 0x44556677,
+ 0x8899aabb,
+ 0x91929394,
+ 0xa1a2a3a4,
+ 0xb1b2b3b4,
+ 0xc1c2c3c4,
+ 0xd1d2d3d4,
+ 0x7a6b5d3e
+};
+#define NUM_VIARGS_INTS (sizeof viargs/sizeof viargs[0])
+#define NUM_VIARGS_VECS (NUM_VIARGS_INTS/4)
+
+static ldst_test_t ldst_tests[] = { { &test_lxsdx, "lxsdx", viargs, 0, 2, VSX_LOAD },
+ { &test_lxsdx, "lxsdx", viargs, 4, 2, VSX_LOAD },
+ { &test_lxvd2x, "lxvd2x", viargs, 0, 4, VSX_LOAD },
+ { &test_lxvd2x, "lxvd2x", viargs, 4, 4, VSX_LOAD },
+ { &test_lxvdsx, "lxvdsx", viargs, 0, 4, VSX_LOAD_SPLAT },
+ { &test_lxvdsx, "lxvdsx", viargs, 4, 4, VSX_LOAD_SPLAT },
+ { &test_lxvw4x, "lxvw4x", viargs, 0, 4, VSX_LOAD },
+ { &test_lxvw4x, "lxvw4x", viargs, 4, 4, VSX_LOAD },
+ { &test_stxsdx, "stxsdx", vstg, 0, 2, VSX_STORE },
+ { &test_stxsdx, "stxsdx", vstg, 4, 2, VSX_STORE },
+ { &test_stxvd2x, "stxvd2x", vstg, 0, 4, VSX_STORE },
+ { &test_stxvd2x, "stxvd2x", vstg, 4, 4, VSX_STORE },
+ { &test_stxvw4x, "stxvw4x", vstg, 0, 4, VSX_STORE },
+ { &test_stxvw4x, "stxvw4x", vstg, 4, 4, VSX_STORE },
+ { NULL, NULL, NULL, 0, 0, 0 } };
+
+static logic_test_t logic_tests[] = { { &test_xxlxor, "xxlxor", VSX_XOR },
+ { &test_xxlor, "xxlor", VSX_OR } ,
+ { &test_xxlnor, "xxlnor", VSX_NOR },
+ { &test_xxland, "xxland", VSX_AND },
+ { &test_xxlandc, "xxlandc", VSX_ANDC },
+ { NULL, NULL}};
+
+static move_test_t move_tests[] = { { &test_xsabsdp, "xsabsdp", 0, 4, 0x0899aabb91929394ULL },
+ { &test_xscpsgndp, "xscpsgndp", 4, 0, 0x8123456789abcdefULL },
+ { &test_xsnabsdp, "xsnabsdp", 7, 3, 0xc45566778899aabbULL, },
+ { &test_xsnegdp, "xsnegdp", 0, 7, 0x31b2b3b4c1c2c3c4ULL, },
+ { NULL, NULL, 0, 0, 0 }
+
+};
+
+static permute_test_t permute_tests[] =
+{
+ { &test_xxmrghw, "xxmrghw",
+ { 0x11111111, 0x22222222, 0x33333333, 0x44444444 }, /* XA input */
+ { 0x55555555, 0x66666666, 0x77777777, 0x88888888 }, /* XB input */
+ { 0x11111111, 0x55555555, 0x22222222, 0x66666666 } /* XT expected output */
+ },
+ { &test_xxmrghw, "xxmrghw",
+ { 0x00112233, 0x44556677, 0x8899aabb, 0xccddeeff }, /* XA input */
+ { 0x11111111, 0x22222222, 0x33333333, 0x44444444 }, /* XB input */
+ { 0x00112233, 0x11111111, 0x44556677, 0x22222222 } /* XT expected output */
+ },
+ { &test_xxmrglw, "xxmrglw",
+ { 0x11111111, 0x22222222, 0x33333333, 0x44444444 }, /* XA input */
+ { 0x55555555, 0x66666666, 0x77777777, 0x88888888 }, /* XB input */
+ { 0x33333333, 0x77777777, 0x44444444, 0x88888888 } /* XT expected output */
+ },
+ { &test_xxmrglw, "xxmrglw",
+ { 0x00112233, 0x44556677, 0x8899aabb, 0xccddeeff}, /* XA input */
+ { 0x11111111, 0x22222222, 0x33333333, 0x44444444}, /* XB input */
+ { 0x8899aabb, 0x33333333, 0xccddeeff, 0x44444444} /* XT expected output */
+ },
+ { &test_xxpermdi_00, "xxpermdi DM=00",
+ { 0x11111111, 0x22222222, 0x33333333, 0x44444444 }, /* XA input */
+ { 0x55555555, 0x66666666, 0x77777777, 0x88888888 }, /* XB input */
+ { 0x11111111, 0x22222222, 0x55555555, 0x66666666 } /* XT expected output */
+ },
+ { &test_xxpermdi_01, "xxpermdi DM=01",
+ { 0x11111111, 0x22222222, 0x33333333, 0x44444444 }, /* XA input */
+ { 0x55555555, 0x66666666, 0x77777777, 0x88888888 }, /* XB input */
+ { 0x11111111, 0x22222222, 0x77777777, 0x88888888 } /* XT expected output */
+ },
+ { &test_xxpermdi_10, "xxpermdi DM=10",
+ { 0x11111111, 0x22222222, 0x33333333, 0x44444444 }, /* XA input */
+ { 0x55555555, 0x66666666, 0x77777777, 0x88888888 }, /* XB input */
+ { 0x33333333, 0x44444444, 0x55555555, 0x66666666 } /* XT expected output */
+ },
+ { &test_xxpermdi_11, "xxpermdi DM=11",
+ { 0x11111111, 0x22222222, 0x33333333, 0x44444444 }, /* XA input */
+ { 0x55555555, 0x66666666, 0x77777777, 0x88888888 }, /* XB input */
+ { 0x33333333, 0x44444444, 0x77777777, 0x88888888 } /* XT expected output */
+ },
+ { &test_xxsldwi_0, "xxsldwi SHW=0",
+ { 0x11111111, 0x22222222, 0x33333333, 0x44444444 }, /* XA input */
+ { 0x55555555, 0x66666666, 0x77777777, 0x88888888 }, /* XB input */
+ { 0x11111111, 0x22222222, 0x33333333, 0x44444444 } /* XT expected output */
+ },
+ { &test_xxsldwi_1, "xxsldwi SHW=1",
+ { 0x11111111, 0x22222222, 0x33333333, 0x44444444 }, /* XA input */
+ { 0x55555555, 0x66666666, 0x77777777, 0x88888888 }, /* XB input */
+ { 0x22222222, 0x33333333, 0x44444444, 0x55555555 } /* XT expected output */
+ },
+ { &test_xxsldwi_2, "xxsldwi SHW=2",
+ { 0x11111111, 0x22222222, 0x33333333, 0x44444444 }, /* XA input */
+ { 0x55555555, 0x66666666, 0x77777777, 0x88888888 }, /* XB input */
+ { 0x33333333, 0x44444444, 0x55555555, 0x66666666 } /* XT expected output */
+ },
+ { &test_xxsldwi_3, "xxsldwi SHW=3",
+ { 0x11111111, 0x22222222, 0x33333333, 0x44444444 }, /* XA input */
+ { 0x55555555, 0x66666666, 0x77777777, 0x88888888 }, /* XB input */
+ { 0x44444444, 0x55555555, 0x66666666, 0x77777777 } /* XT expected output */
+ },
+ { NULL, NULL }
+};
+
+static fp_test_t fp_tests[] = { { &test_fcfids, "fcfids", 1 },
+ { &test_fcfidus, "fcfidus", 1 },
+ { &test_fcfidu, "fcfidu", 1 },
+ { NULL, NULL, 0 },
+
+};
+
+static vx_fp_test_t vx_fp_tests[] = {
+ { &test_xscmp, "xscmp", xscmpX_tests, 64, VX_FP_CMP},
+ { &test_xsadddp, "xsadddp", xsadddp_tests, 64, VX_FP_OTHER},
+ { &test_xsdivdp, "xsdivdp", xsdivdp_tests, 64, VX_FP_OTHER},
+ { &test_xsmadd, "xsmadd", xsmaddXdp_tests, 64, VX_FP_SMA},
+ { &test_xsmsub, "xsmsub", xsmsubXdp_tests, 64, VX_FP_SMS},
+ { &test_xsnmadd, "xsnmadd", xsnmaddXdp_tests, 64, VX_FP_SNMA},
+ { & test_xsmuldp, "xsmuldp", xsmuldp_tests, 64, VX_FP_OTHER},
+ { & test_xssubdp, "xssubdp", xssubdp_tests, 64, VX_FP_OTHER},
+ { NULL, NULL, NULL, 0, 0 }
+};
+
+static xs_conv_test_t xs_conv_tests[] = {
+ { &test_xscvdpsxds, "xscvdpsxds", xscvdpsxds_results, 15},
+ { &test_xscvsxddp, "xscvsxddp", xscvsxddp_results, 15},
+ { &test_xscvuxddp, "xscvuxddp", xscvuxddp_results, 15},
+ { NULL, NULL, NULL, 0}
+};
+
+#ifdef __powerpc64__
+static void test_ldbrx(void)
+{
+ int i, equality;
+ HWord_t reg_out;
+ unsigned char * byteIn, * byteOut;
+ r14 = (HWord_t)viargs;
+ // Just try the instruction an arbitrary number of times at different r15 offsets.
+ for (i = 0; i < 3; i++) {
+ int j, k;
+ reg_out = 0;
+ r15 = i * 4;
+ equality = 1;
+ __asm__ __volatile__ ("ldbrx %0, %1, %2" : "=r" (reg_out): "b" (r14),"r" (r15));
+ byteIn = ((unsigned char *)(r14 + r15));
+ byteOut = (unsigned char *)&reg_out;
+
+ printf("ldbrx:");
+ for (k = 0; k < 7; k++) {
+ printf( " %02x", (byteIn[k]));
+ }
+ printf(" (reverse) =>");
+ for (j = 0; j < 8; j++) {
+ printf( " %02x", (byteOut[j]));
+ }
+ printf("\n");
+ for (j = 0, k = 7; j < 8; j++, k--) {
+ equality &= (byteIn[k] == byteOut[j]);
+ }
+ if (!equality) {
+ printf("FAILED: load with byte reversal is incorrect\n");
+ errors++;
+ }
+ }
+ printf( "\n" );
+}
+
+static void
+test_popcntd(void)
+{
+ uint64_t res;
+ unsigned long long src = 0x9182736405504536ULL;
+ int i, answer = 0;
+ r14 = src;
+ __asm__ __volatile__ ("popcntd %0, %1" : "=r" (res): "r" (r14));
+ for (i = 0; i < 64; i++) {
+ answer += (r14 & 1ULL);
+ r14 = r14 >> 1;
+ }
+ printf("popcntd: 0x%llx => %d\n", src, (int)res);
+ if (res!= answer) {
+ printf("Error: unexpected result from popcntd\n");
+ errors++;
+ }
+ printf( "\n" );
+}
+#endif
+
+static void
+test_lfiwzx(void)
+{
+ unsigned int i;
+ unsigned int * src;
+ uint64_t reg_out;
+ r14 = (HWord_t)viargs;
+ // Just try the instruction an arbitrary number of times at different r15 offsets.
+ for (i = 0; i < 3; i++) {
+ reg_out = 0;
+ r15 = i * 4;
+ __asm__ __volatile__ ("lfiwzx %0, %1, %2" : "=d" (reg_out): "b" (r14),"r" (r15));
+ src = ((unsigned int *)(r14 + r15));
+ printf("lfiwzx: %u => %llu.00\n", *src, (unsigned long long)reg_out);
+
+ if (reg_out > 0xFFFFFFFFULL || *src != (unsigned int)reg_out) {
+ printf("FAILED: integer load to FP register is incorrect\n");
+ errors++;
+ }
+ }
+ printf( "\n" );
+}
+
+static void test_vx_fp_ops(void)
+{
+
+ test_func_t func;
+ int k;
+ char * test_name = (char *)malloc(20);
+ k = 0;
+
+ build_special_fargs_table();
+ while ((func = vx_fp_tests[k].test_func)) {
+ int i, condreg, repeat = 0;
+ unsigned int flags;
+ unsigned long long * frap, * frbp, * dst;
+ vx_fp_test_t test_group = vx_fp_tests[k];
+ vx_fp_test_type test_type = test_group.test_type;
+
+ switch (test_type) {
+ case VX_FP_CMP:
+ strcpy(test_name, "xscmp");
+ if (!repeat) {
+ repeat = 1;
+ strcat(test_name, "udp");
+ do_cmpudp = 1;
+ }
+ break;
+ case VX_FP_SMA:
+ case VX_FP_SMS:
+ case VX_FP_SNMA:
+ if (test_type == VX_FP_SMA)
+ strcpy(test_name, "xsmadd");
+ else if (test_type == VX_FP_SMS)
+ strcpy(test_name, "xsmsub");
+ else
+ strcpy(test_name, "xsnmadd");
+ if (!repeat) {
+ repeat = 1;
+ strcat(test_name, "adp");
+ do_adp = 1;
+ }
+ break;
+ case VX_FP_OTHER:
+ strcpy(test_name, test_group.name);
+ break;
+ default:
+ printf("ERROR: Invalid VX FP test type %d\n", test_type);
+ exit(1);
+ }
+
+again:
+ for (i = 0; i < test_group.num_tests; i++) {
+ unsigned int * inA, * inB, * pv;
+
+ fp_test_args_t aTest = test_group.targs[i];
+ inA = (unsigned int *)&spec_fargs[aTest.fra_idx];
+ inB = (unsigned int *)&spec_fargs[aTest.frb_idx];
+ frap = (unsigned long long *)&spec_fargs[aTest.fra_idx];
+ frbp = (unsigned long long *)&spec_fargs[aTest.frb_idx];
+ // Only need to copy one doubleword into each vector's element 0
+ memcpy(&vec_inA, inA, 8);
+ memcpy(&vec_inB, inB, 8);
+
+ switch (test_type) {
+ case VX_FP_CMP:
+ SET_FPSCR_ZERO;
+ SET_CR_XER_ZERO;
+ (*func)();
+ GET_CR(flags);
+ condreg = (flags & 0x0f000000) >> 24;
+ printf("#%d: %s %016llx <=> %016llx ? %x (CRx)\n", i, test_name, *frap, *frbp, condreg);
+ // printf("\tFRA: %e; FRB: %e\n", spec_fargs[aTest.fra_idx], spec_fargs[aTest.frb_idx]);
+ if ( condreg != aTest.cr_flags) {
+ printf("Error: Expected CR flags 0x%x; actual flags: 0x%x\n", aTest.cr_flags, condreg);
+ errors++;
+ }
+ break;
+ case VX_FP_SMA:
+ case VX_FP_SMS:
+ case VX_FP_SNMA:
+ case VX_FP_OTHER:
+ {
+ int idx;
+ unsigned long long vsr_XT;
+ pv = (unsigned int *)&vec_out;
+ // clear vec_out
+ for (idx = 0; idx < 4; idx++, pv++)
+ *pv = 0;
+
+ if (test_type != VX_FP_OTHER) {
+ /* Then we need a third src argument, which is stored in element 0 of
+ * VSX[XT] -- i.e., vec_out. For the xs<ZZZ>mdp cases, VSX[XT] holds
+ * src3 and VSX[XB] holds src2; for the xs<ZZZ>adp cases, VSX[XT] holds
+ * src2 and VSX[XB] holds src3. The fp_test_args_t that holds the test
+ * data (input args, result) contain only two inputs, so I arbitrarily
+ * use spec_fargs elements 4 and 14 (alternating) for the third source
+ * argument. We can use the same input data for a given pair of
+ * adp/mdp-type instructions by swapping the src2 and src3 arguments; thus
+ * the expected result should be the same.
+ */
+ int extra_arg_idx;
+ if (i % 2)
+ extra_arg_idx = 4;
+ else
+ extra_arg_idx = 14;
+
+ //memcpy(&vec_out, &spec_fargs[14], 8);
+
+ if (repeat) {
+ /* We're on the first time through of one of the VX_FP_SMx
+ * test types, meaning we're testing a xs<ZZZ>adp case, thus we
+ * have to swap inputs as described above:
+ * src2 <= VSX[XT]
+ * src3 <= VSX[XB]
+ */
+ memcpy(&vec_out, inB, 8); // src2
+ memcpy(&vec_inB, &spec_fargs[extra_arg_idx], 8); //src3
+ frbp = (unsigned long long *)&spec_fargs[extra_arg_idx];
+ } else {
+ // Don't need to init src2, as it's done before the switch()
+ memcpy(&vec_out, &spec_fargs[extra_arg_idx], 8); //src3
+ }
+ memcpy(&vsr_XT, &vec_out, 8);
+ }
+
+ (*func)();
+ dst = (unsigned long long *) &vec_out;
+ if (test_type == VX_FP_OTHER)
+ printf("#%d: %s %016llx %016llx = %016llx\n", i, test_name, *frap, *frbp, *dst);
+ else
+ printf( "#%d: %s %016llx %016llx %016llx = %016llx\n", i,
+ test_name, vsr_XT, *frap, *frbp, *dst );
+
+ if ( *dst != aTest.dp_bin_result) {
+ printf("Error: Expected result %016llx; actual result %016llx\n", aTest.dp_bin_result, *dst);
+ errors++;
+ }
+ /*
+ {
+ // Debug code. Keep this block commented out except when debugging.
+ double result, expected;
+ memcpy(&result, dst, 8);
+ memcpy(&expected, &aTest.dp_bin_result, 8);
+ printf( "\tFRA + FRB: %e + %e: Expected = %e; Actual = %e\n",
+ spec_fargs[aTest.fra_idx], spec_fargs[aTest.frb_idx],
+ expected, result );
+ }
+ */
+ break;
+ }
+ }
+
+
+ }
+ printf( "\n" );
+
+ if (repeat) {
+ repeat = 0;
+ switch (test_type) {
+ case VX_FP_CMP:
+ strcpy(test_name, "xscmp");
+ strcat(test_name, "odp");
+ do_cmpudp = 0;
+ break;
+ case VX_FP_SMA:
+ case VX_FP_SMS:
+ case VX_FP_SNMA:
+ if (test_type == VX_FP_SMA)
+ strcpy(test_name, "xsmadd");
+ else if (test_type == VX_FP_SMS)
+ strcpy(test_name, "xsmsub");
+ else
+ strcpy(test_name, "xsnmadd");
+ strcat(test_name, "mdp");
+ do_adp = 0;
+ break;
+ case VX_FP_OTHER:
+ break;
+ }
+ goto again;
+ }
+ k++;
+ }
+ printf( "\n" );
+ free(test_name);
+}
+
+static void test_xs_conv_ops(void)
+{
+
+ test_func_t func;
+ int k = 0;
+
+ build_special_fargs_table();
+ while ((func = xs_conv_tests[k].test_func)) {
+ int i;
+ unsigned long long * frbp, * dst;
+ xs_conv_test_t test_group = xs_conv_tests[k];
+ for (i = 0; i < test_group.num_tests; i++) {
+ unsigned int * inB, * pv;
+ int idx;
+ unsigned long long exp_result = test_group.results[i];
+ inB = (unsigned int *)&spec_fargs[i];
+ frbp = (unsigned long long *)&spec_fargs[i];
+ memcpy(&vec_inB, inB, 8);
+ pv = (unsigned int *)&vec_out;
+ // clear vec_out
+ for (idx = 0; idx < 4; idx++, pv++)
+ *pv = 0;
+ (*func)();
+ dst = (unsigned long long *) &vec_out;
+ printf("#%d: %s %016llx => %016llx\n", i, test_group.name, *frbp, *dst);
+
+ if ( *dst != exp_result) {
+ printf("Error: Expected result %016llx; actual result %016llx\n", exp_result, *dst);
+ errors++;
+ }
+ }
+ k++;
+ printf("\n");
+ }
+ printf( "\n" );
+}
+
+static void do_load_test(ldst_test_t loadTest)
+{
+ test_func_t func;
+ unsigned int *src, *dst;
+ int splat = loadTest.type == VSX_LOAD_SPLAT ? 1: 0;
+ int i, j, m, equality;
+ i = j = 0;
+
+ func = loadTest.test_func;
+ for (i = 0, r14 = (HWord_t) loadTest.base_addr; i < NUM_VIARGS_VECS; i++) {
+ int again;
+ j = 0;
+ r14 += i * 16;
+ do {
+ unsigned int * pv = (unsigned int *)&vec_out;
+ int idx;
+ // clear vec_out
+ for (idx = 0; idx < 4; idx++, pv+=idx)
+ *pv = 0;
+
+ again = 0;
+ r15 = j;
+
+ // execute test insn
+ (*func)();
+
+ src = (unsigned int*) (((unsigned char *)r14) + j);
+ dst = (unsigned int*) &vec_out;
+
+ printf( "%s:", loadTest.name);
+ for (m = 0; m < loadTest.num_words_to_process; m++) {
+ printf( " %08x", src[splat ? m % 2 : m]);
+ }
+ printf( " =>");
+ for (m = 0; m < loadTest.num_words_to_process; m++) {
+ printf( " %08x", dst[m]);
+ }
+ printf("\n");
+ equality = 1;
+ for (m = 0; m < loadTest.num_words_to_process; m++) {
+ equality = equality && (src[splat ? m % 2 : m] == dst[m]);
+ }
+
+ if (!equality) {
+ printf("FAILED: loaded vector is incorrect\n");
+ errors++;
+ }
+
+ if (j == 0 && loadTest.offset) {
+ again = 1;
+ j += loadTest.offset;
+ }
+ }
+ while (again);
+ }
+}
+
+static void
+do_store_test ( ldst_test_t storeTest )
+{
+ test_func_t func;
+ unsigned int *src, *dst;
+ int i, j, m, equality;
+ i = j = 0;
+
+ func = storeTest.test_func;
+ r14 = (HWord_t) storeTest.base_addr;
+ r15 = (HWord_t) storeTest.offset;
+ unsigned int * pv = (unsigned int *) storeTest.base_addr;
+ int idx;
+ // clear out storage destination
+ for (idx = 0; idx < 4; idx++, pv += idx)
+ *pv = 0;
+
+ memcpy(&vec_inA, &viargs[0], sizeof(vector unsigned char));
+
+ // execute test insn
+ (*func)();
+ src = &viargs[0];
+ dst = (unsigned int*) (((unsigned char *) r14) + storeTest.offset);
+
+ printf( "%s:", storeTest.name );
+ for (m = 0; m < storeTest.num_words_to_process; m++) {
+ printf( " %08x", src[m] );
+ }
+ printf( " =>" );
+ for (m = 0; m < storeTest.num_words_to_process; m++) {
+ printf( " %08x", dst[m] );
+ }
+ printf( "\n" );
+ equality = 1;
+ for (m = 0; m < storeTest.num_words_to_process; m++) {
+ equality = equality && (src[m] == dst[m]);
+ }
+
+ if (!equality) {
+ printf( "FAILED: vector store result is incorrect\n" );
+ errors++;
+ }
+
+}
+
+
+static void test_ldst(void)
+{
+ int k = 0;
+
+ while (ldst_tests[k].test_func) {
+ if (ldst_tests[k].type == VSX_STORE)
+ do_store_test(ldst_tests[k]);
+ else
+ do_load_test(ldst_tests[k]);
+ k++;
+ printf("\n");
+ }
+}
+
+static void test_ftdiv(void)
+{
+ int i, num_tests, crx;
+ unsigned int flags;
+ unsigned long long * frap, * frbp;
+ build_special_fargs_table();
+
+ num_tests = sizeof ftdiv_tests/sizeof ftdiv_tests[0];
+
+ for (i = 0; i < num_tests; i++) {
+ ftdiv_test_args_t aTest = ftdiv_tests[i];
+ f14 = spec_fargs[aTest.fra_idx];
+ f15 = spec_fargs[aTest.frb_idx];
+ frap = (unsigned long long *)&spec_fargs[aTest.fra_idx];
+ frbp = (unsigned long long *)&spec_fargs[aTest.frb_idx];
+ SET_FPSCR_ZERO;
+ SET_CR_XER_ZERO;
+ __asm__ __volatile__ ("ftdiv cr1, %0, %1" : : "d" (f14), "d" (f15));
+ GET_CR(flags);
+ crx = (flags & 0x0f000000) >> 24;
+ printf( "ftdiv: %016llx <=> %016llx ? %x (CRx)\n", *frap, *frbp, crx);
+// printf("\tFRA: %e; FRB: %e\n", f14, f15);
+ if ( crx != aTest.cr_flags) {
+ printf("Error: Expected CR flags 0x%x; actual flags: 0x%x\n", aTest.cr_flags, crx);
+ errors++;
+ }
+ }
+ printf( "\n" );
+}
+
+
+static void test_p7_fpops ( void )
+{
+ int k = 0;
+ test_func_t func;
+
+ build_fargs_table();
+ while ((func = fp_tests[k].test_func)) {
+ float res;
+ double resd;
+ unsigned long long u0;
+ int i;
+ int res32 = strcmp(fp_tests[k].name, "fcfidu");
+
+ for (i = 0; i < nb_fargs; i++) {
+ u0 = *(unsigned long long *) (&fargs[i]);
+ f14 = fargs[i];
+ (*func)();
+ if (res32) {
+ res = f17;
+ printf( "%s %016llx => (raw sp) %08x)",
+ fp_tests[k].name, u0, *((unsigned int *)&res));
+ } else {
+ resd = f17;
+ printf( "%s %016llx => (raw sp) %016llx)",
+ fp_tests[k].name, u0, *(unsigned long long *)(&resd));
+ }
+ printf( "\n" );
+ }
+
+ k++;
+ printf( "\n" );
+ }
+}
+
+static void test_vsx_logic(void)
+{
+ logic_test_t aTest;
+ test_func_t func;
+ int equality, k;
+ k = 0;
+
+ while ((func = logic_tests[k].test_func)) {
+ unsigned int * pv;
+ int startA, startB;
+ unsigned int * inA, * inB, * dst;
+ int idx, i;
+ startA = 0;
+ aTest = logic_tests[k];
+ for (i = 0; i <= (NUM_VIARGS_INTS - (NUM_VIARGS_VECS * sizeof(int))); i++, startA++) {
+ startB = startA + 4;
+ pv = (unsigned int *)&vec_out;
+ inA = &viargs[startA];
+ inB = &viargs[startB];
+ memcpy(&vec_inA, inA, sizeof(vector unsigned char));
+ memcpy(&vec_inB, inB, sizeof(vector unsigned char));
+ // clear vec_out
+ for (idx = 0; idx < 4; idx++, pv++)
+ *pv = 0;
+
+ // execute test insn
+ (*func)();
+ dst = (unsigned int*) &vec_out;
+
+ printf( "%s:", aTest.name);
+ printf( " %08x %08x %08x %08x %s", inA[0], inA[1], inA[2], inA[3], aTest.name);
+ printf( " %08x %08x %08x %08x", inB[0], inB[1], inB[2], inB[3]);
+ printf(" => %08x %08x %08x %08x\n", dst[0], dst[1], dst[2], dst[3]);
+
+ equality = 1;
+ for (idx = 0; idx < 4; idx++) {
+ switch (aTest.op) {
+ case VSX_AND:
+ equality &= (dst[idx] == (inA[idx] & inB[idx]));
+ break;
+ case VSX_ANDC:
+ equality &= (dst[idx] == (inA[idx] & ~inB[idx]));
+ break;
+ case VSX_NOR:
+ equality &= (dst[idx] == ~(inA[idx] | inB[idx]));
+ break;
+ case VSX_XOR:
+ equality &= (dst[idx] == (inA[idx] ^ inB[idx]));
+ break;
+ case VSX_OR:
+ equality &= (dst[idx] == (inA[idx] | inB[idx]));
+ break;
+ default:
+ fprintf(stderr, "Error in test_vsx_logic(): unknown VSX logical op %d\n", aTest.op);
+ exit(1);
+ }
+ }
+ if (!equality) {
+ printf( "FAILED: vector out is incorrect\n" );
+ errors++;
+ }
+ }
+ k++;
+ }
+ printf( "\n" );
+}
+
+static void test_move_ops (void)
+{
+ move_test_t aTest;
+ test_func_t func;
+ int equality, k;
+ k = 0;
+
+ while ((func = move_tests[k].test_func)) {
+ unsigned int * pv;
+ int startA, startB;
+ unsigned int * inA, * inB, * dst;
+ unsigned long long exp_out;
+ int idx;
+ aTest = move_tests[k];
+ exp_out = aTest.expected_result;
+ startA = aTest.xa_idx;
+ startB = aTest.xb_idx;
+ pv = (unsigned int *)&vec_out;
+ inA = &viargs[startA];
+ inB = &viargs[startB];
+ memcpy(&vec_inA, inA, sizeof(vector unsigned char));
+ memcpy(&vec_inB, inB, sizeof(vector unsigned char));
+ // clear vec_out
+ for (idx = 0; idx < 4; idx++, pv++)
+ *pv = 0;
+
+ // execute test insn
+ (*func)();
+ dst = (unsigned int*) &vec_out;
+
+ printf( "%s:", aTest.name);
+ printf( " %08x %08x %s", inA[0], inA[1], aTest.name);
+ printf( " %08x %08xx", inB[0], inB[1]);
+ printf(" => %08x %08x\n", dst[0], dst[1]);
+
+ equality = 1;
+ pv = (unsigned int *)&exp_out;
+ for (idx = 0; idx < 2; idx++) {
+ equality &= (dst[idx] == pv[idx]);
+ }
+ if (!equality) {
+ printf( "FAILED: vector out is incorrect\n" );
+ errors++;
+ }
+ k++;
+ printf( "\n" );
+ }
+}
+
+static void test_permute_ops (void)
+{
+ permute_test_t *aTest;
+ unsigned int *dst = (unsigned int *) &vec_out;
+
+ for (aTest = &(permute_tests[0]); aTest->test_func != NULL; aTest++)
+ {
+ /* Grab test input and clear output vector. */
+ memcpy(&vec_inA, aTest->xa, sizeof(vec_inA));
+ memcpy(&vec_inB, aTest->xb, sizeof(vec_inB));
+ memset(dst, 0, sizeof(vec_out));
+
+ /* execute test insn */
+ aTest->test_func();
+
+ printf( "%s:\n", aTest->name);
+ printf( " XA[%08x,%08x,%08x,%08x]\n",
+ aTest->xa[0], aTest->xa[1], aTest->xa[2], aTest->xa[3]);
+ printf( " XB[%08x,%08x,%08x,%08x]\n",
+ aTest->xb[0], aTest->xb[1], aTest->xb[2], aTest->xb[3]);
+ printf( " => XT[%08x,%08x,%08x,%08x]\n",
+ dst[0], dst[1], dst[2], dst[3]);
+
+ if (memcmp (dst, &aTest->expected_output, sizeof(vec_out)))
+ {
+ printf( "FAILED: vector out is incorrect\n" );
+ errors++;
+ }
+ }
+ printf( "\n" );
+}
+
+static test_table_t all_tests[] = { { &test_ldst,
+ "Test VSX load/store instructions" },
+ { &test_vsx_logic,
+ "Test VSX logic instructions" },
+#ifdef __powerpc64__
+ { &test_ldbrx,
+ "Test ldbrx instruction" },
+ { &test_popcntd,
+ "Test popcntd instruction" },
+#endif
+ { &test_lfiwzx,
+ "Test lfiwzx instruction" },
+ { &test_p7_fpops,
+ "Test P7 floating point convert instructions"},
+ { &test_ftdiv,
+ "Test ftdiv instruction" },
+ { &test_move_ops,
+ "Test VSX move instructions"},
+ { &test_permute_ops,
+ "Test VSX permute instructions"},
+ { &test_vx_fp_ops,
+ "Test VSX floating point instructions"},
+ { &test_xs_conv_ops,
+ "Test VSX scalar integer conversion instructions" },
+ { NULL, NULL }
+};
+#endif // HAS_VSX
+
+int main(int argc, char *argv[])
+{
+#ifdef HAS_VSX
+
+ test_table_t aTest;
+ test_func_t func;
+ int i = 0;
+
+ while ((func = all_tests[i].test_category)) {
+ aTest = all_tests[i];
+ printf( "%s\n", aTest.name );
+ (*func)();
+ i++;
+ }
+ if (errors)
+ printf("Testcase FAILED with %d errors \n", errors);
+ else
+ printf("Testcase PASSED\n");
+
+#endif // HAS _VSX
+
+ return 0;
+}
Index: none/tests/ppc32/test_isa_2_06_part1.stderr.exp
===================================================================
--- /dev/null
+++ none/tests/ppc32/test_isa_2_06_part1.stderr.exp
@@ -0,0 +1,2 @@
+
+
Index: none/tests/ppc32/test_isa_2_06_part1.stdout.exp
===================================================================
--- /dev/null
+++ none/tests/ppc32/test_isa_2_06_part1.stdout.exp
@@ -0,0 +1,1023 @@
+Test VSX load/store instructions
+lxsdx: 01234567 89abcdef => 01234567 89abcdef
+lxsdx: 8899aabb 91929394 => 8899aabb 91929394
+
+lxsdx: 01234567 89abcdef => 01234567 89abcdef
+lxsdx: 89abcdef 00112233 => 89abcdef 00112233
+lxsdx: 8899aabb 91929394 => 8899aabb 91929394
+lxsdx: 91929394 a1a2a3a4 => 91929394 a1a2a3a4
+
+lxvd2x: 01234567 89abcdef 00112233 44556677 => 01234567 89abcdef 00112233 44556677
+lxvd2x: 8899aabb 91929394 a1a2a3a4 b1b2b3b4 => 8899aabb 91929394 a1a2a3a4 b1b2b3b4
+
+lxvd2x: 01234567 89abcdef 00112233 44556677 => 01234567 89abcdef 00112233 44556677
+lxvd2x: 89abcdef 00112233 44556677 8899aabb => 89abcdef 00112233 44556677 8899aabb
+lxvd2x: 8899aabb 91929394 a1a2a3a4 b1b2b3b4 => 8899aabb 91929394 a1a2a3a4 b1b2b3b4
+lxvd2x: 91929394 a1a2a3a4 b1b2b3b4 c1c2c3c4 => 91929394 a1a2a3a4 b1b2b3b4 c1c2c3c4
+
+lxvdsx: 01234567 89abcdef 01234567 89abcdef => 01234567 89abcdef 01234567 89abcdef
+lxvdsx: 8899aabb 91929394 8899aabb 91929394 => 8899aabb 91929394 8899aabb 91929394
+
+lxvdsx: 01234567 89abcdef 01234567 89abcdef => 01234567 89abcdef 01234567 89abcdef
+lxvdsx: 89abcdef 00112233 89abcdef 00112233 => 89abcdef 00112233 89abcdef 00112233
+lxvdsx: 8899aabb 91929394 8899aabb 91929394 => 8899aabb 91929394 8899aabb 91929394
+lxvdsx: 91929394 a1a2a3a4 91929394 a1a2a3a4 => 91929394 a1a2a3a4 91929394 a1a2a3a4
+
+lxvw4x: 01234567 89abcdef 00112233 44556677 => 01234567 89abcdef 00112233 44556677
+lxvw4x: 8899aabb 91929394 a1a2a3a4 b1b2b3b4 => 8899aabb 91929394 a1a2a3a4 b1b2b3b4
+
+lxvw4x: 01234567 89abcdef 00112233 44556677 => 01234567 89abcdef 00112233 44556677
+lxvw4x: 89abcdef 00112233 44556677 8899aabb => 89abcdef 00112233 44556677 8899aabb
+lxvw4x: 8899aabb 91929394 a1a2a3a4 b1b2b3b4 => 8899aabb 91929394 a1a2a3a4 b1b2b3b4
+lxvw4x: 91929394 a1a2a3a4 b1b2b3b4 c1c2c3c4 => 91929394 a1a2a3a4 b1b2b3b4 c1c2c3c4
+
+stxsdx: 01234567 89abcdef => 01234567 89abcdef
+
+stxsdx: 01234567 89abcdef => 01234567 89abcdef
+
+stxvd2x: 01234567 89abcdef 00112233 44556677 => 01234567 89abcdef 00112233 44556677
+
+stxvd2x: 01234567 89abcdef 00112233 44556677 => 01234567 89abcdef 00112233 44556677
+
+stxvw4x: 01234567 89abcdef 00112233 44556677 => 01234567 89abcdef 00112233 44556677
+
+stxvw4x: 01234567 89abcdef 00112233 44556677 => 01234567 89abcdef 00112233 44556677
+
+Test VSX logic instructions
+xxlxor: 01234567 89abcdef 00112233 44556677 xxlxor 8899aabb 91929394 a1a2a3a4 b1b2b3b4 => 89baefdc 18395e7b a1b38197 f5e7d5c3
+xxlxor: 89abcdef 00112233 44556677 8899aabb xxlxor 91929394 a1a2a3a4 b1b2b3b4 c1c2c3c4 => 18395e7b a1b38197 f5e7d5c3 495b697f
+xxlxor: 00112233 44556677 8899aabb 91929394 xxlxor a1a2a3a4 b1b2b3b4 c1c2c3c4 d1d2d3d4 => a1b38197 f5e7d5c3 495b697f 40404040
+xxlxor: 44556677 8899aabb 91929394 a1a2a3a4 xxlxor b1b2b3b4 c1c2c3c4 d1d2d3d4 7a6b5d3e => f5e7d5c3 495b697f 40404040 dbc9fe9a
+xxlor: 01234567 89abcdef 00112233 44556677 xxlor 8899aabb 91929394 a1a2a3a4 b1b2b3b4 => 89bbefff 99bbdfff a1b3a3b7 f5f7f7f7
+xxlor: 89abcdef 00112233 44556677 8899aabb xxlor 91929394 a1a2a3a4 b1b2b3b4 c1c2c3c4 => 99bbdfff a1b3a3b7 f5f7f7f7 c9dbebff
+xxlor: 00112233 44556677 8899aabb 91929394 xxlor a1a2a3a4 b1b2b3b4 c1c2c3c4 d1d2d3d4 => a1b3a3b7 f5f7f7f7 c9dbebff d1d2d3d4
+xxlor: 44556677 8899aabb 91929394 a1a2a3a4 xxlor b1b2b3b4 c1c2c3c4 d1d2d3d4 7a6b5d3e => f5f7f7f7 c9dbebff d1d2d3d4 fbebffbe
+xxlnor: 01234567 89abcdef 00112233 44556677 xxlnor 8899aabb 91929394 a1a2a3a4 b1b2b3b4 => 76441000 66442000 5e4c5c48 0a080808
+xxlnor: 89abcdef 00112233 44556677 8899aabb xxlnor 91929394 a1a2a3a4 b1b2b3b4 c1c2c3c4 => 66442000 5e4c5c48 0a080808 36241400
+xxlnor: 00112233 44556677 8899aabb 91929394 xxlnor a1a2a3a4 b1b2b3b4 c1c2c3c4 d1d2d3d4 => 5e4c5c48 0a080808 36241400 2e2d2c2b
+xxlnor: 44556677 8899aabb 91929394 a1a2a3a4 xxlnor b1b2b3b4 c1c2c3c4 d1d2d3d4 7a6b5d3e => 0a080808 36241400 2e2d2c2b 04140041
+xxland: 01234567 89abcdef 00112233 44556677 xxland 8899aabb 91929394 a1a2a3a4 b1b2b3b4 => 00010023 81828184 00002220 00102234
+xxland: 89abcdef 00112233 44556677 8899aabb xxland 91929394 a1a2a3a4 b1b2b3b4 c1c2c3c4 => 81828184 00002220 00102234 80808280
+xxland: 00112233 44556677 8899aabb 91929394 xxland a1a2a3a4 b1b2b3b4 c1c2c3c4 d1d2d3d4 => 00002220 00102234 80808280 91929394
+xxland: 44556677 8899aabb 91929394 a1a2a3a4 xxland b1b2b3b4 c1c2c3c4 d1d2d3d4 7a6b5d3e => 00102234 80808280 91929394 20220124
+xxlandc: 01234567 89abcdef 00112233 44556677 xxlandc 8899aabb 91929394 a1a2a3a4 b1b2b3b4 => 01224544 08294c6b 00110013 44454443
+xxlandc: 89abcdef 00112233 44556677 8899aabb xxlandc 91929394 a1a2a3a4 b1b2b3b4 c1c2c3c4 => 08294c6b 00110013 44454443 0819283b
+xxlandc: 00112233 44556677 8899aabb 91929394 xxlandc a1a2a3a4 b1b2b3b4 c1c2c3c4 d1d2d3d4 => 00110013 44454443 0819283b 00000000
+xxlandc: 44556677 8899aabb 91929394 a1a2a3a4 xxlandc b1b2b3b4 c1c2c3c4 d1d2d3d4 7a6b5d3e => 44454443 0819283b 00000000 8180a280
+
+Test lfiwzx instruction
+lfiwzx: 19088743 => 19088743.00
+lfiwzx: 2309737967 => 2309737967.00
+lfiwzx: 1122867 => 1122867.00
+
+Test P7 floating point convert instructions
+fcfids 0010000000000001 => (raw sp) 59800000)
+fcfids 00100094e0000359 => (raw sp) 598004a7)
+fcfids 3fe0000000000001 => (raw sp) 5e7f8000)
+fcfids 3fe00094e0000359 => (raw sp) 5e7f8002)
+fcfids 8010000000000001 => (raw sp) deffe000)
+fcfids 80100094e0000359 => (raw sp) deffdfff)
+fcfids bfe0000000000001 => (raw sp) de804000)
+fcfids bfe00094e0000359 => (raw sp) de803fff)
+fcfids 0020000000000b01 => (raw sp) 5a000000)
+fcfids 00000000203f0b3d => (raw sp) 4e00fc2d)
+fcfids 00000000005a203d => (raw sp) 4ab4407a)
+fcfids 8020000000000b01 => (raw sp) deffc000)
+fcfids 80000000203f0b3d => (raw sp) df000000)
+
+fcfidus 0010000000000001 => (raw sp) 59800000)
+fcfidus 00100094e0000359 => (raw sp) 598004a7)
+fcfidus 3fe0000000000001 => (raw sp) 5e7f8000)
+fcfidus 3fe00094e0000359 => (raw sp) 5e7f8002)
+fcfidus 8010000000000001 => (raw sp) 5f001000)
+fcfidus 80100094e0000359 => (raw sp) 5f001001)
+fcfidus bfe0000000000001 => (raw sp) 5f3fe000)
+fcfidus bfe00094e0000359 => (raw sp) 5f3fe001)
+fcfidus 0020000000000b01 => (raw sp) 5a000000)
+fcfidus 00000000203f0b3d => (raw sp) 4e00fc2d)
+fcfidus 00000000005a203d => (raw sp) 4ab4407a)
+fcfidus 8020000000000b01 => (raw sp) 5f002000)
+fcfidus 80000000203f0b3d => (raw sp) 5f000000)
+
+fcfidu 0010000000000001 => (raw sp) 4330000000000001)
+fcfidu 00100094e0000359 => (raw sp) 43300094e0000359)
+fcfidu 3fe0000000000001 => (raw sp) 43cff00000000000)
+fcfidu 3fe00094e0000359 => (raw sp) 43cff0004a700002)
+fcfidu 8010000000000001 => (raw sp) 43e0020000000000)
+fcfidu 80100094e0000359 => (raw sp) 43e00200129c0000)
+fcfidu bfe0000000000001 => (raw sp) 43e7fc0000000000)
+fcfidu bfe00094e0000359 => (raw sp) 43e7fc00129c0000)
+fcfidu 0020000000000b01 => (raw sp) 4340000000000580)
+fcfidu 00000000203f0b3d => (raw sp) 41c01f859e800000)
+fcfidu 00000000005a203d => (raw sp) 4156880f40000000)
+fcfidu 8020000000000b01 => (raw sp) 43e0040000000001)
+fcfidu 80000000203f0b3d => (raw sp) 43e00000000407e1)
+
+Test ftdiv instruction
+ftdiv: 3fd8000000000000 <=> 404f000000000000 ? 8 (CRx)
+ftdiv: 7ff7ffffffffffff <=> 404f000000000000 ? a (CRx)
+ftdiv: 404f000000000000 <=> fff8000000000000 ? a (CRx)
+ftdiv: 3fd8000000000000 <=> 0018000000b77501 ? a (CRx)
+ftdiv: 404f000000000000 <=> 7fe800000000051b ? a (CRx)
+ftdiv: 7fe800000000051b <=> 3fd8000000000000 ? a (CRx)
+ftdiv: 3fd8000000000000 <=> 7fe800000000051b ? a (CRx)
+ftdiv: 0123214569900000 <=> 3fd8000000000000 ? a (CRx)
+ftdiv: 7ff0000000000000 <=> 404f000000000000 ? e (CRx)
+ftdiv: fff0000000000000 <=> 404f000000000000 ? e (CRx)
+ftdiv: 404f000000000000 <=> 7ff0000000000000 ? e (CRx)
+ftdiv: 3fd8000000000000 <=> 8008340000078000 ? e (CRx)
+ftdiv: 0000000000000000 <=> 0000000000000000 ? e (CRx)
+ftdiv: 0000000000000000 <=> 8000000000000000 ? e (CRx)
+
+Test VSX move instructions
+xsabsdp: 01234567 89abcdef xsabsdp 8899aabb 91929394x => 0899aabb 91929394
+
+xscpsgndp: 8899aabb 91929394 xscpsgndp 01234567 89abcdefx => 81234567 89abcdef
+
+xsnabsdp: b1b2b3b4 c1c2c3c4 xsnabsdp 44556677 8899aabbx => c4556677 8899aabb
+
+xsnegdp: 01234567 89abcdef xsnegdp b1b2b3b4 c1c2c3c4x => 31b2b3b4 c1c2c3c4
+
+Test VSX permute instructions
+xxmrghw:
+ XA[11111111,22222222,33333333,44444444]
+ XB[55555555,66666666,77777777,88888888]
+ => XT[11111111,55555555,22222222,66666666]
+xxmrghw:
+ XA[00112233,44556677,8899aabb,ccddeeff]
+ XB[11111111,22222222,33333333,44444444]
+ => XT[00112233,11111111,44556677,22222222]
+xxmrglw:
+ XA[11111111,22222222,33333333,44444444]
+ XB[55555555,66666666,77777777,88888888]
+ => XT[33333333,77777777,44444444,88888888]
+xxmrglw:
+ XA[00112233,44556677,8899aabb,ccddeeff]
+ XB[11111111,22222222,33333333,44444444]
+ => XT[8899aabb,33333333,ccddeeff,44444444]
+xxpermdi DM=00:
+ XA[11111111,22222222,33333333,44444444]
+ XB[55555555,66666666,77777777,88888888]
+ => XT[11111111,22222222,55555555,66666666]
+xxpermdi DM=01:
+ XA[11111111,22222222,33333333,44444444]
+ XB[55555555,66666666,77777777,88888888]
+ => XT[11111111,22222222,77777777,88888888]
+xxpermdi DM=10:
+ XA[11111111,22222222,33333333,44444444]
+ XB[55555555,66666666,77777777,88888888]
+ => XT[33333333,44444444,55555555,66666666]
+xxpermdi DM=11:
+ XA[11111111,22222222,33333333,44444444]
+ XB[55555555,66666666,77777777,88888888]
+ => XT[33333333,44444444,77777777,88888888]
+xxsldwi SHW=0:
+ XA[11111111,22222222,33333333,44444444]
+ XB[55555555,66666666,77777777,88888888]
+ => XT[11111111,22222222,33333333,44444444]
+xxsldwi SHW=1:
+ XA[11111111,22222222,33333333,44444444]
+ XB[55555555,66666666,77777777,88888888]
+ => XT[22222222,33333333,44444444,55555555]
+xxsldwi SHW=2:
+ XA[11111111,22222222,33333333,44444444]
+ XB[55555555,66666666,77777777,88888888]
+ => XT[33333333,44444444,55555555,66666666]
+xxsldwi SHW=3:
+ XA[11111111,22222222,33333333,44444444]
+ XB[55555555,66666666,77777777,88888888]
+ => XT[44444444,55555555,66666666,77777777]
+
+Test VSX floating point instructions
+#0: xscmpudp fff0000000000000 <=> fff0000000000000 ? 2 (CRx)
+#1: xscmpudp fff0000000000000 <=> c0d0650f5a07b353 ? 8 (CRx)
+#2: xscmpudp fff0000000000000 <=> 8000000000000000 ? 8 (CRx)
+#3: xscmpudp fff0000000000000 <=> 0000000000000000 ? 8 (CRx)
+#4: xscmpudp fff0000000000000 <=> 0123214569900000 ? 8 (CRx)
+#5: xscmpudp fff0000000000000 <=> 7ff0000000000000 ? 8 (CRx)
+#6: xscmpudp fff0000000000000 <=> 7ff7ffffffffffff ? 1 (CRx)
+#7: xscmpudp fff0000000000000 <=> 7ff8000000000000 ? 1 (CRx)
+#8: xscmpudp c0d0650f5a07b353 <=> fff0000000000000 ? 4 (CRx)
+#9: xscmpudp c0d0650f5a07b353 <=> c0d0650f5a07b353 ? 2 (CRx)
+#10: xscmpudp c0d0650f5a07b353 <=> 8000000000000000 ? 8 (CRx)
+#11: xscmpudp c0d0650f5a07b353 <=> 0000000000000000 ? 8 (CRx)
+#12: xscmpudp c0d0650f5a07b353 <=> 0123214569900000 ? 8 (CRx)
+#13: xscmpudp c0d0650f5a07b353 <=> 7ff0000000000000 ? 8 (CRx)
+#14: xscmpudp c0d0650f5a07b353 <=> 7ff7ffffffffffff ? 1 (CRx)
+#15: xscmpudp c0d0650f5a07b353 <=> 7ff8000000000000 ? 1 (CRx)
+#16: xscmpudp 8000000000000000 <=> fff0000000000000 ? 4 (CRx)
+#17: xscmpudp 8000000000000000 <=> c0d0650f5a07b353 ? 4 (CRx)
+#18: xscmpudp 8000000000000000 <=> 8000000000000000 ? 2 (CRx)
+#19: xscmpudp 8000000000000000 <=> 0000000000000000 ? 2 (CRx)
+#20: xscmpudp 8000000000000000 <=> 0123214569900000 ? 8 (CRx)
+#21: xscmpudp 8000000000000000 <=> 7ff0000000000000 ? 8 (CRx)
+#22: xscmpudp 8000000000000000 <=> 7ff7ffffffffffff ? 1 (CRx)
+#23: xscmpudp 8000000000000000 <=> 7ff8000000000000 ? 1 (CRx)
+#24: xscmpudp 0000000000000000 <=> fff0000000000000 ? 4 (CRx)
+#25: xscmpudp 0000000000000000 <=> c0d0650f5a07b353 ? 4 (CRx)
+#26: xscmpudp 0000000000000000 <=> 8000000000000000 ? 2 (CRx)
+#27: xscmpudp 0000000000000000 <=> 0000000000000000 ? 2 (CRx)
+#28: xscmpudp 0000000000000000 <=> 0123214569900000 ? 8 (CRx)
+#29: xscmpudp 0000000000000000 <=> 7ff0000000000000 ? 8 (CRx)
+#30: xscmpudp 0000000000000000 <=> 7ff7ffffffffffff ? 1 (CRx)
+#31: xscmpudp 0000000000000000 <=> 7ff8000000000000 ? 1 (CRx)
+#32: xscmpudp 0123214569900000 <=> fff0000000000000 ? 4 (CRx)
+#33: xscmpudp 0123214569900000 <=> c0d0650f5a07b353 ? 4 (CRx)
+#34: xscmpudp 0123214569900000 <=> 8000000000000000 ? 4 (CRx)
+#35: xscmpudp 0123214569900000 <=> 0000000000000000 ? 4 (CRx)
+#36: xscmpudp 0123214569900000 <=> 404f000000000000 ? 8 (CRx)
+#37: xscmpudp 0123214569900000 <=> 7ff0000000000000 ? 8 (CRx)
+#38: xscmpudp 0123214569900000 <=> 7ff7ffffffffffff ? 1 (CRx)
+#39: xscmpudp 0123214569900000 <=> 7ff8000000000000 ? 1 (CRx)
+#40: xscmpudp 7ff0000000000000 <=> fff0000000000000 ? 4 (CRx)
+#41: xscmpudp 7ff0000000000000 <=> c0d0650f5a07b353 ? 4 (CRx)
+#42: xscmpudp 7ff0000000000000 <=> 8000000000000000 ? 4 (CRx)
+#43: xscmpudp 7ff0000000000000 <=> 0000000000000000 ? 4 (CRx)
+#44: xscmpudp 7ff0000000000000 <=> 0123214569900000 ? 4 (CRx)
+#45: xscmpudp 7ff0000000000000 <=> 7ff0000000000000 ? 2 (CRx)
+#46: xscmpudp 7ff0000000000000 <=> 7ff7ffffffffffff ? 1 (CRx)
+#47: xscmpudp 7ff0000000000000 <=> 7ff8000000000000 ? 1 (CRx)
+#48: xscmpudp fff7ffffffffffff <=> fff0000000000000 ? 1 (CRx)
+#49: xscmpudp fff7ffffffffffff <=> c0d0650f5a07b353 ? 1 (CRx)
+#50: xscmpudp fff7ffffffffffff <=> 8000000000000000 ? 1 (CRx)
+#51: xscmpudp fff7ffffffffffff <=> 0000000000000000 ? 1 (CRx)
+#52: xscmpudp fff7ffffffffffff <=> 0123214569900000 ? 1 (CRx)
+#53: xscmpudp fff7ffffffffffff <=> 7ff0000000000000 ? 1 (CRx)
+#54: xscmpudp fff7ffffffffffff <=> 7ff7ffffffffffff ? 1 (CRx)
+#55: xscmpudp fff7ffffffffffff <=> 7ff8000000000000 ? 1 (CRx)
+#56: xscmpudp fff8000000000000 <=> fff0000000000000 ? 1 (CRx)
+#57: xscmpudp fff8000000000000 <=> c0d0650f5a07b353 ? 1 (CRx)
+#58: xscmpudp fff8000000000000 <=> 8000000000000000 ? 1 (CRx)
+#59: xscmpudp fff8000000000000 <=> 0000000000000000 ? 1 (CRx)
+#60: xscmpudp fff8000000000000 <=> 0123214569900000 ? 1 (CRx)
+#61: xscmpudp fff8000000000000 <=> 7ff0000000000000 ? 1 (CRx)
+#62: xscmpudp fff8000000000000 <=> 7ff7ffffffffffff ? 1 (CRx)
+#63: xscmpudp fff8000000000000 <=> 7ff8000000000000 ? 1 (CRx)
+
+#0: xscmpodp fff0000000000000 <=> fff0000000000000 ? 2 (CRx)
+#1: xscmpodp fff0000000000000 <=> c0d0650f5a07b353 ? 8 (CRx)
+#2: xscmpodp fff0000000000000 <=> 8000000000000000 ? 8 (CRx)
+#3: xscmpodp fff0000000000000 <=> 0000000000000000 ? 8 (CRx)
+#4: xscmpodp fff0000000000000 <=> 0123214569900000 ? 8 (CRx)
+#5: xscmpodp fff0000000000000 <=> 7ff0000000000000 ? 8 (CRx)
+#6: xscmpodp fff0000000000000 <=> 7ff7ffffffffffff ? 1 (CRx)
+#7: xscmpodp fff0000000000000 <=> 7ff8000000000000 ? 1 (CRx)
+#8: xscmpodp c0d0650f5a07b353 <=> fff0000000000000 ? 4 (CRx)
+#9: xscmpodp c0d0650f5a07b353 <=> c0d0650f5a07b353 ? 2 (CRx)
+#10: xscmpodp c0d0650f5a07b353 <=> 8000000000000000 ? 8 (CRx)
+#11: xscmpodp c0d0650f5a07b353 <=> 0000000000000000 ? 8 (CRx)
+#12: xscmpodp c0d0650f5a07b353 <=> 0123214569900000 ? 8 (CRx)
+#13: xscmpodp c0d0650f5a07b353 <=> 7ff0000000000000 ? 8 (CRx)
+#14: xscmpodp c0d0650f5a07b353 <=> 7ff7ffffffffffff ? 1 (CRx)
+#15: xscmpodp c0d0650f5a07b353 <=> 7ff8000000000000 ? 1 (CRx)
+#16: xscmpodp 8000000000000000 <=> fff0000000000000 ? 4 (CRx)
+#17: xscmpodp 8000000000000000 <=> c0d0650f5a07b353 ? 4 (CRx)
+#18: xscmpodp 8000000000000000 <=> 8000000000000000 ? 2 (CRx)
+#19: xscmpodp 8000000000000000 <=> 0000000000000000 ? 2 (CRx)
+#20: xscmpodp 8000000000000000 <=> 0123214569900000 ? 8 (CRx)
+#21: xscmpodp 8000000000000000 <=> 7ff0000000000000 ? 8 (CRx)
+#22: xscmpodp 8000000000000000 <=> 7ff7ffffffffffff ? 1 (CRx)
+#23: xscmpodp 8000000000000000 <=> 7ff8000000000000 ? 1 (CRx)
+#24: xscmpodp 0000000000000000 <=> fff0000000000000 ? 4 (CRx)
+#25: xscmpodp 0000000000000000 <=> c0d0650f5a07b353 ? 4 (CRx)
+#26: xscmpodp 0000000000000000 <=> 8000000000000000 ? 2 (CRx)
+#27: xscmpodp 0000000000000000 <=> 0000000000000000 ? 2 (CRx)
+#28: xscmpodp 0000000000000000 <=> 0123214569900000 ? 8 (CRx)
+#29: xscmpodp 0000000000000000 <=> 7ff0000000000000 ? 8 (CRx)
+#30: xscmpodp 0000000000000000 <=> 7ff7ffffffffffff ? 1 (CRx)
+#31: xscmpodp 0000000000000000 <=> 7ff8000000000000 ? 1 (CRx)
+#32: xscmpodp 0123214569900000 <=> fff0000000000000 ? 4 (CRx)
+#33: xscmpodp 0123214569900000 <=> c0d0650f5a07b353 ? 4 (CRx)
+#34: xscmpodp 0123214569900000 <=> 8000000000000000 ? 4 (CRx)
+#35: xscmpodp 0123214569900000 <=> 0000000000000000 ? 4 (CRx)
+#36: xscmpodp 0123214569900000 <=> 404f000000000000 ? 8 (CRx)
+#37: xscmpodp 0123214569900000 <=> 7ff0000000000000 ? 8 (CRx)
+#38: xscmpodp 0123214569900000 <=> 7ff7ffffffffffff ? 1 (CRx)
+#39: xscmpodp 0123214569900000 <=> 7ff8000000000000 ? 1 (CRx)
+#40: xscmpodp 7ff0000000000000 <=> fff0000000000000 ? 4 (CRx)
+#41: xscmpodp 7ff0000000000000 <=> c0d0650f5a07b353 ? 4 (CRx)
+#42: xscmpodp 7ff0000000000000 <=> 8000000000000000 ? 4 (CRx)
+#43: xscmpodp 7ff0000000000000 <=> 0000000000000000 ? 4 (CRx)
+#44: xscmpodp 7ff0000000000000 <=> 0123214569900000 ? 4 (CRx)
+#45: xscmpodp 7ff0000000000000 <=> 7ff0000000000000 ? 2 (CRx)
+#46: xscmpodp 7ff0000000000000 <=> 7ff7ffffffffffff ? 1 (CRx)
+#47: xscmpodp 7ff0000000000000 <=> 7ff8000000000000 ? 1 (CRx)
+#48: xscmpodp fff7ffffffffffff <=> fff0000000000000 ? 1 (CRx)
+#49: xscmpodp fff7ffffffffffff <=> c0d0650f5a07b353 ? 1 (CRx)
+#50: xscmpodp fff7ffffffffffff <=> 8000000000000000 ? 1 (CRx)
+#51: xscmpodp fff7ffffffffffff <=> 0000000000000000 ? 1 (CRx)
+#52: xscmpodp fff7ffffffffffff <=> 0123214569900000 ? 1 (CRx)
+#53: xscmpodp fff7ffffffffffff <=> 7ff0000000000000 ? 1 (CRx)
+#54: xscmpodp fff7ffffffffffff <=> 7ff7ffffffffffff ? 1 (CRx)
+#55: xscmpodp fff7ffffffffffff <=> 7ff8000000000000 ? 1 (CRx)
+#56: xscmpodp fff8000000000000 <=> fff0000000000000 ? 1 (CRx)
+#57: xscmpodp fff8000000000000 <=> c0d0650f5a07b353 ? 1 (CRx)
+#58: xscmpodp fff8000000000000 <=> 8000000000000000 ? 1 (CRx)
+#59: xscmpodp fff8000000000000 <=> 0000000000000000 ? 1 (CRx)
+#60: xscmpodp fff8000000000000 <=> 0123214569900000 ? 1 (CRx)
+#61: xscmpodp fff8000000000000 <=> 7ff0000000000000 ? 1 (CRx)
+#62: xscmpodp fff8000000000000 <=> 7ff7ffffffffffff ? 1 (CRx)
+#63: xscmpodp fff8000000000000 <=> 7ff8000000000000 ? 1 (CRx)
+
+#0: xsadddp fff0000000000000 fff0000000000000 = fff0000000000000
+#1: xsadddp fff0000000000000 c0d0650f5a07b353 = fff0000000000000
+#2: xsadddp fff0000000000000 8000000000000000 = fff0000000000000
+#3: xsadddp fff0000000000000 0000000000000000 = fff0000000000000
+#4: xsadddp fff0000000000000 0123214569900000 = fff0000000000000
+#5: xsadddp fff0000000000000 7ff0000000000000 = 7ff8000000000000
+#6: xsadddp fff0000000000000 7ff7ffffffffffff = 7fffffffffffffff
+#7: xsadddp fff0000000000000 7ff8000000000000 = 7ff8000000000000
+#8: xsadddp c0d0650f5a07b353 fff0000000000000 = fff0000000000000
+#9: xsadddp c0d0650f5a07b353 c0d0650f5a07b353 = c0e0650f5a07b353
+#10: xsadddp c0d0650f5a07b353 8000000000000000 = c0d0650f5a07b353
+#11: xsadddp c0d0650f5a07b353 0000000000000000 = c0d0650f5a07b353
+#12: xsadddp c0d0650f5a07b353 0123214569900000 = c0d0650f5a07b353
+#13: xsadddp c0d0650f5a07b353 7ff0000000000000 = 7ff0000000000000
+#14: xsadddp c0d0650f5a07b353 7ff7ffffffffffff = 7fffffffffffffff
+#15: xsadddp c0d0650f5a07b353 7ff8000000000000 = 7ff8000000000000
+#16: xsadddp 8000000000000000 fff0000000000000 = fff0000000000000
+#17: xsadddp 8000000000000000 c0d0650f5a07b353 = c0d0650f5a07b353
+#18: xsadddp 8000000000000000 8000000000000000 = 8000000000000000
+#19: xsadddp 8000000000000000 0000000000000000 = 0000000000000000
+#20: xsadddp 8000000000000000 0123214569900000 = 0123214569900000
+#21: xsadddp 8000000000000000 7ff0000000000000 = 7ff0000000000000
+#22: xsadddp 8000000000000000 7ff7ffffffffffff = 7fffffffffffffff
+#23: xsadddp 8000000000000000 7ff8000000000000 = 7ff8000000000000
+#24: xsadddp 0000000000000000 fff0000000000000 = fff0000000000000
+#25: xsadddp 0000000000000000 c0d0650f5a07b353 = c0d0650f5a07b353
+#26: xsadddp 0000000000000000 8000000000000000 = 0000000000000000
+#27: xsadddp 0000000000000000 0000000000000000 = 0000000000000000
+#28: xsadddp 0000000000000000 0123214569900000 = 0123214569900000
+#29: xsadddp 0000000000000000 7ff0000000000000 = 7ff0000000000000
+#30: xsadddp 0000000000000000 7ff7ffffffffffff = 7fffffffffffffff
+#31: xsadddp 0000000000000000 7ff8000000000000 = 7ff8000000000000
+#32: xsadddp 0123214569900000 fff0000000000000 = fff0000000000000
+#33: xsadddp 0123214569900000 c0d0650f5a07b353 = c0d0650f5a07b353
+#34: xsadddp 0123214569900000 8000000000000000 = 0123214569900000
+#35: xsadddp 0123214569900000 0000000000000000 = 0123214569900000
+#36: xsadddp 0123214569900000 404f000000000000 = 404f000000000000
+#37: xsadddp 0123214569900000 7ff0000000000000 = 7ff0000000000000
+#38: xsadddp 0123214569900000 7ff7ffffffffffff = 7fffffffffffffff
+#39: xsadddp 0123214569900000 7ff8000000000000 = 7ff8000000000000
+#40: xsadddp 7ff0000000000000 fff0000000000000 = 7ff8000000000000
+#41: xsadddp 7ff0000000000000 c0d0650f5a07b353 = 7ff0000000000000
+#42: xsadddp 7ff0000000000000 8000000000000000 = 7ff0000000000000
+#43: xsadddp 7ff0000000000000 0000000000000000 = 7ff0000000000000
+#44: xsadddp 7ff0000000000000 0123214569900000 = 7ff0000000000000
+#45: xsadddp 7ff0000000000000 7ff0000000000000 = 7ff0000000000000
+#46: xsadddp 7ff0000000000000 7ff7ffffffffffff = 7fffffffffffffff
+#47: xsadddp 7ff0000000000000 7ff8000000000000 = 7ff8000000000000
+#48: xsadddp fff7ffffffffffff fff0000000000000 = ffffffffffffffff
+#49: xsadddp fff7ffffffffffff c0d0650f5a07b353 = ffffffffffffffff
+#50: xsadddp fff7ffffffffffff 8000000000000000 = ffffffffffffffff
+#51: xsadddp fff7ffffffffffff 0000000000000000 = ffffffffffffffff
+#52: xsadddp fff7ffffffffffff 0123214569900000 = ffffffffffffffff
+#53: xsadddp fff7ffffffffffff 7ff0000000000000 = ffffffffffffffff
+#54: xsadddp fff7ffffffffffff 7ff7ffffffffffff = ffffffffffffffff
+#55: xsadddp fff7ffffffffffff 7ff8000000000000 = ffffffffffffffff
+#56: xsadddp fff8000000000000 fff0000000000000 = fff8000000000000
+#57: xsadddp fff8000000000000 c0d0650f5a07b353 = fff8000000000000
+#58: xsadddp fff8000000000000 8000000000000000 = fff8000000000000
+#59: xsadddp fff8000000000000 0000000000000000 = fff8000000000000
+#60: xsadddp fff8000000000000 0123214569900000 = fff8000000000000
+#61: xsadddp fff8000000000000 7ff0000000000000 = fff8000000000000
+#62: xsadddp fff8000000000000 7ff7ffffffffffff = fff8000000000000
+#63: xsadddp fff8000000000000 7ff8000000000000 = fff8000000000000
+
+#0: xsdivdp fff0000000000000 fff0000000000000 = 7ff8000000000000
+#1: xsdivdp fff0000000000000 c0d0650f5a07b353 = 7ff0000000000000
+#2: xsdivdp fff0000000000000 8000000000000000 = 7ff0000000000000
+#3: xsdivdp fff0000000000000 0000000000000000 = fff0000000000000
+#4: xsdivdp fff0000000000000 0123214569900000 = fff0000000000000
+#5: xsdivdp fff0000000000000 7ff0000000000000 = 7ff8000000000000
+#6: xsdivdp fff0000000000000 7ff7ffffffffffff = 7fffffffffffffff
+#7: xsdivdp fff0000000000000 7ff8000000000000 = 7ff8000000000000
+#8: xsdivdp c0d0650f5a07b353 fff0000000000000 = 0000000000000000
+#9: xsdivdp c0d0650f5a07b353 c0d0650f5a07b353 = 3ff0000000000000
+#10: xsdivdp c0d0650f5a07b353 8000000000000000 = 7ff0000000000000
+#11: xsdivdp c0d0650f5a07b353 0000000000000000 = fff0000000000000
+#12: xsdivdp c0d0650f5a07b353 0123214569900000 = ff9b6cb57ca13c00
+#13: xsdivdp c0d0650f5a07b353 7ff0000000000000 = 8000000000000000
+#14: xsdivdp c0d0650f5a07b353 7ff7ffffffffffff = 7fffffffffffffff
+#15: xsdivdp c0d0650f5a07b353 7ff8000000000000 = 7ff8000000000000
+#16: xsdivdp 8000000000000000 fff0000000000000 = 0000000000000000
+#17: xsdivdp 8000000000000000 c0d0650f5a07b353 = 0000000000000000
+#18: xsdivdp 8000000000000000 8000000000000000 = 7ff8000000000000
+#19: xsdivdp 8000000000000000 0000000000000000 = 7ff8000000000000
+#20: xsdivdp 8000000000000000 0123214569900000 = 8000000000000000
+#21: xsdivdp 8000000000000000 7ff0000000000000 = 8000000000000000
+#22: xsdivdp 8000000000000000 7ff7ffffffffffff = 7fffffffffffffff
+#23: xsdivdp 8000000000000000 7ff8000000000000 = 7ff8000000000000
+#24: xsdivdp 0000000000000000 fff0000000000000 = 8000000000000000
+#25: xsdivdp 0000000000000000 c0d0650f5a07b353 = 8000000000000000
+#26: xsdivdp 0000000000000000 8000000000000000 = 7ff8000000000000
+#27: xsdivdp 0000000000000000 0000000000000000 = 7ff8000000000000
+#28: xsdivdp 0000000000000000 0123214569900000 = 0000000000000000
+#29: xsdivdp 0000000000000000 7ff0000000000000 = 0000000000000000
+#30: xsdivdp 0000000000000000 7ff7ffffffffffff = 7fffffffffffffff
+#31: xsdivdp 0000000000000000 7ff8000000000000 = 7ff8000000000000
+#32: xsdivdp 0123214569900000 fff0000000000000 = 8000000000000000
+#33: xsdivdp 0123214569900000 c0d0650f5a07b353 = 8042ab59d8b6ec87
+#34: xsdivdp 0123214569900000 8000000000000000 = fff0000000000000
+#35: xsdivdp 0123214569900000 0000000000000000 = 7ff0000000000000
+#36: xsdivdp 0123214569900000 404f000000000000 = 00c3bf3f64b5ad6b
+#37: xsdivdp 0123214569900000 7ff0000000000000 = 0000000000000000
+#38: xsdivdp 0123214569900000 7ff7ffffffffffff = 7fffffffffffffff
+#39: xsdivdp 0123214569900000 7ff8000000000000 = 7ff8000000000000
+#40: xsdivdp 7ff0000000000000 fff0000000000000 = 7ff8000000000000
+#41: xsdivdp 7ff0000000000000 c0d0650f5a07b353 = fff0000000000000
+#42: xsdivdp 7ff0000000000000 8000000000000000 = fff0000000000000
+#43: xsdivdp 7ff0000000000000 0000000000000000 = 7ff0000000000000
+#44: xsdivdp 7ff0000000000000 0123214569900000 = 7ff0000000000000
+#45: xsdivdp 7ff0000000000000 7ff0000000000000 = 7ff8000000000000
+#46: xsdivdp 7ff0000000000000 7ff7ffffffffffff = 7fffffffffffffff
+#47: xsdivdp 7ff0000000000000 7ff8000000000000 = 7ff8000000000000
+#48: xsdivdp fff7ffffffffffff fff0000000000000 = ffffffffffffffff
+#49: xsdivdp fff7ffffffffffff c0d0650f5a07b353 = ffffffffffffffff
+#50: xsdivdp fff7ffffffffffff 8000000000000000 = ffffffffffffffff
+#51: xsdivdp fff7ffffffffffff 0000000000000000 = ffffffffffffffff
+#52: xsdivdp fff7ffffffffffff 0123214569900000 = ffffffffffffffff
+#53: xsdivdp fff7ffffffffffff 7ff0000000000000 = ffffffffffffffff
+#54: xsdivdp fff7ffffffffffff 7ff7ffffffffffff = ffffffffffffffff
+#55: xsdivdp fff7ffffffffffff 7ff8000000000000 = ffffffffffffffff
+#56: xsdivdp fff8000000000000 fff0000000000000 = fff8000000000000
+#57: xsdivdp fff8000000000000 c0d0650f5a07b353 = fff8000000000000
+#58: xsdivdp fff8000000000000 8000000000000000 = fff8000000000000
+#59: xsdivdp fff8000000000000 0000000000000000 = fff8000000000000
+#60: xsdivdp fff8000000000000 0123214569900000 = fff8000000000000
+#61: xsdivdp fff8000000000000 7ff0000000000000 = fff8000000000000
+#62: xsdivdp fff8000000000000 7ff7ffffffffffff = fff8000000000000
+#63: xsdivdp fff8000000000000 7ff8000000000000 = fff8000000000000
+
+#0: xsmaddadp fff0000000000000 fff0000000000000 c0d0650f5a07b353 = 7ff8000000000000
+#1: xsmaddadp c0d0650f5a07b353 fff0000000000000 0123214569900000 = fff0000000000000
+#2: xsmaddadp 8000000000000000 fff0000000000000 c0d0650f5a07b353 = 7ff0000000000000
+#3: xsmaddadp 0000000000000000 fff0000000000000 0123214569900000 = fff0000000000000
+#4: xsmaddadp 0123214569900000 fff0000000000000 c0d0650f5a07b353 = 7ff0000000000000
+#5: xsmaddadp 7ff0000000000000 fff0000000000000 0123214569900000 = 7ff8000000000000
+#6: xsmaddadp 7ff7ffffffffffff fff0000000000000 c0d0650f5a07b353 = 7fffffffffffffff
+#7: xsmaddadp 7ff8000000000000 fff0000000000000 0123214569900000 = 7ff8000000000000
+#8: xsmaddadp fff0000000000000 c0d0650f5a07b353 c0d0650f5a07b353 = fff0000000000000
+#9: xsmaddadp c0d0650f5a07b353 c0d0650f5a07b353 0123214569900000 = c0d0650f5a07b353
+#10: xsmaddadp 8000000000000000 c0d0650f5a07b353 c0d0650f5a07b353 = 41b0cc9d05eec2a7
+#11: xsmaddadp 0000000000000000 c0d0650f5a07b353 0123214569900000 = 82039a19ca8fcb5f
+#12: xsmaddadp 0123214569900000 c0d0650f5a07b353 c0d0650f5a07b353 = 41b0cc9d05eec2a7
+#13: xsmaddadp 7ff0000000000000 c0d0650f5a07b353 0123214569900000 = 7ff0000000000000
+#14: xsmaddadp 7ff7ffffffffffff c0d0650f5a07b353 c0d0650f5a07b353 = 7fffffffffffffff
+#15: xsmaddadp 7ff8000000000000 c0d0650f5a07b353 0123214569900000 = 7ff8000000000000
+#16: xsmaddadp fff0000000000000 8000000000000000 c0d0650f5a07b353 = fff0000000000000
+#17: xsmaddadp c0d0650f5a07b353 8000000000000000 0123214569900000 = c0d0650f5a07b353
+#18: xsmaddadp 8000000000000000 8000000000000000 c0d0650f5a07b353 = 0000000000000000
+#19: xsmaddadp 0000000000000000 8000000000000000 0123214569900000 = 0000000000000000
+#20: xsmaddadp 0123214569900000 8000000000000000 c0d0650f5a07b353 = 0123214569900000
+#21: xsmaddadp 7ff0000000000000 8000000000000000 0123214569900000 = 7ff0000000000000
+#22: xsmaddadp 7ff7ffffffffffff 8000000000000000 c0d0650f5a07b353 = 7fffffffffffffff
+#23: xsmaddadp 7ff8000000000000 8000000000000000 0123214569900000 = 7ff8000000000000
+#24: xsmaddadp fff0000000000000 0000000000000000 c0d0650f5a07b353 = fff0000000000000
+#25: xsmaddadp c0d0650f5a07b353 0000000000000000 0123214569900000 = c0d0650f5a07b353
+#26: xsmaddadp 8000000000000000 0000000000000000 c0d0650f5a07b353 = 8000000000000000
+#27: xsmaddadp 0000000000000000 0000000000000000 0123214569900000 = 0000000000000000
+#28: xsmaddadp 0123214569900000 0000000000000000 c0d0650f5a07b353 = 0123214569900000
+#29: xsmaddadp 7ff0000000000000 0000000000000000 0123214569900000 = 7ff0000000000000
+#30: xsmaddadp 7ff7ffffffffffff 0000000000000000 c0d0650f5a07b353 = 7fffffffffffffff
+#31: xsmaddadp 7ff8000000000000 0000000000000000 0123214569900000 = 7ff8000000000000
+#32: xsmaddadp fff0000000000000 0123214569900000 c0d0650f5a07b353 = fff0000000000000
+#33: xsmaddadp c0d0650f5a07b353 0123214569900000 0123214569900000 = c0d0650f5a07b353
+#34: xsmaddadp 8000000000000000 0123214569900000 c0d0650f5a07b353 = 82039a19ca8fcb5f
+#35: xsmaddadp 0000000000000000 0123214569900000 0123214569900000 = 0000000000000000
+#36: xsmaddadp 404f000000000000 0123214569900000 c0d0650f5a07b353 = 404f000000000000
+#37: xsmaddadp 7ff0000000000000 0123214569900000 0123214569900000 = 7ff0000000000000
+#38: xsmaddadp 7ff7ffffffffffff 0123214569900000 c0d0650f5a07b353 = 7fffffffffffffff
+#39: xsmaddadp 7ff8000000000000 0123214569900000 0123214569900000 = 7ff8000000000000
+#40: xsmaddadp fff0000000000000 7ff0000000000000 c0d0650f5a07b353 = fff0000000000000
+#41: xsmaddadp c0d0650f5a07b353 7ff0000000000000 0123214569900000 = 7ff0000000000000
+#42: xsmaddadp 8000000000000000 7ff0000000000000 c0d0650f5a07b353 = fff0000000000000
+#43: xsmaddadp 0000000000000000 7ff0000000000000 0123214569900000 = 7ff0000000000000
+#44: xsmaddadp 0123214569900000 7ff0000000000000 c0d0650f5a07b353 = fff0000000000000
+#45: xsmaddadp 7ff0000000000000 7ff0000000000000 0123214569900000 = 7ff0000000000000
+#46: xsmaddadp 7ff7ffffffffffff 7ff0000000000000 c0d0650f5a07b353 = 7fffffffffffffff
+#47: xsmaddadp 7ff8000000000000 7ff0000000000000 0123214569900000 = 7ff8000000000000
+#48: xsmaddadp fff0000000000000 fff7ffffffffffff c0d0650f5a07b353 = ffffffffffffffff
+#49: xsmaddadp c0d0650f5a07b353 fff7ffffffffffff 0123214569900000 = ffffffffffffffff
+#50: xsmaddadp 8000000000000000 fff7ffffffffffff c0d0650f5a07b353 = ffffffffffffffff
+#51: xsmaddadp 0000000000000000 fff7ffffffffffff 0123214569900000 = ffffffffffffffff
+#52: xsmaddadp 0123214569900000 fff7ffffffffffff c0d0650f5a07b353 = ffffffffffffffff
+#53: xsmaddadp 7ff0000000000000 fff7ffffffffffff 0123214569900000 = ffffffffffffffff
+#54: xsmaddadp 7ff7ffffffffffff fff7ffffffffffff c0d0650f5a07b353 = ffffffffffffffff
+#55: xsmaddadp 7ff8000000000000 fff7ffffffffffff 0123214569900000 = ffffffffffffffff
+#56: xsmaddadp fff0000000000000 fff8000000000000 c0d0650f5a07b353 = fff8000000000000
+#57: xsmaddadp c0d0650f5a07b353 fff8000000000000 0123214569900000 = fff8000000000000
+#58: xsmaddadp 8000000000000000 fff8000000000000 c0d0650f5a07b353 = fff8000000000000
+#59: xsmaddadp 0000000000000000 fff8000000000000 0123214569900000 = fff8000000000000
+#60: xsmaddadp 0123214569900000 fff8000000000000 c0d0650f5a07b353 = fff8000000000000
+#61: xsmaddadp 7ff0000000000000 fff8000000000000 0123214569900000 = fff8000000000000
+#62: xsmaddadp 7ff7ffffffffffff fff8000000000000 c0d0650f5a07b353 = fff8000000000000
+#63: xsmaddadp 7ff8000000000000 fff8000000000000 0123214569900000 = fff8000000000000
+
+#0: xsmaddmdp c0d0650f5a07b353 fff0000000000000 fff0000000000000 = 7ff8000000000000
+#1: xsmaddmdp 0123214569900000 fff0000000000000 c0d0650f5a07b353 = fff0000000000000
+#2: xsmaddmdp c0d0650f5a07b353 fff0000000000000 8000000000000000 = 7ff0000000000000
+#3: xsmaddmdp 0123214569900000 fff0000000000000 0000000000000000 = fff0000000000000
+#4: xsmaddmdp c0d0650f5a07b353 fff0000000000000 0123214569900000 = 7ff0000000000000
+#5: xsmaddmdp 0123214569900000 fff0000000000000 7ff0000000000000 = 7ff8000000000000
+#6: xsmaddmdp c0d0650f5a07b353 fff0000000000000 7ff7ffffffffffff = 7fffffffffffffff
+#7: xsmaddmdp 0123214569900000 fff0000000000000 7ff8000000000000 = 7ff8000000000000
+#8: xsmaddmdp c0d0650f5a07b353 c0d0650f5a07b353 fff0000000000000 = fff0000000000000
+#9: xsmaddmdp 0123214569900000 c0d0650f5a07b353 c0d0650f5a07b353 = c0d0650f5a07b353
+#10: xsmaddmdp c0d0650f5a07b353 c0d0650f5a07b353 8000000000000000 = 41b0cc9d05eec2a7
+#11: xsmaddmdp 0123214569900000 c0d0650f5a07b353 0000000000000000 = 82039a19ca8fcb5f
+#12: xsmaddmdp c0d0650f5a07b353 c0d0650f5a07b353 0123214569900000 = 41b0cc9d05eec2a7
+#13: xsmaddmdp 0123214569900000 c0d0650f5a07b353 7ff0000000000000 = 7ff0000000000000
+#14: xsmaddmdp c0d0650f5a07b353 c0d0650f5a07b353 7ff7ffffffffffff = 7fffffffffffffff
+#15: xsmaddmdp 0123214569900000 c0d0650f5a07b353 7ff8000000000000 = 7ff8000000000000
+#16: xsmaddmdp c0d0650f5a07b353 8000000000000000 fff0000000000000 = fff0000000000000
+#17: xsmaddmdp 0123214569900000 8000000000000000 c0d0650f5a07b353 = c0d0650f5a07b353
+#18: xsmaddmdp c0d0650f5a07b353 8000000000000000 8000000000000000 = 0000000000000000
+#19: xsmaddmdp 0123214569900000 8000000000000000 0000000000000000 = 0000000000000000
+#20: xsmaddmdp c0d0650f5a07b353 8000000000000000 0123214569900000 = 0123214569900000
+#21: xsmaddmdp 0123214569900000 8000000000000000 7ff0000000000000 = 7ff0000000000000
+#22: xsmaddmdp c0d0650f5a07b353 8000000000000000 7ff7ffffffffffff = 7fffffffffffffff
+#23: xsmaddmdp 0123214569900000 8000000000000000 7ff8000000000000 = 7ff8000000000000
+#24: xsmaddmdp c0d0650f5a07b353 0000000000000000 fff0000000000000 = fff0000000000000
+#25: xsmaddmdp 0123214569900000 0000000000000000 c0d0650f5a07b353 = c0d0650f5a07b353
+#26: xsmaddmdp c0d0650f5a07b353 0000000000000000 8000000000000000 = 8000000000000000
+#27: xsmaddmdp 0123214569900000 0000000000000000 0000000000000000 = 0000000000000000
+#28: xsmaddmdp c0d0650f5a07b353 0000000000000000 0123214569900000 = 0123214569900000
+#29: xsmaddmdp 0123214569900000 0000000000000000 7ff0000000000000 = 7ff0000000000000
+#30: xsmaddmdp c0d0650f5a07b353 0000000000000000 7ff7ffffffffffff = 7fffffffffffffff
+#31: xsmaddmdp 0123214569900000 0000000000000000 7ff8000000000000 = 7ff8000000000000
+#32: xsmaddmdp c0d0650f5a07b353 0123214569900000 fff0000000000000 = fff0000000000000
+#33: xsmaddmdp 0123214569900000 0123214569900000 c0d0650f5a07b353 = c0d0650f5a07b353
+#34: xsmaddmdp c0d0650f5a07b353 0123214569900000 8000000000000000 = 82039a19ca8fcb5f
+#35: xsmaddmdp 0123214569900000 0123214569900000 0000000000000000 = 0000000000000000
+#36: xsmaddmdp c0d0650f5a07b353 0123214569900000 404f000000000000 = 404f000000000000
+#37: xsmaddmdp 0123214569900000 0123214569900000 7ff0000000000000 = 7ff0000000000000
+#38: xsmaddmdp c0d0650f5a07b353 0123214569900000 7ff7ffffffffffff = 7fffffffffffffff
+#39: xsmaddmdp 0123214569900000 0123214569900000 7ff8000000000000 = 7ff8000000000000
+#40: xsmaddmdp c0d0650f5a07b353 7ff0000000000000 fff0000000000000 = fff0000000000000
+#41: xsmaddmdp 0123214569900000 7ff0000000000000 c0d0650f5a07b353 = 7ff0000000000000
+#42: xsmaddmdp c0d0650f5a07b353 7ff0000000000000 8000000000000000 = fff0000000000000
+#43: xsmaddmdp 0123214569900000 7ff0000000000000 0000000000000000 = 7ff0000000000000
+#44: xsmaddmdp c0d0650f5a07b353 7ff0000000000000 0123214569900000 = fff0000000000000
+#45: xsmaddmdp 0123214569900000 7ff0000000000000 7ff0000000000000 = 7ff0000000000000
+#46: xsmaddmdp c0d0650f5a07b353 7ff0000000000000 7ff7ffffffffffff = 7fffffffffffffff
+#47: xsmaddmdp 0123214569900000 7ff0000000000000 7ff8000000000000 = 7ff8000000000000
+#48: xsmaddmdp c0d0650f5a07b353 fff7ffffffffffff fff0000000000000 = ffffffffffffffff
+#49: xsmaddmdp 0123214569900000 fff7ffffffffffff c0d0650f5a07b353 = ffffffffffffffff
+#50: xsmaddmdp c0d0650f5a07b353 fff7ffffffffffff 8000000000000000 = ffffffffffffffff
+#51: xsmaddmdp 0123214569900000 fff7ffffffffffff 0000000000000000 = ffffffffffffffff
+#52: xsmaddmdp c0d0650f5a07b353 fff7ffffffffffff 0123214569900000 = ffffffffffffffff
+#53: xsmaddmdp 0123214569900000 fff7ffffffffffff 7ff0000000000000 = ffffffffffffffff
+#54: xsmaddmdp c0d0650f5a07b353 fff7ffffffffffff 7ff7ffffffffffff = ffffffffffffffff
+#55: xsmaddmdp 0123214569900000 fff7ffffffffffff 7ff8000000000000 = ffffffffffffffff
+#56: xsmaddmdp c0d0650f5a07b353 fff8000000000000 fff0000000000000 = fff8000000000000
+#57: xsmaddmdp 0123214569900000 fff8000000000000 c0d0650f5a07b353 = fff8000000000000
+#58: xsmaddmdp c0d0650f5a07b353 fff8000000000000 8000000000000000 = fff8000000000000
+#59: xsmaddmdp 0123214569900000 fff8000000000000 0000000000000000 = fff8000000000000
+#60: xsmaddmdp c0d0650f5a07b353 fff8000000000000 0123214569900000 = fff8000000000000
+#61: xsmaddmdp 0123214569900000 fff8000000000000 7ff0000000000000 = fff8000000000000
+#62: xsmaddmdp c0d0650f5a07b353 fff8000000000000 7ff7ffffffffffff = fff8000000000000
+#63: xsmaddmdp 0123214569900000 fff8000000000000 7ff8000000000000 = fff8000000000000
+
+#0: xsmsubadp fff0000000000000 fff0000000000000 c0d0650f5a07b353 = 7ff0000000000000
+#1: xsmsubadp c0d0650f5a07b353 fff0000000000000 0123214569900000 = fff0000000000000
+#2: xsmsubadp 8000000000000000 fff0000000000000 c0d0650f5a07b353 = 7ff0000000000000
+#3: xsmsubadp 0000000000000000 fff0000000000000 0123214569900000 = fff0000000000000
+#4: xsmsubadp 0123214569900000 fff0000000000000 c0d0650f5a07b353 = 7ff0000000000000
+#5: xsmsubadp 7ff0000000000000 fff0000000000000 0123214569900000 = fff0000000000000
+#6: xsmsubadp 7ff7ffffffffffff fff0000000000000 c0d0650f5a07b353 = 7fffffffffffffff
+#7: xsmsubadp 7ff8000000000000 fff0000000000000 0123214569900000 = 7ff8000000000000
+#8: xsmsubadp fff0000000000000 c0d0650f5a07b353 c0d0650f5a07b353 = 7ff0000000000000
+#9: xsmsubadp c0d0650f5a07b353 c0d0650f5a07b353 0123214569900000 = 40d0650f5a07b353
+#10: xsmsubadp 8000000000000000 c0d0650f5a07b353 c0d0650f5a07b353 = 41b0cc9d05eec2a7
+#11: xsmsubadp 0000000000000000 c0d0650f5a07b353 0123214569900000 = 82039a19ca8fcb5f
+#12: xsmsubadp 0123214569900000 c0d0650f5a07b353 c0d0650f5a07b353 = 41b0cc9d05eec2a7
+#13: xsmsubadp 7ff0000000000000 c0d0650f5a07b353 0123214569900000 = fff0000000000000
+#14: xsmsubadp 7ff7ffffffffffff c0d0650f5a07b353 c0d0650f5a07b353 = 7fffffffffffffff
+#15: xsmsubadp 7ff8000000000000 c0d0650f5a07b353 0123214569900000 = 7ff8000000000000
+#16: xsmsubadp fff0000000000000 8000000000000000 c0d0650f5a07b353 = 7ff0000000000000
+#17: xsmsubadp c0d0650f5a07b353 8000000000000000 0123214569900000 = 40d0650f5a07b353
+#18: xsmsubadp 8000000000000000 8000000000000000 c0d0650f5a07b353 = 0000000000000000
+#19: xsmsubadp 0000000000000000 8000000000000000 0123214569900000 = 8000000000000000
+#20: xsmsubadp 0123214569900000 8000000000000000 c0d0650f5a07b353 = 8123214569900000
+#21: xsmsubadp 7ff0000000000000 8000000000000000 0123214569900000 = fff0000000000000
+#22: xsmsubadp 7ff7ffffffffffff 8000000000000000 c0d0650f5a07b353 = 7fffffffffffffff
+#23: xsmsubadp 7ff8000000000000 8000000000000000 0123214569900000 = 7ff8000000000000
+#24: xsmsubadp fff0000000000000 0000000000000000 c0d0650f5a07b353 = 7ff0000000000000
+#25: xsmsubadp c0d0650f5a07b353 0000000000000000 0123214569900000 = 40d0650f5a07b353
+#26: xsmsubadp 8000000000000000 0000000000000000 c0d0650f5a07b353 = 0000000000000000
+#27: xsmsubadp 0000000000000000 0000000000000000 0123214569900000 = 0000000000000000
+#28: xsmsubadp 0123214569900000 0000000000000000 c0d0650f5a07b353 = 8123214569900000
+#29: xsmsubadp 7ff0000000000000 0000000000000000 0123214569900000 = fff0000000000000
+#30: xsmsubadp 7ff7ffffffffffff 0000000000000000 c0d0650f5a07b353 = 7fffffffffffffff
+#31: xsmsubadp 7ff8000000000000 0000000000000000 0123214569900000 = 7ff8000000000000
+#32: xsmsubadp fff0000000000000 0123214569900000 c0d0650f5a07b353 = 7ff0000000000000
+#33: xsmsubadp c0d0650f5a07b353 0123214569900000 0123214569900000 = 40d0650f5a07b353
+#34: xsmsubadp 8000000000000000 0123214569900000 c0d0650f5a07b353 = 82039a19ca8fcb5f
+#35: xsmsubadp 0000000000000000 0123214569900000 0123214569900000 = 0000000000000000
+#36: xsmsubadp 404f000000000000 0123214569900000 c0d0650f5a07b353 = c04f000000000000
+#37: xsmsubadp 7ff0000000000000 0123214569900000 0123214569900000 = fff0000000000000
+#38: xsmsubadp 7ff7ffffffffffff 0123214569900000 c0d0650f5a07b353 = 7fffffffffffffff
+#39: xsmsubadp 7ff8000000000000 0123214569900000 0123214569900000 = 7ff8000000000000
+#40: xsmsubadp fff0000000000000 7ff0000000000000 c0d0650f5a07b353 = 7ff8000000000000
+#41: xsmsubadp c0d0650f5a07b353 7ff0000000000000 0123214569900000 = 7ff0000000000000
+#42: xsmsubadp 8000000000000000 7ff0000000000000 c0d0650f5a07b353 = fff0000000000000
+#43: xsmsubadp 0000000000000000 7ff0000000000000 0123214569900000 = 7ff0000000000000
+#44: xsmsubadp 0123214569900000 7ff0000000000000 c0d0650f5a07b353 = fff0000000000000
+#45: xsmsubadp 7ff0000000000000 7ff0000000000000 0123214569900000 = 7ff8000000000000
+#46: xsmsubadp 7ff7ffffffffffff 7ff0000000000000 c0d0650f5a07b353 = 7fffffffffffffff
+#47: xsmsubadp 7ff8000000000000 7ff0000000000000 0123214569900000 = 7ff8000000000000
+#48: xsmsubadp fff0000000000000 fff7ffffffffffff c0d0650f5a07b353 = ffffffffffffffff
+#49: xsmsubadp c0d0650f5a07b353 fff7ffffffffffff 0123214569900000 = ffffffffffffffff
+#50: xsmsubadp 8000000000000000 fff7ffffffffffff c0d0650f5a07b353 = ffffffffffffffff
+#51: xsmsubadp 0000000000000000 fff7ffffffffffff 0123214569900000 = ffffffffffffffff
+#52: xsmsubadp 0123214569900000 fff7ffffffffffff c0d0650f5a07b353 = ffffffffffffffff
+#53: xsmsubadp 7ff0000000000000 fff7ffffffffffff 0123214569900000 = ffffffffffffffff
+#54: xsmsubadp 7ff7ffffffffffff fff7ffffffffffff c0d0650f5a07b353 = ffffffffffffffff
+#55: xsmsubadp 7ff8000000000000 fff7ffffffffffff 0123214569900000 = ffffffffffffffff
+#56: xsmsubadp fff0000000000000 fff8000000000000 c0d0650f5a07b353 = fff8000000000000
+#57: xsmsubadp c0d0650f5a07b353 fff8000000000000 0123214569900000 = fff8000000000000
+#58: xsmsubadp 8000000000000000 fff8000000000000 c0d0650f5a07b353 = fff8000000000000
+#59: xsmsubadp 0000000000000000 fff8000000000000 0123214569900000 = fff8000000000000
+#60: xsmsubadp 0123214569900000 fff8000000000000 c0d0650f5a07b353 = fff8000000000000
+#61: xsmsubadp 7ff0000000000000 fff8000000000000 0123214569900000 = fff8000000000000
+#62: xsmsubadp 7ff7ffffffffffff fff8000000000000 c0d0650f5a07b353 = fff8000000000000
+#63: xsmsubadp 7ff8000000000000 fff8000000000000 0123214569900000 = fff8000000000000
+
+#0: xsmsubmdp c0d0650f5a07b353 fff0000000000000 fff0000000000000 = 7ff0000000000000
+#1: xsmsubmdp 0123214569900000 fff0000000000000 c0d0650f5a07b353 = fff0000000000000
+#2: xsmsubmdp c0d0650f5a07b353 fff0000000000000 8000000000000000 = 7ff0000000000000
+#3: xsmsubmdp 0123214569900000 fff0000000000000 0000000000000000 = fff0000000000000
+#4: xsmsubmdp c0d0650f5a07b353 fff0000000000000 0123214569900000 = 7ff0000000000000
+#5: xsmsubmdp 0123214569900000 fff0000000000000 7ff0000000000000 = fff0000000000000
+#6: xsmsubmdp c0d0650f5a07b353 fff0000000000000 7ff7ffffffffffff = 7fffffffffffffff
+#7: xsmsubmdp 0123214569900000 fff0000000000000 7ff8000000000000 = 7ff8000000000000
+#8: xsmsubmdp c0d0650f5a07b353 c0d0650f5a07b353 fff0000000000000 = 7ff0000000000000
+#9: xsmsubmdp 0123214569900000 c0d0650f5a07b353 c0d0650f5a07b353 = 40d0650f5a07b353
+#10: xsmsubmdp c0d0650f5a07b353 c0d0650f5a07b353 8000000000000000 = 41b0cc9d05eec2a7
+#11: xsmsubmdp 0123214569900000 c0d0650f5a07b353 0000000000000000 = 82039a19ca8fcb5f
+#12: xsmsubmdp c0d0650f5a07b353 c0d0650f5a07b353 0123214569900000 = 41b0cc9d05eec2a7
+#13: xsmsubmdp 0123214569900000 c0d0650f5a07b353 7ff0000000000000 = fff0000000000000
+#14: xsmsubmdp c0d0650f5a07b353 c0d0650f5a07b353 7ff7ffffffffffff = 7fffffffffffffff
+#15: xsmsubmdp 0123214569900000 c0d0650f5a07b353 7ff8000000000000 = 7ff8000000000000
+#16: xsmsubmdp c0d0650f5a07b353 8000000000000000 fff0000000000000 = 7ff0000000000000
+#17: xsmsubmdp 0123214569900000 8000000000000000 c0d0650f5a07b353 = 40d0650f5a07b353
+#18: xsmsubmdp c0d0650f5a07b353 8000000000000000 8000000000000000 = 0000000000000000
+#19: xsmsubmdp 0123214569900000 8000000000000000 0000000000000000 = 8000000000000000
+#20: xsmsubmdp c0d0650f5a07b353 8000000000000000 0123214569900000 = 8123214569900000
+#21: xsmsubmdp 0123214569900000 8000000000000000 7ff0000000000000 = fff0000000000000
+#22: xsmsubmdp c0d0650f5a07b353 8000000000000000 7ff7ffffffffffff = 7fffffffffffffff
+#23: xsmsubmdp 0123214569900000 8000000000000000 7ff8000000000000 = 7ff8000000000000
+#24: xsmsubmdp c0d0650f5a07b353 0000000000000000 fff0000000000000 = 7ff0000000000000
+#25: xsmsubmdp 0123214569900000 0000000000000000 c0d0650f5a07b353 = 40d0650f5a07b353
+#26: xsmsubmdp c0d0650f5a07b353 0000000000000000 8000000000000000 = 0000000000000000
+#27: xsmsubmdp 0123214569900000 0000000000000000 0000000000000000 = 0000000000000000
+#28: xsmsubmdp c0d0650f5a07b353 0000000000000000 0123214569900000 = 8123214569900000
+#29: xsmsubmdp 0123214569900000 0000000000000000 7ff0000000000000 = fff0000000000000
+#30: xsmsubmdp c0d0650f5a07b353 0000000000000000 7ff7ffffffffffff = 7fffffffffffffff
+#31: xsmsubmdp 0123214569900000 0000000000000000 7ff8000000000000 = 7ff8000000000000
+#32: xsmsubmdp c0d0650f5a07b353 0123214569900000 fff0000000000000 = 7ff0000000000000
+#33: xsmsubmdp 0123214569900000 0123214569900000 c0d0650f5a07b353 = 40d0650f5a07b353
+#34: xsmsubmdp c0d0650f5a07b353 0123214569900000 8000000000000000 = 82039a19ca8fcb5f
+#35: xsmsubmdp 0123214569900000 0123214569900000 0000000000000000 = 0000000000000000
+#36: xsmsubmdp c0d0650f5a07b353 0123214569900000 404f000000000000 = c04f000000000000
+#37: xsmsubmdp 0123214569900000 0123214569900000 7ff0000000000000 = fff0000000000000
+#38: xsmsubmdp c0d0650f5a07b353 0123214569900000 7ff7ffffffffffff = 7fffffffffffffff
+#39: xsmsubmdp 0123214569900000 0123214569900000 7ff8000000000000 = 7ff8000000000000
+#40: xsmsubmdp c0d0650f5a07b353 7ff0000000000000 fff0000000000000 = 7ff8000000000000
+#41: xsmsubmdp 0123214569900000 7ff0000000000000 c0d0650f5a07b353 = 7ff0000000000000
+#42: xsmsubmdp c0d0650f5a07b353 7ff0000000000000 8000000000000000 = fff0000000000000
+#43: xsmsubmdp 0123214569900000 7ff0000000000000 0000000000000000 = 7ff0000000000000
+#44: xsmsubmdp c0d0650f5a07b353 7ff0000000000000 0123214569900000 = fff0000000000000
+#45: xsmsubmdp 0123214569900000 7ff0000000000000 7ff0000000000000 = 7ff8000000000000
+#46: xsmsubmdp c0d0650f5a07b353 7ff0000000000000 7ff7ffffffffffff = 7fffffffffffffff
+#47: xsmsubmdp 0123214569900000 7ff0000000000000 7ff8000000000000 = 7ff8000000000000
+#48: xsmsubmdp c0d0650f5a07b353 fff7ffffffffffff fff0000000000000 = ffffffffffffffff
+#49: xsmsubmdp 0123214569900000 fff7ffffffffffff c0d0650f5a07b353 = ffffffffffffffff
+#50: xsmsubmdp c0d0650f5a07b353 fff7ffffffffffff 8000000000000000 = ffffffffffffffff
+#51: xsmsubmdp 0123214569900000 fff7ffffffffffff 0000000000000000 = ffffffffffffffff
+#52: xsmsubmdp c0d0650f5a07b353 fff7ffffffffffff 0123214569900000 = ffffffffffffffff
+#53: xsmsubmdp 0123214569900000 fff7ffffffffffff 7ff0000000000000 = ffffffffffffffff
+#54: xsmsubmdp c0d0650f5a07b353 fff7ffffffffffff 7ff7ffffffffffff = ffffffffffffffff
+#55: xsmsubmdp 0123214569900000 fff7ffffffffffff 7ff8000000000000 = ffffffffffffffff
+#56: xsmsubmdp c0d0650f5a07b353 fff8000000000000 fff0000000000000 = fff8000000000000
+#57: xsmsubmdp 0123214569900000 fff8000000000000 c0d0650f5a07b353 = fff8000000000000
+#58: xsmsubmdp c0d0650f5a07b353 fff8000000000000 8000000000000000 = fff8000000000000
+#59: xsmsubmdp 0123214569900000 fff8000000000000 0000000000000000 = fff8000000000000
+#60: xsmsubmdp c0d0650f5a07b353 fff8000000000000 0123214569900000 = fff8000000000000
+#61: xsmsubmdp 0123214569900000 fff8000000000000 7ff0000000000000 = fff8000000000000
+#62: xsmsubmdp c0d0650f5a07b353 fff8000000000000 7ff7ffffffffffff = fff8000000000000
+#63: xsmsubmdp 0123214569900000 fff8000000000000 7ff8000000000000 = fff8000000000000
+
+#0: xsnmaddadp fff0000000000000 fff0000000000000 c0d0650f5a07b353 = 7ff8000000000000
+#1: xsnmaddadp c0d0650f5a07b353 fff0000000000000 0123214569900000 = 7ff0000000000000
+#2: xsnmaddadp 8000000000000000 fff0000000000000 c0d0650f5a07b353 = fff0000000000000
+#3: xsnmaddadp 0000000000000000 fff0000000000000 0123214569900000 = 7ff0000000000000
+#4: xsnmaddadp 0123214569900000 fff0000000000000 c0d0650f5a07b353 = fff0000000000000
+#5: xsnmaddadp 7ff0000000000000 fff0000000000000 0123214569900000 = 7ff8000000000000
+#6: xsnmaddadp 7ff7ffffffffffff fff0000000000000 c0d0650f5a07b353 = 7fffffffffffffff
+#7: xsnmaddadp 7ff8000000000000 fff0000000000000 0123214569900000 = 7ff8000000000000
+#8: xsnmaddadp fff0000000000000 c0d0650f5a07b353 c0d0650f5a07b353 = 7ff0000000000000
+#9: xsnmaddadp c0d0650f5a07b353 c0d0650f5a07b353 0123214569900000 = 40d0650f5a07b353
+#10: xsnmaddadp 8000000000000000 c0d0650f5a07b353 c0d0650f5a07b353 = c1b0cc9d05eec2a7
+#11: xsnmaddadp 0000000000000000 c0d0650f5a07b353 0123214569900000 = 02039a19ca8fcb5f
+#12: xsnmaddadp 0123214569900000 c0d0650f5a07b353 c0d0650f5a07b353 = c1b0cc9d05eec2a7
+#13: xsnmaddadp 7ff0000000000000 c0d0650f5a07b353 0123214569900000 = fff0000000000000
+#14: xsnmaddadp 7ff7ffffffffffff c0d0650f5a07b353 c0d0650f5a07b353 = 7fffffffffffffff
+#15: xsnmaddadp 7ff8000000000000 c0d0650f5a07b353 0123214569900000 = 7ff8000000000000
+#16: xsnmaddadp fff0000000000000 8000000000000000 c0d0650f5a07b353 = 7ff0000000000000
+#17: xsnmaddadp c0d0650f5a07b353 8000000000000000 0123214569900000 = 40d0650f5a07b353
+#18: xsnmaddadp 8000000000000000 8000000000000000 c0d0650f5a07b353 = 8000000000000000
+#19: xsnmaddadp 0000000000000000 8000000000000000 0123214569900000 = 8000000000000000
+#20: xsnmaddadp 0123214569900000 8000000000000000 c0d0650f5a07b353 = 8123214569900000
+#21: xsnmaddadp 7ff0000000000000 8000000000000000 0123214569900000 = fff0000000000000
+#22: xsnmaddadp 7ff7ffffffffffff 8000000000000000 c0d0650f5a07b353 = 7fffffffffffffff
+#23: xsnmaddadp 7ff8000000000000 8000000000000000 0123214569900000 = 7ff8000000000000
+#24: xsnmaddadp fff0000000000000 0000000000000000 c0d0650f5a07b353 = 7ff0000000000000
+#25: xsnmaddadp c0d0650f5a07b353 0000000000000000 0123214569900000 = 40d0650f5a07b353
+#26: xsnmaddadp 8000000000000000 0000000000000000 c0d0650f5a07b353 = 0000000000000000
+#27: xsnmaddadp 0000000000000000 0000000000000000 0123214569900000 = 8000000000000000
+#28: xsnmaddadp 0123214569900000 0000000000000000 c0d0650f5a07b353 = 8123214569900000
+#29: xsnmaddadp 7ff0000000000000 0000000000000000 0123214569900000 = fff0000000000000
+#30: xsnmaddadp 7ff7ffffffffffff 0000000000000000 c0d0650f5a07b353 = 7fffffffffffffff
+#31: xsnmaddadp 7ff8000000000000 0000000000000000 0123214569900000 = 7ff8000000000000
+#32: xsnmaddadp fff0000000000000 0123214569900000 c0d0650f5a07b353 = 7ff0000000000000
+#33: xsnmaddadp c0d0650f5a07b353 0123214569900000 0123214569900000 = 40d0650f5a07b353
+#34: xsnmaddadp 8000000000000000 0123214569900000 c0d0650f5a07b353 = 02039a19ca8fcb5f
+#35: xsnmaddadp 0000000000000000 0123214569900000 0123214569900000 = 8000000000000000
+#36: xsnmaddadp 404f000000000000 0123214569900000 c0d0650f5a07b353 = c04f000000000000
+#37: xsnmaddadp 7ff0000000000000 0123214569900000 0123214569900000 = fff0000000000000
+#38: xsnmaddadp 7ff7ffffffffffff 0123214569900000 c0d0650f5a07b353 = 7fffffffffffffff
+#39: xsnmaddadp 7ff8000000000000 0123214569900000 0123214569900000 = 7ff8000000000000
+#40: xsnmaddadp fff0000000000000 7ff0000000000000 c0d0650f5a07b353 = 7ff0000000000000
+#41: xsnmaddadp c0d0650f5a07b353 7ff0000000000000 0123214569900000 = fff0000000000000
+#42: xsnmaddadp 8000000000000000 7ff0000000000000 c0d0650f5a07b353 = 7ff0000000000000
+#43: xsnmaddadp 0000000000000000 7ff0000000000000 0123214569900000 = fff0000000000000
+#44: xsnmaddadp 0123214569900000 7ff0000000000000 c0d0650f5a07b353 = 7ff0000000000000
+#45: xsnmaddadp 7ff0000000000000 7ff0000000000000 0123214569900000 = fff0000000000000
+#46: xsnmaddadp 7ff7ffffffffffff 7ff0000000000000 c0d0650f5a07b353 = 7fffffffffffffff
+#47: xsnmaddadp 7ff8000000000000 7ff0000000000000 0123214569900000 = 7ff8000000000000
+#48: xsnmaddadp fff0000000000000 fff7ffffffffffff c0d0650f5a07b353 = ffffffffffffffff
+#49: xsnmaddadp c0d0650f5a07b353 fff7ffffffffffff 0123214569900000 = ffffffffffffffff
+#50: xsnmaddadp 8000000000000000 fff7ffffffffffff c0d0650f5a07b353 = ffffffffffffffff
+#51: xsnmaddadp 0000000000000000 fff7ffffffffffff 0123214569900000 = ffffffffffffffff
+#52: xsnmaddadp 0123214569900000 fff7ffffffffffff c0d0650f5a07b353 = ffffffffffffffff
+#53: xsnmaddadp 7ff0000000000000 fff7ffffffffffff 0123214569900000 = ffffffffffffffff
+#54: xsnmaddadp 7ff7ffffffffffff fff7ffffffffffff c0d0650f5a07b353 = ffffffffffffffff
+#55: xsnmaddadp 7ff8000000000000 fff7ffffffffffff 0123214569900000 = ffffffffffffffff
+#56: xsnmaddadp fff0000000000000 fff8000000000000 c0d0650f5a07b353 = fff8000000000000
+#57: xsnmaddadp c0d0650f5a07b353 fff8000000000000 0123214569900000 = fff8000000000000
+#58: xsnmaddadp 8000000000000000 fff8000000000000 c0d0650f5a07b353 = fff8000000000000
+#59: xsnmaddadp 0000000000000000 fff8000000000000 0123214569900000 = fff8000000000000
+#60: xsnmaddadp 0123214569900000 fff8000000000000 c0d0650f5a07b353 = fff8000000000000
+#61: xsnmaddadp 7ff0000000000000 fff8000000000000 0123214569900000 = fff8000000000000
+#62: xsnmaddadp 7ff7ffffffffffff fff8000000000000 c0d0650f5a07b353 = fff8000000000000
+#63: xsnmaddadp 7ff8000000000000 fff8000000000000 0123214569900000 = fff8000000000000
+
+#0: xsnmaddmdp c0d0650f5a07b353 fff0000000000000 fff0000000000000 = 7ff8000000000000
+#1: xsnmaddmdp 0123214569900000 fff0000000000000 c0d0650f5a07b353 = 7ff0000000000000
+#2: xsnmaddmdp c0d0650f5a07b353 fff0000000000000 8000000000000000 = fff0000000000000
+#3: xsnmaddmdp 0123214569900000 fff0000000000000 0000000000000000 = 7ff0000000000000
+#4: xsnmaddmdp c0d0650f5a07b353 fff0000000000000 0123214569900000 = fff0000000000000
+#5: xsnmaddmdp 0123214569900000 fff0000000000000 7ff0000000000000 = 7ff8000000000000
+#6: xsnmaddmdp c0d0650f5a07b353 fff0000000000000 7ff7ffffffffffff = 7fffffffffffffff
+#7: xsnmaddmdp 0123214569900000 fff0000000000000 7ff8000000000000 = 7ff8000000000000
+#8: xsnmaddmdp c0d0650f5a07b353 c0d0650f5a07b353 fff0000000000000 = 7ff0000000000000
+#9: xsnmaddmdp 0123214569900000 c0d0650f5a07b353 c0d0650f5a07b353 = 40d0650f5a07b353
+#10: xsnmaddmdp c0d0650f5a07b353 c0d0650f5a07b353 8000000000000000 = c1b0cc9d05eec2a7
+#11: xsnmaddmdp 0123214569900000 c0d0650f5a07b353 0000000000000000 = 02039a19ca8fcb5f
+#12: xsnmaddmdp c0d0650f5a07b353 c0d0650f5a07b353 0123214569900000 = c1b0cc9d05eec2a7
+#13: xsnmaddmdp 0123214569900000 c0d0650f5a07b353 7ff0000000000000 = fff0000000000000
+#14: xsnmaddmdp c0d0650f5a07b353 c0d0650f5a07b353 7ff7ffffffffffff = 7fffffffffffffff
+#15: xsnmaddmdp 0123214569900000 c0d0650f5a07b353 7ff8000000000000 = 7ff8000000000000
+#16: xsnmaddmdp c0d0650f5a07b353 8000000000000000 fff0000000000000 = 7ff0000000000000
+#17: xsnmaddmdp 0123214569900000 8000000000000000 c0d0650f5a07b353 = 40d0650f5a07b353
+#18: xsnmaddmdp c0d0650f5a07b353 8000000000000000 8000000000000000 = 8000000000000000
+#19: xsnmaddmdp 0123214569900000 8000000000000000 0000000000000000 = 8000000000000000
+#20: xsnmaddmdp c0d0650f5a07b353 8000000000000000 0123214569900000 = 8123214569900000
+#21: xsnmaddmdp 0123214569900000 8000000000000000 7ff0000000000000 = fff0000000000000
+#22: xsnmaddmdp c0d0650f5a07b353 8000000000000000 7ff7ffffffffffff = 7fffffffffffffff
+#23: xsnmaddmdp 0123214569900000 8000000000000000 7ff8000000000000 = 7ff8000000000000
+#24: xsnmaddmdp c0d0650f5a07b353 0000000000000000 fff0000000000000 = 7ff0000000000000
+#25: xsnmaddmdp 0123214569900000 0000000000000000 c0d0650f5a07b353 = 40d0650f5a07b353
+#26: xsnmaddmdp c0d0650f5a07b353 0000000000000000 8000000000000000 = 0000000000000000
+#27: xsnmaddmdp 0123214569900000 0000000000000000 0000000000000000 = 8000000000000000
+#28: xsnmaddmdp c0d0650f5a07b353 0000000000000000 0123214569900000 = 8123214569900000
+#29: xsnmaddmdp 0123214569900000 0000000000000000 7ff0000000000000 = fff0000000000000
+#30: xsnmaddmdp c0d0650f5a07b353 0000000000000000 7ff7ffffffffffff = 7fffffffffffffff
+#31: xsnmaddmdp 0123214569900000 0000000000000000 7ff8000000000000 = 7ff8000000000000
+#32: xsnmaddmdp c0d0650f5a07b353 0123214569900000 fff0000000000000 = 7ff0000000000000
+#33: xsnmaddmdp 0123214569900000 0123214569900000 c0d0650f5a07b353 = 40d0650f5a07b353
+#34: xsnmaddmdp c0d0650f5a07b353 0123214569900000 8000000000000000 = 02039a19ca8fcb5f
+#35: xsnmaddmdp 0123214569900000 0123214569900000 0000000000000000 = 8000000000000000
+#36: xsnmaddmdp c0d0650f5a07b353 0123214569900000 404f000000000000 = c04f000000000000
+#37: xsnmaddmdp 0123214569900000 0123214569900000 7ff0000000000000 = fff0000000000000
+#38: xsnmaddmdp c0d0650f5a07b353 0123214569900000 7ff7ffffffffffff = 7fffffffffffffff
+#39: xsnmaddmdp 0123214569900000 0123214569900000 7ff8000000000000 = 7ff8000000000000
+#40: xsnmaddmdp c0d0650f5a07b353 7ff0000000000000 fff0000000000000 = 7ff0000000000000
+#41: xsnmaddmdp 0123214569900000 7ff0000000000000 c0d0650f5a07b353 = fff0000000000000
+#42: xsnmaddmdp c0d0650f5a07b353 7ff0000000000000 8000000000000000 = 7ff0000000000000
+#43: xsnmaddmdp 0123214569900000 7ff0000000000000 0000000000000000 = fff0000000000000
+#44: xsnmaddmdp c0d0650f5a07b353 7ff0000000000000 0123214569900000 = 7ff0000000000000
+#45: xsnmaddmdp 0123214569900000 7ff0000000000000 7ff0000000000000 = fff0000000000000
+#46: xsnmaddmdp c0d0650f5a07b353 7ff0000000000000 7ff7ffffffffffff = 7fffffffffffffff
+#47: xsnmaddmdp 0123214569900000 7ff0000000000000 7ff8000000000000 = 7ff8000000000000
+#48: xsnmaddmdp c0d0650f5a07b353 fff7ffffffffffff fff0000000000000 = ffffffffffffffff
+#49: xsnmaddmdp 0123214569900000 fff7ffffffffffff c0d0650f5a07b353 = ffffffffffffffff
+#50: xsnmaddmdp c0d0650f5a07b353 fff7ffffffffffff 8000000000000000 = ffffffffffffffff
+#51: xsnmaddmdp 0123214569900000 fff7ffffffffffff 0000000000000000 = ffffffffffffffff
+#52: xsnmaddmdp c0d0650f5a07b353 fff7ffffffffffff 0123214569900000 = ffffffffffffffff
+#53: xsnmaddmdp 0123214569900000 fff7ffffffffffff 7ff0000000000000 = ffffffffffffffff
+#54: xsnmaddmdp c0d0650f5a07b353 fff7ffffffffffff 7ff7ffffffffffff = ffffffffffffffff
+#55: xsnmaddmdp 0123214569900000 fff7ffffffffffff 7ff8000000000000 = ffffffffffffffff
+#56: xsnmaddmdp c0d0650f5a07b353 fff8000000000000 fff0000000000000 = fff8000000000000
+#57: xsnmaddmdp 0123214569900000 fff8000000000000 c0d0650f5a07b353 = fff8000000000000
+#58: xsnmaddmdp c0d0650f5a07b353 fff8000000000000 8000000000000000 = fff8000000000000
+#59: xsnmaddmdp 0123214569900000 fff8000000000000 0000000000000000 = fff8000000000000
+#60: xsnmaddmdp c0d0650f5a07b353 fff8000000000000 0123214569900000 = fff8000000000000
+#61: xsnmaddmdp 0123214569900000 fff8000000000000 7ff0000000000000 = fff8000000000000
+#62: xsnmaddmdp c0d0650f5a07b353 fff8000000000000 7ff7ffffffffffff = fff8000000000000
+#63: xsnmaddmdp 0123214569900000 fff8000000000000 7ff8000000000000 = fff8000000000000
+
+#0: xsmuldp fff0000000000000 fff0000000000000 = 7ff0000000000000
+#1: xsmuldp fff0000000000000 c0d0650f5a07b353 = 7ff0000000000000
+#2: xsmuldp fff0000000000000 8000000000000000 = 7ff8000000000000
+#3: xsmuldp fff0000000000000 0000000000000000 = 7ff8000000000000
+#4: xsmuldp fff0000000000000 0123214569900000 = fff0000000000000
+#5: xsmuldp fff0000000000000 7ff0000000000000 = fff0000000000000
+#6: xsmuldp fff0000000000000 7ff7ffffffffffff = 7fffffffffffffff
+#7: xsmuldp fff0000000000000 7ff8000000000000 = 7ff8000000000000
+#8: xsmuldp c0d0650f5a07b353 fff0000000000000 = 7ff0000000000000
+#9: xsmuldp c0d0650f5a07b353 c0d0650f5a07b353 = 41b0cc9d05eec2a7
+#10: xsmuldp c0d0650f5a07b353 8000000000000000 = 0000000000000000
+#11: xsmuldp c0d0650f5a07b353 0000000000000000 = 8000000000000000
+#12: xsmuldp c0d0650f5a07b353 0123214569900000 = 82039a19ca8fcb5f
+#13: xsmuldp c0d0650f5a07b353 7ff0000000000000 = fff0000000000000
+#14: xsmuldp c0d0650f5a07b353 7ff7ffffffffffff = 7fffffffffffffff
+#15: xsmuldp c0d0650f5a07b353 7ff8000000000000 = 7ff8000000000000
+#16: xsmuldp 8000000000000000 fff0000000000000 = 7ff8000000000000
+#17: xsmuldp 8000000000000000 c0d0650f5a07b353 = 0000000000000000
+#18: xsmuldp 8000000000000000 8000000000000000 = 0000000000000000
+#19: xsmuldp 8000000000000000 0000000000000000 = 8000000000000000
+#20: xsmuldp 8000000000000000 0123214569900000 = 8000000000000000
+#21: xsmuldp 8000000000000000 7ff0000000000000 = 7ff8000000000000
+#22: xsmuldp 8000000000000000 7ff7ffffffffffff = 7fffffffffffffff
+#23: xsmuldp 8000000000000000 7ff8000000000000 = 7ff8000000000000
+#24: xsmuldp 0000000000000000 fff0000000000000 = 7ff8000000000000
+#25: xsmuldp 0000000000000000 c0d0650f5a07b353 = 8000000000000000
+#26: xsmuldp 0000000000000000 8000000000000000 = 8000000000000000
+#27: xsmuldp 0000000000000000 0000000000000000 = 0000000000000000
+#28: xsmuldp 0000000000000000 0123214569900000 = 0000000000000000
+#29: xsmuldp 0000000000000000 7ff0000000000000 = 7ff8000000000000
+#30: xsmuldp 0000000000000000 7ff7ffffffffffff = 7fffffffffffffff
+#31: xsmuldp 0000000000000000 7ff8000000000000 = 7ff8000000000000
+#32: xsmuldp 0123214569900000 fff0000000000000 = fff0000000000000
+#33: xsmuldp 0123214569900000 c0d0650f5a07b353 = 82039a19ca8fcb5f
+#34: xsmuldp 0123214569900000 8000000000000000 = 8000000000000000
+#35: xsmuldp 0123214569900000 0000000000000000 = 0000000000000000
+#36: xsmuldp 0123214569900000 404f000000000000 = 0182883b3e438000
+#37: xsmuldp 0123214569900000 7ff0000000000000 = 7ff0000000000000
+#38: xsmuldp 0123214569900000 7ff7ffffffffffff = 7fffffffffffffff
+#39: xsmuldp 0123214569900000 7ff8000000000000 = 7ff8000000000000
+#40: xsmuldp 7ff0000000000000 fff0000000000000 = fff0000000000000
+#41: xsmuldp 7ff0000000000000 c0d0650f5a07b353 = fff0000000000000
+#42: xsmuldp 7ff0000000000000 8000000000000000 = 7ff8000000000000
+#43: xsmuldp 7ff0000000000000 0000000000000000 = 7ff8000000000000
+#44: xsmuldp 7ff0000000000000 0123214569900000 = 7ff0000000000000
+#45: xsmuldp 7ff0000000000000 7ff0000000000000 = 7ff0000000000000
+#46: xsmuldp 7ff0000000000000 7ff7ffffffffffff = 7fffffffffffffff
+#47: xsmuldp 7ff0000000000000 7ff8000000000000 = 7ff8000000000000
+#48: xsmuldp fff7ffffffffffff fff0000000000000 = ffffffffffffffff
+#49: xsmuldp fff7ffffffffffff c0d0650f5a07b353 = ffffffffffffffff
+#50: xsmuldp fff7ffffffffffff 8000000000000000 = ffffffffffffffff
+#51: xsmuldp fff7ffffffffffff 0000000000000000 = ffffffffffffffff
+#52: xsmuldp fff7ffffffffffff 0123214569900000 = ffffffffffffffff
+#53: xsmuldp fff7ffffffffffff 7ff0000000000000 = ffffffffffffffff
+#54: xsmuldp fff7ffffffffffff 7ff7ffffffffffff = ffffffffffffffff
+#55: xsmuldp fff7ffffffffffff 7ff8000000000000 = ffffffffffffffff
+#56: xsmuldp fff8000000000000 fff0000000000000 = fff8000000000000
+#57: xsmuldp fff8000000000000 c0d0650f5a07b353 = fff8000000000000
+#58: xsmuldp fff8000000000000 8000000000000000 = fff8000000000000
+#59: xsmuldp fff8000000000000 0000000000000000 = fff8000000000000
+#60: xsmuldp fff8000000000000 0123214569900000 = fff8000000000000
+#61: xsmuldp fff8000000000000 7ff0000000000000 = fff8000000000000
+#62: xsmuldp fff8000000000000 7ff7ffffffffffff = fff8000000000000
+#63: xsmuldp fff8000000000000 7ff8000000000000 = fff8000000000000
+
+#0: xssubdp fff0000000000000 fff0000000000000 = 7ff8000000000000
+#1: xssubdp fff0000000000000 c0d0650f5a07b353 = fff0000000000000
+#2: xssubdp fff0000000000000 8000000000000000 = fff0000000000000
+#3: xssubdp fff0000000000000 0000000000000000 = fff0000000000000
+#4: xssubdp fff0000000000000 0123214569900000 = fff0000000000000
+#5: xssubdp fff0000000000000 7ff0000000000000 = fff0000000000000
+#6: xssubdp fff0000000000000 7ff7ffffffffffff = 7fffffffffffffff
+#7: xssubdp fff0000000000000 7ff8000000000000 = 7ff8000000000000
+#8: xssubdp c0d0650f5a07b353 fff0000000000000 = 7ff0000000000000
+#9: xssubdp c0d0650f5a07b353 c0d0650f5a07b353 = 0000000000000000
+#10: xssubdp c0d0650f5a07b353 8000000000000000 = c0d0650f5a07b353
+#11: xssubdp c0d0650f5a07b353 0000000000000000 = c0d0650f5a07b353
+#12: xssubdp c0d0650f5a07b353 0123214569900000 = c0d0650f5a07b353
+#13: xssubdp c0d0650f5a07b353 7ff0000000000000 = fff0000000000000
+#14: xssubdp c0d0650f5a07b353 7ff7ffffffffffff = 7fffffffffffffff
+#15: xssubdp c0d0650f5a07b353 7ff8000000000000 = 7ff8000000000000
+#16: xssubdp 8000000000000000 fff0000000000000 = 7ff0000000000000
+#17: xssubdp 8000000000000000 c0d0650f5a07b353 = 40d0650f5a07b353
+#18: xssubdp 8000000000000000 8000000000000000 = 0000000000000000
+#19: xssubdp 8000000000000000 0000000000000000 = 8000000000000000
+#20: xssubdp 8000000000000000 0123214569900000 = 8123214569900000
+#21: xssubdp 8000000000000000 7ff0000000000000 = fff0000000000000
+#22: xssubdp 8000000000000000 7ff7ffffffffffff = 7fffffffffffffff
+#23: xssubdp 8000000000000000 7ff8000000000000 = 7ff8000000000000
+#24: xssubdp 0000000000000000 fff0000000000000 = 7ff0000000000000
+#25: xssubdp 0000000000000000 c0d0650f5a07b353 = 40d0650f5a07b353
+#26: xssubdp 0000000000000000 8000000000000000 = 0000000000000000
+#27: xssubdp 0000000000000000 0000000000000000 = 0000000000000000
+#28: xssubdp 0000000000000000 0123214569900000 = 8123214569900000
+#29: xssubdp 0000000000000000 7ff0000000000000 = fff0000000000000
+#30: xssubdp 0000000000000000 7ff7ffffffffffff = 7fffffffffffffff
+#31: xssubdp 0000000000000000 7ff8000000000000 = 7ff8000000000000
+#32: xssubdp 0123214569900000 fff0000000000000 = 7ff0000000000000
+#33: xssubdp 0123214569900000 c0d0650f5a07b353 = 40d0650f5a07b353
+#34: xssubdp 0123214569900000 8000000000000000 = 0123214569900000
+#35: xssubdp 0123214569900000 0000000000000000 = 0123214569900000
+#36: xssubdp 0123214569900000 404f000000000000 = c04f000000000000
+#37: xssubdp 0123214569900000 7ff0000000000000 = fff0000000000000
+#38: xssubdp 0123214569900000 7ff7ffffffffffff = 7fffffffffffffff
+#39: xssubdp 0123214569900000 7ff8000000000000 = 7ff8000000000000
+#40: xssubdp 7ff0000000000000 fff0000000000000 = 7ff0000000000000
+#41: xssubdp 7ff0000000000000 c0d0650f5a07b353 = 7ff0000000000000
+#42: xssubdp 7ff0000000000000 8000000000000000 = 7ff0000000000000
+#43: xssubdp 7ff0000000000000 0000000000000000 = 7ff0000000000000
+#44: xssubdp 7ff0000000000000 0123214569900000 = 7ff0000000000000
+#45: xssubdp 7ff0000000000000 7ff0000000000000 = 7ff8000000000000
+#46: xssubdp 7ff0000000000000 7ff7ffffffffffff = 7fffffffffffffff
+#47: xssubdp 7ff0000000000000 7ff8000000000000 = 7ff8000000000000
+#48: xssubdp fff7ffffffffffff fff0000000000000 = ffffffffffffffff
+#49: xssubdp fff7ffffffffffff c0d0650f5a07b353 = ffffffffffffffff
+#50: xssubdp fff7ffffffffffff 8000000000000000 = ffffffffffffffff
+#51: xssubdp fff7ffffffffffff 0000000000000000 = ffffffffffffffff
+#52: xssubdp fff7ffffffffffff 0123214569900000 = ffffffffffffffff
+#53: xssubdp fff7ffffffffffff 7ff0000000000000 = ffffffffffffffff
+#54: xssubdp fff7ffffffffffff 7ff7ffffffffffff = ffffffffffffffff
+#55: xssubdp fff7ffffffffffff 7ff8000000000000 = ffffffffffffffff
+#56: xssubdp fff8000000000000 fff0000000000000 = fff8000000000000
+#57: xssubdp fff8000000000000 c0d0650f5a07b353 = fff8000000000000
+#58: xssubdp fff8000000000000 8000000000000000 = fff8000000000000
+#59: xssubdp fff8000000000000 0000000000000000 = fff8000000000000
+#60: xssubdp fff8000000000000 0123214569900000 = fff8000000000000
+#61: xssubdp fff8000000000000 7ff0000000000000 = fff8000000000000
+#62: xssubdp fff8000000000000 7ff7ffffffffffff = fff8000000000000
+#63: xssubdp fff8000000000000 7ff8000000000000 = fff8000000000000
+
+
+Test VSX scalar integer conversion instructions
+#0: xscvdpsxds 3fd8000000000000 => 0000000000000000
+#1: xscvdpsxds 404f000000000000 => 000000000000003e
+#2: xscvdpsxds 0018000000b77501 => 0000000000000000
+#3: xscvdpsxds 7fe800000000051b => 7fffffffffffffff
+#4: xscvdpsxds 0123214569900000 => 0000000000000000
+#5: xscvdpsxds 0000000000000000 => 0000000000000000
+#6: xscvdpsxds 8000000000000000 => 0000000000000000
+#7: xscvdpsxds 7ff0000000000000 => 7fffffffffffffff
+#8: xscvdpsxds fff0000000000000 => 8000000000000000
+#9: xscvdpsxds 7ff7ffffffffffff => 8000000000000000
+#10: xscvdpsxds fff7ffffffffffff => 8000000000000000
+#11: xscvdpsxds 7ff8000000000000 => 8000000000000000
+#12: xscvdpsxds fff8000000000000 => 8000000000000000
+#13: xscvdpsxds 8008340000078000 => 0000000000000000
+#14: xscvdpsxds c0d0650f5a07b353 => ffffffffffffbe6c
+
+#0: xscvsxddp 3fd8000000000000 => 43cfec0000000000
+#1: xscvsxddp 404f000000000000 => 43d013c000000000
+#2: xscvsxddp 0018000000b77501 => 4338000000b77501
+#3: xscvsxddp 7fe800000000051b => 43dffa0000000001
+#4: xscvsxddp 0123214569900000 => 4372321456990000
+#5: xscvsxddp 0000000000000000 => 0000000000000000
+#6: xscvsxddp 8000000000000000 => c3e0000000000000
+#7: xscvsxddp 7ff0000000000000 => 43dffc0000000000
+#8: xscvsxddp fff0000000000000 => c330000000000000
+#9: xscvsxddp 7ff7ffffffffffff => 43dffe0000000000
+#10: xscvsxddp fff7ffffffffffff => c320000000000002
+#11: xscvsxddp 7ff8000000000000 => 43dffe0000000000
+#12: xscvsxddp fff8000000000000 => c320000000000000
+#13: xscvsxddp 8008340000078000 => c3dffdf2fffffe20
+#14: xscvsxddp c0d0650f5a07b353 => c3cf97cd7852fc26
+
+#0: xscvuxddp 3fd8000000000000 => 43cfec0000000000
+#1: xscvuxddp 404f000000000000 => 43d013c000000000
+#2: xscvuxddp 0018000000b77501 => 4338000000b77501
+#3: xscvuxddp 7fe800000000051b => 43dffa0000000001
+#4: xscvuxddp 0123214569900000 => 4372321456990000
+#5: xscvuxddp 0000000000000000 => 0000000000000000
+#6: xscvuxddp 8000000000000000 => 43e0000000000000
+#7: xscvuxddp 7ff0000000000000 => 43dffc0000000000
+#8: xscvuxddp fff0000000000000 => 43effe0000000000
+#9: xscvuxddp 7ff7ffffffffffff => 43dffe0000000000
+#10: xscvuxddp fff7ffffffffffff => 43efff0000000000
+#11: xscvuxddp 7ff8000000000000 => 43dffe0000000000
+#12: xscvuxddp fff8000000000000 => 43efff0000000000
+#13: xscvuxddp 8008340000078000 => 43e00106800000f0
+#14: xscvuxddp c0d0650f5a07b353 => 43e81a0ca1eb40f6
+
+
+Testcase PASSED
Index: none/tests/ppc32/test_isa_2_06_part1.vgtest
===================================================================
--- /dev/null
+++ none/tests/ppc32/test_isa_2_06_part1.vgtest
@@ -0,0 +1,2 @@
+prereq: ../../../tests/check_isa-2_06_cap
+prog: test_isa_2_06_part1
Index: none/tests/ppc64/Makefile.am
===================================================================
--- none/tests/ppc64/Makefile.am.orig
+++ none/tests/ppc64/Makefile.am
@@ -13,10 +13,11 @@ EXTRA_DIST = \
twi_tdi.stderr.exp twi_tdi.stdout.exp twi_tdi.vgtest \
tw_td.stderr.exp tw_td.stdout.exp tw_td.vgtest \
power6_bcmp.stderr.exp power6_bcmp.stdout.exp power6_bcmp.vgtest \
- power6_mf_gpr.stderr.exp power6_mf_gpr.stdout.exp power6_mf_gpr.vgtest
+ power6_mf_gpr.stderr.exp power6_mf_gpr.stdout.exp power6_mf_gpr.vgtest \
+ test_isa_2_06_part1.stderr.exp test_isa_2_06_part1.stdout.exp test_isa_2_06_part1.vgtest
check_PROGRAMS = \
- jm-insns lsw round std_reg_imm twi_tdi tw_td power6_bcmp power6_mf_gpr
+ jm-insns lsw round std_reg_imm twi_tdi tw_td power6_bcmp power6_mf_gpr test_isa_2_06_part1
AM_CFLAGS += @FLAG_M64@
AM_CXXFLAGS += @FLAG_M64@
@@ -28,6 +29,17 @@ else
ALTIVEC_FLAG =
endif
+if HAS_VSX
+BUILD_FLAG_VSX = -mvsx
+VSX_FLAG = -DHAS_VSX
+else
+VSX_FLAG =
+BUILD_FLAG_VSX =
+endif
+
+test_isa_2_06_part1_CFLAGS = $(AM_CFLAGS) -Winline -Wall -O -g -mregnames $(VSX_FLAG) \
+ @FLAG_M64@ $(ALTIVEC_FLAG) $(BUILD_FLAG_VSX)
+
jm_insns_CFLAGS = $(AM_CFLAGS) -Winline -Wall -O -g -mregnames -maltivec \
@FLAG_M64@ $(ALTIVEC_FLAG)
Index: none/tests/ppc64/test_isa_2_06_part1.c
===================================================================
--- /dev/null
+++ none/tests/ppc64/test_isa_2_06_part1.c
@@ -0,0 +1,2189 @@
+/* Copyright (C) 2011 IBM
+
+ Author: Maynard Johnson <maynardj@us.ibm.com>
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation; either version 2 of the
+ License, or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307, USA.
+
+ The GNU General Public License is contained in the file COPYING.
+ */
+
+#ifdef HAS_VSX
+
+#include <stdio.h>
+#include <stdint.h>
+#include <stdlib.h>
+#include <string.h>
+#include <malloc.h>
+#include <altivec.h>
+
+#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__ __volatile__ ("xsmaddmdp %x0, %x1, %x2" : "+wa" (vec_out): "wa" (vec_inA),"wa" (vec_inB));
+}
+
+static void test_xsmsub(void)
+{
+ if (do_adp)
+ __asm__ __volatile__ ("xsmsubadp %x0, %x1, %x2" : "+wa" (vec_out): "wa" (vec_inA),"wa" (vec_inB));
+ else
+ __asm__ __volatile__ ("xsmsubmdp %x0, %x1, %x2" : "+wa" (vec_out): "wa" (vec_inA),"wa" (vec_inB));
+}
+
+static void test_xsnmadd(void)
+{
+ if (do_adp)
+ __asm__ __volatile__ ("xsnmaddadp %x0, %x1, %x2" : "+wa" (vec_out): "wa" (vec_inA),"wa" (vec_inB));
+ else
+ __asm__ __volatile__ ("xsnmaddmdp %x0, %x1, %x2" : "+wa" (vec_out): "wa" (vec_inA),"wa" (vec_inB));
+}
+
+static void test_xsmuldp(void)
+{
+ __asm__ __volatile__ ("xsmuldp %x0, %x1, %x2" : "=wa" (vec_out): "wa" (vec_inA),"wa" (vec_inB));
+}
+
+static void test_xssubdp(void)
+{
+ __asm__ __volatile__ ("xssubdp %x0, %x1, %x2" : "=wa" (vec_out): "wa" (vec_inA),"wa" (vec_inB));
+}
+
+static void test_xscvdpsxds (void)
+{
+ __asm__ __volatile__ ("xscvdpsxds %x0, %x1" : "=wa" (vec_out): "wa" (vec_inB));
+}
+
+static void test_xscvsxddp (void)
+{
+ __asm__ __volatile__ ("xscvsxddp %x0, %x1" : "=wa" (vec_out): "wa" (vec_inB));
+}
+
+static void test_xscvuxddp (void)
+{
+ __asm__ __volatile__ ("xscvuxddp %x0, %x1" : "=wa" (vec_out): "wa" (vec_inB));
+}
+
+static unsigned int vstg[] __attribute__ ((aligned (16))) = { 0, 0, 0,0,
+ 0, 0, 0, 0 };
+
+#define NUM_VSTG_INTS (sizeof vstg/sizeof vstg[0])
+#define NUM_VSTG_VECS (NUM_VSTG_INTS/4)
+
+static unsigned int viargs[] __attribute__ ((aligned (16))) = { 0x01234567,
+ 0x89abcdef,
+ 0x00112233,
+ 0x44556677,
+ 0x8899aabb,
+ 0x91929394,
+ 0xa1a2a3a4,
+ 0xb1b2b3b4,
+ 0xc1c2c3c4,
+ 0xd1d2d3d4,
+ 0x7a6b5d3e
+};
+#define NUM_VIARGS_INTS (sizeof viargs/sizeof viargs[0])
+#define NUM_VIARGS_VECS (NUM_VIARGS_INTS/4)
+
+static ldst_test_t ldst_tests[] = { { &test_lxsdx, "lxsdx", viargs, 0, 2, VSX_LOAD },
+ { &test_lxsdx, "lxsdx", viargs, 4, 2, VSX_LOAD },
+ { &test_lxvd2x, "lxvd2x", viargs, 0, 4, VSX_LOAD },
+ { &test_lxvd2x, "lxvd2x", viargs, 4, 4, VSX_LOAD },
+ { &test_lxvdsx, "lxvdsx", viargs, 0, 4, VSX_LOAD_SPLAT },
+ { &test_lxvdsx, "lxvdsx", viargs, 4, 4, VSX_LOAD_SPLAT },
+ { &test_lxvw4x, "lxvw4x", viargs, 0, 4, VSX_LOAD },
+ { &test_lxvw4x, "lxvw4x", viargs, 4, 4, VSX_LOAD },
+ { &test_stxsdx, "stxsdx", vstg, 0, 2, VSX_STORE },
+ { &test_stxsdx, "stxsdx", vstg, 4, 2, VSX_STORE },
+ { &test_stxvd2x, "stxvd2x", vstg, 0, 4, VSX_STORE },
+ { &test_stxvd2x, "stxvd2x", vstg, 4, 4, VSX_STORE },
+ { &test_stxvw4x, "stxvw4x", vstg, 0, 4, VSX_STORE },
+ { &test_stxvw4x, "stxvw4x", vstg, 4, 4, VSX_STORE },
+ { NULL, NULL, NULL, 0, 0, 0 } };
+
+static logic_test_t logic_tests[] = { { &test_xxlxor, "xxlxor", VSX_XOR },
+ { &test_xxlor, "xxlor", VSX_OR } ,
+ { &test_xxlnor, "xxlnor", VSX_NOR },
+ { &test_xxland, "xxland", VSX_AND },
+ { &test_xxlandc, "xxlandc", VSX_ANDC },
+ { NULL, NULL}};
+
+static move_test_t move_tests[] = { { &test_xsabsdp, "xsabsdp", 0, 4, 0x0899aabb91929394ULL },
+ { &test_xscpsgndp, "xscpsgndp", 4, 0, 0x8123456789abcdefULL },
+ { &test_xsnabsdp, "xsnabsdp", 7, 3, 0xc45566778899aabbULL, },
+ { &test_xsnegdp, "xsnegdp", 0, 7, 0x31b2b3b4c1c2c3c4ULL, },
+ { NULL, NULL, 0, 0, 0 }
+
+};
+
+static permute_test_t permute_tests[] =
+{
+ { &test_xxmrghw, "xxmrghw",
+ { 0x11111111, 0x22222222, 0x33333333, 0x44444444 }, /* XA input */
+ { 0x55555555, 0x66666666, 0x77777777, 0x88888888 }, /* XB input */
+ { 0x11111111, 0x55555555, 0x22222222, 0x66666666 } /* XT expected output */
+ },
+ { &test_xxmrghw, "xxmrghw",
+ { 0x00112233, 0x44556677, 0x8899aabb, 0xccddeeff }, /* XA input */
+ { 0x11111111, 0x22222222, 0x33333333, 0x44444444 }, /* XB input */
+ { 0x00112233, 0x11111111, 0x44556677, 0x22222222 } /* XT expected output */
+ },
+ { &test_xxmrglw, "xxmrglw",
+ { 0x11111111, 0x22222222, 0x33333333, 0x44444444 }, /* XA input */
+ { 0x55555555, 0x66666666, 0x77777777, 0x88888888 }, /* XB input */
+ { 0x33333333, 0x77777777, 0x44444444, 0x88888888 } /* XT expected output */
+ },
+ { &test_xxmrglw, "xxmrglw",
+ { 0x00112233, 0x44556677, 0x8899aabb, 0xccddeeff}, /* XA input */
+ { 0x11111111, 0x22222222, 0x33333333, 0x44444444}, /* XB input */
+ { 0x8899aabb, 0x33333333, 0xccddeeff, 0x44444444} /* XT expected output */
+ },
+ { &test_xxpermdi_00, "xxpermdi DM=00",
+ { 0x11111111, 0x22222222, 0x33333333, 0x44444444 }, /* XA input */
+ { 0x55555555, 0x66666666, 0x77777777, 0x88888888 }, /* XB input */
+ { 0x11111111, 0x22222222, 0x55555555, 0x66666666 } /* XT expected output */
+ },
+ { &test_xxpermdi_01, "xxpermdi DM=01",
+ { 0x11111111, 0x22222222, 0x33333333, 0x44444444 }, /* XA input */
+ { 0x55555555, 0x66666666, 0x77777777, 0x88888888 }, /* XB input */
+ { 0x11111111, 0x22222222, 0x77777777, 0x88888888 } /* XT expected output */
+ },
+ { &test_xxpermdi_10, "xxpermdi DM=10",
+ { 0x11111111, 0x22222222, 0x33333333, 0x44444444 }, /* XA input */
+ { 0x55555555, 0x66666666, 0x77777777, 0x88888888 }, /* XB input */
+ { 0x33333333, 0x44444444, 0x55555555, 0x66666666 } /* XT expected output */
+ },
+ { &test_xxpermdi_11, "xxpermdi DM=11",
+ { 0x11111111, 0x22222222, 0x33333333, 0x44444444 }, /* XA input */
+ { 0x55555555, 0x66666666, 0x77777777, 0x88888888 }, /* XB input */
+ { 0x33333333, 0x44444444, 0x77777777, 0x88888888 } /* XT expected output */
+ },
+ { &test_xxsldwi_0, "xxsldwi SHW=0",
+ { 0x11111111, 0x22222222, 0x33333333, 0x44444444 }, /* XA input */
+ { 0x55555555, 0x66666666, 0x77777777, 0x88888888 }, /* XB input */
+ { 0x11111111, 0x22222222, 0x33333333, 0x44444444 } /* XT expected output */
+ },
+ { &test_xxsldwi_1, "xxsldwi SHW=1",
+ { 0x11111111, 0x22222222, 0x33333333, 0x44444444 }, /* XA input */
+ { 0x55555555, 0x66666666, 0x77777777, 0x88888888 }, /* XB input */
+ { 0x22222222, 0x33333333, 0x44444444, 0x55555555 } /* XT expected output */
+ },
+ { &test_xxsldwi_2, "xxsldwi SHW=2",
+ { 0x11111111, 0x22222222, 0x33333333, 0x44444444 }, /* XA input */
+ { 0x55555555, 0x66666666, 0x77777777, 0x88888888 }, /* XB input */
+ { 0x33333333, 0x44444444, 0x55555555, 0x66666666 } /* XT expected output */
+ },
+ { &test_xxsldwi_3, "xxsldwi SHW=3",
+ { 0x11111111, 0x22222222, 0x33333333, 0x44444444 }, /* XA input */
+ { 0x55555555, 0x66666666, 0x77777777, 0x88888888 }, /* XB input */
+ { 0x44444444, 0x55555555, 0x66666666, 0x77777777 } /* XT expected output */
+ },
+ { NULL, NULL }
+};
+
+static fp_test_t fp_tests[] = { { &test_fcfids, "fcfids", 1 },
+ { &test_fcfidus, "fcfidus", 1 },
+ { &test_fcfidu, "fcfidu", 1 },
+ { NULL, NULL, 0 },
+
+};
+
+static vx_fp_test_t vx_fp_tests[] = {
+ { &test_xscmp, "xscmp", xscmpX_tests, 64, VX_FP_CMP},
+ { &test_xsadddp, "xsadddp", xsadddp_tests, 64, VX_FP_OTHER},
+ { &test_xsdivdp, "xsdivdp", xsdivdp_tests, 64, VX_FP_OTHER},
+ { &test_xsmadd, "xsmadd", xsmaddXdp_tests, 64, VX_FP_SMA},
+ { &test_xsmsub, "xsmsub", xsmsubXdp_tests, 64, VX_FP_SMS},
+ { &test_xsnmadd, "xsnmadd", xsnmaddXdp_tests, 64, VX_FP_SNMA},
+ { & test_xsmuldp, "xsmuldp", xsmuldp_tests, 64, VX_FP_OTHER},
+ { & test_xssubdp, "xssubdp", xssubdp_tests, 64, VX_FP_OTHER},
+ { NULL, NULL, NULL, 0, 0 }
+};
+
+static xs_conv_test_t xs_conv_tests[] = {
+ { &test_xscvdpsxds, "xscvdpsxds", xscvdpsxds_results, 15},
+ { &test_xscvsxddp, "xscvsxddp", xscvsxddp_results, 15},
+ { &test_xscvuxddp, "xscvuxddp", xscvuxddp_results, 15},
+ { NULL, NULL, NULL, 0}
+};
+
+#ifdef __powerpc64__
+static void test_ldbrx(void)
+{
+ int i, equality;
+ HWord_t reg_out;
+ unsigned char * byteIn, * byteOut;
+ r14 = (HWord_t)viargs;
+ // Just try the instruction an arbitrary number of times at different r15 offsets.
+ for (i = 0; i < 3; i++) {
+ int j, k;
+ reg_out = 0;
+ r15 = i * 4;
+ equality = 1;
+ __asm__ __volatile__ ("ldbrx %0, %1, %2" : "=r" (reg_out): "b" (r14),"r" (r15));
+ byteIn = ((unsigned char *)(r14 + r15));
+ byteOut = (unsigned char *)&reg_out;
+
+ printf("ldbrx:");
+ for (k = 0; k < 7; k++) {
+ printf( " %02x", (byteIn[k]));
+ }
+ printf(" (reverse) =>");
+ for (j = 0; j < 8; j++) {
+ printf( " %02x", (byteOut[j]));
+ }
+ printf("\n");
+ for (j = 0, k = 7; j < 8; j++, k--) {
+ equality &= (byteIn[k] == byteOut[j]);
+ }
+ if (!equality) {
+ printf("FAILED: load with byte reversal is incorrect\n");
+ errors++;
+ }
+ }
+ printf( "\n" );
+}
+
+static void
+test_popcntd(void)
+{
+ uint64_t res;
+ unsigned long long src = 0x9182736405504536ULL;
+ int i, answer = 0;
+ r14 = src;
+ __asm__ __volatile__ ("popcntd %0, %1" : "=r" (res): "r" (r14));
+ for (i = 0; i < 64; i++) {
+ answer += (r14 & 1ULL);
+ r14 = r14 >> 1;
+ }
+ printf("popcntd: 0x%llx => %d\n", src, (int)res);
+ if (res!= answer) {
+ printf("Error: unexpected result from popcntd\n");
+ errors++;
+ }
+ printf( "\n" );
+}
+#endif
+
+static void
+test_lfiwzx(void)
+{
+ unsigned int i;
+ unsigned int * src;
+ uint64_t reg_out;
+ r14 = (HWord_t)viargs;
+ // Just try the instruction an arbitrary number of times at different r15 offsets.
+ for (i = 0; i < 3; i++) {
+ reg_out = 0;
+ r15 = i * 4;
+ __asm__ __volatile__ ("lfiwzx %0, %1, %2" : "=d" (reg_out): "b" (r14),"r" (r15));
+ src = ((unsigned int *)(r14 + r15));
+ printf("lfiwzx: %u => %llu.00\n", *src, (unsigned long long)reg_out);
+
+ if (reg_out > 0xFFFFFFFFULL || *src != (unsigned int)reg_out) {
+ printf("FAILED: integer load to FP register is incorrect\n");
+ errors++;
+ }
+ }
+ printf( "\n" );
+}
+
+static void test_vx_fp_ops(void)
+{
+
+ test_func_t func;
+ int k;
+ char * test_name = (char *)malloc(20);
+ k = 0;
+
+ build_special_fargs_table();
+ while ((func = vx_fp_tests[k].test_func)) {
+ int i, condreg, repeat = 0;
+ unsigned int flags;
+ unsigned long long * frap, * frbp, * dst;
+ vx_fp_test_t test_group = vx_fp_tests[k];
+ vx_fp_test_type test_type = test_group.test_type;
+
+ switch (test_type) {
+ case VX_FP_CMP:
+ strcpy(test_name, "xscmp");
+ if (!repeat) {
+ repeat = 1;
+ strcat(test_name, "udp");
+ do_cmpudp = 1;
+ }
+ break;
+ case VX_FP_SMA:
+ case VX_FP_SMS:
+ case VX_FP_SNMA:
+ if (test_type == VX_FP_SMA)
+ strcpy(test_name, "xsmadd");
+ else if (test_type == VX_FP_SMS)
+ strcpy(test_name, "xsmsub");
+ else
+ strcpy(test_name, "xsnmadd");
+ if (!repeat) {
+ repeat = 1;
+ strcat(test_name, "adp");
+ do_adp = 1;
+ }
+ break;
+ case VX_FP_OTHER:
+ strcpy(test_name, test_group.name);
+ break;
+ default:
+ printf("ERROR: Invalid VX FP test type %d\n", test_type);
+ exit(1);
+ }
+
+again:
+ for (i = 0; i < test_group.num_tests; i++) {
+ unsigned int * inA, * inB, * pv;
+
+ fp_test_args_t aTest = test_group.targs[i];
+ inA = (unsigned int *)&spec_fargs[aTest.fra_idx];
+ inB = (unsigned int *)&spec_fargs[aTest.frb_idx];
+ frap = (unsigned long long *)&spec_fargs[aTest.fra_idx];
+ frbp = (unsigned long long *)&spec_fargs[aTest.frb_idx];
+ // Only need to copy one doubleword into each vector's element 0
+ memcpy(&vec_inA, inA, 8);
+ memcpy(&vec_inB, inB, 8);
+
+ switch (test_type) {
+ case VX_FP_CMP:
+ SET_FPSCR_ZERO;
+ SET_CR_XER_ZERO;
+ (*func)();
+ GET_CR(flags);
+ condreg = (flags & 0x0f000000) >> 24;
+ printf("#%d: %s %016llx <=> %016llx ? %x (CRx)\n", i, test_name, *frap, *frbp, condreg);
+ // printf("\tFRA: %e; FRB: %e\n", spec_fargs[aTest.fra_idx], spec_fargs[aTest.frb_idx]);
+ if ( condreg != aTest.cr_flags) {
+ printf("Error: Expected CR flags 0x%x; actual flags: 0x%x\n", aTest.cr_flags, condreg);
+ errors++;
+ }
+ break;
+ case VX_FP_SMA:
+ case VX_FP_SMS:
+ case VX_FP_SNMA:
+ case VX_FP_OTHER:
+ {
+ int idx;
+ unsigned long long vsr_XT;
+ pv = (unsigned int *)&vec_out;
+ // clear vec_out
+ for (idx = 0; idx < 4; idx++, pv++)
+ *pv = 0;
+
+ if (test_type != VX_FP_OTHER) {
+ /* Then we need a third src argument, which is stored in element 0 of
+ * VSX[XT] -- i.e., vec_out. For the xs<ZZZ>mdp cases, VSX[XT] holds
+ * src3 and VSX[XB] holds src2; for the xs<ZZZ>adp cases, VSX[XT] holds
+ * src2 and VSX[XB] holds src3. The fp_test_args_t that holds the test
+ * data (input args, result) contain only two inputs, so I arbitrarily
+ * use spec_fargs elements 4 and 14 (alternating) for the third source
+ * argument. We can use the same input data for a given pair of
+ * adp/mdp-type instructions by swapping the src2 and src3 arguments; thus
+ * the expected result should be the same.
+ */
+ int extra_arg_idx;
+ if (i % 2)
+ extra_arg_idx = 4;
+ else
+ extra_arg_idx = 14;
+
+ //memcpy(&vec_out, &spec_fargs[14], 8);
+
+ if (repeat) {
+ /* We're on the first time through of one of the VX_FP_SMx
+ * test types, meaning we're testing a xs<ZZZ>adp case, thus we
+ * have to swap inputs as described above:
+ * src2 <= VSX[XT]
+ * src3 <= VSX[XB]
+ */
+ memcpy(&vec_out, inB, 8); // src2
+ memcpy(&vec_inB, &spec_fargs[extra_arg_idx], 8); //src3
+ frbp = (unsigned long long *)&spec_fargs[extra_arg_idx];
+ } else {
+ // Don't need to init src2, as it's done before the switch()
+ memcpy(&vec_out, &spec_fargs[extra_arg_idx], 8); //src3
+ }
+ memcpy(&vsr_XT, &vec_out, 8);
+ }
+
+ (*func)();
+ dst = (unsigned long long *) &vec_out;
+ if (test_type == VX_FP_OTHER)
+ printf("#%d: %s %016llx %016llx = %016llx\n", i, test_name, *frap, *frbp, *dst);
+ else
+ printf( "#%d: %s %016llx %016llx %016llx = %016llx\n", i,
+ test_name, vsr_XT, *frap, *frbp, *dst );
+
+ if ( *dst != aTest.dp_bin_result) {
+ printf("Error: Expected result %016llx; actual result %016llx\n", aTest.dp_bin_result, *dst);
+ errors++;
+ }
+ /*
+ {
+ // Debug code. Keep this block commented out except when debugging.
+ double result, expected;
+ memcpy(&result, dst, 8);
+ memcpy(&expected, &aTest.dp_bin_result, 8);
+ printf( "\tFRA + FRB: %e + %e: Expected = %e; Actual = %e\n",
+ spec_fargs[aTest.fra_idx], spec_fargs[aTest.frb_idx],
+ expected, result );
+ }
+ */
+ break;
+ }
+ }
+
+
+ }
+ printf( "\n" );
+
+ if (repeat) {
+ repeat = 0;
+ switch (test_type) {
+ case VX_FP_CMP:
+ strcpy(test_name, "xscmp");
+ strcat(test_name, "odp");
+ do_cmpudp = 0;
+ break;
+ case VX_FP_SMA:
+ case VX_FP_SMS:
+ case VX_FP_SNMA:
+ if (test_type == VX_FP_SMA)
+ strcpy(test_name, "xsmadd");
+ else if (test_type == VX_FP_SMS)
+ strcpy(test_name, "xsmsub");
+ else
+ strcpy(test_name, "xsnmadd");
+ strcat(test_name, "mdp");
+ do_adp = 0;
+ break;
+ case VX_FP_OTHER:
+ break;
+ }
+ goto again;
+ }
+ k++;
+ }
+ printf( "\n" );
+ free(test_name);
+}
+
+static void test_xs_conv_ops(void)
+{
+
+ test_func_t func;
+ int k = 0;
+
+ build_special_fargs_table();
+ while ((func = xs_conv_tests[k].test_func)) {
+ int i;
+ unsigned long long * frbp, * dst;
+ xs_conv_test_t test_group = xs_conv_tests[k];
+ for (i = 0; i < test_group.num_tests; i++) {
+ unsigned int * inB, * pv;
+ int idx;
+ unsigned long long exp_result = test_group.results[i];
+ inB = (unsigned int *)&spec_fargs[i];
+ frbp = (unsigned long long *)&spec_fargs[i];
+ memcpy(&vec_inB, inB, 8);
+ pv = (unsigned int *)&vec_out;
+ // clear vec_out
+ for (idx = 0; idx < 4; idx++, pv++)
+ *pv = 0;
+ (*func)();
+ dst = (unsigned long long *) &vec_out;
+ printf("#%d: %s %016llx => %016llx\n", i, test_group.name, *frbp, *dst);
+
+ if ( *dst != exp_result) {
+ printf("Error: Expected result %016llx; actual result %016llx\n", exp_result, *dst);
+ errors++;
+ }
+ }
+ k++;
+ printf("\n");
+ }
+ printf( "\n" );
+}
+
+static void do_load_test(ldst_test_t loadTest)
+{
+ test_func_t func;
+ unsigned int *src, *dst;
+ int splat = loadTest.type == VSX_LOAD_SPLAT ? 1: 0;
+ int i, j, m, equality;
+ i = j = 0;
+
+ func = loadTest.test_func;
+ for (i = 0, r14 = (HWord_t) loadTest.base_addr; i < NUM_VIARGS_VECS; i++) {
+ int again;
+ j = 0;
+ r14 += i * 16;
+ do {
+ unsigned int * pv = (unsigned int *)&vec_out;
+ int idx;
+ // clear vec_out
+ for (idx = 0; idx < 4; idx++, pv+=idx)
+ *pv = 0;
+
+ again = 0;
+ r15 = j;
+
+ // execute test insn
+ (*func)();
+
+ src = (unsigned int*) (((unsigned char *)r14) + j);
+ dst = (unsigned int*) &vec_out;
+
+ printf( "%s:", loadTest.name);
+ for (m = 0; m < loadTest.num_words_to_process; m++) {
+ printf( " %08x", src[splat ? m % 2 : m]);
+ }
+ printf( " =>");
+ for (m = 0; m < loadTest.num_words_to_process; m++) {
+ printf( " %08x", dst[m]);
+ }
+ printf("\n");
+ equality = 1;
+ for (m = 0; m < loadTest.num_words_to_process; m++) {
+ equality = equality && (src[splat ? m % 2 : m] == dst[m]);
+ }
+
+ if (!equality) {
+ printf("FAILED: loaded vector is incorrect\n");
+ errors++;
+ }
+
+ if (j == 0 && loadTest.offset) {
+ again = 1;
+ j += loadTest.offset;
+ }
+ }
+ while (again);
+ }
+}
+
+static void
+do_store_test ( ldst_test_t storeTest )
+{
+ test_func_t func;
+ unsigned int *src, *dst;
+ int i, j, m, equality;
+ i = j = 0;
+
+ func = storeTest.test_func;
+ r14 = (HWord_t) storeTest.base_addr;
+ r15 = (HWord_t) storeTest.offset;
+ unsigned int * pv = (unsigned int *) storeTest.base_addr;
+ int idx;
+ // clear out storage destination
+ for (idx = 0; idx < 4; idx++, pv += idx)
+ *pv = 0;
+
+ memcpy(&vec_inA, &viargs[0], sizeof(vector unsigned char));
+
+ // execute test insn
+ (*func)();
+ src = &viargs[0];
+ dst = (unsigned int*) (((unsigned char *) r14) + storeTest.offset);
+
+ printf( "%s:", storeTest.name );
+ for (m = 0; m < storeTest.num_words_to_process; m++) {
+ printf( " %08x", src[m] );
+ }
+ printf( " =>" );
+ for (m = 0; m < storeTest.num_words_to_process; m++) {
+ printf( " %08x", dst[m] );
+ }
+ printf( "\n" );
+ equality = 1;
+ for (m = 0; m < storeTest.num_words_to_process; m++) {
+ equality = equality && (src[m] == dst[m]);
+ }
+
+ if (!equality) {
+ printf( "FAILED: vector store result is incorrect\n" );
+ errors++;
+ }
+
+}
+
+
+static void test_ldst(void)
+{
+ int k = 0;
+
+ while (ldst_tests[k].test_func) {
+ if (ldst_tests[k].type == VSX_STORE)
+ do_store_test(ldst_tests[k]);
+ else
+ do_load_test(ldst_tests[k]);
+ k++;
+ printf("\n");
+ }
+}
+
+static void test_ftdiv(void)
+{
+ int i, num_tests, crx;
+ unsigned int flags;
+ unsigned long long * frap, * frbp;
+ build_special_fargs_table();
+
+ num_tests = sizeof ftdiv_tests/sizeof ftdiv_tests[0];
+
+ for (i = 0; i < num_tests; i++) {
+ ftdiv_test_args_t aTest = ftdiv_tests[i];
+ f14 = spec_fargs[aTest.fra_idx];
+ f15 = spec_fargs[aTest.frb_idx];
+ frap = (unsigned long long *)&spec_fargs[aTest.fra_idx];
+ frbp = (unsigned long long *)&spec_fargs[aTest.frb_idx];
+ SET_FPSCR_ZERO;
+ SET_CR_XER_ZERO;
+ __asm__ __volatile__ ("ftdiv cr1, %0, %1" : : "d" (f14), "d" (f15));
+ GET_CR(flags);
+ crx = (flags & 0x0f000000) >> 24;
+ printf( "ftdiv: %016llx <=> %016llx ? %x (CRx)\n", *frap, *frbp, crx);
+// printf("\tFRA: %e; FRB: %e\n", f14, f15);
+ if ( crx != aTest.cr_flags) {
+ printf("Error: Expected CR flags 0x%x; actual flags: 0x%x\n", aTest.cr_flags, crx);
+ errors++;
+ }
+ }
+ printf( "\n" );
+}
+
+
+static void test_p7_fpops ( void )
+{
+ int k = 0;
+ test_func_t func;
+
+ build_fargs_table();
+ while ((func = fp_tests[k].test_func)) {
+ float res;
+ double resd;
+ unsigned long long u0;
+ int i;
+ int res32 = strcmp(fp_tests[k].name, "fcfidu");
+
+ for (i = 0; i < nb_fargs; i++) {
+ u0 = *(unsigned long long *) (&fargs[i]);
+ f14 = fargs[i];
+ (*func)();
+ if (res32) {
+ res = f17;
+ printf( "%s %016llx => (raw sp) %08x)",
+ fp_tests[k].name, u0, *((unsigned int *)&res));
+ } else {
+ resd = f17;
+ printf( "%s %016llx => (raw sp) %016llx)",
+ fp_tests[k].name, u0, *(unsigned long long *)(&resd));
+ }
+ printf( "\n" );
+ }
+
+ k++;
+ printf( "\n" );
+ }
+}
+
+static void test_vsx_logic(void)
+{
+ logic_test_t aTest;
+ test_func_t func;
+ int equality, k;
+ k = 0;
+
+ while ((func = logic_tests[k].test_func)) {
+ unsigned int * pv;
+ int startA, startB;
+ unsigned int * inA, * inB, * dst;
+ int idx, i;
+ startA = 0;
+ aTest = logic_tests[k];
+ for (i = 0; i <= (NUM_VIARGS_INTS - (NUM_VIARGS_VECS * sizeof(int))); i++, startA++) {
+ startB = startA + 4;
+ pv = (unsigned int *)&vec_out;
+ inA = &viargs[startA];
+ inB = &viargs[startB];
+ memcpy(&vec_inA, inA, sizeof(vector unsigned char));
+ memcpy(&vec_inB, inB, sizeof(vector unsigned char));
+ // clear vec_out
+ for (idx = 0; idx < 4; idx++, pv++)
+ *pv = 0;
+
+ // execute test insn
+ (*func)();
+ dst = (unsigned int*) &vec_out;
+
+ printf( "%s:", aTest.name);
+ printf( " %08x %08x %08x %08x %s", inA[0], inA[1], inA[2], inA[3], aTest.name);
+ printf( " %08x %08x %08x %08x", inB[0], inB[1], inB[2], inB[3]);
+ printf(" => %08x %08x %08x %08x\n", dst[0], dst[1], dst[2], dst[3]);
+
+ equality = 1;
+ for (idx = 0; idx < 4; idx++) {
+ switch (aTest.op) {
+ case VSX_AND:
+ equality &= (dst[idx] == (inA[idx] & inB[idx]));
+ break;
+ case VSX_ANDC:
+ equality &= (dst[idx] == (inA[idx] & ~inB[idx]));
+ break;
+ case VSX_NOR:
+ equality &= (dst[idx] == ~(inA[idx] | inB[idx]));
+ break;
+ case VSX_XOR:
+ equality &= (dst[idx] == (inA[idx] ^ inB[idx]));
+ break;
+ case VSX_OR:
+ equality &= (dst[idx] == (inA[idx] | inB[idx]));
+ break;
+ default:
+ fprintf(stderr, "Error in test_vsx_logic(): unknown VSX logical op %d\n", aTest.op);
+ exit(1);
+ }
+ }
+ if (!equality) {
+ printf( "FAILED: vector out is incorrect\n" );
+ errors++;
+ }
+ }
+ k++;
+ }
+ printf( "\n" );
+}
+
+static void test_move_ops (void)
+{
+ move_test_t aTest;
+ test_func_t func;
+ int equality, k;
+ k = 0;
+
+ while ((func = move_tests[k].test_func)) {
+ unsigned int * pv;
+ int startA, startB;
+ unsigned int * inA, * inB, * dst;
+ unsigned long long exp_out;
+ int idx;
+ aTest = move_tests[k];
+ exp_out = aTest.expected_result;
+ startA = aTest.xa_idx;
+ startB = aTest.xb_idx;
+ pv = (unsigned int *)&vec_out;
+ inA = &viargs[startA];
+ inB = &viargs[startB];
+ memcpy(&vec_inA, inA, sizeof(vector unsigned char));
+ memcpy(&vec_inB, inB, sizeof(vector unsigned char));
+ // clear vec_out
+ for (idx = 0; idx < 4; idx++, pv++)
+ *pv = 0;
+
+ // execute test insn
+ (*func)();
+ dst = (unsigned int*) &vec_out;
+
+ printf( "%s:", aTest.name);
+ printf( " %08x %08x %s", inA[0], inA[1], aTest.name);
+ printf( " %08x %08xx", inB[0], inB[1]);
+ printf(" => %08x %08x\n", dst[0], dst[1]);
+
+ equality = 1;
+ pv = (unsigned int *)&exp_out;
+ for (idx = 0; idx < 2; idx++) {
+ equality &= (dst[idx] == pv[idx]);
+ }
+ if (!equality) {
+ printf( "FAILED: vector out is incorrect\n" );
+ errors++;
+ }
+ k++;
+ printf( "\n" );
+ }
+}
+
+static void test_permute_ops (void)
+{
+ permute_test_t *aTest;
+ unsigned int *dst = (unsigned int *) &vec_out;
+
+ for (aTest = &(permute_tests[0]); aTest->test_func != NULL; aTest++)
+ {
+ /* Grab test input and clear output vector. */
+ memcpy(&vec_inA, aTest->xa, sizeof(vec_inA));
+ memcpy(&vec_inB, aTest->xb, sizeof(vec_inB));
+ memset(dst, 0, sizeof(vec_out));
+
+ /* execute test insn */
+ aTest->test_func();
+
+ printf( "%s:\n", aTest->name);
+ printf( " XA[%08x,%08x,%08x,%08x]\n",
+ aTest->xa[0], aTest->xa[1], aTest->xa[2], aTest->xa[3]);
+ printf( " XB[%08x,%08x,%08x,%08x]\n",
+ aTest->xb[0], aTest->xb[1], aTest->xb[2], aTest->xb[3]);
+ printf( " => XT[%08x,%08x,%08x,%08x]\n",
+ dst[0], dst[1], dst[2], dst[3]);
+
+ if (memcmp (dst, &aTest->expected_output, sizeof(vec_out)))
+ {
+ printf( "FAILED: vector out is incorrect\n" );
+ errors++;
+ }
+ }
+ printf( "\n" );
+}
+
+static test_table_t all_tests[] = { { &test_ldst,
+ "Test VSX load/store instructions" },
+ { &test_vsx_logic,
+ "Test VSX logic instructions" },
+#ifdef __powerpc64__
+ { &test_ldbrx,
+ "Test ldbrx instruction" },
+ { &test_popcntd,
+ "Test popcntd instruction" },
+#endif
+ { &test_lfiwzx,
+ "Test lfiwzx instruction" },
+ { &test_p7_fpops,
+ "Test P7 floating point convert instructions"},
+ { &test_ftdiv,
+ "Test ftdiv instruction" },
+ { &test_move_ops,
+ "Test VSX move instructions"},
+ { &test_permute_ops,
+ "Test VSX permute instructions"},
+ { &test_vx_fp_ops,
+ "Test VSX floating point instructions"},
+ { &test_xs_conv_ops,
+ "Test VSX scalar integer conversion instructions" },
+ { NULL, NULL }
+};
+#endif // HAS_VSX
+
+int main(int argc, char *argv[])
+{
+#ifdef HAS_VSX
+
+ test_table_t aTest;
+ test_func_t func;
+ int i = 0;
+
+ while ((func = all_tests[i].test_category)) {
+ aTest = all_tests[i];
+ printf( "%s\n", aTest.name );
+ (*func)();
+ i++;
+ }
+ if (errors)
+ printf("Testcase FAILED with %d errors \n", errors);
+ else
+ printf("Testcase PASSED\n");
+
+#endif // HAS _VSX
+
+ return 0;
+}
Index: none/tests/ppc64/test_isa_2_06_part1.stderr.exp
===================================================================
--- /dev/null
+++ none/tests/ppc64/test_isa_2_06_part1.stderr.exp
@@ -0,0 +1,2 @@
+
+
Index: none/tests/ppc64/test_isa_2_06_part1.stdout.exp
===================================================================
--- /dev/null
+++ none/tests/ppc64/test_isa_2_06_part1.stdout.exp
@@ -0,0 +1,1031 @@
+Test VSX load/store instructions
+lxsdx: 01234567 89abcdef => 01234567 89abcdef
+lxsdx: 8899aabb 91929394 => 8899aabb 91929394
+
+lxsdx: 01234567 89abcdef => 01234567 89abcdef
+lxsdx: 89abcdef 00112233 => 89abcdef 00112233
+lxsdx: 8899aabb 91929394 => 8899aabb 91929394
+lxsdx: 91929394 a1a2a3a4 => 91929394 a1a2a3a4
+
+lxvd2x: 01234567 89abcdef 00112233 44556677 => 01234567 89abcdef 00112233 44556677
+lxvd2x: 8899aabb 91929394 a1a2a3a4 b1b2b3b4 => 8899aabb 91929394 a1a2a3a4 b1b2b3b4
+
+lxvd2x: 01234567 89abcdef 00112233 44556677 => 01234567 89abcdef 00112233 44556677
+lxvd2x: 89abcdef 00112233 44556677 8899aabb => 89abcdef 00112233 44556677 8899aabb
+lxvd2x: 8899aabb 91929394 a1a2a3a4 b1b2b3b4 => 8899aabb 91929394 a1a2a3a4 b1b2b3b4
+lxvd2x: 91929394 a1a2a3a4 b1b2b3b4 c1c2c3c4 => 91929394 a1a2a3a4 b1b2b3b4 c1c2c3c4
+
+lxvdsx: 01234567 89abcdef 01234567 89abcdef => 01234567 89abcdef 01234567 89abcdef
+lxvdsx: 8899aabb 91929394 8899aabb 91929394 => 8899aabb 91929394 8899aabb 91929394
+
+lxvdsx: 01234567 89abcdef 01234567 89abcdef => 01234567 89abcdef 01234567 89abcdef
+lxvdsx: 89abcdef 00112233 89abcdef 00112233 => 89abcdef 00112233 89abcdef 00112233
+lxvdsx: 8899aabb 91929394 8899aabb 91929394 => 8899aabb 91929394 8899aabb 91929394
+lxvdsx: 91929394 a1a2a3a4 91929394 a1a2a3a4 => 91929394 a1a2a3a4 91929394 a1a2a3a4
+
+lxvw4x: 01234567 89abcdef 00112233 44556677 => 01234567 89abcdef 00112233 44556677
+lxvw4x: 8899aabb 91929394 a1a2a3a4 b1b2b3b4 => 8899aabb 91929394 a1a2a3a4 b1b2b3b4
+
+lxvw4x: 01234567 89abcdef 00112233 44556677 => 01234567 89abcdef 00112233 44556677
+lxvw4x: 89abcdef 00112233 44556677 8899aabb => 89abcdef 00112233 44556677 8899aabb
+lxvw4x: 8899aabb 91929394 a1a2a3a4 b1b2b3b4 => 8899aabb 91929394 a1a2a3a4 b1b2b3b4
+lxvw4x: 91929394 a1a2a3a4 b1b2b3b4 c1c2c3c4 => 91929394 a1a2a3a4 b1b2b3b4 c1c2c3c4
+
+stxsdx: 01234567 89abcdef => 01234567 89abcdef
+
+stxsdx: 01234567 89abcdef => 01234567 89abcdef
+
+stxvd2x: 01234567 89abcdef 00112233 44556677 => 01234567 89abcdef 00112233 44556677
+
+stxvd2x: 01234567 89abcdef 00112233 44556677 => 01234567 89abcdef 00112233 44556677
+
+stxvw4x: 01234567 89abcdef 00112233 44556677 => 01234567 89abcdef 00112233 44556677
+
+stxvw4x: 01234567 89abcdef 00112233 44556677 => 01234567 89abcdef 00112233 44556677
+
+Test VSX logic instructions
+xxlxor: 01234567 89abcdef 00112233 44556677 xxlxor 8899aabb 91929394 a1a2a3a4 b1b2b3b4 => 89baefdc 18395e7b a1b38197 f5e7d5c3
+xxlxor: 89abcdef 00112233 44556677 8899aabb xxlxor 91929394 a1a2a3a4 b1b2b3b4 c1c2c3c4 => 18395e7b a1b38197 f5e7d5c3 495b697f
+xxlxor: 00112233 44556677 8899aabb 91929394 xxlxor a1a2a3a4 b1b2b3b4 c1c2c3c4 d1d2d3d4 => a1b38197 f5e7d5c3 495b697f 40404040
+xxlxor: 44556677 8899aabb 91929394 a1a2a3a4 xxlxor b1b2b3b4 c1c2c3c4 d1d2d3d4 7a6b5d3e => f5e7d5c3 495b697f 40404040 dbc9fe9a
+xxlor: 01234567 89abcdef 00112233 44556677 xxlor 8899aabb 91929394 a1a2a3a4 b1b2b3b4 => 89bbefff 99bbdfff a1b3a3b7 f5f7f7f7
+xxlor: 89abcdef 00112233 44556677 8899aabb xxlor 91929394 a1a2a3a4 b1b2b3b4 c1c2c3c4 => 99bbdfff a1b3a3b7 f5f7f7f7 c9dbebff
+xxlor: 00112233 44556677 8899aabb 91929394 xxlor a1a2a3a4 b1b2b3b4 c1c2c3c4 d1d2d3d4 => a1b3a3b7 f5f7f7f7 c9dbebff d1d2d3d4
+xxlor: 44556677 8899aabb 91929394 a1a2a3a4 xxlor b1b2b3b4 c1c2c3c4 d1d2d3d4 7a6b5d3e => f5f7f7f7 c9dbebff d1d2d3d4 fbebffbe
+xxlnor: 01234567 89abcdef 00112233 44556677 xxlnor 8899aabb 91929394 a1a2a3a4 b1b2b3b4 => 76441000 66442000 5e4c5c48 0a080808
+xxlnor: 89abcdef 00112233 44556677 8899aabb xxlnor 91929394 a1a2a3a4 b1b2b3b4 c1c2c3c4 => 66442000 5e4c5c48 0a080808 36241400
+xxlnor: 00112233 44556677 8899aabb 91929394 xxlnor a1a2a3a4 b1b2b3b4 c1c2c3c4 d1d2d3d4 => 5e4c5c48 0a080808 36241400 2e2d2c2b
+xxlnor: 44556677 8899aabb 91929394 a1a2a3a4 xxlnor b1b2b3b4 c1c2c3c4 d1d2d3d4 7a6b5d3e => 0a080808 36241400 2e2d2c2b 04140041
+xxland: 01234567 89abcdef 00112233 44556677 xxland 8899aabb 91929394 a1a2a3a4 b1b2b3b4 => 00010023 81828184 00002220 00102234
+xxland: 89abcdef 00112233 44556677 8899aabb xxland 91929394 a1a2a3a4 b1b2b3b4 c1c2c3c4 => 81828184 00002220 00102234 80808280
+xxland: 00112233 44556677 8899aabb 91929394 xxland a1a2a3a4 b1b2b3b4 c1c2c3c4 d1d2d3d4 => 00002220 00102234 80808280 91929394
+xxland: 44556677 8899aabb 91929394 a1a2a3a4 xxland b1b2b3b4 c1c2c3c4 d1d2d3d4 7a6b5d3e => 00102234 80808280 91929394 20220124
+xxlandc: 01234567 89abcdef 00112233 44556677 xxlandc 8899aabb 91929394 a1a2a3a4 b1b2b3b4 => 01224544 08294c6b 00110013 44454443
+xxlandc: 89abcdef 00112233 44556677 8899aabb xxlandc 91929394 a1a2a3a4 b1b2b3b4 c1c2c3c4 => 08294c6b 00110013 44454443 0819283b
+xxlandc: 00112233 44556677 8899aabb 91929394 xxlandc a1a2a3a4 b1b2b3b4 c1c2c3c4 d1d2d3d4 => 00110013 44454443 0819283b 00000000
+xxlandc: 44556677 8899aabb 91929394 a1a2a3a4 xxlandc b1b2b3b4 c1c2c3c4 d1d2d3d4 7a6b5d3e => 44454443 0819283b 00000000 8180a280
+
+Test ldbrx instruction
+ldbrx: 01 23 45 67 89 ab cd (reverse) => ef cd ab 89 67 45 23 01
+ldbrx: 89 ab cd ef 00 11 22 (reverse) => 33 22 11 00 ef cd ab 89
+ldbrx: 00 11 22 33 44 55 66 (reverse) => 77 66 55 44 33 22 11 00
+
+Test popcntd instruction
+popcntd: 0x9182736405504536 => 24
+
+Test lfiwzx instruction
+lfiwzx: 19088743 => 19088743.00
+lfiwzx: 2309737967 => 2309737967.00
+lfiwzx: 1122867 => 1122867.00
+
+Test P7 floating point convert instructions
+fcfids 0010000000000001 => (raw sp) 59800000)
+fcfids 00100094e0000359 => (raw sp) 598004a7)
+fcfids 3fe0000000000001 => (raw sp) 5e7f8000)
+fcfids 3fe00094e0000359 => (raw sp) 5e7f8002)
+fcfids 8010000000000001 => (raw sp) deffe000)
+fcfids 80100094e0000359 => (raw sp) deffdfff)
+fcfids bfe0000000000001 => (raw sp) de804000)
+fcfids bfe00094e0000359 => (raw sp) de803fff)
+fcfids 0020000000000b01 => (raw sp) 5a000000)
+fcfids 00000000203f0b3d => (raw sp) 4e00fc2d)
+fcfids 00000000005a203d => (raw sp) 4ab4407a)
+fcfids 8020000000000b01 => (raw sp) deffc000)
+fcfids 80000000203f0b3d => (raw sp) df000000)
+
+fcfidus 0010000000000001 => (raw sp) 59800000)
+fcfidus 00100094e0000359 => (raw sp) 598004a7)
+fcfidus 3fe0000000000001 => (raw sp) 5e7f8000)
+fcfidus 3fe00094e0000359 => (raw sp) 5e7f8002)
+fcfidus 8010000000000001 => (raw sp) 5f001000)
+fcfidus 80100094e0000359 => (raw sp) 5f001001)
+fcfidus bfe0000000000001 => (raw sp) 5f3fe000)
+fcfidus bfe00094e0000359 => (raw sp) 5f3fe001)
+fcfidus 0020000000000b01 => (raw sp) 5a000000)
+fcfidus 00000000203f0b3d => (raw sp) 4e00fc2d)
+fcfidus 00000000005a203d => (raw sp) 4ab4407a)
+fcfidus 8020000000000b01 => (raw sp) 5f002000)
+fcfidus 80000000203f0b3d => (raw sp) 5f000000)
+
+fcfidu 0010000000000001 => (raw sp) 4330000000000001)
+fcfidu 00100094e0000359 => (raw sp) 43300094e0000359)
+fcfidu 3fe0000000000001 => (raw sp) 43cff00000000000)
+fcfidu 3fe00094e0000359 => (raw sp) 43cff0004a700002)
+fcfidu 8010000000000001 => (raw sp) 43e0020000000000)
+fcfidu 80100094e0000359 => (raw sp) 43e00200129c0000)
+fcfidu bfe0000000000001 => (raw sp) 43e7fc0000000000)
+fcfidu bfe00094e0000359 => (raw sp) 43e7fc00129c0000)
+fcfidu 0020000000000b01 => (raw sp) 4340000000000580)
+fcfidu 00000000203f0b3d => (raw sp) 41c01f859e800000)
+fcfidu 00000000005a203d => (raw sp) 4156880f40000000)
+fcfidu 8020000000000b01 => (raw sp) 43e0040000000001)
+fcfidu 80000000203f0b3d => (raw sp) 43e00000000407e1)
+
+Test ftdiv instruction
+ftdiv: 3fd8000000000000 <=> 404f000000000000 ? 8 (CRx)
+ftdiv: 7ff7ffffffffffff <=> 404f000000000000 ? a (CRx)
+ftdiv: 404f000000000000 <=> fff8000000000000 ? a (CRx)
+ftdiv: 3fd8000000000000 <=> 0018000000b77501 ? a (CRx)
+ftdiv: 404f000000000000 <=> 7fe800000000051b ? a (CRx)
+ftdiv: 7fe800000000051b <=> 3fd8000000000000 ? a (CRx)
+ftdiv: 3fd8000000000000 <=> 7fe800000000051b ? a (CRx)
+ftdiv: 0123214569900000 <=> 3fd8000000000000 ? a (CRx)
+ftdiv: 7ff0000000000000 <=> 404f000000000000 ? e (CRx)
+ftdiv: fff0000000000000 <=> 404f000000000000 ? e (CRx)
+ftdiv: 404f000000000000 <=> 7ff0000000000000 ? e (CRx)
+ftdiv: 3fd8000000000000 <=> 8008340000078000 ? e (CRx)
+ftdiv: 0000000000000000 <=> 0000000000000000 ? e (CRx)
+ftdiv: 0000000000000000 <=> 8000000000000000 ? e (CRx)
+
+Test VSX move instructions
+xsabsdp: 01234567 89abcdef xsabsdp 8899aabb 91929394x => 0899aabb 91929394
+
+xscpsgndp: 8899aabb 91929394 xscpsgndp 01234567 89abcdefx => 81234567 89abcdef
+
+xsnabsdp: b1b2b3b4 c1c2c3c4 xsnabsdp 44556677 8899aabbx => c4556677 8899aabb
+
+xsnegdp: 01234567 89abcdef xsnegdp b1b2b3b4 c1c2c3c4x => 31b2b3b4 c1c2c3c4
+
+Test VSX permute instructions
+xxmrghw:
+ XA[11111111,22222222,33333333,44444444]
+ XB[55555555,66666666,77777777,88888888]
+ => XT[11111111,55555555,22222222,66666666]
+xxmrghw:
+ XA[00112233,44556677,8899aabb,ccddeeff]
+ XB[11111111,22222222,33333333,44444444]
+ => XT[00112233,11111111,44556677,22222222]
+xxmrglw:
+ XA[11111111,22222222,33333333,44444444]
+ XB[55555555,66666666,77777777,88888888]
+ => XT[33333333,77777777,44444444,88888888]
+xxmrglw:
+ XA[00112233,44556677,8899aabb,ccddeeff]
+ XB[11111111,22222222,33333333,44444444]
+ => XT[8899aabb,33333333,ccddeeff,44444444]
+xxpermdi DM=00:
+ XA[11111111,22222222,33333333,44444444]
+ XB[55555555,66666666,77777777,88888888]
+ => XT[11111111,22222222,55555555,66666666]
+xxpermdi DM=01:
+ XA[11111111,22222222,33333333,44444444]
+ XB[55555555,66666666,77777777,88888888]
+ => XT[11111111,22222222,77777777,88888888]
+xxpermdi DM=10:
+ XA[11111111,22222222,33333333,44444444]
+ XB[55555555,66666666,77777777,88888888]
+ => XT[33333333,44444444,55555555,66666666]
+xxpermdi DM=11:
+ XA[11111111,22222222,33333333,44444444]
+ XB[55555555,66666666,77777777,88888888]
+ => XT[33333333,44444444,77777777,88888888]
+xxsldwi SHW=0:
+ XA[11111111,22222222,33333333,44444444]
+ XB[55555555,66666666,77777777,88888888]
+ => XT[11111111,22222222,33333333,44444444]
+xxsldwi SHW=1:
+ XA[11111111,22222222,33333333,44444444]
+ XB[55555555,66666666,77777777,88888888]
+ => XT[22222222,33333333,44444444,55555555]
+xxsldwi SHW=2:
+ XA[11111111,22222222,33333333,44444444]
+ XB[55555555,66666666,77777777,88888888]
+ => XT[33333333,44444444,55555555,66666666]
+xxsldwi SHW=3:
+ XA[11111111,22222222,33333333,44444444]
+ XB[55555555,66666666,77777777,88888888]
+ => XT[44444444,55555555,66666666,77777777]
+
+Test VSX floating point instructions
+#0: xscmpudp fff0000000000000 <=> fff0000000000000 ? 2 (CRx)
+#1: xscmpudp fff0000000000000 <=> c0d0650f5a07b353 ? 8 (CRx)
+#2: xscmpudp fff0000000000000 <=> 8000000000000000 ? 8 (CRx)
+#3: xscmpudp fff0000000000000 <=> 0000000000000000 ? 8 (CRx)
+#4: xscmpudp fff0000000000000 <=> 0123214569900000 ? 8 (CRx)
+#5: xscmpudp fff0000000000000 <=> 7ff0000000000000 ? 8 (CRx)
+#6: xscmpudp fff0000000000000 <=> 7ff7ffffffffffff ? 1 (CRx)
+#7: xscmpudp fff0000000000000 <=> 7ff8000000000000 ? 1 (CRx)
+#8: xscmpudp c0d0650f5a07b353 <=> fff0000000000000 ? 4 (CRx)
+#9: xscmpudp c0d0650f5a07b353 <=> c0d0650f5a07b353 ? 2 (CRx)
+#10: xscmpudp c0d0650f5a07b353 <=> 8000000000000000 ? 8 (CRx)
+#11: xscmpudp c0d0650f5a07b353 <=> 0000000000000000 ? 8 (CRx)
+#12: xscmpudp c0d0650f5a07b353 <=> 0123214569900000 ? 8 (CRx)
+#13: xscmpudp c0d0650f5a07b353 <=> 7ff0000000000000 ? 8 (CRx)
+#14: xscmpudp c0d0650f5a07b353 <=> 7ff7ffffffffffff ? 1 (CRx)
+#15: xscmpudp c0d0650f5a07b353 <=> 7ff8000000000000 ? 1 (CRx)
+#16: xscmpudp 8000000000000000 <=> fff0000000000000 ? 4 (CRx)
+#17: xscmpudp 8000000000000000 <=> c0d0650f5a07b353 ? 4 (CRx)
+#18: xscmpudp 8000000000000000 <=> 8000000000000000 ? 2 (CRx)
+#19: xscmpudp 8000000000000000 <=> 0000000000000000 ? 2 (CRx)
+#20: xscmpudp 8000000000000000 <=> 0123214569900000 ? 8 (CRx)
+#21: xscmpudp 8000000000000000 <=> 7ff0000000000000 ? 8 (CRx)
+#22: xscmpudp 8000000000000000 <=> 7ff7ffffffffffff ? 1 (CRx)
+#23: xscmpudp 8000000000000000 <=> 7ff8000000000000 ? 1 (CRx)
+#24: xscmpudp 0000000000000000 <=> fff0000000000000 ? 4 (CRx)
+#25: xscmpudp 0000000000000000 <=> c0d0650f5a07b353 ? 4 (CRx)
+#26: xscmpudp 0000000000000000 <=> 8000000000000000 ? 2 (CRx)
+#27: xscmpudp 0000000000000000 <=> 0000000000000000 ? 2 (CRx)
+#28: xscmpudp 0000000000000000 <=> 0123214569900000 ? 8 (CRx)
+#29: xscmpudp 0000000000000000 <=> 7ff0000000000000 ? 8 (CRx)
+#30: xscmpudp 0000000000000000 <=> 7ff7ffffffffffff ? 1 (CRx)
+#31: xscmpudp 0000000000000000 <=> 7ff8000000000000 ? 1 (CRx)
+#32: xscmpudp 0123214569900000 <=> fff0000000000000 ? 4 (CRx)
+#33: xscmpudp 0123214569900000 <=> c0d0650f5a07b353 ? 4 (CRx)
+#34: xscmpudp 0123214569900000 <=> 8000000000000000 ? 4 (CRx)
+#35: xscmpudp 0123214569900000 <=> 0000000000000000 ? 4 (CRx)
+#36: xscmpudp 0123214569900000 <=> 404f000000000000 ? 8 (CRx)
+#37: xscmpudp 0123214569900000 <=> 7ff0000000000000 ? 8 (CRx)
+#38: xscmpudp 0123214569900000 <=> 7ff7ffffffffffff ? 1 (CRx)
+#39: xscmpudp 0123214569900000 <=> 7ff8000000000000 ? 1 (CRx)
+#40: xscmpudp 7ff0000000000000 <=> fff0000000000000 ? 4 (CRx)
+#41: xscmpudp 7ff0000000000000 <=> c0d0650f5a07b353 ? 4 (CRx)
+#42: xscmpudp 7ff0000000000000 <=> 8000000000000000 ? 4 (CRx)
+#43: xscmpudp 7ff0000000000000 <=> 0000000000000000 ? 4 (CRx)
+#44: xscmpudp 7ff0000000000000 <=> 0123214569900000 ? 4 (CRx)
+#45: xscmpudp 7ff0000000000000 <=> 7ff0000000000000 ? 2 (CRx)
+#46: xscmpudp 7ff0000000000000 <=> 7ff7ffffffffffff ? 1 (CRx)
+#47: xscmpudp 7ff0000000000000 <=> 7ff8000000000000 ? 1 (CRx)
+#48: xscmpudp fff7ffffffffffff <=> fff0000000000000 ? 1 (CRx)
+#49: xscmpudp fff7ffffffffffff <=> c0d0650f5a07b353 ? 1 (CRx)
+#50: xscmpudp fff7ffffffffffff <=> 8000000000000000 ? 1 (CRx)
+#51: xscmpudp fff7ffffffffffff <=> 0000000000000000 ? 1 (CRx)
+#52: xscmpudp fff7ffffffffffff <=> 0123214569900000 ? 1 (CRx)
+#53: xscmpudp fff7ffffffffffff <=> 7ff0000000000000 ? 1 (CRx)
+#54: xscmpudp fff7ffffffffffff <=> 7ff7ffffffffffff ? 1 (CRx)
+#55: xscmpudp fff7ffffffffffff <=> 7ff8000000000000 ? 1 (CRx)
+#56: xscmpudp fff8000000000000 <=> fff0000000000000 ? 1 (CRx)
+#57: xscmpudp fff8000000000000 <=> c0d0650f5a07b353 ? 1 (CRx)
+#58: xscmpudp fff8000000000000 <=> 8000000000000000 ? 1 (CRx)
+#59: xscmpudp fff8000000000000 <=> 0000000000000000 ? 1 (CRx)
+#60: xscmpudp fff8000000000000 <=> 0123214569900000 ? 1 (CRx)
+#61: xscmpudp fff8000000000000 <=> 7ff0000000000000 ? 1 (CRx)
+#62: xscmpudp fff8000000000000 <=> 7ff7ffffffffffff ? 1 (CRx)
+#63: xscmpudp fff8000000000000 <=> 7ff8000000000000 ? 1 (CRx)
+
+#0: xscmpodp fff0000000000000 <=> fff0000000000000 ? 2 (CRx)
+#1: xscmpodp fff0000000000000 <=> c0d0650f5a07b353 ? 8 (CRx)
+#2: xscmpodp fff0000000000000 <=> 8000000000000000 ? 8 (CRx)
+#3: xscmpodp fff0000000000000 <=> 0000000000000000 ? 8 (CRx)
+#4: xscmpodp fff0000000000000 <=> 0123214569900000 ? 8 (CRx)
+#5: xscmpodp fff0000000000000 <=> 7ff0000000000000 ? 8 (CRx)
+#6: xscmpodp fff0000000000000 <=> 7ff7ffffffffffff ? 1 (CRx)
+#7: xscmpodp fff0000000000000 <=> 7ff8000000000000 ? 1 (CRx)
+#8: xscmpodp c0d0650f5a07b353 <=> fff0000000000000 ? 4 (CRx)
+#9: xscmpodp c0d0650f5a07b353 <=> c0d0650f5a07b353 ? 2 (CRx)
+#10: xscmpodp c0d0650f5a07b353 <=> 8000000000000000 ? 8 (CRx)
+#11: xscmpodp c0d0650f5a07b353 <=> 0000000000000000 ? 8 (CRx)
+#12: xscmpodp c0d0650f5a07b353 <=> 0123214569900000 ? 8 (CRx)
+#13: xscmpodp c0d0650f5a07b353 <=> 7ff0000000000000 ? 8 (CRx)
+#14: xscmpodp c0d0650f5a07b353 <=> 7ff7ffffffffffff ? 1 (CRx)
+#15: xscmpodp c0d0650f5a07b353 <=> 7ff8000000000000 ? 1 (CRx)
+#16: xscmpodp 8000000000000000 <=> fff0000000000000 ? 4 (CRx)
+#17: xscmpodp 8000000000000000 <=> c0d0650f5a07b353 ? 4 (CRx)
+#18: xscmpodp 8000000000000000 <=> 8000000000000000 ? 2 (CRx)
+#19: xscmpodp 8000000000000000 <=> 0000000000000000 ? 2 (CRx)
+#20: xscmpodp 8000000000000000 <=> 0123214569900000 ? 8 (CRx)
+#21: xscmpodp 8000000000000000 <=> 7ff0000000000000 ? 8 (CRx)
+#22: xscmpodp 8000000000000000 <=> 7ff7ffffffffffff ? 1 (CRx)
+#23: xscmpodp 8000000000000000 <=> 7ff8000000000000 ? 1 (CRx)
+#24: xscmpodp 0000000000000000 <=> fff0000000000000 ? 4 (CRx)
+#25: xscmpodp 0000000000000000 <=> c0d0650f5a07b353 ? 4 (CRx)
+#26: xscmpodp 0000000000000000 <=> 8000000000000000 ? 2 (CRx)
+#27: xscmpodp 0000000000000000 <=> 0000000000000000 ? 2 (CRx)
+#28: xscmpodp 0000000000000000 <=> 0123214569900000 ? 8 (CRx)
+#29: xscmpodp 0000000000000000 <=> 7ff0000000000000 ? 8 (CRx)
+#30: xscmpodp 0000000000000000 <=> 7ff7ffffffffffff ? 1 (CRx)
+#31: xscmpodp 0000000000000000 <=> 7ff8000000000000 ? 1 (CRx)
+#32: xscmpodp 0123214569900000 <=> fff0000000000000 ? 4 (CRx)
+#33: xscmpodp 0123214569900000 <=> c0d0650f5a07b353 ? 4 (CRx)
+#34: xscmpodp 0123214569900000 <=> 8000000000000000 ? 4 (CRx)
+#35: xscmpodp 0123214569900000 <=> 0000000000000000 ? 4 (CRx)
+#36: xscmpodp 0123214569900000 <=> 404f000000000000 ? 8 (CRx)
+#37: xscmpodp 0123214569900000 <=> 7ff0000000000000 ? 8 (CRx)
+#38: xscmpodp 0123214569900000 <=> 7ff7ffffffffffff ? 1 (CRx)
+#39: xscmpodp 0123214569900000 <=> 7ff8000000000000 ? 1 (CRx)
+#40: xscmpodp 7ff0000000000000 <=> fff0000000000000 ? 4 (CRx)
+#41: xscmpodp 7ff0000000000000 <=> c0d0650f5a07b353 ? 4 (CRx)
+#42: xscmpodp 7ff0000000000000 <=> 8000000000000000 ? 4 (CRx)
+#43: xscmpodp 7ff0000000000000 <=> 0000000000000000 ? 4 (CRx)
+#44: xscmpodp 7ff0000000000000 <=> 0123214569900000 ? 4 (CRx)
+#45: xscmpodp 7ff0000000000000 <=> 7ff0000000000000 ? 2 (CRx)
+#46: xscmpodp 7ff0000000000000 <=> 7ff7ffffffffffff ? 1 (CRx)
+#47: xscmpodp 7ff0000000000000 <=> 7ff8000000000000 ? 1 (CRx)
+#48: xscmpodp fff7ffffffffffff <=> fff0000000000000 ? 1 (CRx)
+#49: xscmpodp fff7ffffffffffff <=> c0d0650f5a07b353 ? 1 (CRx)
+#50: xscmpodp fff7ffffffffffff <=> 8000000000000000 ? 1 (CRx)
+#51: xscmpodp fff7ffffffffffff <=> 0000000000000000 ? 1 (CRx)
+#52: xscmpodp fff7ffffffffffff <=> 0123214569900000 ? 1 (CRx)
+#53: xscmpodp fff7ffffffffffff <=> 7ff0000000000000 ? 1 (CRx)
+#54: xscmpodp fff7ffffffffffff <=> 7ff7ffffffffffff ? 1 (CRx)
+#55: xscmpodp fff7ffffffffffff <=> 7ff8000000000000 ? 1 (CRx)
+#56: xscmpodp fff8000000000000 <=> fff0000000000000 ? 1 (CRx)
+#57: xscmpodp fff8000000000000 <=> c0d0650f5a07b353 ? 1 (CRx)
+#58: xscmpodp fff8000000000000 <=> 8000000000000000 ? 1 (CRx)
+#59: xscmpodp fff8000000000000 <=> 0000000000000000 ? 1 (CRx)
+#60: xscmpodp fff8000000000000 <=> 0123214569900000 ? 1 (CRx)
+#61: xscmpodp fff8000000000000 <=> 7ff0000000000000 ? 1 (CRx)
+#62: xscmpodp fff8000000000000 <=> 7ff7ffffffffffff ? 1 (CRx)
+#63: xscmpodp fff8000000000000 <=> 7ff8000000000000 ? 1 (CRx)
+
+#0: xsadddp fff0000000000000 fff0000000000000 = fff0000000000000
+#1: xsadddp fff0000000000000 c0d0650f5a07b353 = fff0000000000000
+#2: xsadddp fff0000000000000 8000000000000000 = fff0000000000000
+#3: xsadddp fff0000000000000 0000000000000000 = fff0000000000000
+#4: xsadddp fff0000000000000 0123214569900000 = fff0000000000000
+#5: xsadddp fff0000000000000 7ff0000000000000 = 7ff8000000000000
+#6: xsadddp fff0000000000000 7ff7ffffffffffff = 7fffffffffffffff
+#7: xsadddp fff0000000000000 7ff8000000000000 = 7ff8000000000000
+#8: xsadddp c0d0650f5a07b353 fff0000000000000 = fff0000000000000
+#9: xsadddp c0d0650f5a07b353 c0d0650f5a07b353 = c0e0650f5a07b353
+#10: xsadddp c0d0650f5a07b353 8000000000000000 = c0d0650f5a07b353
+#11: xsadddp c0d0650f5a07b353 0000000000000000 = c0d0650f5a07b353
+#12: xsadddp c0d0650f5a07b353 0123214569900000 = c0d0650f5a07b353
+#13: xsadddp c0d0650f5a07b353 7ff0000000000000 = 7ff0000000000000
+#14: xsadddp c0d0650f5a07b353 7ff7ffffffffffff = 7fffffffffffffff
+#15: xsadddp c0d0650f5a07b353 7ff8000000000000 = 7ff8000000000000
+#16: xsadddp 8000000000000000 fff0000000000000 = fff0000000000000
+#17: xsadddp 8000000000000000 c0d0650f5a07b353 = c0d0650f5a07b353
+#18: xsadddp 8000000000000000 8000000000000000 = 8000000000000000
+#19: xsadddp 8000000000000000 0000000000000000 = 0000000000000000
+#20: xsadddp 8000000000000000 0123214569900000 = 0123214569900000
+#21: xsadddp 8000000000000000 7ff0000000000000 = 7ff0000000000000
+#22: xsadddp 8000000000000000 7ff7ffffffffffff = 7fffffffffffffff
+#23: xsadddp 8000000000000000 7ff8000000000000 = 7ff8000000000000
+#24: xsadddp 0000000000000000 fff0000000000000 = fff0000000000000
+#25: xsadddp 0000000000000000 c0d0650f5a07b353 = c0d0650f5a07b353
+#26: xsadddp 0000000000000000 8000000000000000 = 0000000000000000
+#27: xsadddp 0000000000000000 0000000000000000 = 0000000000000000
+#28: xsadddp 0000000000000000 0123214569900000 = 0123214569900000
+#29: xsadddp 0000000000000000 7ff0000000000000 = 7ff0000000000000
+#30: xsadddp 0000000000000000 7ff7ffffffffffff = 7fffffffffffffff
+#31: xsadddp 0000000000000000 7ff8000000000000 = 7ff8000000000000
+#32: xsadddp 0123214569900000 fff0000000000000 = fff0000000000000
+#33: xsadddp 0123214569900000 c0d0650f5a07b353 = c0d0650f5a07b353
+#34: xsadddp 0123214569900000 8000000000000000 = 0123214569900000
+#35: xsadddp 0123214569900000 0000000000000000 = 0123214569900000
+#36: xsadddp 0123214569900000 404f000000000000 = 404f000000000000
+#37: xsadddp 0123214569900000 7ff0000000000000 = 7ff0000000000000
+#38: xsadddp 0123214569900000 7ff7ffffffffffff = 7fffffffffffffff
+#39: xsadddp 0123214569900000 7ff8000000000000 = 7ff8000000000000
+#40: xsadddp 7ff0000000000000 fff0000000000000 = 7ff8000000000000
+#41: xsadddp 7ff0000000000000 c0d0650f5a07b353 = 7ff0000000000000
+#42: xsadddp 7ff0000000000000 8000000000000000 = 7ff0000000000000
+#43: xsadddp 7ff0000000000000 0000000000000000 = 7ff0000000000000
+#44: xsadddp 7ff0000000000000 0123214569900000 = 7ff0000000000000
+#45: xsadddp 7ff0000000000000 7ff0000000000000 = 7ff0000000000000
+#46: xsadddp 7ff0000000000000 7ff7ffffffffffff = 7fffffffffffffff
+#47: xsadddp 7ff0000000000000 7ff8000000000000 = 7ff8000000000000
+#48: xsadddp fff7ffffffffffff fff0000000000000 = ffffffffffffffff
+#49: xsadddp fff7ffffffffffff c0d0650f5a07b353 = ffffffffffffffff
+#50: xsadddp fff7ffffffffffff 8000000000000000 = ffffffffffffffff
+#51: xsadddp fff7ffffffffffff 0000000000000000 = ffffffffffffffff
+#52: xsadddp fff7ffffffffffff 0123214569900000 = ffffffffffffffff
+#53: xsadddp fff7ffffffffffff 7ff0000000000000 = ffffffffffffffff
+#54: xsadddp fff7ffffffffffff 7ff7ffffffffffff = ffffffffffffffff
+#55: xsadddp fff7ffffffffffff 7ff8000000000000 = ffffffffffffffff
+#56: xsadddp fff8000000000000 fff0000000000000 = fff8000000000000
+#57: xsadddp fff8000000000000 c0d0650f5a07b353 = fff8000000000000
+#58: xsadddp fff8000000000000 8000000000000000 = fff8000000000000
+#59: xsadddp fff8000000000000 0000000000000000 = fff8000000000000
+#60: xsadddp fff8000000000000 0123214569900000 = fff8000000000000
+#61: xsadddp fff8000000000000 7ff0000000000000 = fff8000000000000
+#62: xsadddp fff8000000000000 7ff7ffffffffffff = fff8000000000000
+#63: xsadddp fff8000000000000 7ff8000000000000 = fff8000000000000
+
+#0: xsdivdp fff0000000000000 fff0000000000000 = 7ff8000000000000
+#1: xsdivdp fff0000000000000 c0d0650f5a07b353 = 7ff0000000000000
+#2: xsdivdp fff0000000000000 8000000000000000 = 7ff0000000000000
+#3: xsdivdp fff0000000000000 0000000000000000 = fff0000000000000
+#4: xsdivdp fff0000000000000 0123214569900000 = fff0000000000000
+#5: xsdivdp fff0000000000000 7ff0000000000000 = 7ff8000000000000
+#6: xsdivdp fff0000000000000 7ff7ffffffffffff = 7fffffffffffffff
+#7: xsdivdp fff0000000000000 7ff8000000000000 = 7ff8000000000000
+#8: xsdivdp c0d0650f5a07b353 fff0000000000000 = 0000000000000000
+#9: xsdivdp c0d0650f5a07b353 c0d0650f5a07b353 = 3ff0000000000000
+#10: xsdivdp c0d0650f5a07b353 8000000000000000 = 7ff0000000000000
+#11: xsdivdp c0d0650f5a07b353 0000000000000000 = fff0000000000000
+#12: xsdivdp c0d0650f5a07b353 0123214569900000 = ff9b6cb57ca13c00
+#13: xsdivdp c0d0650f5a07b353 7ff0000000000000 = 8000000000000000
+#14: xsdivdp c0d0650f5a07b353 7ff7ffffffffffff = 7fffffffffffffff
+#15: xsdivdp c0d0650f5a07b353 7ff8000000000000 = 7ff8000000000000
+#16: xsdivdp 8000000000000000 fff0000000000000 = 0000000000000000
+#17: xsdivdp 8000000000000000 c0d0650f5a07b353 = 0000000000000000
+#18: xsdivdp 8000000000000000 8000000000000000 = 7ff8000000000000
+#19: xsdivdp 8000000000000000 0000000000000000 = 7ff8000000000000
+#20: xsdivdp 8000000000000000 0123214569900000 = 8000000000000000
+#21: xsdivdp 8000000000000000 7ff0000000000000 = 8000000000000000
+#22: xsdivdp 8000000000000000 7ff7ffffffffffff = 7fffffffffffffff
+#23: xsdivdp 8000000000000000 7ff8000000000000 = 7ff8000000000000
+#24: xsdivdp 0000000000000000 fff0000000000000 = 8000000000000000
+#25: xsdivdp 0000000000000000 c0d0650f5a07b353 = 8000000000000000
+#26: xsdivdp 0000000000000000 8000000000000000 = 7ff8000000000000
+#27: xsdivdp 0000000000000000 0000000000000000 = 7ff8000000000000
+#28: xsdivdp 0000000000000000 0123214569900000 = 0000000000000000
+#29: xsdivdp 0000000000000000 7ff0000000000000 = 0000000000000000
+#30: xsdivdp 0000000000000000 7ff7ffffffffffff = 7fffffffffffffff
+#31: xsdivdp 0000000000000000 7ff8000000000000 = 7ff8000000000000
+#32: xsdivdp 0123214569900000 fff0000000000000 = 8000000000000000
+#33: xsdivdp 0123214569900000 c0d0650f5a07b353 = 8042ab59d8b6ec87
+#34: xsdivdp 0123214569900000 8000000000000000 = fff0000000000000
+#35: xsdivdp 0123214569900000 0000000000000000 = 7ff0000000000000
+#36: xsdivdp 0123214569900000 404f000000000000 = 00c3bf3f64b5ad6b
+#37: xsdivdp 0123214569900000 7ff0000000000000 = 0000000000000000
+#38: xsdivdp 0123214569900000 7ff7ffffffffffff = 7fffffffffffffff
+#39: xsdivdp 0123214569900000 7ff8000000000000 = 7ff8000000000000
+#40: xsdivdp 7ff0000000000000 fff0000000000000 = 7ff8000000000000
+#41: xsdivdp 7ff0000000000000 c0d0650f5a07b353 = fff0000000000000
+#42: xsdivdp 7ff0000000000000 8000000000000000 = fff0000000000000
+#43: xsdivdp 7ff0000000000000 0000000000000000 = 7ff0000000000000
+#44: xsdivdp 7ff0000000000000 0123214569900000 = 7ff0000000000000
+#45: xsdivdp 7ff0000000000000 7ff0000000000000 = 7ff8000000000000
+#46: xsdivdp 7ff0000000000000 7ff7ffffffffffff = 7fffffffffffffff
+#47: xsdivdp 7ff0000000000000 7ff8000000000000 = 7ff8000000000000
+#48: xsdivdp fff7ffffffffffff fff0000000000000 = ffffffffffffffff
+#49: xsdivdp fff7ffffffffffff c0d0650f5a07b353 = ffffffffffffffff
+#50: xsdivdp fff7ffffffffffff 8000000000000000 = ffffffffffffffff
+#51: xsdivdp fff7ffffffffffff 0000000000000000 = ffffffffffffffff
+#52: xsdivdp fff7ffffffffffff 0123214569900000 = ffffffffffffffff
+#53: xsdivdp fff7ffffffffffff 7ff0000000000000 = ffffffffffffffff
+#54: xsdivdp fff7ffffffffffff 7ff7ffffffffffff = ffffffffffffffff
+#55: xsdivdp fff7ffffffffffff 7ff8000000000000 = ffffffffffffffff
+#56: xsdivdp fff8000000000000 fff0000000000000 = fff8000000000000
+#57: xsdivdp fff8000000000000 c0d0650f5a07b353 = fff8000000000000
+#58: xsdivdp fff8000000000000 8000000000000000 = fff8000000000000
+#59: xsdivdp fff8000000000000 0000000000000000 = fff8000000000000
+#60: xsdivdp fff8000000000000 0123214569900000 = fff8000000000000
+#61: xsdivdp fff8000000000000 7ff0000000000000 = fff8000000000000
+#62: xsdivdp fff8000000000000 7ff7ffffffffffff = fff8000000000000
+#63: xsdivdp fff8000000000000 7ff8000000000000 = fff8000000000000
+
+#0: xsmaddadp fff0000000000000 fff0000000000000 c0d0650f5a07b353 = 7ff8000000000000
+#1: xsmaddadp c0d0650f5a07b353 fff0000000000000 0123214569900000 = fff0000000000000
+#2: xsmaddadp 8000000000000000 fff0000000000000 c0d0650f5a07b353 = 7ff0000000000000
+#3: xsmaddadp 0000000000000000 fff0000000000000 0123214569900000 = fff0000000000000
+#4: xsmaddadp 0123214569900000 fff0000000000000 c0d0650f5a07b353 = 7ff0000000000000
+#5: xsmaddadp 7ff0000000000000 fff0000000000000 0123214569900000 = 7ff8000000000000
+#6: xsmaddadp 7ff7ffffffffffff fff0000000000000 c0d0650f5a07b353 = 7fffffffffffffff
+#7: xsmaddadp 7ff8000000000000 fff0000000000000 0123214569900000 = 7ff8000000000000
+#8: xsmaddadp fff0000000000000 c0d0650f5a07b353 c0d0650f5a07b353 = fff0000000000000
+#9: xsmaddadp c0d0650f5a07b353 c0d0650f5a07b353 0123214569900000 = c0d0650f5a07b353
+#10: xsmaddadp 8000000000000000 c0d0650f5a07b353 c0d0650f5a07b353 = 41b0cc9d05eec2a7
+#11: xsmaddadp 0000000000000000 c0d0650f5a07b353 0123214569900000 = 82039a19ca8fcb5f
+#12: xsmaddadp 0123214569900000 c0d0650f5a07b353 c0d0650f5a07b353 = 41b0cc9d05eec2a7
+#13: xsmaddadp 7ff0000000000000 c0d0650f5a07b353 0123214569900000 = 7ff0000000000000
+#14: xsmaddadp 7ff7ffffffffffff c0d0650f5a07b353 c0d0650f5a07b353 = 7fffffffffffffff
+#15: xsmaddadp 7ff8000000000000 c0d0650f5a07b353 0123214569900000 = 7ff8000000000000
+#16: xsmaddadp fff0000000000000 8000000000000000 c0d0650f5a07b353 = fff0000000000000
+#17: xsmaddadp c0d0650f5a07b353 8000000000000000 0123214569900000 = c0d0650f5a07b353
+#18: xsmaddadp 8000000000000000 8000000000000000 c0d0650f5a07b353 = 0000000000000000
+#19: xsmaddadp 0000000000000000 8000000000000000 0123214569900000 = 0000000000000000
+#20: xsmaddadp 0123214569900000 8000000000000000 c0d0650f5a07b353 = 0123214569900000
+#21: xsmaddadp 7ff0000000000000 8000000000000000 0123214569900000 = 7ff0000000000000
+#22: xsmaddadp 7ff7ffffffffffff 8000000000000000 c0d0650f5a07b353 = 7fffffffffffffff
+#23: xsmaddadp 7ff8000000000000 8000000000000000 0123214569900000 = 7ff8000000000000
+#24: xsmaddadp fff0000000000000 0000000000000000 c0d0650f5a07b353 = fff0000000000000
+#25: xsmaddadp c0d0650f5a07b353 0000000000000000 0123214569900000 = c0d0650f5a07b353
+#26: xsmaddadp 8000000000000000 0000000000000000 c0d0650f5a07b353 = 8000000000000000
+#27: xsmaddadp 0000000000000000 0000000000000000 0123214569900000 = 0000000000000000
+#28: xsmaddadp 0123214569900000 0000000000000000 c0d0650f5a07b353 = 0123214569900000
+#29: xsmaddadp 7ff0000000000000 0000000000000000 0123214569900000 = 7ff0000000000000
+#30: xsmaddadp 7ff7ffffffffffff 0000000000000000 c0d0650f5a07b353 = 7fffffffffffffff
+#31: xsmaddadp 7ff8000000000000 0000000000000000 0123214569900000 = 7ff8000000000000
+#32: xsmaddadp fff0000000000000 0123214569900000 c0d0650f5a07b353 = fff0000000000000
+#33: xsmaddadp c0d0650f5a07b353 0123214569900000 0123214569900000 = c0d0650f5a07b353
+#34: xsmaddadp 8000000000000000 0123214569900000 c0d0650f5a07b353 = 82039a19ca8fcb5f
+#35: xsmaddadp 0000000000000000 0123214569900000 0123214569900000 = 0000000000000000
+#36: xsmaddadp 404f000000000000 0123214569900000 c0d0650f5a07b353 = 404f000000000000
+#37: xsmaddadp 7ff0000000000000 0123214569900000 0123214569900000 = 7ff0000000000000
+#38: xsmaddadp 7ff7ffffffffffff 0123214569900000 c0d0650f5a07b353 = 7fffffffffffffff
+#39: xsmaddadp 7ff8000000000000 0123214569900000 0123214569900000 = 7ff8000000000000
+#40: xsmaddadp fff0000000000000 7ff0000000000000 c0d0650f5a07b353 = fff0000000000000
+#41: xsmaddadp c0d0650f5a07b353 7ff0000000000000 0123214569900000 = 7ff0000000000000
+#42: xsmaddadp 8000000000000000 7ff0000000000000 c0d0650f5a07b353 = fff0000000000000
+#43: xsmaddadp 0000000000000000 7ff0000000000000 0123214569900000 = 7ff0000000000000
+#44: xsmaddadp 0123214569900000 7ff0000000000000 c0d0650f5a07b353 = fff0000000000000
+#45: xsmaddadp 7ff0000000000000 7ff0000000000000 0123214569900000 = 7ff0000000000000
+#46: xsmaddadp 7ff7ffffffffffff 7ff0000000000000 c0d0650f5a07b353 = 7fffffffffffffff
+#47: xsmaddadp 7ff8000000000000 7ff0000000000000 0123214569900000 = 7ff8000000000000
+#48: xsmaddadp fff0000000000000 fff7ffffffffffff c0d0650f5a07b353 = ffffffffffffffff
+#49: xsmaddadp c0d0650f5a07b353 fff7ffffffffffff 0123214569900000 = ffffffffffffffff
+#50: xsmaddadp 8000000000000000 fff7ffffffffffff c0d0650f5a07b353 = ffffffffffffffff
+#51: xsmaddadp 0000000000000000 fff7ffffffffffff 0123214569900000 = ffffffffffffffff
+#52: xsmaddadp 0123214569900000 fff7ffffffffffff c0d0650f5a07b353 = ffffffffffffffff
+#53: xsmaddadp 7ff0000000000000 fff7ffffffffffff 0123214569900000 = ffffffffffffffff
+#54: xsmaddadp 7ff7ffffffffffff fff7ffffffffffff c0d0650f5a07b353 = ffffffffffffffff
+#55: xsmaddadp 7ff8000000000000 fff7ffffffffffff 0123214569900000 = ffffffffffffffff
+#56: xsmaddadp fff0000000000000 fff8000000000000 c0d0650f5a07b353 = fff8000000000000
+#57: xsmaddadp c0d0650f5a07b353 fff8000000000000 0123214569900000 = fff8000000000000
+#58: xsmaddadp 8000000000000000 fff8000000000000 c0d0650f5a07b353 = fff8000000000000
+#59: xsmaddadp 0000000000000000 fff8000000000000 0123214569900000 = fff8000000000000
+#60: xsmaddadp 0123214569900000 fff8000000000000 c0d0650f5a07b353 = fff8000000000000
+#61: xsmaddadp 7ff0000000000000 fff8000000000000 0123214569900000 = fff8000000000000
+#62: xsmaddadp 7ff7ffffffffffff fff8000000000000 c0d0650f5a07b353 = fff8000000000000
+#63: xsmaddadp 7ff8000000000000 fff8000000000000 0123214569900000 = fff8000000000000
+
+#0: xsmaddmdp c0d0650f5a07b353 fff0000000000000 fff0000000000000 = 7ff8000000000000
+#1: xsmaddmdp 0123214569900000 fff0000000000000 c0d0650f5a07b353 = fff0000000000000
+#2: xsmaddmdp c0d0650f5a07b353 fff0000000000000 8000000000000000 = 7ff0000000000000
+#3: xsmaddmdp 0123214569900000 fff0000000000000 0000000000000000 = fff0000000000000
+#4: xsmaddmdp c0d0650f5a07b353 fff0000000000000 0123214569900000 = 7ff0000000000000
+#5: xsmaddmdp 0123214569900000 fff0000000000000 7ff0000000000000 = 7ff8000000000000
+#6: xsmaddmdp c0d0650f5a07b353 fff0000000000000 7ff7ffffffffffff = 7fffffffffffffff
+#7: xsmaddmdp 0123214569900000 fff0000000000000 7ff8000000000000 = 7ff8000000000000
+#8: xsmaddmdp c0d0650f5a07b353 c0d0650f5a07b353 fff0000000000000 = fff0000000000000
+#9: xsmaddmdp 0123214569900000 c0d0650f5a07b353 c0d0650f5a07b353 = c0d0650f5a07b353
+#10: xsmaddmdp c0d0650f5a07b353 c0d0650f5a07b353 8000000000000000 = 41b0cc9d05eec2a7
+#11: xsmaddmdp 0123214569900000 c0d0650f5a07b353 0000000000000000 = 82039a19ca8fcb5f
+#12: xsmaddmdp c0d0650f5a07b353 c0d0650f5a07b353 0123214569900000 = 41b0cc9d05eec2a7
+#13: xsmaddmdp 0123214569900000 c0d0650f5a07b353 7ff0000000000000 = 7ff0000000000000
+#14: xsmaddmdp c0d0650f5a07b353 c0d0650f5a07b353 7ff7ffffffffffff = 7fffffffffffffff
+#15: xsmaddmdp 0123214569900000 c0d0650f5a07b353 7ff8000000000000 = 7ff8000000000000
+#16: xsmaddmdp c0d0650f5a07b353 8000000000000000 fff0000000000000 = fff0000000000000
+#17: xsmaddmdp 0123214569900000 8000000000000000 c0d0650f5a07b353 = c0d0650f5a07b353
+#18: xsmaddmdp c0d0650f5a07b353 8000000000000000 8000000000000000 = 0000000000000000
+#19: xsmaddmdp 0123214569900000 8000000000000000 0000000000000000 = 0000000000000000
+#20: xsmaddmdp c0d0650f5a07b353 8000000000000000 0123214569900000 = 0123214569900000
+#21: xsmaddmdp 0123214569900000 8000000000000000 7ff0000000000000 = 7ff0000000000000
+#22: xsmaddmdp c0d0650f5a07b353 8000000000000000 7ff7ffffffffffff = 7fffffffffffffff
+#23: xsmaddmdp 0123214569900000 8000000000000000 7ff8000000000000 = 7ff8000000000000
+#24: xsmaddmdp c0d0650f5a07b353 0000000000000000 fff0000000000000 = fff0000000000000
+#25: xsmaddmdp 0123214569900000 0000000000000000 c0d0650f5a07b353 = c0d0650f5a07b353
+#26: xsmaddmdp c0d0650f5a07b353 0000000000000000 8000000000000000 = 8000000000000000
+#27: xsmaddmdp 0123214569900000 0000000000000000 0000000000000000 = 0000000000000000
+#28: xsmaddmdp c0d0650f5a07b353 0000000000000000 0123214569900000 = 0123214569900000
+#29: xsmaddmdp 0123214569900000 0000000000000000 7ff0000000000000 = 7ff0000000000000
+#30: xsmaddmdp c0d0650f5a07b353 0000000000000000 7ff7ffffffffffff = 7fffffffffffffff
+#31: xsmaddmdp 0123214569900000 0000000000000000 7ff8000000000000 = 7ff8000000000000
+#32: xsmaddmdp c0d0650f5a07b353 0123214569900000 fff0000000000000 = fff0000000000000
+#33: xsmaddmdp 0123214569900000 0123214569900000 c0d0650f5a07b353 = c0d0650f5a07b353
+#34: xsmaddmdp c0d0650f5a07b353 0123214569900000 8000000000000000 = 82039a19ca8fcb5f
+#35: xsmaddmdp 0123214569900000 0123214569900000 0000000000000000 = 0000000000000000
+#36: xsmaddmdp c0d0650f5a07b353 0123214569900000 404f000000000000 = 404f000000000000
+#37: xsmaddmdp 0123214569900000 0123214569900000 7ff0000000000000 = 7ff0000000000000
+#38: xsmaddmdp c0d0650f5a07b353 0123214569900000 7ff7ffffffffffff = 7fffffffffffffff
+#39: xsmaddmdp 0123214569900000 0123214569900000 7ff8000000000000 = 7ff8000000000000
+#40: xsmaddmdp c0d0650f5a07b353 7ff0000000000000 fff0000000000000 = fff0000000000000
+#41: xsmaddmdp 0123214569900000 7ff0000000000000 c0d0650f5a07b353 = 7ff0000000000000
+#42: xsmaddmdp c0d0650f5a07b353 7ff0000000000000 8000000000000000 = fff0000000000000
+#43: xsmaddmdp 0123214569900000 7ff0000000000000 0000000000000000 = 7ff0000000000000
+#44: xsmaddmdp c0d0650f5a07b353 7ff0000000000000 0123214569900000 = fff0000000000000
+#45: xsmaddmdp 0123214569900000 7ff0000000000000 7ff0000000000000 = 7ff0000000000000
+#46: xsmaddmdp c0d0650f5a07b353 7ff0000000000000 7ff7ffffffffffff = 7fffffffffffffff
+#47: xsmaddmdp 0123214569900000 7ff0000000000000 7ff8000000000000 = 7ff8000000000000
+#48: xsmaddmdp c0d0650f5a07b353 fff7ffffffffffff fff0000000000000 = ffffffffffffffff
+#49: xsmaddmdp 0123214569900000 fff7ffffffffffff c0d0650f5a07b353 = ffffffffffffffff
+#50: xsmaddmdp c0d0650f5a07b353 fff7ffffffffffff 8000000000000000 = ffffffffffffffff
+#51: xsmaddmdp 0123214569900000 fff7ffffffffffff 0000000000000000 = ffffffffffffffff
+#52: xsmaddmdp c0d0650f5a07b353 fff7ffffffffffff 0123214569900000 = ffffffffffffffff
+#53: xsmaddmdp 0123214569900000 fff7ffffffffffff 7ff0000000000000 = ffffffffffffffff
+#54: xsmaddmdp c0d0650f5a07b353 fff7ffffffffffff 7ff7ffffffffffff = ffffffffffffffff
+#55: xsmaddmdp 0123214569900000 fff7ffffffffffff 7ff8000000000000 = ffffffffffffffff
+#56: xsmaddmdp c0d0650f5a07b353 fff8000000000000 fff0000000000000 = fff8000000000000
+#57: xsmaddmdp 0123214569900000 fff8000000000000 c0d0650f5a07b353 = fff8000000000000
+#58: xsmaddmdp c0d0650f5a07b353 fff8000000000000 8000000000000000 = fff8000000000000
+#59: xsmaddmdp 0123214569900000 fff8000000000000 0000000000000000 = fff8000000000000
+#60: xsmaddmdp c0d0650f5a07b353 fff8000000000000 0123214569900000 = fff8000000000000
+#61: xsmaddmdp 0123214569900000 fff8000000000000 7ff0000000000000 = fff8000000000000
+#62: xsmaddmdp c0d0650f5a07b353 fff8000000000000 7ff7ffffffffffff = fff8000000000000
+#63: xsmaddmdp 0123214569900000 fff8000000000000 7ff8000000000000 = fff8000000000000
+
+#0: xsmsubadp fff0000000000000 fff0000000000000 c0d0650f5a07b353 = 7ff0000000000000
+#1: xsmsubadp c0d0650f5a07b353 fff0000000000000 0123214569900000 = fff0000000000000
+#2: xsmsubadp 8000000000000000 fff0000000000000 c0d0650f5a07b353 = 7ff0000000000000
+#3: xsmsubadp 0000000000000000 fff0000000000000 0123214569900000 = fff0000000000000
+#4: xsmsubadp 0123214569900000 fff0000000000000 c0d0650f5a07b353 = 7ff0000000000000
+#5: xsmsubadp 7ff0000000000000 fff0000000000000 0123214569900000 = fff0000000000000
+#6: xsmsubadp 7ff7ffffffffffff fff0000000000000 c0d0650f5a07b353 = 7fffffffffffffff
+#7: xsmsubadp 7ff8000000000000 fff0000000000000 0123214569900000 = 7ff8000000000000
+#8: xsmsubadp fff0000000000000 c0d0650f5a07b353 c0d0650f5a07b353 = 7ff0000000000000
+#9: xsmsubadp c0d0650f5a07b353 c0d0650f5a07b353 0123214569900000 = 40d0650f5a07b353
+#10: xsmsubadp 8000000000000000 c0d0650f5a07b353 c0d0650f5a07b353 = 41b0cc9d05eec2a7
+#11: xsmsubadp 0000000000000000 c0d0650f5a07b353 0123214569900000 = 82039a19ca8fcb5f
+#12: xsmsubadp 0123214569900000 c0d0650f5a07b353 c0d0650f5a07b353 = 41b0cc9d05eec2a7
+#13: xsmsubadp 7ff0000000000000 c0d0650f5a07b353 0123214569900000 = fff0000000000000
+#14: xsmsubadp 7ff7ffffffffffff c0d0650f5a07b353 c0d0650f5a07b353 = 7fffffffffffffff
+#15: xsmsubadp 7ff8000000000000 c0d0650f5a07b353 0123214569900000 = 7ff8000000000000
+#16: xsmsubadp fff0000000000000 8000000000000000 c0d0650f5a07b353 = 7ff0000000000000
+#17: xsmsubadp c0d0650f5a07b353 8000000000000000 0123214569900000 = 40d0650f5a07b353
+#18: xsmsubadp 8000000000000000 8000000000000000 c0d0650f5a07b353 = 0000000000000000
+#19: xsmsubadp 0000000000000000 8000000000000000 0123214569900000 = 8000000000000000
+#20: xsmsubadp 0123214569900000 8000000000000000 c0d0650f5a07b353 = 8123214569900000
+#21: xsmsubadp 7ff0000000000000 8000000000000000 0123214569900000 = fff0000000000000
+#22: xsmsubadp 7ff7ffffffffffff 8000000000000000 c0d0650f5a07b353 = 7fffffffffffffff
+#23: xsmsubadp 7ff8000000000000 8000000000000000 0123214569900000 = 7ff8000000000000
+#24: xsmsubadp fff0000000000000 0000000000000000 c0d0650f5a07b353 = 7ff0000000000000
+#25: xsmsubadp c0d0650f5a07b353 0000000000000000 0123214569900000 = 40d0650f5a07b353
+#26: xsmsubadp 8000000000000000 0000000000000000 c0d0650f5a07b353 = 0000000000000000
+#27: xsmsubadp 0000000000000000 0000000000000000 0123214569900000 = 0000000000000000
+#28: xsmsubadp 0123214569900000 0000000000000000 c0d0650f5a07b353 = 8123214569900000
+#29: xsmsubadp 7ff0000000000000 0000000000000000 0123214569900000 = fff0000000000000
+#30: xsmsubadp 7ff7ffffffffffff 0000000000000000 c0d0650f5a07b353 = 7fffffffffffffff
+#31: xsmsubadp 7ff8000000000000 0000000000000000 0123214569900000 = 7ff8000000000000
+#32: xsmsubadp fff0000000000000 0123214569900000 c0d0650f5a07b353 = 7ff0000000000000
+#33: xsmsubadp c0d0650f5a07b353 0123214569900000 0123214569900000 = 40d0650f5a07b353
+#34: xsmsubadp 8000000000000000 0123214569900000 c0d0650f5a07b353 = 82039a19ca8fcb5f
+#35: xsmsubadp 0000000000000000 0123214569900000 0123214569900000 = 0000000000000000
+#36: xsmsubadp 404f000000000000 0123214569900000 c0d0650f5a07b353 = c04f000000000000
+#37: xsmsubadp 7ff0000000000000 0123214569900000 0123214569900000 = fff0000000000000
+#38: xsmsubadp 7ff7ffffffffffff 0123214569900000 c0d0650f5a07b353 = 7fffffffffffffff
+#39: xsmsubadp 7ff8000000000000 0123214569900000 0123214569900000 = 7ff8000000000000
+#40: xsmsubadp fff0000000000000 7ff0000000000000 c0d0650f5a07b353 = 7ff8000000000000
+#41: xsmsubadp c0d0650f5a07b353 7ff0000000000000 0123214569900000 = 7ff0000000000000
+#42: xsmsubadp 8000000000000000 7ff0000000000000 c0d0650f5a07b353 = fff0000000000000
+#43: xsmsubadp 0000000000000000 7ff0000000000000 0123214569900000 = 7ff0000000000000
+#44: xsmsubadp 0123214569900000 7ff0000000000000 c0d0650f5a07b353 = fff0000000000000
+#45: xsmsubadp 7ff0000000000000 7ff0000000000000 0123214569900000 = 7ff8000000000000
+#46: xsmsubadp 7ff7ffffffffffff 7ff0000000000000 c0d0650f5a07b353 = 7fffffffffffffff
+#47: xsmsubadp 7ff8000000000000 7ff0000000000000 0123214569900000 = 7ff8000000000000
+#48: xsmsubadp fff0000000000000 fff7ffffffffffff c0d0650f5a07b353 = ffffffffffffffff
+#49: xsmsubadp c0d0650f5a07b353 fff7ffffffffffff 0123214569900000 = ffffffffffffffff
+#50: xsmsubadp 8000000000000000 fff7ffffffffffff c0d0650f5a07b353 = ffffffffffffffff
+#51: xsmsubadp 0000000000000000 fff7ffffffffffff 0123214569900000 = ffffffffffffffff
+#52: xsmsubadp 0123214569900000 fff7ffffffffffff c0d0650f5a07b353 = ffffffffffffffff
+#53: xsmsubadp 7ff0000000000000 fff7ffffffffffff 0123214569900000 = ffffffffffffffff
+#54: xsmsubadp 7ff7ffffffffffff fff7ffffffffffff c0d0650f5a07b353 = ffffffffffffffff
+#55: xsmsubadp 7ff8000000000000 fff7ffffffffffff 0123214569900000 = ffffffffffffffff
+#56: xsmsubadp fff0000000000000 fff8000000000000 c0d0650f5a07b353 = fff8000000000000
+#57: xsmsubadp c0d0650f5a07b353 fff8000000000000 0123214569900000 = fff8000000000000
+#58: xsmsubadp 8000000000000000 fff8000000000000 c0d0650f5a07b353 = fff8000000000000
+#59: xsmsubadp 0000000000000000 fff8000000000000 0123214569900000 = fff8000000000000
+#60: xsmsubadp 0123214569900000 fff8000000000000 c0d0650f5a07b353 = fff8000000000000
+#61: xsmsubadp 7ff0000000000000 fff8000000000000 0123214569900000 = fff8000000000000
+#62: xsmsubadp 7ff7ffffffffffff fff8000000000000 c0d0650f5a07b353 = fff8000000000000
+#63: xsmsubadp 7ff8000000000000 fff8000000000000 0123214569900000 = fff8000000000000
+
+#0: xsmsubmdp c0d0650f5a07b353 fff0000000000000 fff0000000000000 = 7ff0000000000000
+#1: xsmsubmdp 0123214569900000 fff0000000000000 c0d0650f5a07b353 = fff0000000000000
+#2: xsmsubmdp c0d0650f5a07b353 fff0000000000000 8000000000000000 = 7ff0000000000000
+#3: xsmsubmdp 0123214569900000 fff0000000000000 0000000000000000 = fff0000000000000
+#4: xsmsubmdp c0d0650f5a07b353 fff0000000000000 0123214569900000 = 7ff0000000000000
+#5: xsmsubmdp 0123214569900000 fff0000000000000 7ff0000000000000 = fff0000000000000
+#6: xsmsubmdp c0d0650f5a07b353 fff0000000000000 7ff7ffffffffffff = 7fffffffffffffff
+#7: xsmsubmdp 0123214569900000 fff0000000000000 7ff8000000000000 = 7ff8000000000000
+#8: xsmsubmdp c0d0650f5a07b353 c0d0650f5a07b353 fff0000000000000 = 7ff0000000000000
+#9: xsmsubmdp 0123214569900000 c0d0650f5a07b353 c0d0650f5a07b353 = 40d0650f5a07b353
+#10: xsmsubmdp c0d0650f5a07b353 c0d0650f5a07b353 8000000000000000 = 41b0cc9d05eec2a7
+#11: xsmsubmdp 0123214569900000 c0d0650f5a07b353 0000000000000000 = 82039a19ca8fcb5f
+#12: xsmsubmdp c0d0650f5a07b353 c0d0650f5a07b353 0123214569900000 = 41b0cc9d05eec2a7
+#13: xsmsubmdp 0123214569900000 c0d0650f5a07b353 7ff0000000000000 = fff0000000000000
+#14: xsmsubmdp c0d0650f5a07b353 c0d0650f5a07b353 7ff7ffffffffffff = 7fffffffffffffff
+#15: xsmsubmdp 0123214569900000 c0d0650f5a07b353 7ff8000000000000 = 7ff8000000000000
+#16: xsmsubmdp c0d0650f5a07b353 8000000000000000 fff0000000000000 = 7ff0000000000000
+#17: xsmsubmdp 0123214569900000 8000000000000000 c0d0650f5a07b353 = 40d0650f5a07b353
+#18: xsmsubmdp c0d0650f5a07b353 8000000000000000 8000000000000000 = 0000000000000000
+#19: xsmsubmdp 0123214569900000 8000000000000000 0000000000000000 = 8000000000000000
+#20: xsmsubmdp c0d0650f5a07b353 8000000000000000 0123214569900000 = 8123214569900000
+#21: xsmsubmdp 0123214569900000 8000000000000000 7ff0000000000000 = fff0000000000000
+#22: xsmsubmdp c0d0650f5a07b353 8000000000000000 7ff7ffffffffffff = 7fffffffffffffff
+#23: xsmsubmdp 0123214569900000 8000000000000000 7ff8000000000000 = 7ff8000000000000
+#24: xsmsubmdp c0d0650f5a07b353 0000000000000000 fff0000000000000 = 7ff0000000000000
+#25: xsmsubmdp 0123214569900000 0000000000000000 c0d0650f5a07b353 = 40d0650f5a07b353
+#26: xsmsubmdp c0d0650f5a07b353 0000000000000000 8000000000000000 = 0000000000000000
+#27: xsmsubmdp 0123214569900000 0000000000000000 0000000000000000 = 0000000000000000
+#28: xsmsubmdp c0d0650f5a07b353 0000000000000000 0123214569900000 = 8123214569900000
+#29: xsmsubmdp 0123214569900000 0000000000000000 7ff0000000000000 = fff0000000000000
+#30: xsmsubmdp c0d0650f5a07b353 0000000000000000 7ff7ffffffffffff = 7fffffffffffffff
+#31: xsmsubmdp 0123214569900000 0000000000000000 7ff8000000000000 = 7ff8000000000000
+#32: xsmsubmdp c0d0650f5a07b353 0123214569900000 fff0000000000000 = 7ff0000000000000
+#33: xsmsubmdp 0123214569900000 0123214569900000 c0d0650f5a07b353 = 40d0650f5a07b353
+#34: xsmsubmdp c0d0650f5a07b353 0123214569900000 8000000000000000 = 82039a19ca8fcb5f
+#35: xsmsubmdp 0123214569900000 0123214569900000 0000000000000000 = 0000000000000000
+#36: xsmsubmdp c0d0650f5a07b353 0123214569900000 404f000000000000 = c04f000000000000
+#37: xsmsubmdp 0123214569900000 0123214569900000 7ff0000000000000 = fff0000000000000
+#38: xsmsubmdp c0d0650f5a07b353 0123214569900000 7ff7ffffffffffff = 7fffffffffffffff
+#39: xsmsubmdp 0123214569900000 0123214569900000 7ff8000000000000 = 7ff8000000000000
+#40: xsmsubmdp c0d0650f5a07b353 7ff0000000000000 fff0000000000000 = 7ff8000000000000
+#41: xsmsubmdp 0123214569900000 7ff0000000000000 c0d0650f5a07b353 = 7ff0000000000000
+#42: xsmsubmdp c0d0650f5a07b353 7ff0000000000000 8000000000000000 = fff0000000000000
+#43: xsmsubmdp 0123214569900000 7ff0000000000000 0000000000000000 = 7ff0000000000000
+#44: xsmsubmdp c0d0650f5a07b353 7ff0000000000000 0123214569900000 = fff0000000000000
+#45: xsmsubmdp 0123214569900000 7ff0000000000000 7ff0000000000000 = 7ff8000000000000
+#46: xsmsubmdp c0d0650f5a07b353 7ff0000000000000 7ff7ffffffffffff = 7fffffffffffffff
+#47: xsmsubmdp 0123214569900000 7ff0000000000000 7ff8000000000000 = 7ff8000000000000
+#48: xsmsubmdp c0d0650f5a07b353 fff7ffffffffffff fff0000000000000 = ffffffffffffffff
+#49: xsmsubmdp 0123214569900000 fff7ffffffffffff c0d0650f5a07b353 = ffffffffffffffff
+#50: xsmsubmdp c0d0650f5a07b353 fff7ffffffffffff 8000000000000000 = ffffffffffffffff
+#51: xsmsubmdp 0123214569900000 fff7ffffffffffff 0000000000000000 = ffffffffffffffff
+#52: xsmsubmdp c0d0650f5a07b353 fff7ffffffffffff 0123214569900000 = ffffffffffffffff
+#53: xsmsubmdp 0123214569900000 fff7ffffffffffff 7ff0000000000000 = ffffffffffffffff
+#54: xsmsubmdp c0d0650f5a07b353 fff7ffffffffffff 7ff7ffffffffffff = ffffffffffffffff
+#55: xsmsubmdp 0123214569900000 fff7ffffffffffff 7ff8000000000000 = ffffffffffffffff
+#56: xsmsubmdp c0d0650f5a07b353 fff8000000000000 fff0000000000000 = fff8000000000000
+#57: xsmsubmdp 0123214569900000 fff8000000000000 c0d0650f5a07b353 = fff8000000000000
+#58: xsmsubmdp c0d0650f5a07b353 fff8000000000000 8000000000000000 = fff8000000000000
+#59: xsmsubmdp 0123214569900000 fff8000000000000 0000000000000000 = fff8000000000000
+#60: xsmsubmdp c0d0650f5a07b353 fff8000000000000 0123214569900000 = fff8000000000000
+#61: xsmsubmdp 0123214569900000 fff8000000000000 7ff0000000000000 = fff8000000000000
+#62: xsmsubmdp c0d0650f5a07b353 fff8000000000000 7ff7ffffffffffff = fff8000000000000
+#63: xsmsubmdp 0123214569900000 fff8000000000000 7ff8000000000000 = fff8000000000000
+
+#0: xsnmaddadp fff0000000000000 fff0000000000000 c0d0650f5a07b353 = 7ff8000000000000
+#1: xsnmaddadp c0d0650f5a07b353 fff0000000000000 0123214569900000 = 7ff0000000000000
+#2: xsnmaddadp 8000000000000000 fff0000000000000 c0d0650f5a07b353 = fff0000000000000
+#3: xsnmaddadp 0000000000000000 fff0000000000000 0123214569900000 = 7ff0000000000000
+#4: xsnmaddadp 0123214569900000 fff0000000000000 c0d0650f5a07b353 = fff0000000000000
+#5: xsnmaddadp 7ff0000000000000 fff0000000000000 0123214569900000 = 7ff8000000000000
+#6: xsnmaddadp 7ff7ffffffffffff fff0000000000000 c0d0650f5a07b353 = 7fffffffffffffff
+#7: xsnmaddadp 7ff8000000000000 fff0000000000000 0123214569900000 = 7ff8000000000000
+#8: xsnmaddadp fff0000000000000 c0d0650f5a07b353 c0d0650f5a07b353 = 7ff0000000000000
+#9: xsnmaddadp c0d0650f5a07b353 c0d0650f5a07b353 0123214569900000 = 40d0650f5a07b353
+#10: xsnmaddadp 8000000000000000 c0d0650f5a07b353 c0d0650f5a07b353 = c1b0cc9d05eec2a7
+#11: xsnmaddadp 0000000000000000 c0d0650f5a07b353 0123214569900000 = 02039a19ca8fcb5f
+#12: xsnmaddadp 0123214569900000 c0d0650f5a07b353 c0d0650f5a07b353 = c1b0cc9d05eec2a7
+#13: xsnmaddadp 7ff0000000000000 c0d0650f5a07b353 0123214569900000 = fff0000000000000
+#14: xsnmaddadp 7ff7ffffffffffff c0d0650f5a07b353 c0d0650f5a07b353 = 7fffffffffffffff
+#15: xsnmaddadp 7ff8000000000000 c0d0650f5a07b353 0123214569900000 = 7ff8000000000000
+#16: xsnmaddadp fff0000000000000 8000000000000000 c0d0650f5a07b353 = 7ff0000000000000
+#17: xsnmaddadp c0d0650f5a07b353 8000000000000000 0123214569900000 = 40d0650f5a07b353
+#18: xsnmaddadp 8000000000000000 8000000000000000 c0d0650f5a07b353 = 8000000000000000
+#19: xsnmaddadp 0000000000000000 8000000000000000 0123214569900000 = 8000000000000000
+#20: xsnmaddadp 0123214569900000 8000000000000000 c0d0650f5a07b353 = 8123214569900000
+#21: xsnmaddadp 7ff0000000000000 8000000000000000 0123214569900000 = fff0000000000000
+#22: xsnmaddadp 7ff7ffffffffffff 8000000000000000 c0d0650f5a07b353 = 7fffffffffffffff
+#23: xsnmaddadp 7ff8000000000000 8000000000000000 0123214569900000 = 7ff8000000000000
+#24: xsnmaddadp fff0000000000000 0000000000000000 c0d0650f5a07b353 = 7ff0000000000000
+#25: xsnmaddadp c0d0650f5a07b353 0000000000000000 0123214569900000 = 40d0650f5a07b353
+#26: xsnmaddadp 8000000000000000 0000000000000000 c0d0650f5a07b353 = 0000000000000000
+#27: xsnmaddadp 0000000000000000 0000000000000000 0123214569900000 = 8000000000000000
+#28: xsnmaddadp 0123214569900000 0000000000000000 c0d0650f5a07b353 = 8123214569900000
+#29: xsnmaddadp 7ff0000000000000 0000000000000000 0123214569900000 = fff0000000000000
+#30: xsnmaddadp 7ff7ffffffffffff 0000000000000000 c0d0650f5a07b353 = 7fffffffffffffff
+#31: xsnmaddadp 7ff8000000000000 0000000000000000 0123214569900000 = 7ff8000000000000
+#32: xsnmaddadp fff0000000000000 0123214569900000 c0d0650f5a07b353 = 7ff0000000000000
+#33: xsnmaddadp c0d0650f5a07b353 0123214569900000 0123214569900000 = 40d0650f5a07b353
+#34: xsnmaddadp 8000000000000000 0123214569900000 c0d0650f5a07b353 = 02039a19ca8fcb5f
+#35: xsnmaddadp 0000000000000000 0123214569900000 0123214569900000 = 8000000000000000
+#36: xsnmaddadp 404f000000000000 0123214569900000 c0d0650f5a07b353 = c04f000000000000
+#37: xsnmaddadp 7ff0000000000000 0123214569900000 0123214569900000 = fff0000000000000
+#38: xsnmaddadp 7ff7ffffffffffff 0123214569900000 c0d0650f5a07b353 = 7fffffffffffffff
+#39: xsnmaddadp 7ff8000000000000 0123214569900000 0123214569900000 = 7ff8000000000000
+#40: xsnmaddadp fff0000000000000 7ff0000000000000 c0d0650f5a07b353 = 7ff0000000000000
+#41: xsnmaddadp c0d0650f5a07b353 7ff0000000000000 0123214569900000 = fff0000000000000
+#42: xsnmaddadp 8000000000000000 7ff0000000000000 c0d0650f5a07b353 = 7ff0000000000000
+#43: xsnmaddadp 0000000000000000 7ff0000000000000 0123214569900000 = fff0000000000000
+#44: xsnmaddadp 0123214569900000 7ff0000000000000 c0d0650f5a07b353 = 7ff0000000000000
+#45: xsnmaddadp 7ff0000000000000 7ff0000000000000 0123214569900000 = fff0000000000000
+#46: xsnmaddadp 7ff7ffffffffffff 7ff0000000000000 c0d0650f5a07b353 = 7fffffffffffffff
+#47: xsnmaddadp 7ff8000000000000 7ff0000000000000 0123214569900000 = 7ff8000000000000
+#48: xsnmaddadp fff0000000000000 fff7ffffffffffff c0d0650f5a07b353 = ffffffffffffffff
+#49: xsnmaddadp c0d0650f5a07b353 fff7ffffffffffff 0123214569900000 = ffffffffffffffff
+#50: xsnmaddadp 8000000000000000 fff7ffffffffffff c0d0650f5a07b353 = ffffffffffffffff
+#51: xsnmaddadp 0000000000000000 fff7ffffffffffff 0123214569900000 = ffffffffffffffff
+#52: xsnmaddadp 0123214569900000 fff7ffffffffffff c0d0650f5a07b353 = ffffffffffffffff
+#53: xsnmaddadp 7ff0000000000000 fff7ffffffffffff 0123214569900000 = ffffffffffffffff
+#54: xsnmaddadp 7ff7ffffffffffff fff7ffffffffffff c0d0650f5a07b353 = ffffffffffffffff
+#55: xsnmaddadp 7ff8000000000000 fff7ffffffffffff 0123214569900000 = ffffffffffffffff
+#56: xsnmaddadp fff0000000000000 fff8000000000000 c0d0650f5a07b353 = fff8000000000000
+#57: xsnmaddadp c0d0650f5a07b353 fff8000000000000 0123214569900000 = fff8000000000000
+#58: xsnmaddadp 8000000000000000 fff8000000000000 c0d0650f5a07b353 = fff8000000000000
+#59: xsnmaddadp 0000000000000000 fff8000000000000 0123214569900000 = fff8000000000000
+#60: xsnmaddadp 0123214569900000 fff8000000000000 c0d0650f5a07b353 = fff8000000000000
+#61: xsnmaddadp 7ff0000000000000 fff8000000000000 0123214569900000 = fff8000000000000
+#62: xsnmaddadp 7ff7ffffffffffff fff8000000000000 c0d0650f5a07b353 = fff8000000000000
+#63: xsnmaddadp 7ff8000000000000 fff8000000000000 0123214569900000 = fff8000000000000
+
+#0: xsnmaddmdp c0d0650f5a07b353 fff0000000000000 fff0000000000000 = 7ff8000000000000
+#1: xsnmaddmdp 0123214569900000 fff0000000000000 c0d0650f5a07b353 = 7ff0000000000000
+#2: xsnmaddmdp c0d0650f5a07b353 fff0000000000000 8000000000000000 = fff0000000000000
+#3: xsnmaddmdp 0123214569900000 fff0000000000000 0000000000000000 = 7ff0000000000000
+#4: xsnmaddmdp c0d0650f5a07b353 fff0000000000000 0123214569900000 = fff0000000000000
+#5: xsnmaddmdp 0123214569900000 fff0000000000000 7ff0000000000000 = 7ff8000000000000
+#6: xsnmaddmdp c0d0650f5a07b353 fff0000000000000 7ff7ffffffffffff = 7fffffffffffffff
+#7: xsnmaddmdp 0123214569900000 fff0000000000000 7ff8000000000000 = 7ff8000000000000
+#8: xsnmaddmdp c0d0650f5a07b353 c0d0650f5a07b353 fff0000000000000 = 7ff0000000000000
+#9: xsnmaddmdp 0123214569900000 c0d0650f5a07b353 c0d0650f5a07b353 = 40d0650f5a07b353
+#10: xsnmaddmdp c0d0650f5a07b353 c0d0650f5a07b353 8000000000000000 = c1b0cc9d05eec2a7
+#11: xsnmaddmdp 0123214569900000 c0d0650f5a07b353 0000000000000000 = 02039a19ca8fcb5f
+#12: xsnmaddmdp c0d0650f5a07b353 c0d0650f5a07b353 0123214569900000 = c1b0cc9d05eec2a7
+#13: xsnmaddmdp 0123214569900000 c0d0650f5a07b353 7ff0000000000000 = fff0000000000000
+#14: xsnmaddmdp c0d0650f5a07b353 c0d0650f5a07b353 7ff7ffffffffffff = 7fffffffffffffff
+#15: xsnmaddmdp 0123214569900000 c0d0650f5a07b353 7ff8000000000000 = 7ff8000000000000
+#16: xsnmaddmdp c0d0650f5a07b353 8000000000000000 fff0000000000000 = 7ff0000000000000
+#17: xsnmaddmdp 0123214569900000 8000000000000000 c0d0650f5a07b353 = 40d0650f5a07b353
+#18: xsnmaddmdp c0d0650f5a07b353 8000000000000000 8000000000000000 = 8000000000000000
+#19: xsnmaddmdp 0123214569900000 8000000000000000 0000000000000000 = 8000000000000000
+#20: xsnmaddmdp c0d0650f5a07b353 8000000000000000 0123214569900000 = 8123214569900000
+#21: xsnmaddmdp 0123214569900000 8000000000000000 7ff0000000000000 = fff0000000000000
+#22: xsnmaddmdp c0d0650f5a07b353 8000000000000000 7ff7ffffffffffff = 7fffffffffffffff
+#23: xsnmaddmdp 0123214569900000 8000000000000000 7ff8000000000000 = 7ff8000000000000
+#24: xsnmaddmdp c0d0650f5a07b353 0000000000000000 fff0000000000000 = 7ff0000000000000
+#25: xsnmaddmdp 0123214569900000 0000000000000000 c0d0650f5a07b353 = 40d0650f5a07b353
+#26: xsnmaddmdp c0d0650f5a07b353 0000000000000000 8000000000000000 = 0000000000000000
+#27: xsnmaddmdp 0123214569900000 0000000000000000 0000000000000000 = 8000000000000000
+#28: xsnmaddmdp c0d0650f5a07b353 0000000000000000 0123214569900000 = 8123214569900000
+#29: xsnmaddmdp 0123214569900000 0000000000000000 7ff0000000000000 = fff0000000000000
+#30: xsnmaddmdp c0d0650f5a07b353 0000000000000000 7ff7ffffffffffff = 7fffffffffffffff
+#31: xsnmaddmdp 0123214569900000 0000000000000000 7ff8000000000000 = 7ff8000000000000
+#32: xsnmaddmdp c0d0650f5a07b353 0123214569900000 fff0000000000000 = 7ff0000000000000
+#33: xsnmaddmdp 0123214569900000 0123214569900000 c0d0650f5a07b353 = 40d0650f5a07b353
+#34: xsnmaddmdp c0d0650f5a07b353 0123214569900000 8000000000000000 = 02039a19ca8fcb5f
+#35: xsnmaddmdp 0123214569900000 0123214569900000 0000000000000000 = 8000000000000000
+#36: xsnmaddmdp c0d0650f5a07b353 0123214569900000 404f000000000000 = c04f000000000000
+#37: xsnmaddmdp 0123214569900000 0123214569900000 7ff0000000000000 = fff0000000000000
+#38: xsnmaddmdp c0d0650f5a07b353 0123214569900000 7ff7ffffffffffff = 7fffffffffffffff
+#39: xsnmaddmdp 0123214569900000 0123214569900000 7ff8000000000000 = 7ff8000000000000
+#40: xsnmaddmdp c0d0650f5a07b353 7ff0000000000000 fff0000000000000 = 7ff0000000000000
+#41: xsnmaddmdp 0123214569900000 7ff0000000000000 c0d0650f5a07b353 = fff0000000000000
+#42: xsnmaddmdp c0d0650f5a07b353 7ff0000000000000 8000000000000000 = 7ff0000000000000
+#43: xsnmaddmdp 0123214569900000 7ff0000000000000 0000000000000000 = fff0000000000000
+#44: xsnmaddmdp c0d0650f5a07b353 7ff0000000000000 0123214569900000 = 7ff0000000000000
+#45: xsnmaddmdp 0123214569900000 7ff0000000000000 7ff0000000000000 = fff0000000000000
+#46: xsnmaddmdp c0d0650f5a07b353 7ff0000000000000 7ff7ffffffffffff = 7fffffffffffffff
+#47: xsnmaddmdp 0123214569900000 7ff0000000000000 7ff8000000000000 = 7ff8000000000000
+#48: xsnmaddmdp c0d0650f5a07b353 fff7ffffffffffff fff0000000000000 = ffffffffffffffff
+#49: xsnmaddmdp 0123214569900000 fff7ffffffffffff c0d0650f5a07b353 = ffffffffffffffff
+#50: xsnmaddmdp c0d0650f5a07b353 fff7ffffffffffff 8000000000000000 = ffffffffffffffff
+#51: xsnmaddmdp 0123214569900000 fff7ffffffffffff 0000000000000000 = ffffffffffffffff
+#52: xsnmaddmdp c0d0650f5a07b353 fff7ffffffffffff 0123214569900000 = ffffffffffffffff
+#53: xsnmaddmdp 0123214569900000 fff7ffffffffffff 7ff0000000000000 = ffffffffffffffff
+#54: xsnmaddmdp c0d0650f5a07b353 fff7ffffffffffff 7ff7ffffffffffff = ffffffffffffffff
+#55: xsnmaddmdp 0123214569900000 fff7ffffffffffff 7ff8000000000000 = ffffffffffffffff
+#56: xsnmaddmdp c0d0650f5a07b353 fff8000000000000 fff0000000000000 = fff8000000000000
+#57: xsnmaddmdp 0123214569900000 fff8000000000000 c0d0650f5a07b353 = fff8000000000000
+#58: xsnmaddmdp c0d0650f5a07b353 fff8000000000000 8000000000000000 = fff8000000000000
+#59: xsnmaddmdp 0123214569900000 fff8000000000000 0000000000000000 = fff8000000000000
+#60: xsnmaddmdp c0d0650f5a07b353 fff8000000000000 0123214569900000 = fff8000000000000
+#61: xsnmaddmdp 0123214569900000 fff8000000000000 7ff0000000000000 = fff8000000000000
+#62: xsnmaddmdp c0d0650f5a07b353 fff8000000000000 7ff7ffffffffffff = fff8000000000000
+#63: xsnmaddmdp 0123214569900000 fff8000000000000 7ff8000000000000 = fff8000000000000
+
+#0: xsmuldp fff0000000000000 fff0000000000000 = 7ff0000000000000
+#1: xsmuldp fff0000000000000 c0d0650f5a07b353 = 7ff0000000000000
+#2: xsmuldp fff0000000000000 8000000000000000 = 7ff8000000000000
+#3: xsmuldp fff0000000000000 0000000000000000 = 7ff8000000000000
+#4: xsmuldp fff0000000000000 0123214569900000 = fff0000000000000
+#5: xsmuldp fff0000000000000 7ff0000000000000 = fff0000000000000
+#6: xsmuldp fff0000000000000 7ff7ffffffffffff = 7fffffffffffffff
+#7: xsmuldp fff0000000000000 7ff8000000000000 = 7ff8000000000000
+#8: xsmuldp c0d0650f5a07b353 fff0000000000000 = 7ff0000000000000
+#9: xsmuldp c0d0650f5a07b353 c0d0650f5a07b353 = 41b0cc9d05eec2a7
+#10: xsmuldp c0d0650f5a07b353 8000000000000000 = 0000000000000000
+#11: xsmuldp c0d0650f5a07b353 0000000000000000 = 8000000000000000
+#12: xsmuldp c0d0650f5a07b353 0123214569900000 = 82039a19ca8fcb5f
+#13: xsmuldp c0d0650f5a07b353 7ff0000000000000 = fff0000000000000
+#14: xsmuldp c0d0650f5a07b353 7ff7ffffffffffff = 7fffffffffffffff
+#15: xsmuldp c0d0650f5a07b353 7ff8000000000000 = 7ff8000000000000
+#16: xsmuldp 8000000000000000 fff0000000000000 = 7ff8000000000000
+#17: xsmuldp 8000000000000000 c0d0650f5a07b353 = 0000000000000000
+#18: xsmuldp 8000000000000000 8000000000000000 = 0000000000000000
+#19: xsmuldp 8000000000000000 0000000000000000 = 8000000000000000
+#20: xsmuldp 8000000000000000 0123214569900000 = 8000000000000000
+#21: xsmuldp 8000000000000000 7ff0000000000000 = 7ff8000000000000
+#22: xsmuldp 8000000000000000 7ff7ffffffffffff = 7fffffffffffffff
+#23: xsmuldp 8000000000000000 7ff8000000000000 = 7ff8000000000000
+#24: xsmuldp 0000000000000000 fff0000000000000 = 7ff8000000000000
+#25: xsmuldp 0000000000000000 c0d0650f5a07b353 = 8000000000000000
+#26: xsmuldp 0000000000000000 8000000000000000 = 8000000000000000
+#27: xsmuldp 0000000000000000 0000000000000000 = 0000000000000000
+#28: xsmuldp 0000000000000000 0123214569900000 = 0000000000000000
+#29: xsmuldp 0000000000000000 7ff0000000000000 = 7ff8000000000000
+#30: xsmuldp 0000000000000000 7ff7ffffffffffff = 7fffffffffffffff
+#31: xsmuldp 0000000000000000 7ff8000000000000 = 7ff8000000000000
+#32: xsmuldp 0123214569900000 fff0000000000000 = fff0000000000000
+#33: xsmuldp 0123214569900000 c0d0650f5a07b353 = 82039a19ca8fcb5f
+#34: xsmuldp 0123214569900000 8000000000000000 = 8000000000000000
+#35: xsmuldp 0123214569900000 0000000000000000 = 0000000000000000
+#36: xsmuldp 0123214569900000 404f000000000000 = 0182883b3e438000
+#37: xsmuldp 0123214569900000 7ff0000000000000 = 7ff0000000000000
+#38: xsmuldp 0123214569900000 7ff7ffffffffffff = 7fffffffffffffff
+#39: xsmuldp 0123214569900000 7ff8000000000000 = 7ff8000000000000
+#40: xsmuldp 7ff0000000000000 fff0000000000000 = fff0000000000000
+#41: xsmuldp 7ff0000000000000 c0d0650f5a07b353 = fff0000000000000
+#42: xsmuldp 7ff0000000000000 8000000000000000 = 7ff8000000000000
+#43: xsmuldp 7ff0000000000000 0000000000000000 = 7ff8000000000000
+#44: xsmuldp 7ff0000000000000 0123214569900000 = 7ff0000000000000
+#45: xsmuldp 7ff0000000000000 7ff0000000000000 = 7ff0000000000000
+#46: xsmuldp 7ff0000000000000 7ff7ffffffffffff = 7fffffffffffffff
+#47: xsmuldp 7ff0000000000000 7ff8000000000000 = 7ff8000000000000
+#48: xsmuldp fff7ffffffffffff fff0000000000000 = ffffffffffffffff
+#49: xsmuldp fff7ffffffffffff c0d0650f5a07b353 = ffffffffffffffff
+#50: xsmuldp fff7ffffffffffff 8000000000000000 = ffffffffffffffff
+#51: xsmuldp fff7ffffffffffff 0000000000000000 = ffffffffffffffff
+#52: xsmuldp fff7ffffffffffff 0123214569900000 = ffffffffffffffff
+#53: xsmuldp fff7ffffffffffff 7ff0000000000000 = ffffffffffffffff
+#54: xsmuldp fff7ffffffffffff 7ff7ffffffffffff = ffffffffffffffff
+#55: xsmuldp fff7ffffffffffff 7ff8000000000000 = ffffffffffffffff
+#56: xsmuldp fff8000000000000 fff0000000000000 = fff8000000000000
+#57: xsmuldp fff8000000000000 c0d0650f5a07b353 = fff8000000000000
+#58: xsmuldp fff8000000000000 8000000000000000 = fff8000000000000
+#59: xsmuldp fff8000000000000 0000000000000000 = fff8000000000000
+#60: xsmuldp fff8000000000000 0123214569900000 = fff8000000000000
+#61: xsmuldp fff8000000000000 7ff0000000000000 = fff8000000000000
+#62: xsmuldp fff8000000000000 7ff7ffffffffffff = fff8000000000000
+#63: xsmuldp fff8000000000000 7ff8000000000000 = fff8000000000000
+
+#0: xssubdp fff0000000000000 fff0000000000000 = 7ff8000000000000
+#1: xssubdp fff0000000000000 c0d0650f5a07b353 = fff0000000000000
+#2: xssubdp fff0000000000000 8000000000000000 = fff0000000000000
+#3: xssubdp fff0000000000000 0000000000000000 = fff0000000000000
+#4: xssubdp fff0000000000000 0123214569900000 = fff0000000000000
+#5: xssubdp fff0000000000000 7ff0000000000000 = fff0000000000000
+#6: xssubdp fff0000000000000 7ff7ffffffffffff = 7fffffffffffffff
+#7: xssubdp fff0000000000000 7ff8000000000000 = 7ff8000000000000
+#8: xssubdp c0d0650f5a07b353 fff0000000000000 = 7ff0000000000000
+#9: xssubdp c0d0650f5a07b353 c0d0650f5a07b353 = 0000000000000000
+#10: xssubdp c0d0650f5a07b353 8000000000000000 = c0d0650f5a07b353
+#11: xssubdp c0d0650f5a07b353 0000000000000000 = c0d0650f5a07b353
+#12: xssubdp c0d0650f5a07b353 0123214569900000 = c0d0650f5a07b353
+#13: xssubdp c0d0650f5a07b353 7ff0000000000000 = fff0000000000000
+#14: xssubdp c0d0650f5a07b353 7ff7ffffffffffff = 7fffffffffffffff
+#15: xssubdp c0d0650f5a07b353 7ff8000000000000 = 7ff8000000000000
+#16: xssubdp 8000000000000000 fff0000000000000 = 7ff0000000000000
+#17: xssubdp 8000000000000000 c0d0650f5a07b353 = 40d0650f5a07b353
+#18: xssubdp 8000000000000000 8000000000000000 = 0000000000000000
+#19: xssubdp 8000000000000000 0000000000000000 = 8000000000000000
+#20: xssubdp 8000000000000000 0123214569900000 = 8123214569900000
+#21: xssubdp 8000000000000000 7ff0000000000000 = fff0000000000000
+#22: xssubdp 8000000000000000 7ff7ffffffffffff = 7fffffffffffffff
+#23: xssubdp 8000000000000000 7ff8000000000000 = 7ff8000000000000
+#24: xssubdp 0000000000000000 fff0000000000000 = 7ff0000000000000
+#25: xssubdp 0000000000000000 c0d0650f5a07b353 = 40d0650f5a07b353
+#26: xssubdp 0000000000000000 8000000000000000 = 0000000000000000
+#27: xssubdp 0000000000000000 0000000000000000 = 0000000000000000
+#28: xssubdp 0000000000000000 0123214569900000 = 8123214569900000
+#29: xssubdp 0000000000000000 7ff0000000000000 = fff0000000000000
+#30: xssubdp 0000000000000000 7ff7ffffffffffff = 7fffffffffffffff
+#31: xssubdp 0000000000000000 7ff8000000000000 = 7ff8000000000000
+#32: xssubdp 0123214569900000 fff0000000000000 = 7ff0000000000000
+#33: xssubdp 0123214569900000 c0d0650f5a07b353 = 40d0650f5a07b353
+#34: xssubdp 0123214569900000 8000000000000000 = 0123214569900000
+#35: xssubdp 0123214569900000 0000000000000000 = 0123214569900000
+#36: xssubdp 0123214569900000 404f000000000000 = c04f000000000000
+#37: xssubdp 0123214569900000 7ff0000000000000 = fff0000000000000
+#38: xssubdp 0123214569900000 7ff7ffffffffffff = 7fffffffffffffff
+#39: xssubdp 0123214569900000 7ff8000000000000 = 7ff8000000000000
+#40: xssubdp 7ff0000000000000 fff0000000000000 = 7ff0000000000000
+#41: xssubdp 7ff0000000000000 c0d0650f5a07b353 = 7ff0000000000000
+#42: xssubdp 7ff0000000000000 8000000000000000 = 7ff0000000000000
+#43: xssubdp 7ff0000000000000 0000000000000000 = 7ff0000000000000
+#44: xssubdp 7ff0000000000000 0123214569900000 = 7ff0000000000000
+#45: xssubdp 7ff0000000000000 7ff0000000000000 = 7ff8000000000000
+#46: xssubdp 7ff0000000000000 7ff7ffffffffffff = 7fffffffffffffff
+#47: xssubdp 7ff0000000000000 7ff8000000000000 = 7ff8000000000000
+#48: xssubdp fff7ffffffffffff fff0000000000000 = ffffffffffffffff
+#49: xssubdp fff7ffffffffffff c0d0650f5a07b353 = ffffffffffffffff
+#50: xssubdp fff7ffffffffffff 8000000000000000 = ffffffffffffffff
+#51: xssubdp fff7ffffffffffff 0000000000000000 = ffffffffffffffff
+#52: xssubdp fff7ffffffffffff 0123214569900000 = ffffffffffffffff
+#53: xssubdp fff7ffffffffffff 7ff0000000000000 = ffffffffffffffff
+#54: xssubdp fff7ffffffffffff 7ff7ffffffffffff = ffffffffffffffff
+#55: xssubdp fff7ffffffffffff 7ff8000000000000 = ffffffffffffffff
+#56: xssubdp fff8000000000000 fff0000000000000 = fff8000000000000
+#57: xssubdp fff8000000000000 c0d0650f5a07b353 = fff8000000000000
+#58: xssubdp fff8000000000000 8000000000000000 = fff8000000000000
+#59: xssubdp fff8000000000000 0000000000000000 = fff8000000000000
+#60: xssubdp fff8000000000000 0123214569900000 = fff8000000000000
+#61: xssubdp fff8000000000000 7ff0000000000000 = fff8000000000000
+#62: xssubdp fff8000000000000 7ff7ffffffffffff = fff8000000000000
+#63: xssubdp fff8000000000000 7ff8000000000000 = fff8000000000000
+
+
+Test VSX scalar integer conversion instructions
+#0: xscvdpsxds 3fd8000000000000 => 0000000000000000
+#1: xscvdpsxds 404f000000000000 => 000000000000003e
+#2: xscvdpsxds 0018000000b77501 => 0000000000000000
+#3: xscvdpsxds 7fe800000000051b => 7fffffffffffffff
+#4: xscvdpsxds 0123214569900000 => 0000000000000000
+#5: xscvdpsxds 0000000000000000 => 0000000000000000
+#6: xscvdpsxds 8000000000000000 => 0000000000000000
+#7: xscvdpsxds 7ff0000000000000 => 7fffffffffffffff
+#8: xscvdpsxds fff0000000000000 => 8000000000000000
+#9: xscvdpsxds 7ff7ffffffffffff => 8000000000000000
+#10: xscvdpsxds fff7ffffffffffff => 8000000000000000
+#11: xscvdpsxds 7ff8000000000000 => 8000000000000000
+#12: xscvdpsxds fff8000000000000 => 8000000000000000
+#13: xscvdpsxds 8008340000078000 => 0000000000000000
+#14: xscvdpsxds c0d0650f5a07b353 => ffffffffffffbe6c
+
+#0: xscvsxddp 3fd8000000000000 => 43cfec0000000000
+#1: xscvsxddp 404f000000000000 => 43d013c000000000
+#2: xscvsxddp 0018000000b77501 => 4338000000b77501
+#3: xscvsxddp 7fe800000000051b => 43dffa0000000001
+#4: xscvsxddp 0123214569900000 => 4372321456990000
+#5: xscvsxddp 0000000000000000 => 0000000000000000
+#6: xscvsxddp 8000000000000000 => c3e0000000000000
+#7: xscvsxddp 7ff0000000000000 => 43dffc0000000000
+#8: xscvsxddp fff0000000000000 => c330000000000000
+#9: xscvsxddp 7ff7ffffffffffff => 43dffe0000000000
+#10: xscvsxddp fff7ffffffffffff => c320000000000002
+#11: xscvsxddp 7ff8000000000000 => 43dffe0000000000
+#12: xscvsxddp fff8000000000000 => c320000000000000
+#13: xscvsxddp 8008340000078000 => c3dffdf2fffffe20
+#14: xscvsxddp c0d0650f5a07b353 => c3cf97cd7852fc26
+
+#0: xscvuxddp 3fd8000000000000 => 43cfec0000000000
+#1: xscvuxddp 404f000000000000 => 43d013c000000000
+#2: xscvuxddp 0018000000b77501 => 4338000000b77501
+#3: xscvuxddp 7fe800000000051b => 43dffa0000000001
+#4: xscvuxddp 0123214569900000 => 4372321456990000
+#5: xscvuxddp 0000000000000000 => 0000000000000000
+#6: xscvuxddp 8000000000000000 => 43e0000000000000
+#7: xscvuxddp 7ff0000000000000 => 43dffc0000000000
+#8: xscvuxddp fff0000000000000 => 43effe0000000000
+#9: xscvuxddp 7ff7ffffffffffff => 43dffe0000000000
+#10: xscvuxddp fff7ffffffffffff => 43efff0000000000
+#11: xscvuxddp 7ff8000000000000 => 43dffe0000000000
+#12: xscvuxddp fff8000000000000 => 43efff0000000000
+#13: xscvuxddp 8008340000078000 => 43e00106800000f0
+#14: xscvuxddp c0d0650f5a07b353 => 43e81a0ca1eb40f6
+
+
+Testcase PASSED
Index: none/tests/ppc64/test_isa_2_06_part1.vgtest
===================================================================
--- /dev/null
+++ none/tests/ppc64/test_isa_2_06_part1.vgtest
@@ -0,0 +1,2 @@
+prereq: ../../../tests/check_isa-2_06_cap
+prog: test_isa_2_06_part1
Index: tests/check_isa-2_06_cap
===================================================================
--- /dev/null
+++ tests/check_isa-2_06_cap
@@ -0,0 +1,11 @@
+#!/bin/sh
+
+# We use this script to check whether or not the processor supports Power ISA 2.06.
+
+LD_SHOW_AUXV=1 /bin/true | grep arch_2_06 > /dev/null 2>&1
+if [ "$?" -ne "0" ]; then
+ exit 1
+else
+ exit 0
+fi
+