Dirk Mueller
f062078a7c
OBS-URL: https://build.opensuse.org/package/show/devel:tools/valgrind?expand=0&rev=29
7634 lines
375 KiB
Diff
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 *)®_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 *)®_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
|
|
+
|