Author: mjw
Date: Mon Sep 19 13:41:38 2016
New Revision: 15961
Log:
Testcases for fma4 instructions. Bug #369000.
Added:
trunk/none/tests/amd64/fma4.c
trunk/none/tests/amd64/fma4.stderr.exp
trunk/none/tests/amd64/fma4.stdout.exp
trunk/none/tests/amd64/fma4.vgtest
Modified:
trunk/NEWS
trunk/configure.ac
trunk/none/tests/amd64/Makefile.am
trunk/tests/x86_amd64_features.c
Modified: trunk/NEWS
==============================================================================
--- trunk/NEWS (original)
+++ trunk/NEWS Mon Sep 19 13:41:38 2016
@@ -168,6 +168,7 @@
368416 Add tc06_two_races_xml.exp output for ppc64
368412 False positive result for altivec capability check
368461 mmapunmap test fails on ppc64
+369000 AMD64 fma4 instructions unsupported.
n-i-bz Fix incorrect (or infinite loop) unwind on RHEL7 x86 and amd64
n-i-bz massif --pages-as-heap=yes does not report peak caused by mmap+munmap
Modified: trunk/configure.ac
==============================================================================
--- trunk/configure.ac (original)
+++ trunk/configure.ac Mon Sep 19 13:41:38 2016
@@ -2380,6 +2380,26 @@
AM_CONDITIONAL(BUILD_VPCLMULQDQ_TESTS, test x$ac_have_as_vpclmulqdq = xyes)
+# does the x86/amd64 assembler understand FMA4 instructions?
+# Note, this doesn't generate a C-level symbol. It generates a
+# automake-level symbol (BUILD_AFM4_TESTS), used in test Makefile.am's
+AC_MSG_CHECKING([if x86/amd64 assembler supports FMA4 'vfmaddpd'])
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[
+ do {
+ __asm__ __volatile__(
+ "vfmaddpd %%xmm7,%%xmm8,%%xmm6,%%xmm9" : : : );
+ } while (0)
+]])], [
+ac_have_as_vfmaddpd=yes
+AC_MSG_RESULT([yes])
+], [
+ac_have_as_vfmaddpd=no
+AC_MSG_RESULT([no])
+])
+
+AM_CONDITIONAL(BUILD_FMA4_TESTS, test x$ac_have_as_vfmaddpd = xyes)
+
+
# does the x86/amd64 assembler understand the LZCNT instruction?
# Note, this doesn't generate a C-level symbol. It generates a
# automake-level symbol (BUILD_LZCNT_TESTS), used in test Makefile.am's
Modified: trunk/none/tests/amd64/Makefile.am
==============================================================================
--- trunk/none/tests/amd64/Makefile.am (original)
+++ trunk/none/tests/amd64/Makefile.am Mon Sep 19 13:41:38 2016
@@ -42,6 +42,7 @@
cmpxchg.vgtest cmpxchg.stdout.exp cmpxchg.stderr.exp \
faultstatus.disabled faultstatus.stderr.exp \
fcmovnu.vgtest fcmovnu.stderr.exp fcmovnu.stdout.exp \
+ fma4.vgtest fma4.stdout.exp fma4.stderr.exp \
fxtract.vgtest fxtract.stderr.exp fxtract.stdout.exp \
fxtract.stdout.exp-older-glibc \
getseg.stdout.exp getseg.stderr.exp getseg.vgtest \
@@ -109,6 +110,9 @@
if BUILD_VPCLMULQDQ_TESTS
check_PROGRAMS += avx-1
endif
+if BUILD_FMA4_TESTS
+ check_PROGRAMS += fma4
+endif
endif
if BUILD_AVX2_TESTS
if !COMPILER_IS_ICC
@@ -185,6 +189,8 @@
insn_fpu_LDADD = -lm
insn_pclmulqdq_SOURCES = insn_pclmulqdq.def
fxtract_LDADD = -lm
+fma4_CFLAGS = $(AM_CFKAGS) -std=c99
+fma4_LDADD = -lm
.def.c: $(srcdir)/gen_insn_test.pl
$(PERL) $(srcdir)/gen_insn_test.pl < $< > $@
Added: trunk/none/tests/amd64/fma4.c
==============================================================================
--- trunk/none/tests/amd64/fma4.c (added)
+++ trunk/none/tests/amd64/fma4.c Mon Sep 19 13:41:38 2016
@@ -0,0 +1,659 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+#include <math.h>
+#include "tests/malloc.h"
+
+typedef unsigned char UChar;
+typedef unsigned int UInt;
+typedef unsigned long int UWord;
+typedef unsigned long long int ULong;
+typedef double Double;
+typedef float Float;
+
+#define IS_32_ALIGNED(_ptr) (0 == (0x1F & (UWord)(_ptr)))
+
+typedef union { UChar u8[16]; UInt u32[4]; Float f32[4]; Double f64[2]; } XMM;
+typedef union { UChar u8[32]; UInt u32[8]; XMM xmm[2]; } YMM;
+typedef struct { YMM r1; YMM r2; YMM r3; YMM r4; YMM m; } Block;
+
+void showFloat ( XMM* vec, int idx )
+{
+ Float f = vec->f32[idx];
+ int neg = signbit (f);
+ char sign = neg != 0 ? '-' : ' ';
+ switch (fpclassify (f)) {
+ case FP_NORMAL: {
+ for (int i = idx * 4 + 3; i >= idx * 4; i--)
+ printf("%02x", (UInt)vec->u8[i]);
+ break;
+ }
+ case FP_INFINITE: {
+ printf ("[ %cINF ]", sign);
+ break;
+ }
+ case FP_ZERO: {
+ printf ("[%cZERO ]", sign);
+ break;
+ }
+ case FP_NAN: {
+ printf ("[ NAN ]");
+ break;
+ }
+ default: {
+ printf ("[%cSUBNR]", sign);
+ break;
+ }
+ }
+}
+
+void showDouble ( XMM* vec, int idx )
+{
+ Double d = vec->f64[idx];
+ int neg = signbit (d);
+ char sign = neg != 0 ? '-' : ' ';
+ switch (fpclassify (d)) {
+ case FP_NORMAL: {
+ for (int i = idx * 8 + 7; i >= idx * 8; i--)
+ printf("%02x", (UInt)vec->u8[i]);
+ break;
+ }
+ case FP_INFINITE: {
+ printf ("[ %cINF ]", sign);
+ break;
+ }
+ case FP_ZERO: {
+ printf ("[ %cZERO ]", sign);
+ break;
+ }
+ case FP_NAN: {
+ printf ("[ NAN ]");
+ break;
+ }
+ default: {
+ printf ("[ %cSUBNORMAL ]", sign);
+ break;
+ }
+ }
+}
+
+void showXMM ( XMM* vec, int isDouble )
+{
+ if (isDouble) {
+ showDouble ( vec, 1 );
+ printf (".");
+ showDouble ( vec, 0 );
+ } else {
+ showFloat ( vec, 3 );
+ printf (".");
+ showFloat ( vec, 2 );
+ printf (".");
+ showFloat ( vec, 1 );
+ printf (".");
+ showFloat ( vec, 0 );
+ }
+}
+
+void showYMM ( YMM* vec, int isDouble )
+{
+ assert(IS_32_ALIGNED(vec));
+ showXMM ( &vec->xmm[1], isDouble );
+ printf(".");
+ showXMM ( &vec->xmm[0], isDouble );
+}
+
+void showBlock ( char* msg, Block* block, int isDouble )
+{
+ printf(" %s\n", msg);
+ printf("r1: "); showYMM(&block->r1, isDouble); printf("\n");
+ printf("r2: "); showYMM(&block->r2, isDouble); printf("\n");
+ printf("r3: "); showYMM(&block->r3, isDouble); printf("\n");
+ printf("r4: "); showYMM(&block->r4, isDouble); printf("\n");
+ printf(" m: "); showYMM(&block->m, isDouble); printf("\n");
+}
+
+static Double special_values[10];
+
+static __attribute__((noinline))
+Double negate ( Double d ) { return -d; }
+static __attribute__((noinline))
+Double divf64 ( Double x, Double y ) { return x/y; }
+
+static __attribute__((noinline))
+Double plusZero ( void ) { return 0.0; }
+static __attribute__((noinline))
+Double minusZero ( void ) { return negate(plusZero()); }
+
+static __attribute__((noinline))
+Double plusOne ( void ) { return 1.0; }
+static __attribute__((noinline))
+Double minusOne ( void ) { return negate(plusOne()); }
+
+static __attribute__((noinline))
+Double plusInf ( void ) { return 1.0 / 0.0; }
+static __attribute__((noinline))
+Double minusInf ( void ) { return negate(plusInf()); }
+
+static __attribute__((noinline))
+Double plusNaN ( void ) { return divf64(plusInf(),plusInf()); }
+static __attribute__((noinline))
+Double minusNaN ( void ) { return negate(plusNaN()); }
+
+static __attribute__((noinline))
+Double plusDenorm ( void ) { return 1.23e-315 / 1e3; }
+static __attribute__((noinline))
+Double minusDenorm ( void ) { return negate(plusDenorm()); }
+
+static void init_special_values ( void )
+{
+ special_values[0] = plusZero();
+ special_values[1] = minusZero();
+ special_values[2] = plusOne();
+ special_values[3] = minusOne();
+ special_values[4] = plusInf();
+ special_values[5] = minusInf();
+ special_values[6] = plusNaN();
+ special_values[7] = minusNaN();
+ special_values[8] = plusDenorm();
+ special_values[9] = minusDenorm();
+}
+
+void specialFBlock ( Block* b )
+{
+ int i;
+ Float* p = (Float*)b;
+ for (i = 0; i < sizeof(Block) / sizeof(Float); i++)
+ p[i] = (Float) special_values[i % 10];
+}
+
+void specialDBlock ( Block* b )
+{
+ int i;
+ Double* p = (Double*)b;
+ for (i = 0; i < sizeof(Block) / sizeof(Double); i++)
+ p[i] = special_values[i % 10];
+}
+
+UChar randUChar ( void )
+{
+ static UInt seed = 80021;
+ seed = 1103515245 * seed + 12345;
+ return (seed >> 17) & 0xFF;
+}
+
+void randBlock ( Block* b )
+{
+ int i;
+ UChar* p = (UChar*)b;
+ for (i = 0; i < sizeof(Block); i++)
+ p[i] = randUChar();
+}
+
+void oneBlock ( Block* b )
+{
+ int i;
+ UChar* p = (UChar*)b;
+ for (i = 0; i < sizeof(Block); i++)
+ p[i] = 1;
+}
+
+#define GEN_test(_name, _instr, _isD) \
+ __attribute__ ((noinline)) void \
+ test_##_name ( const char *n, Block* b) \
+ { \
+ printf("%s %s\n", #_name, n); \
+ showBlock("before", b, _isD); \
+ __asm__ __volatile__( \
+ "vmovdqa 0(%0),%%ymm7" "\n\t" \
+ "vmovdqa 32(%0),%%ymm8" "\n\t" \
+ "vmovdqa 64(%0),%%ymm6" "\n\t" \
+ "vmovdqa 96(%0),%%ymm9" "\n\t" \
+ "leaq 128(%0),%%r14" "\n\t" \
+ _instr "\n\t" \
+ "vmovdqa %%ymm7, 0(%0)" "\n\t" \
+ "vmovdqa %%ymm8, 32(%0)" "\n\t" \
+ "vmovdqa %%ymm6, 64(%0)" "\n\t" \
+ "vmovdqa %%ymm9, 96(%0)" "\n\t" \
+ : /*OUT*/ \
+ : /*IN*/"r"(b) \
+ : /*TRASH*/"xmm7","xmm8","xmm6","xmm9","r14","memory","cc" \
+ ); \
+ showBlock("after", b, _isD); \
+ printf("\n"); \
+ }
+
+/* All these defines do the same thing (and someone with stronger
+ preprocessor foo could probably express things much smaller).
+ They generate 4 different functions to test 4 variants of an
+ fma4 instruction. One with as input 4 registers, one where
+ the output register is also one of the input registers and
+ two versions where different inputs are a memory location.
+ The xmm variants create 128 versions, the ymm variants 256. */
+
+#define GEN_test_VFMADDPD_xmm(_name) \
+ GEN_test(_name##_xmm, \
+ "vfmaddpd %%xmm7,%%xmm8,%%xmm6,%%xmm9", 1); \
+ GEN_test(_name##_xmm_src_dst, \
+ "vfmaddpd %%xmm7,%%xmm8,%%xmm9,%%xmm9", 1); \
+ GEN_test(_name##_xmm_mem1, \
+ "vfmaddpd (%%r14),%%xmm8,%%xmm6,%%xmm9", 1); \
+ GEN_test(_name##_xmm_mem2, \
+ "vfmaddpd %%xmm8,(%%r14),%%xmm6,%%xmm9", 1);
+GEN_test_VFMADDPD_xmm(VFMADDPD)
+
+#define GEN_test_VFMADDPD_ymm(_name) \
+ GEN_test(_name##_ymm, \
+ "vfmaddpd %%ymm7,%%ymm8,%%ymm6,%%ymm9", 1); \
+ GEN_test(_name##_ymm_src_dst, \
+ "vfmaddpd %%ymm7,%%ymm8,%%ymm9,%%ymm9", 1); \
+ GEN_test(_name##_ymm_mem1, \
+ "vfmaddpd (%%r14),%%ymm8,%%ymm6,%%ymm9", 1); \
+ GEN_test(_name##_ymm_mem2, \
+ "vfmaddpd %%ymm8,(%%r14),%%ymm6,%%ymm9", 1);
+GEN_test_VFMADDPD_ymm(VFMADDPD)
+
+#define GEN_test_VFMADDPS_xmm(_name) \
+ GEN_test(_name##_xmm, \
+ "vfmaddps %%xmm7,%%xmm8,%%xmm6,%%xmm9", 0); \
+ GEN_test(_name##_xmm_src_dst, \
+ "vfmaddps %%xmm7,%%xmm8,%%xmm9,%%xmm9", 0); \
+ GEN_test(_name##_xmm_mem1, \
+ "vfmaddps (%%r14),%%xmm8,%%xmm6,%%xmm9", 0); \
+ GEN_test(_name##_xmm_mem2, \
+ "vfmaddps %%xmm8,(%%r14),%%xmm6,%%xmm9", 0);
+GEN_test_VFMADDPS_xmm(VFMADDPS)
+
+#define GEN_test_VFMADDPS_ymm(_name) \
+ GEN_test(_name##_ymm, \
+ "vfmaddps %%ymm7,%%ymm8,%%ymm6,%%ymm9", 0); \
+ GEN_test(_name##_ymm_src_dst, \
+ "vfmaddps %%ymm7,%%ymm8,%%ymm9,%%ymm9", 0); \
+ GEN_test(_name##_ymm_mem1, \
+ "vfmaddps (%%r14),%%ymm8,%%ymm6,%%ymm9", 0); \
+ GEN_test(_name##_ymm_mem2, \
+ "vfmaddps %%ymm8,(%%r14),%%ymm6,%%ymm9", 0);
+GEN_test_VFMADDPS_ymm(VFMADDPS)
+
+#define GEN_test_VFMADDSD_xmm(_name) \
+ GEN_test(_name##_xmm, \
+ "vfmaddsd %%xmm7,%%xmm8,%%xmm6,%%xmm9", 1); \
+ GEN_test(_name##_xmm_src_dst, \
+ "vfmaddsd %%xmm7,%%xmm8,%%xmm9,%%xmm9", 1); \
+ GEN_test(_name##_xmm_mem1, \
+ "vfmaddsd (%%r14),%%xmm8,%%xmm6,%%xmm9", 1); \
+ GEN_test(_name##_xmm_mem2, \
+ "vfmaddsd %%xmm8,(%%r14),%%xmm6,%%xmm9", 1);
+GEN_test_VFMADDSD_xmm(VFMADDSD)
+
+#define GEN_test_VFMADDSS_xmm(_name) \
+ GEN_test(_name##_xmm, \
+ "vfmaddss %%xmm7,%%xmm8,%%xmm6,%%xmm9", 0); \
+ GEN_test(_name##_xmm_src_dst, \
+ "vfmaddss %%xmm7,%%xmm8,%%xmm9,%%xmm9", 0); \
+ GEN_test(_name##_xmm_mem1, \
+ "vfmaddss (%%r14),%%xmm8,%%xmm6,%%xmm9", 0); \
+ GEN_test(_name##_xmm_mem2, \
+ "vfmaddss %%xmm8,(%%r14),%%xmm6,%%xmm9", 0);
+GEN_test_VFMADDSS_xmm(VFMADDSS)
+
+#define GEN_test_VFMADDSUBPD_xmm(_name) \
+ GEN_test(_name##_xmm, \
+ "vfmaddsubpd %%xmm7,%%xmm8,%%xmm6,%%xmm9", 1); \
+ GEN_test(_name##_xmm_src_dst, \
+ "vfmaddsubpd %%xmm7,%%xmm8,%%xmm9,%%xmm9", 1); \
+ GEN_test(_name##_xmm_mem1, \
+ "vfmaddsubpd (%%r14),%%xmm8,%%xmm6,%%xmm9", 1); \
+ GEN_test(_name##_xmm_mem2, \
+ "vfmaddsubpd %%xmm8,(%%r14),%%xmm6,%%xmm9", 1);
+GEN_test_VFMADDSUBPD_xmm(VFMADDSUBPD)
+
+#define GEN_test_VFMADDSUBPD_ymm(_name) \
+ GEN_test(_name##_ymm, \
+ "vfmaddsubpd %%ymm7,%%ymm8,%%ymm6,%%ymm9", 1); \
+ GEN_test(_name##_ymm_src_dst, \
+ "vfmaddsubpd %%ymm7,%%ymm8,%%ymm9,%%ymm9", 1); \
+ GEN_test(_name##_ymm_mem1, \
+ "vfmaddsubpd (%%r14),%%ymm8,%%ymm6,%%ymm9", 1); \
+ GEN_test(_name##_ymm_mem2, \
+ "vfmaddsubpd %%ymm8,(%%r14),%%ymm6,%%ymm9", 1);
+GEN_test_VFMADDSUBPD_ymm(VFMADDSUBPD)
+
+#define GEN_test_VFMADDSUBPS_xmm(_name) \
+ GEN_test(_name##_xmm, \
+ "vfmaddsubps %%xmm7,%%xmm8,%%xmm6,%%xmm9", 0); \
+ GEN_test(_name##_xmm_src_dst, \
+ "vfmaddsubps %%xmm7,%%xmm8,%%xmm9,%%xmm9", 0); \
+ GEN_test(_name##_xmm_mem1, \
+ "vfmaddsubps (%%r14),%%xmm8,%%xmm6,%%xmm9", 0); \
+ GEN_test(_name##_xmm_mem2, \
+ "vfmaddsubps %%xmm8,(%%r14),%%xmm6,%%xmm9", 0);
+GEN_test_VFMADDSUBPS_xmm(VFMADDSUBPS)
+
+#define GEN_test_VFMADDSUBPS_ymm(_name) \
+ GEN_test(_name##_ymm, \
+ "vfmaddsubps %%ymm7,%%ymm8,%%ymm6,%%ymm9", 0); \
+ GEN_test(_name##_ymm_src_dst, \
+ "vfmaddsubps %%ymm7,%%ymm8,%%ymm9,%%ymm9", 0); \
+ GEN_test(_name##_ymm_mem1, \
+ "vfmaddsubps (%%r14),%%ymm8,%%ymm6,%%ymm9", 0); \
+ GEN_test(_name##_ymm_mem2, \
+ "vfmaddsubps %%ymm8,(%%r14),%%ymm6,%%ymm9", 0);
+GEN_test_VFMADDSUBPS_ymm(VFMADDSUBPS)
+
+#define GEN_test_VFMSUBADDPD_xmm(_name) \
+ GEN_test(_name##_xmm, \
+ "vfmsubaddpd %%xmm7,%%xmm8,%%xmm6,%%xmm9", 1); \
+ GEN_test(_name##_xmm_src_dst, \
+ "vfmsubaddpd %%xmm7,%%xmm8,%%xmm9,%%xmm9", 1); \
+ GEN_test(_name##_xmm_mem1, \
+ "vfmsubaddpd (%%r14),%%xmm8,%%xmm6,%%xmm9", 1); \
+ GEN_test(_name##_xmm_mem2, \
+ "vfmsubaddpd %%xmm8,(%%r14),%%xmm6,%%xmm9", 1);
+GEN_test_VFMSUBADDPD_xmm(VFMSUBADDPD)
+
+#define GEN_test_VFMSUBADDPD_ymm(_name) \
+ GEN_test(_name##_ymm, \
+ "vfmsubaddpd %%ymm7,%%ymm8,%%ymm6,%%ymm9", 1); \
+ GEN_test(_name##_ymm_src_dst, \
+ "vfmsubaddpd %%ymm7,%%ymm8,%%ymm9,%%ymm9", 1); \
+ GEN_test(_name##_ymm_mem1, \
+ "vfmsubaddpd (%%r14),%%ymm8,%%ymm6,%%ymm9", 1); \
+ GEN_test(_name##_ymm_mem2, \
+ "vfmsubaddpd %%ymm8,(%%r14),%%ymm6,%%ymm9", 1);
+GEN_test_VFMSUBADDPD_ymm(VFMSUBADDPD)
+
+#define GEN_test_VFMSUBADDPS_xmm(_name) \
+ GEN_test(_name##_xmm, \
+ "vfmsubaddps %%xmm7,%%xmm8,%%xmm6,%%xmm9", 0); \
+ GEN_test(_name##_xmm_src_dst, \
+ "vfmsubaddps %%xmm7,%%xmm8,%%xmm9,%%xmm9", 0); \
+ GEN_test(_name##_xmm_mem1, \
+ "vfmsubaddps (%%r14),%%xmm8,%%xmm6,%%xmm9", 0); \
+ GEN_test(_name##_xmm_mem2, \
+ "vfmsubaddps %%xmm8,(%%r14),%%xmm6,%%xmm9", 0);
+GEN_test_VFMSUBADDPS_xmm(VFMSUBADDPS)
+
+#define GEN_test_VFMSUBADDPS_ymm(_name) \
+ GEN_test(_name##_ymm, \
+ "vfmsubaddps %%ymm7,%%ymm8,%%ymm6,%%ymm9", 0); \
+ GEN_test(_name##_ymm_src_dst, \
+ "vfmsubaddps %%ymm7,%%ymm8,%%ymm9,%%ymm9", 0); \
+ GEN_test(_name##_ymm_mem1, \
+ "vfmsubaddps (%%r14),%%ymm8,%%ymm6,%%ymm9", 0); \
+ GEN_test(_name##_ymm_mem2, \
+ "vfmsubaddps %%ymm8,(%%r14),%%ymm6,%%ymm9", 0);
+GEN_test_VFMSUBADDPS_ymm(VFMSUBADDPS)
+
+#define GEN_test_VFMSUBPD_xmm(_name) \
+ GEN_test(_name##_xmm, \
+ "vfmsubpd %%xmm7,%%xmm8,%%xmm6,%%xmm9", 1); \
+ GEN_test(_name##_xmm_src_dst, \
+ "vfmsubpd %%xmm7,%%xmm8,%%xmm9,%%xmm9", 1); \
+ GEN_test(_name##_xmm_mem1, \
+ "vfmsubpd (%%r14),%%xmm8,%%xmm6,%%xmm9", 1); \
+ GEN_test(_name##_xmm_mem2, \
+ "vfmsubpd %%xmm8,(%%r14),%%xmm6,%%xmm9", 1);
+GEN_test_VFMSUBPD_xmm(VFMSUBPD)
+
+#define GEN_test_VFMSUBPD_ymm(_name) \
+ GEN_test(_name##_ymm, \
+ "vfmsubpd %%ymm7,%%ymm8,%%ymm6,%%ymm9", 1); \
+ GEN_test(_name##_ymm_src_dst, \
+ "vfmsubpd %%ymm7,%%ymm8,%%ymm9,%%ymm9", 1); \
+ GEN_test(_name##_ymm_mem1, \
+ "vfmsubpd (%%r14),%%ymm8,%%ymm6,%%ymm9", 1); \
+ GEN_test(_name##_ymm_mem2, \
+ "vfmsubpd %%ymm8,(%%r14),%%ymm6,%%ymm9", 1);
+GEN_test_VFMSUBPD_ymm(VFMSUBPD)
+
+#define GEN_test_VFMSUBPS_xmm(_name) \
+ GEN_test(_name##_xmm, \
+ "vfmsubps %%xmm7,%%xmm8,%%xmm6,%%xmm9", 0); \
+ GEN_test(_name##_xmm_src_dst, \
+ "vfmsubps %%xmm7,%%xmm8,%%xmm9,%%xmm9", 0); \
+ GEN_test(_name##_xmm_mem1, \
+ "vfmsubps (%%r14),%%xmm8,%%xmm6,%%xmm9", 0); \
+ GEN_test(_name##_xmm_mem2, \
+ "vfmsubps %%xmm8,(%%r14),%%xmm6,%%xmm9", 0);
+GEN_test_VFMSUBPS_xmm(VFMSUBPS)
+
+#define GEN_test_VFMSUBPS_ymm(_name) \
+ GEN_test(_name##_ymm, \
+ "vfmsubps %%ymm7,%%ymm8,%%ymm6,%%ymm9", 0); \
+ GEN_test(_name##_ymm_src_dst, \
+ "vfmsubps %%ymm7,%%ymm8,%%ymm9,%%ymm9", 0); \
+ GEN_test(_name##_ymm_mem1, \
+ "vfmsubps (%%r14),%%ymm8,%%ymm6,%%ymm9", 0); \
+ GEN_test(_name##_ymm_mem2, \
+ "vfmsubps %%ymm8,(%%r14),%%ymm6,%%ymm9", 0);
+GEN_test_VFMSUBPS_ymm(VFMSUBPS)
+
+#define GEN_test_VFMSUBSD_xmm(_name) \
+ GEN_test(_name##_xmm, \
+ "vfmsubsd %%xmm7,%%xmm8,%%xmm6,%%xmm9", 1); \
+ GEN_test(_name##_xmm_src_dst, \
+ "vfmsubsd %%xmm7,%%xmm8,%%xmm9,%%xmm9", 1); \
+ GEN_test(_name##_xmm_mem1, \
+ "vfmsubsd (%%r14),%%xmm8,%%xmm6,%%xmm9", 1); \
+ GEN_test(_name##_xmm_mem2, \
+ "vfmsubsd %%xmm8,(%%r14),%%xmm6,%%xmm9", 1);
+GEN_test_VFMSUBSD_xmm(VFMSUBSD)
+
+#define GEN_test_VFMSUBSS_xmm(_name) \
+ GEN_test(_name##_xmm, \
+ "vfmsubss %%xmm7,%%xmm8,%%xmm6,%%xmm9", 0); \
+ GEN_test(_name##_xmm_src_dst, \
+ "vfmsubss %%xmm7,%%xmm8,%%xmm9,%%xmm9", 0); \
+ GEN_test(_name##_xmm_mem1, \
+ "vfmsubss (%%r14),%%xmm8,%%xmm6,%%xmm9", 0); \
+ GEN_test(_name##_xmm_mem2, \
+ "vfmsubss %%xmm8,(%%r14),%%xmm6,%%xmm9", 0);
+GEN_test_VFMSUBSS_xmm(VFMSUBSS)
+
+#define GEN_test_VFNMADDPD_xmm(_name) \
+ GEN_test(_name##_xmm, \
+ "vfnmaddpd %%xmm7,%%xmm8,%%xmm6,%%xmm9", 1); \
+ GEN_test(_name##_xmm_src_dst, \
+ "vfnmaddpd %%xmm7,%%xmm8,%%xmm9,%%xmm9", 1); \
+ GEN_test(_name##_xmm_mem1, \
+ "vfnmaddpd (%%r14),%%xmm8,%%xmm6,%%xmm9", 1); \
+ GEN_test(_name##_xmm_mem2, \
+ "vfnmaddpd %%xmm8,(%%r14),%%xmm6,%%xmm9", 1);
+GEN_test_VFNMADDPD_xmm(VFNMADDPD)
+
+#define GEN_test_VFNMADDPD_ymm(_name) \
+ GEN_test(_name##_ymm, \
+ "vfnmaddpd %%ymm7,%%ymm8,%%ymm6,%%ymm9", 1); \
+ GEN_test(_name##_ymm_src_dst, \
+ "vfnmaddpd %%ymm7,%%ymm8,%%ymm9,%%ymm9", 1); \
+ GEN_test(_name##_ymm_mem1, \
+ "vfnmaddpd (%%r14),%%ymm8,%%ymm6,%%ymm9", 1); \
+ GEN_test(_name##_ymm_mem2, \
+ "vfnmaddpd %%ymm8,(%%r14),%%ymm6,%%ymm9", 1);
+GEN_test_VFNMADDPD_ymm(VFNMADDPD)
+
+#define GEN_test_VFNMADDPS_xmm(_name) \
+ GEN_test(_name##_xmm, \
+ "vfnmaddps %%xmm7,%%xmm8,%%xmm6,%%xmm9", 0); \
+ GEN_test(_name##_xmm_src_dst, \
+ "vfnmaddps %%xmm7,%%xmm8,%%xmm9,%%xmm9", 0); \
+ GEN_test(_name##_xmm_mem1, \
+ "vfnmaddps (%%r14),%%xmm8,%%xmm6,%%xmm9", 0); \
+ GEN_test(_name##_xmm_mem2, \
+ "vfnmaddps %%xmm8,(%%r14),%%xmm6,%%xmm9", 0);
+GEN_test_VFNMADDPS_xmm(VFNMADDPS)
+
+#define GEN_test_VFNMADDPS_ymm(_name) \
+ GEN_test(_name##_ymm, \
+ "vfnmaddps %%ymm7,%%ymm8,%%ymm6,%%ymm9", 0); \
+ GEN_test(_name##_ymm_src_dst, \
+ "vfnmaddps %%ymm7,%%ymm8,%%ymm9,%%ymm9", 0); \
+ GEN_test(_name##_ymm_mem1, \
+ "vfnmaddps (%%r14),%%ymm8,%%ymm6,%%ymm9", 0); \
+ GEN_test(_name##_ymm_mem2, \
+ "vfnmaddps %%ymm8,(%%r14),%%ymm6,%%ymm9", 0);
+GEN_test_VFNMADDPS_ymm(VFNMADDPS)
+
+#define GEN_test_VFNMADDSD_xmm(_name) \
+ GEN_test(_name##_xmm, \
+ "vfnmaddsd %%xmm7,%%xmm8,%%xmm6,%%xmm9", 1); \
+ GEN_test(_name##_xmm_src_dst, \
+ "vfnmaddsd %%xmm7,%%xmm8,%%xmm9,%%xmm9", 1); \
+ GEN_test(_name##_xmm_mem1, \
+ "vfnmaddsd (%%r14),%%xmm8,%%xmm6,%%xmm9", 1); \
+ GEN_test(_name##_xmm_mem2, \
+ "vfnmaddsd %%xmm8,(%%r14),%%xmm6,%%xmm9", 1);
+GEN_test_VFNMADDSD_xmm(VFNMADDSD)
+
+#define GEN_test_VFNMADDSS_xmm(_name) \
+ GEN_test(_name##_xmm, \
+ "vfnmaddss %%xmm7,%%xmm8,%%xmm6,%%xmm9", 0); \
+ GEN_test(_name##_xmm_src_dst, \
+ "vfnmaddss %%xmm7,%%xmm8,%%xmm9,%%xmm9", 0); \
+ GEN_test(_name##_xmm_mem1, \
+ "vfnmaddss (%%r14),%%xmm8,%%xmm6,%%xmm9", 0); \
+ GEN_test(_name##_xmm_mem2, \
+ "vfnmaddss %%xmm8,(%%r14),%%xmm6,%%xmm9", 0);
+GEN_test_VFNMADDSS_xmm(VFNMADDSS)
+
+#define GEN_test_VFNMSUBPD_xmm(_name) \
+ GEN_test(_name##_xmm, \
+ "vfnmsubpd %%xmm7,%%xmm8,%%xmm6,%%xmm9", 1); \
+ GEN_test(_name##_xmm_src_dst, \
+ "vfnmsubpd %%xmm7,%%xmm8,%%xmm9,%%xmm9", 1); \
+ GEN_test(_name##_xmm_mem1, \
+ "vfnmsubpd (%%r14),%%xmm8,%%xmm6,%%xmm9", 1); \
+ GEN_test(_name##_xmm_mem2, \
+ "vfnmsubpd %%xmm8,(%%r14),%%xmm6,%%xmm9", 1);
+GEN_test_VFNMSUBPD_xmm(VFNMSUBPD)
+
+#define GEN_test_VFNMSUBPD_ymm(_name) \
+ GEN_test(_name##_ymm, \
+ "vfnmsubpd %%ymm7,%%ymm8,%%ymm6,%%ymm9", 1); \
+ GEN_test(_name##_ymm_src_dst, \
+ "vfnmsubpd %%ymm7,%%ymm8,%%ymm9,%%ymm9", 1); \
+ GEN_test(_name##_ymm_mem1, \
+ "vfnmsubpd (%%r14),%%ymm8,%%ymm6,%%ymm9", 1); \
+ GEN_test(_name##_ymm_mem2, \
+ "vfnmsubpd %%ymm8,(%%r14),%%ymm6,%%ymm9", 1);
+GEN_test_VFNMSUBPD_ymm(VFNMSUBPD)
+
+#define GEN_test_VFNMSUBPS_xmm(_name) \
+ GEN_test(_name##_xmm, \
+ "vfnmsubps %%xmm7,%%xmm8,%%xmm6,%%xmm9", 0); \
+ GEN_test(_name##_xmm_src_dst, \
+ "vfnmsubps %%xmm7,%%xmm8,%%xmm9,%%xmm9", 0); \
+ GEN_test(_name##_xmm_mem1, \
+ "vfnmsubps (%%r14),%%xmm8,%%xmm6,%%xmm9", 0); \
+ GEN_test(_name##_xmm_mem2, \
+ "vfnmsubps %%xmm8,(%%r14),%%xmm6,%%xmm9", 0);
+GEN_test_VFNMSUBPS_xmm(VFNMSUBPS)
+
+#define GEN_test_VFNMSUBPS_ymm(_name) \
+ GEN_test(_name##_ymm, \
+ "vfnmsubps %%ymm7,%%ymm8,%%ymm6,%%ymm9", 0); \
+ GEN_test(_name##_ymm_src_dst, \
+ "vfnmsubps %%ymm7,%%ymm8,%%ymm9,%%ymm9", 0); \
+ GEN_test(_name##_ymm_mem1, \
+ "vfnmsubps (%%r14),%%ymm8,%%ymm6,%%ymm9", 0); \
+ GEN_test(_name##_ymm_mem2, \
+ "vfnmsubps %%ymm8,(%%r14),%%ymm6,%%ymm9", 0);
+GEN_test_VFNMSUBPS_ymm(VFNMSUBPS)
+
+#define GEN_test_VFNMSUBSD_xmm(_name) \
+ GEN_test(_name##_xmm, \
+ "vfnmsubsd %%xmm7,%%xmm8,%%xmm6,%%xmm9", 1); \
+ GEN_test(_name##_xmm_src_dst, \
+ "vfnmsubsd %%xmm7,%%xmm8,%%xmm9,%%xmm9", 1); \
+ GEN_test(_name##_xmm_mem1, \
+ "vfnmsubsd (%%r14),%%xmm8,%%xmm6,%%xmm9", 1); \
+ GEN_test(_name##_xmm_mem2, \
+ "vfnmsubsd %%xmm8,(%%r14),%%xmm6,%%xmm9", 1);
+GEN_test_VFNMSUBSD_xmm(VFNMSUBSD)
+
+#define GEN_test_VFNMSUBSS_xmm(_name) \
+ GEN_test(_name##_xmm, \
+ "vfnmsubss %%xmm7,%%xmm8,%%xmm6,%%xmm9", 0); \
+ GEN_test(_name##_xmm_src_dst, \
+ "vfnmsubss %%xmm7,%%xmm8,%%xmm9,%%xmm9", 0); \
+ GEN_test(_name##_xmm_mem1, \
+ "vfnmsubss (%%r14),%%xmm8,%%xmm6,%%xmm9", 0); \
+ GEN_test(_name##_xmm_mem2, \
+ "vfnmsubss %%xmm8,(%%r14),%%xmm6,%%xmm9", 0);
+GEN_test_VFNMSUBSS_xmm(VFNMSUBSS)
+
+#define DO_test_block(_name, _sub, _bname, _block) \
+ test_##_name##_##_sub(_bname,_block);
+
+#define DO_test(_name, _sub, _isD) { \
+ Block* b = memalign32(sizeof(Block)); \
+ oneBlock(b); \
+ DO_test_block(_name, _sub, "ones", b); \
+ if (_isD) { \
+ specialDBlock(b); \
+ DO_test_block(_name, _sub, "specialD", b); \
+ } else { \
+ specialFBlock(b); \
+ DO_test_block(_name, _sub, "specialF", b); \
+ } \
+ randBlock(b); \
+ DO_test_block(_name, _sub, "rand", b); \
+ free(b); \
+}
+
+#define DO_tests_xmm(_name,_isD) \
+ DO_test(_name, xmm, _isD); \
+ DO_test(_name, xmm_src_dst, _isD); \
+ DO_test(_name, xmm_mem1, _isD); \
+ DO_test(_name, xmm_mem2, _isD);
+
+#define DO_tests_ymm(_name,_isD) \
+ DO_test(_name, ymm, _isD); \
+ DO_test(_name, ymm_src_dst, _isD); \
+ DO_test(_name, ymm_mem1, _isD); \
+ DO_test(_name, ymm_mem2, _isD);
+
+int main ( void )
+{
+ init_special_values();
+
+ // 128
+ DO_tests_xmm(VFMADDPD, 1);
+ DO_tests_xmm(VFMADDPS, 0);
+ DO_tests_xmm(VFMADDSD, 1);
+ DO_tests_xmm(VFMADDSS, 0);
+ DO_tests_xmm(VFMADDSUBPD, 1);
+ DO_tests_xmm(VFMADDSUBPS, 0);
+ DO_tests_xmm(VFMSUBADDPD, 1);
+ DO_tests_xmm(VFMSUBADDPS, 0);
+ DO_tests_xmm(VFMSUBPD, 1);
+ DO_tests_xmm(VFMSUBPS, 0);
+ DO_tests_xmm(VFMSUBSD, 1);
+ DO_tests_xmm(VFMSUBSS, 0);
+ DO_tests_xmm(VFNMADDPD, 1);
+ DO_tests_xmm(VFNMADDPS, 0);
+ DO_tests_xmm(VFNMADDSD, 1);
+ DO_tests_xmm(VFNMADDSS, 0);
+ DO_tests_xmm(VFNMSUBPD, 1);
+ DO_tests_xmm(VFNMSUBPS, 0);
+ DO_tests_xmm(VFNMSUBSD, 1);
+ DO_tests_xmm(VFNMSUBSS, 0);
+
+ // 256
+ /*
+ DO_tests_ymm(VFMADDPD, 1);
+ DO_tests_ymm(VFMADDPS, 0);
+ DO_tests_ymm(VFMADDSUBPD, 1);
+ DO_tests_ymm(VFMADDSUBPS, 0);
+ DO_tests_ymm(VFMSUBADDPD, 1);
+ DO_tests_ymm(VFMSUBADDPS, 0);
+ DO_tests_ymm(VFMSUBPD, 1);
+ DO_tests_ymm(VFMSUBPS, 0);
+ DO_tests_ymm(VFNMADDPD, 1);
+ DO_tests_ymm(VFNMADDPS, 0);
+ DO_tests_ymm(VFNMSUBPD, 1);
+ DO_tests_ymm(VFNMSUBPS, 0);
+ */
+
+ return 0;
+}
Added: trunk/none/tests/amd64/fma4.stderr.exp
==============================================================================
(empty)
Added: trunk/none/tests/amd64/fma4.stdout.exp
==============================================================================
--- trunk/none/tests/amd64/fma4.stdout.exp (added)
+++ trunk/none/tests/amd64/fma4.stdout.exp Mon Sep 19 13:41:38 2016
@@ -0,0 +1,3360 @@
+VFMADDPD_xmm ones
+ before
+r1: 0101010101010101.0101010101010101.0101010101010101.0101010101010101
+r2: 0101010101010101.0101010101010101.0101010101010101.0101010101010101
+r3: 0101010101010101.0101010101010101.0101010101010101.0101010101010101
+r4: 0101010101010101.0101010101010101.0101010101010101.0101010101010101
+ m: 0101010101010101.0101010101010101.0101010101010101.0101010101010101
+ after
+r1: 0101010101010101.0101010101010101.0101010101010101.0101010101010101
+r2: 0101010101010101.0101010101010101.0101010101010101.0101010101010101
+r3: 0101010101010101.0101010101010101.0101010101010101.0101010101010101
+r4: [ ZERO ].[ ZERO ].0101010101010101.0101010101010101
+ m: 0101010101010101.0101010101010101.0101010101010101.0101010101010101
+
+VFMADDPD_xmm specialD
+ before
+r1: bff0000000000000.3ff0000000000000.[ -ZERO ].[ ZERO ]
+r2: [ NAN ].[ NAN ].[ -INF ].[ INF ]
+r3: [ -ZERO ].[ ZERO ].[ -SUBNORMAL ].[ SUBNORMAL ]
+r4: [ -INF ].[ INF ].bff0000000000000.3ff0000000000000
+ m: [ -SUBNORMAL ].[ SUBNORMAL ].[ NAN ].[ NAN ]
+ after
+r1: bff0000000000000.3ff0000000000000.[ -ZERO ].[ ZERO ]
+r2: [ NAN ].[ NAN ].[ -INF ].[ INF ]
+r3: [ -ZERO ].[ ZERO ].[ -SUBNORMAL ].[ SUBNORMAL ]
+r4: [ ZERO ].[ ZERO ].[ INF ].[ INF ]
+ m: [ -SUBNORMAL ].[ SUBNORMAL ].[ NAN ].[ NAN ]
+
+VFMADDPD_xmm rand
+ before
+r1: 7d6528c5fa956a0d.69c3e9a6af27d13b.5175e39d19c9ca1e.98f24a4984175700
+r2: b6d2fb5aa7bc5127.fe9915e556a044b2.60b160857d45c484.47b8d8c0eeef1e50
+r3: 065d77195d623e6b.842adc6450659e17.19a348215c3a67fd.399182c2dbcc2d38
+r4: cb509970b8136c85.d740b80eb7839b97.d89998df5035ed36.4a4bc43968bc40e5
+ m: 5ff85bc9535c191f.d3a727d1a705f65d.f9dd4a29f8c093db.56b01a12b0ca1583
+ after
+r1: 7d6528c5fa956a0d.69c3e9a6af27d13b.5175e39d19c9ca1e.98f24a4984175700
+r2: b6d2fb5aa7bc5127.fe9915e556a044b2.60b160857d45c484.47b8d8c0eeef1e50
+r3: 065d77195d623e6b.842adc6450659e17.19a348215c3a67fd.399182c2dbcc2d38
+r4: [ ZERO ].[ ZERO ].5175e39d19c9ca1e.415b315cb6ea9ab9
+ m: 5ff85bc9535c191f.d3a727d1a705f65d.f9dd4a29f8c093db.56b01a12b0ca1583
+
+VFMADDPD_xmm_src_dst ones
+ before
+r1: 0101010101010101.0101010101010101.0101010101010101.0101010101010101
+r2: 0101010101010101.0101010101010101.0101010101010101.0101010101010101
+r3: 0101010101010101.0101010101010101.0101010101010101.0101010101010101
+r4: 0101010101010101.0101010101010101.0101010101010101.0101010101010101
+ m: 0101010101010101.0101010101010101.0101010101010101.0101010101010101
+ after
+r1: 0101010101010101.0101010101010101.0101010101010101.0101010101010101
+r2: 0101010101010101.0101010101010101.0101010101010101.0101010101010101
+r3: 0101010101010101.0101010101010101.0101010101010101.0101010101010101
+r4: [ ZERO ].[ ZERO ].0101010101010101.0101010101010101
+ m: 0101010101010101.0101010101010101.0101010101010101.0101010101010101
+
+VFMADDPD_xmm_src_dst specialD
+ before
+r1: bff0000000000000.3ff0000000000000.[ -ZERO ].[ ZERO ]
+r2: [ NAN ].[ NAN ].[ -INF ].[ INF ]
+r3: [ -ZERO ].[ ZERO ].[ -SUBNORMAL ].[ SUBNORMAL ]
+r4: [ -INF ].[ INF ].bff0000000000000.3ff0000000000000
+ m: [ -SUBNORMAL ].[ SUBNORMAL ].[ NAN ].[ NAN ]
+ after
+r1: bff0000000000000.3ff0000000000000.[ -ZERO ].[ ZERO ]
+r2: [ NAN ].[ NAN ].[ -INF ].[ INF ]
+r3: [ -ZERO ].[ ZERO ].[ -SUBNORMAL ].[ SUBNORMAL ]
+r4: [ ZERO ].[ ZERO ].[ INF ].[ INF ]
+ m: [ -SUBNORMAL ].[ SUBNORMAL ].[ NAN ].[ NAN ]
+
+VFMADDPD_xmm_src_dst rand
+ before
+r1: 20a1bb92cbc97fe8.542da4983df76c96.d8bc5c6dee699597.398e0039cf03663d
+r2: 6897b536bbe4da8a.369dab4f9465b86e.d182c916cebc2e17.cfaff39be272ef40
+r3: 95264321bf3b68b2.55c2b9e2c95c9810.407b8d9035449b06.f4e06e2205236eb7
+r4: 019963bf7459630b.8d69483df7e8c6a9.81f2a547be8d1811.84ededbc53239dcf
+ m: 0a3e0f7c75cb0842.b95ed64d3b13ff64.f0350ca70523e0e4.5ba1ec54e87d39b3
+ after
+r1: 20a1bb92cbc97fe8.542da4983df76c96.d8bc5c6dee699597.398e0039cf03663d
+r2: 6897b536bbe4da8a.369dab4f9465b86e.d182c916cebc2e17.cfaff39be272ef40
+r3: 95264321bf3b68b2.55c2b9e2c95c9810.407b8d9035449b06.f4e06e2205236eb7
+r4: [ ZERO ].[ ZERO ].d8bc5c6dee699597.398e0039cf03663d
+ m: 0a3e0f7c75cb0842.b95ed64d3b13ff64.f0350ca70523e0e4.5ba1ec54e87d39b3
+
+VFMADDPD_xmm_mem1 ones
+ before
+r1: 0101010101010101.0101010101010101.0101010101010101.0101010101010101
+r2: 0101010101010101.0101010101010101.0101010101010101.0101010101010101
+r3: 0101010101010101.0101010101010101.0101010101010101.0101010101010101
+r4: 0101010101010101.0101010101010101.0101010101010101.0101010101010101
+ m: 0101010101010101.0101010101010101.0101010101010101.0101010101010101
+ after
+r1: 0101010101010101.0101010101010101.0101010101010101.0101010101010101
+r2: 0101010101010101.0101010101010101.0101010101010101.0101010101010101
+r3: 0101010101010101.0101010101010101.0101010101010101.0101010101010101
+r4: [ ZERO ].[ ZERO ].0101010101010101.0101010101010101
+ m: 0101010101010101.0101010101010101.0101010101010101.0101010101010101
+
+VFMADDPD_xmm_mem1 specialD
+ before
+r1: bff0000000000000.3ff0000000000000.[ -ZERO ].[ ZERO ]
+r2: [ NAN ].[ NAN ].[ -INF ].[ INF ]
+r3: [ -ZERO ].[ ZERO ].[ -SUBNORMAL ].[ SUBNORMAL ]
+r4: [ -INF ].[ INF ].bff0000000000000.3ff0000000000000
+ m: [ -SUBNORMAL ].[ SUBNORMAL ].[ NAN ].[ NAN ]
+ after
+r1: bff0000000000000.3ff0000000000000.[ -ZERO ].[ ZERO ]
+r2: [ NAN ].[ NAN ].[ -INF ].[ INF ]
+r3: [ -ZERO ].[ ZERO ].[ -SUBNORMAL ].[ SUBNORMAL ]
+r4: [ ZERO ].[ ZERO ].[ NAN ].[ NAN ]
+ m: [ -SUBNORMAL ].[ SUBNORMAL ].[ NAN ].[ NAN ]
+
+VFMADDPD_xmm_mem1 rand
+ before
+r1: 0a5f45c55f1c9202.b76ddefcb0ebfe6e.e98ebd1ca893312a.54cae7d5e13dfe91
+r2: 5f490104ced83ff8.6262dd37727c80f3.c84ab71340684590.4d325b2d5a70a792
+r3: 63483da65c8c49d0.96084deb9ed0411e.e9b5f3f66b2e58c1.21a6c3476d21f1e5
+r4: 73a8f718a8c3ec35.2e2dac0350f6fd1c.a81b6e33c572a86a.acf29b0f395c98b4
+ m: ecb42ac54b0966d4.089b756aa3f77018.61c82534e9bf6f37.c9e25f72d82e582b
+ after
+r1: 0a5f45c55f1c9202.b76ddefcb0ebfe6e.e98ebd1ca893312a.54cae7d5e13dfe91
+r2: 5f490104ced83ff8.6262dd37727c80f3.c84ab71340684590.4d325b2d5a70a792
+r3: 63483da65c8c49d0.96084deb9ed0411e.e9b5f3f66b2e58c1.21a6c3476d21f1e5
+r4: [ ZERO ].[ ZERO ].721253d095545e3c.c9e25f72d82e582b
+ m: ecb42ac54b0966d4.089b756aa3f77018.61c82534e9bf6f37.c9e25f72d82e582b
+
+VFMADDPD_xmm_mem2 ones
+ before
+r1: 0101010101010101.0101010101010101.0101010101010101.0101010101010101
+r2: 0101010101010101.0101010101010101.0101010101010101.0101010101010101
+r3: 0101010101010101.0101010101010101.0101010101010101.0101010101010101
+r4: 0101010101010101.0101010101010101.0101010101010101.0101010101010101
+ m: 0101010101010101.0101010101010101.0101010101010101.0101010101010101
+ after
+r1: 0101010101010101.0101010101010101.0101010101010101.0101010101010101
+r2: 0101010101010101.0101010101010101.0101010101010101.0101010101010101
+r3: 0101010101010101.0101010101010101.0101010101010101.0101010101010101
+r4: [ ZERO ].[ ZERO ].0101010101010101.0101010101010101
+ m: 0101010101010101.0101010101010101.0101010101010101.0101010101010101
+
+VFMADDPD_xmm_mem2 specialD
+ before
+r1: bff0000000000000.3ff0000000000000.[ -ZERO ].[ ZERO ]
+r2: [ NAN ].[ NAN ].[ -INF ].[ INF ]
+r3: [ -ZERO ].[ ZERO ].[ -SUBNORMAL ].[ SUBNORMAL ]
+r4: [ -INF ].[ INF ].bff0000000000000.3ff0000000000000
+ m: [ -SUBNORMAL ].[ SUBNORMAL ].[ NAN ].[ NAN ]
+ after
+r1: bff0000000000000.3ff0000000000000.[ -ZERO ].[ ZERO ]
+r2: [ NAN ].[ NAN ].[ -INF ].[ INF ]
+r3: [ -ZERO ].[ ZERO ].[ -SUBNORMAL ].[ SUBNORMAL ]
+r4: [ ZERO ].[ ZERO ].[ NAN ].[ NAN ]
+ m: [ -SUBNORMAL ].[ SUBNORMAL ].[ NAN ].[ NAN ]
+
+VFMADDPD_xmm_mem2 rand
+ before
+r1: 28bad218e4ebf159.ff1f240eb3e1553f.6f07136773a2ead3.56428c5a66a2ec77
+r2: 8404eb7f0cf4ca6f.ee8536da9dbf68bc.3026343700a654eb.2ddd9db4ffc411c4
+r3: 5cdf726562b02dc2.b39925ba7d9d67bc.ff6f850f2c57ea2a.2c810e6dc1a1833d
+r4: 0c9761367fac55ff.28276f9a6e880c6b.372f015d9242e83d.2ef85b6fc544fd0f
+ m: f078b65e01737fd2.2bfa8f668c8b14f4.36b2a38dcef18acf.0e0f01a829ba3c66
+ after
+r1: 28bad218e4ebf159.ff1f240eb3e1553f.6f07136773a2ead3.56428c5a66a2ec77
+r2: 8404eb7f0cf4ca6f.ee8536da9dbf68bc.3026343700a654eb.2ddd9db4ffc411c4
+r3: 5cdf726562b02dc2.b39925ba7d9d67bc.ff6f850f2c57ea2a.2c810e6dc1a1833d
+r4: [ ZERO ].[ ZERO ].f6325bf1fc5cab6d.2ddd9db4ffc411c4
+ m: f078b65e01737fd2.2bfa8f668c8b14f4.36b2a38dcef18acf.0e0f01a829ba3c66
+
+VFMADDPS_xmm ones
+ before
+r1: 01010101.01010101.01010101.01010101.01010101.01010101.01010101.01010101
+r2: 01010101.01010101.01010101.01010101.01010101.01010101.01010101.01010101
+r3: 01010101.01010101.01010101.01010101.01010101.01010101.01010101.01010101
+r4: 01010101.01010101.01010101.01010101.01010101.01010101.01010101.01010101
+ m: 01010101.01010101.01010101.01010101.01010101.01010101.01010101.01010101
+ after
+r1: 01010101.01010101.01010101.01010101.01010101.01010101.01010101.01010101
+r2: 01010101.01010101.01010101.01010101.01010101.01010101.01010101.01010101
+r3: 01010101.01010101.01010101.01010101.01010101.01010101.01010101.01010101
+r4: [ ZERO ].[ ZERO ].[ ZERO ].[ ZERO ].01010101.01010101.01010101.01010101
+ m: 01010101.01010101.01010101.01010101.01010101.01010101.01010101.01010101
+
+VFMADDPS_xmm specialF
+ before
+r1: [ NAN ].[ NAN ].[ -INF ].[ INF ].bf800000.3f800000.[-ZERO ].[ ZERO ]
+r2: [ -INF ].[ INF ].bf800000.3f800000.[-ZERO ].[ ZERO ].[-ZERO ].[ ZERO ]
+r3: bf800000.3f800000.[-ZERO ].[ ZERO ].[-ZERO ].[ ZERO ].[ NAN ].[ NAN ]
+r4: [-ZERO ].[ ZERO ].[-ZERO ].[ ZERO ].[ NAN ].[ NAN ].[ -INF ].[ INF ]
+ m: [-ZERO ].[ ZERO ].[ NAN ].[ NAN ].[ -INF ].[ INF ].bf800000.3f800000
+ after
+r1: [ NAN ].[ NAN ].[ -INF ].[ INF ].bf800000.3f800000.[-ZERO ].[ ZERO ]
+r2: [ -INF ].[ INF ].bf800000.3f800000.[-ZERO ].[ ZERO ].[-ZERO ].[ ZERO ]
+r3: bf800000.3f800000.[-ZERO ].[ ZERO ].[-ZERO ].[ ZERO ].[ NAN ].[ NAN ]
+r4: [ ZERO ].[ ZERO ].[ ZERO ].[ ZERO ].bf800000.3f800000.[ NAN ].[ NAN ]
+ m: [-ZERO ].[ ZERO ].[ NAN ].[ NAN ].[ -INF ].[ INF ].bf800000.3f800000
+
+VFMADDPS_xmm rand
+ before
+r1: 65ce6d49.8492e7e7.96df010b.f4b23b84.57436a09.7df30b8d.aa927a03.090dfc6d
+r2: c5e48064.a393c8e9.47a34273.c10a3c47.f5304f3e.3ad1a923.dc4c446c.[-SUBNR]
+r3: 6d08ed19.fa045f84.1810cd8c.109ed568.6ec34f98.a2199d3c.810bdacf.ab80ee3d
+r4: b984aed6.2671e865.e6f21d40.fc7bc013.1c4a6784.50562685.769ab818.a5b7985e
+ m: 05a5c205.c3659f38.8e17b17d.a2acb976.5d0f926c.e1157eaa.95c45b33.8afcb3df
+ after
+r1: 65ce6d49.8492e7e7.96df010b.f4b23b84.57436a09.7df30b8d.aa927a03.090dfc6d
+r2: c5e48064.a393c8e9.47a34273.c10a3c47.f5304f3e.3ad1a923.dc4c446c.[-SUBNR]
+r3: 6d08ed19.fa045f84.1810cd8c.109ed568.6ec34f98.a2199d3c.810bdacf.ab80ee3d
+r4: [ ZERO ].[ ZERO ].[ ZERO ].[ ZERO ].[ -INF ].7df30b8d.aa927a03.090dfc6d
+ m: 05a5c205.c3659f38.8e17b17d.a2acb976.5d0f926c.e1157eaa.95c45b33.8afcb3df
+
+VFMADDPS_xmm_src_dst ones
+ before
+r1: 01010101.01010101.01010101.01010101.01010101.01010101.01010101.01010101
+r2: 01010101.01010101.01010101.01010101.01010101.01010101.01010101.01010101
+r3: 01010101.01010101.01010101.01010101.01010101.01010101.01010101.01010101
+r4: 01010101.01010101.01010101.01010101.01010101.01010101.01010101.01010101
+ m: 01010101.01010101.01010101.01010101.01010101.01010101.01010101.01010101
+ after
+r1: 01010101.01010101.01010101.01010101.01010101.01010101.01010101.01010101
+r2: 01010101.01010101.01010101.01010101.01010101.01010101.01010101.01010101
+r3: 01010101.01010101.01010101.01010101.01010101.01010101.01010101.01010101
+r4: [ ZERO ].[ ZERO ].[ ZERO ].[ ZERO ].01010101.01010101.01010101.01010101
+ m: 01010101.01010101.01010101.01010101.01010101.01010101.01010101.01010101
+
+VFMADDPS_xmm_src_dst specialF
+ before
+r1: [ NAN ].[ NAN ].[ -INF ].[ INF ].bf800000.3f800000.[-ZERO ].[ ZERO ]
+r2: [ -INF ].[ INF ].bf800000.3f800000.[-ZERO ].[ ZERO ].[-ZERO ].[ ZERO ]
+r3: bf800000.3f800000.[-ZERO ].[ ZERO ].[-ZERO ].[ ZERO ].[ NAN ].[ NAN ]
+r4: [-ZERO ].[ ZERO ].[-ZERO ].[ ZERO ].[ NAN ].[ NAN ].[ -INF ].[ INF ]
+ m: [-ZERO ].[ ZERO ].[ NAN ].[ NAN ].[ -INF ].[ INF ].bf800000.3f800000
+ after
+r1: [ NAN ].[ NAN ].[ -INF ].[ INF ].bf800000.3f800000.[-ZERO ].[ ZERO ]
+r2: [ -INF ].[ INF ].bf800000.3f800000.[-ZERO ].[ ZERO ].[-ZERO ].[ ZERO ]
+r3: bf800000.3f800000.[-ZERO ].[ ZERO ].[-ZERO ].[ ZERO ].[ NAN ].[ NAN ]
+r4: [ ZERO ].[ ZERO ].[ ZERO ].[ ZERO ].[ NAN ].[ NAN ].[ NAN ].[ NAN ]
+ m: [-ZERO ].[ ZERO ].[ NAN ].[ NAN ].[ -INF ].[ INF ].bf800000.3f800000
+
+VFMADDPS_xmm_src_dst rand
+ before
+r1: acb72214.6c6cbfa9.ea4a022e.1d3d7dbb.8b5fccbe.f0e1e256.bc563e0c.775bfaed
+r2: 0c05cb6e.bd128663.d7568e3e.8a3ac80e.048612e5.1a468e36.c51cdd8f.87e12ab4
+r3: 80ddba7e.53e42d12.3208cf9b.04b0569c.22cf5e4c.fad1bdf5.8de2b4a9.d799ff5f
+r4: 6489eab2.c96df363.d52c4330.a7aae391.4288ae61.2c0dad40.f0733f44.8390351b
+ m: 14575775.bc3a1202.9d8e66ea.90352a18.c1fbfd8f.4d8698c2.cb9dfb4e.a5d18713
+ after
+r1: acb72214.6c6cbfa9.ea4a022e.1d3d7dbb.8b5fccbe.f0e1e256.bc563e0c.775bfaed
+r2: 0c05cb6e.bd128663.d7568e3e.8a3ac80e.048612e5.1a468e36.c51cdd8f.87e12ab4
+r3: 80ddba7e.53e42d12.3208cf9b.04b0569c.22cf5e4c.fad1bdf5.8de2b4a9.d799ff5f
+r4: [ ZERO ].[ ZERO ].[ ZERO ].[ ZERO ].8b5eae69.f0e1e256.76150d13.775bfaed
+ m: 14575775.bc3a1202.9d8e66ea.90352a18.c1fbfd8f.4d8698c2.cb9dfb4e.a5d18713
+
+VFMADDPS_xmm_mem1 ones
+ before
+r1: 01010101.01010101.01010101.01010101.01010101.01010101.01010101.01010101
+r2: 01010101.01010101.01010101.01010101.01010101.01010101.01010101.01010101
+r3: 01010101.01010101.01010101.01010101.01010101.01010101.01010101.01010101
+r4: 01010101.01010101.01010101.01010101.01010101.01010101.01010101.01010101
+ m: 01010101.01010101.01010101.01010101.01010101.01010101.01010101.01010101
+ after
+r1: 01010101.01010101.01010101.01010101.01010101.01010101.01010101.01010101
+r2: 01010101.01010101.01010101.01010101.01010101.01010101.01010101.01010101
+r3: 01010101.01010101.01010101.01010101.01010101.01010101.01010101.01010101
+r4: [ ZERO ].[ ZERO ].[ ZERO ].[ ZERO ].01010101.01010101.01010101.01010101
+ m: 01010101.01010101.01010101.01010101.01010101.01010101.01010101.01010101
+
+VFMADDPS_xmm_mem1 specialF
+ before
+r1: [ NAN ].[ NAN ].[ -INF ].[ INF ].bf800000.3f800000.[-ZERO ].[ ZERO ]
+r2: [ -INF ].[ INF ].bf800000.3f800000.[-ZERO ].[ ZERO ].[-ZERO ].[ ZERO ]
+r3: bf800000.3f800000.[-ZERO ].[ ZERO ].[-ZERO ].[ ZERO ].[ NAN ].[ NAN ]
+r4: [-ZERO ].[ ZERO ].[-ZERO ].[ ZERO ].[ NAN ].[ NAN ].[ -INF ].[ INF ]
+ m: [-ZERO ].[ ZERO ].[ NAN ].[ NAN ].[ -INF ].[ INF ].bf800000.3f800000
+ after
+r1: [ NAN ].[ NAN ].[ -INF ].[ INF ].bf800000.3f800000.[-ZERO ].[ ZERO ]
+r2: [ -INF ].[ INF ].bf800000.3f800000.[-ZERO ].[ ZERO ].[-ZERO ].[ ZERO ]
+r3: bf800000.3f800000.[-ZERO ].[ ZERO ].[-ZERO ].[ ZERO ].[ NAN ].[ NAN ]
+r4: [ ZERO ].[ ZERO ].[ ZERO ].[ ZERO ].[ -INF ].[ INF ].[ NAN ].[ NAN ]
+ m: [-ZERO ].[ ZERO ].[ NAN ].[ NAN ].[ -INF ].[ INF ].bf800000.3f800000
+
+VFMADDPS_xmm_mem1 rand
+ before
+r1: ec91fe34.c7d6c79a.66fab2b3.db5ce85e.f9754842.f9c9ba28.f82a63b1.5c68b274
+r2: 4784d959.87cd4ed8.0c3ca578.a32bd88e.474289e7.cb61501e.54e7f35b.c162726a
+r3: 837be651.97abe268.6b1fba26.04afb8d5.08aebee8.5fda964f.bba02737.f3c98220
+r4: fbc42088.94fdc0f5.5f706da7.1bf2425f.9605e2b2.52c1c868.09217c31.0baca0c3
+ m: 0aaa836b.194e242c.c5fc3ae9.04033357.4e92f1b2.40a12214.1a366d35.2714867e
+ after
+r1: ec91fe34.c7d6c79a.66fab2b3.db5ce85e.f9754842.f9c9ba28.f82a63b1.5c68b274
+r2: 4784d959.87cd4ed8.0c3ca578.a32bd88e.474289e7.cb61501e.54e7f35b.c162726a
+r3: 837be651.97abe268.6b1fba26.04afb8d5.08aebee8.5fda964f.bba02737.f3c98220
+r4: [ ZERO ].[ ZERO ].[ ZERO ].[ ZERO ].4e92f1b2.ebc06284.d1111ba1.75b23ef0
+ m: 0aaa836b.194e242c.c5fc3ae9.04033357.4e92f1b2.40a12214.1a366d35.2714867e
+
+VFMADDPS_xmm_mem2 ones
+ before
+r1: 01010101.01010101.01010101.01010101.01010101.01010101.01010101.01010101
+r2: 01010101.01010101.01010101.01010101.01010101.01010101.01010101.01010101
+r3: 01010101.01010101.01010101.01010101.01010101.01010101.01010101.01010101
+r4: 01010101.01010101.01010101.01010101.01010101.01010101.01010101.01010101
+ m: 01010101.01010101.01010101.01010101.01010101.01010101.01010101.01010101
+ after
+r1: 01010101.01010101.01010101.01010101.01010101.01010101.01010101.01010101
+r2: 01010101.01010101.01010101.01010101.01010101.01010101.01010101.01010101
+r3: 01010101.01010101.01010101.01010101.01010101.01010101.01010101.01010101
+r4: [ ZERO ].[ ZERO ].[ ZERO ].[ ZERO ].01010101.01010101.01010101.01010101
+ m: 01010101.01010101.01010101.01010101.01010101.01010101.01010101.01010101
+
+VFMADDPS_xmm_mem2 specialF
+ before
+r1: [ NAN ].[ NAN ].[ -INF ].[ INF ].bf800000.3f800000.[-ZERO ].[ ZERO ]
+r2: [ -INF ].[ INF ].bf800000.3f800000.[-ZERO ].[ ZERO ].[-ZERO ].[ ZERO ]
+r3: bf800000.3f800000.[-ZERO ].[ ZERO ].[-ZERO ].[ ZERO ].[ NAN ].[ NAN ]
+r4: [-ZERO ].[ ZERO ].[-ZERO ].[ ZERO ].[ NAN ].[ NAN ].[ -INF ].[ INF ]
+ m: [-ZERO ].[ ZERO ].[ NAN ].[ NAN ].[ -INF ].[ INF ].bf800000.3f800000
+ after
+r1: [ NAN ].[ NAN ].[ -INF ].[ INF ].bf800000.3f800000.[-ZERO ].[ ZERO ]
+r2: [ -INF ].[ INF ].bf800000.3f800000.[-ZERO ].[ ZERO ].[-ZERO ].[ ZERO ]
+r3: bf800000.3f800000.[-ZERO ].[ ZERO ].[-ZERO ].[ ZERO ].[ NAN ].[ NAN ]
+r4: [ ZERO ].[ ZERO ].[ ZERO ].[ ZERO ].[ NAN ].[ NAN ].[ NAN ].[ NAN ]
+ m: [-ZERO ].[ ZERO ].[ NAN ].[ NAN ].[ -INF ].[ INF ].bf800000.3f800000
+
+VFMADDPS_xmm_mem2 rand
+ before
+r1: 0e780c65.c22b4ab8.778d9ed6.d9eb46ea.8ca3e752.c306df00.caab752f.630ff07e
+r2: 627bb6e1.2d1f6d46.51ef145c.b9b83843.ac82c100.7a7d3cd8.f54b130c.daa89cef
+r3: 61ff7d4d.f3b6ca81.31f01866.bd76c58f.0a7c7a27.fe917447.77e3c0b6.a9ec44fc
+r4: 69505d14.b27d9d16.f25b26e0.042fa9fa.02dd0e32.eecfc5fa.2c3ffa1a.ebe6a4d2
+ m: d4ba52a2.06ff21b1.70fbbab6.a7f19faf.f0f1798f.e3c1699c.f02b3b25.bca27a9c
+ after
+r1: 0e780c65.c22b4ab8.778d9ed6.d9eb46ea.8ca3e752.c306df00.caab752f.630ff07e
+r2: 627bb6e1.2d1f6d46.51ef145c.b9b83843.ac82c100.7a7d3cd8.f54b130c.daa89cef
+r3: 61ff7d4d.f3b6ca81.31f01866.bd76c58f.0a7c7a27.fe917447.77e3c0b6.a9ec44fc
+r4: [ ZERO ].[ ZERO ].[ ZERO ].[ ZERO ].bbee26e1.[ INF ].[ -INF ].daa89cef
+ m: d4ba52a2.06ff21b1.70fbbab6.a7f19faf.f0f1798f.e3c1699c.f02b3b25.bca27a9c
+
+VFMADDSD_xmm ones
+ before
+r1: 0101010101010101.0101010101010101.0101010101010101.0101010101010101
+r2: 0101010101010101.0101010101010101.0101010101010101.0101010101010101
+r3: 0101010101010101.0101010101010101.0101010101010101.0101010101010101
+r4: 0101010101010101.0101010101010101.0101010101010101.0101010101010101
+ m: 0101010101010101.0101010101010101.0101010101010101.0101010101010101
+ after
+r1: 0101010101010101.0101010101010101.0101010101010101.0101010101010101
+r2: 0101010101010101.0101010101010101.0101010101010101.0101010101010101
+r3: 0101010101010101.0101010101010101.0101010101010101.0101010101010101
+r4: [ ZERO ].[ ZERO ].[ ZERO ].0101010101010101
+ m: 0101010101010101.0101010101010101.0101010101010101.0101010101010101
+
+VFMADDSD_xmm specialD
+ before
+r1: bff0000000000000.3ff0000000000000.[ -ZERO ].[ ZERO ]
+r2: [ NAN ].[ NAN ].[ -INF ].[ INF ]
+r3: [ -ZERO ].[ ZERO ].[ -SUBNORMAL ].[ SUBNORMAL ]
+r4: [ -INF ].[ INF ].bff0000000000000.3ff0000000000000
+ m: [ -SUBNORMAL ].[ SUBNORMAL ].[ NAN ].[ NAN ]
+ after
+r1: bff0000000000000.3ff0000000000000.[ -ZERO ].[ ZERO ]
+r2: [ NAN ].[ NAN ].[ -INF ].[ INF ]
+r3: [ -ZERO ].[ ZERO ].[ -SUBNORMAL ].[ SUBNORMAL ]
+r4: [ ZERO ].[ ZERO ].[ ZERO ].[ INF ]
+ m: [ -SUBNORMAL ].[ SUBNORMAL ].[ NAN ].[ NAN ]
+
+VFMADDSD_xmm rand
+ before
+r1: 0088596389c893fd.879d51d4c5c764db.3004b7a97cf69dda.9f7301c1392d8087
+r2: 47086cc3da642fa7.130d662777beb4a9.1e61c5ec52f79c60.15e3c8dc7e9273bf
+r3: 0784892e9360315b.f0177599dbe14b46.16559ec50352a3d9.2d460a61a5dd0f6f
+r4: 9a49ac115048d4c4.f987fa170d3ce4dd.742c3e9e2b92eef2.c569453ccd1b0fc4
+ m: 5da3cfd6aea6558e.0c28728e28dc3c9c.9432a2e46543b956.b819f459105730e9
+ after
+r1: 0088596389c893fd.879d51d4c5c764db.3004b7a97cf69dda.9f7301c1392d8087
+r2: 47086cc3da642fa7.130d662777beb4a9.1e61c5ec52f79c60.15e3c8dc7e9273bf
+r3: 0784892e9360315b.f0177599dbe14b46.16559ec50352a3d9.2d460a61a5dd0f6f
+r4: [ ZERO ].[ ZERO ].[ ZERO ].9f7301c1392d8087
+ m: 5da3cfd6aea6558e.0c28728e28dc3c9c.9432a2e46543b956.b819f459105730e9
+
+VFMADDSD_xmm_src_dst ones
+ before
+r1: 0101010101010101.0101010101010101.0101010101010101.0101010101010101
+r2: 0101010101010101.0101010101010101.0101010101010101.0101010101010101
+r3: 0101010101010101.0101010101010101.0101010101010101.0101010101010101
+r4: 0101010101010101.0101010101010101.0101010101010101.0101010101010101
+ m: 0101010101010101.0101010101010101.0101010101010101.0101010101010101
+ after
+r1: 0101010101010101.0101010101010101.0101010101010101.0101010101010101
+r2: 0101010101010101.0101010101010101.0101010101010101.0101010101010101
+r3: 0101010101010101.0101010101010101.0101010101010101.0101010101010101
+r4: [ ZERO ].[ ZERO ].[ ZERO ].0101010101010101
+ m: 0101010101010101.0101010101010101.0101010101010101.0101010101010101
+
+VFMADDSD_xmm_src_dst specialD
+ before
+r1: bff0000000000000.3ff0000000000000.[ -ZERO ].[ ZERO ]
+r2: [ NAN ].[ NAN ].[ -INF ].[ INF ]
+r3: [ -ZERO ].[ ZERO ].[ -SUBNORMAL ].[ SUBNORMAL ]
+r4: [ -INF ].[ INF ].bff0000000000000.3ff0000000000000
+ m: [ -SUBNORMAL ].[ SUBNORMAL ].[ NAN ].[ NAN ]
+ after
+r1: bff0000000000000.3ff0000000000000.[ -ZERO ].[ ZERO ]
+r2: [ NAN ].[ NAN ].[ -INF ].[ INF ]
+r3: [ -ZERO ].[ ZERO ].[ -SUBNORMAL ].[ SUBNORMAL ]
+r4: [ ZERO ].[ ZERO ].[ ZERO ].[ INF ]
+ m: [ -SUBNORMAL ].[ SUBNORMAL ].[ NAN ].[ NAN ]
+
+VFMADDSD_xmm_src_dst rand
+ before
+r1: adddf0eb4808f067.04c857e949cc0fac.d2b3c4044ef23fb2.e22093a48a9d2e0b
+r2: e4450ababbfae0f9.bc3127138b19183c.89fba268812abdb2.1e4a9e0958fac555
+r3: 5f2619b1a20662f0.12305efa0acd1475.1755377e9a786f01.4a6592749579b0f4
+r4: 7acb193b9abab2f9.e1917689e3f6bf86.d70f7fb13667914c.413cead25e27ac14
+ m: 918107c43ea20cc0.0420edac31a0d599.2573776df1835e3e.de9a220dce0e75e0
+ after
+r1: adddf0eb4808f067.04c857e949cc0fac.d2b3c4044ef23fb2.e22093a48a9d2e0b
+r2: e4450ababbfae0f9.bc3127138b19183c.89fba268812abdb2.1e4a9e0958fac555
+r3: 5f2619b1a20662f0.12305efa0acd1475.1755377e9a786f01.4a6592749579b0f4
+r4: [ ZERO ].[ ZERO ].[ ZERO ].e22093a48a9d2e0b
+ m: 918107c43ea20cc0.0420edac31a0d599.2573776df1835e3e.de9a220dce0e75e0
+
+VFMADDSD_xmm_mem1 ones
+ before
+r1: 0101010101010101.0101010101010101.0101010101010101.0101010101010101
+r2: 0101010101010101.0101010101010101.0101010101010101.0101010101010101
+r3: 0101010101010101.0101010101010101.0101010101010101.0101010101010101
+r4: 0101010101010101.0101010101010101.0101010101010101.0101010101010101
+ m: 0101010101010101.0101010101010101.0101010101010101.0101010101010101
+ after
+r1: 0101010101010101.0101010101010101.0101010101010101.0101010101010101
+r2: 0101010101010101.0101010101010101.0101010101010101.0101010101010101
+r3: 0101010101010101.0101010101010101.0101010101010101.0101010101010101
+r4: [ ZERO ].[ ZERO ].[ ZERO ].0101010101010101
+ m: 0101010101010101.0101010101010101.0101010101010101.0101010101010101
+
+VFMADDSD_xmm_mem1 specialD
+ before
+r1: bff0000000000000.3ff0000000000000.[ -ZERO ].[ ZERO ]
+r2: [ NAN ].[ NAN ].[ -INF ].[ INF ]
+r3: [ -ZERO ].[ ZERO ].[ -SUBNORMAL ].[ SUBNORMAL ]
+r4: [ -INF ].[ INF ].bff0000000000000.3ff0000000000000
+ m: [ -SUBNORMAL ].[ SUBNORMAL ].[ NAN ].[ NAN ]
+ after
+r1: bff0000000000000.3ff0000000000000.[ -ZERO ].[ ZERO ]
+r2: [ NAN ].[ NAN ].[ -INF ].[ INF ]
+r3: [ -ZERO ].[ ZERO ].[ -SUBNORMAL ].[ SUBNORMAL ]
+r4: [ ZERO ].[ ZERO ].[ ZERO ].[ NAN ]
+ m: [ -SUBNORMAL ].[ SUBNORMAL ].[ NAN ].[ NAN ]
+
+VFMADDSD_xmm_mem1 rand
+ before
+r1: 0194ddb82b49abf0.59a93d4f11d611db.5cce191e65591384.ff4cb613013cc685
+r2: 24509983fc3bcc36.baf7e45e9fa43077.da6c63303173ecc9.7e1e22cf15bd5c2f
+r3: 570037914d04ab3d.05d75ec6f616ee9a.fa99500fef6024ba.39dce32c239cf309
+r4: f6f2b14fbb3184b2.141625713239066f.17a0dc273ba9f803.0a52741849e54740
+ m: 5d700527e24d9241.c57eb74d70183523.8fcf04e5b2dca44f.cf4c517ea3a413ff
+ after
+r1: 0194ddb82b49abf0.59a93d4f11d611db.5cce191e65591384.ff4cb613013cc685
+r2: 24509983fc3bcc36.baf7e45e9fa43077.da6c63303173ecc9.7e1e22cf15bd5c2f
+r3: 570037914d04ab3d.05d75ec6f616ee9a.fa99500fef6024ba.39dce32c239cf309
+r4: [ ZERO ].[ ZERO ].[ ZERO ].780b3465b16e86e6
+ m: 5d700527e24d9241.c57eb74d70183523.8fcf04e5b2dca44f.cf4c517ea3a413ff
+
+VFMADDSD_xmm_mem2 ones
+ before
+r1: 0101010101010101.0101010101010101.0101010101010101.0101010101010101
+r2: 0101010101010101.0101010101010101.0101010101010101.0101010101010101
+r3: 0101010101010101.0101010101010101.0101010101010101.0101010101010101
+r4: 0101010101010101.0101010101010101.0101010101010101.0101010101010101
+ m: 0101010101010101.0101010101010101.0101010101010101.0101010101010101
+ after
+r1: 0101010101010101.0101010101010101.0101010101010101.0101010101010101
+r2: 0101010101010101.0101010101010101.0101010101010101.0101010101010101
+r3: 0101010101010101.0101010101010101.0101010101010101.0101010101010101
+r4: [ ZERO ].[ ZERO ].[ ZERO ].0101010101010101
+ m: 0101010101010101.0101010101010101.0101010101010101.0101010101010101
+
+VFMADDSD_xmm_mem2 specialD
+ before
+r1: bff0000000000000.3ff0000000000000.[ -ZERO ].[ ZERO ]
+r2: [ NAN ].[ NAN ].[ -INF ].[ INF ]
+r3: [ -ZERO ].[ ZERO ].[ -SUBNORMAL ].[ SUBNORMAL ]
+r4: [ -INF ].[ INF ].bff0000000000000.3ff0000000000000
+ m: [ -SUBNORMAL ].[ SUBNORMAL ].[ NAN ].[ NAN ]
+ after
+r1: bff0000000000000.3ff0000000000000.[ -ZERO ].[ ZERO ]
+r2: [ NAN ].[ NAN ].[ -INF ].[ INF ]
+r3: [ -ZERO ].[ ZERO ].[ -SUBNORMAL ].[ SUBNORMAL ]
+r4: [ ZERO ].[ ZERO ].[ ZERO ].[ NAN ]
+ m: [ -SUBNORMAL ].[ SUBNORMAL ].[ NAN ].[ NAN ]
+
+VFMADDSD_xmm_mem2 rand
+ before
+r1: e8c72e865de41295.f2db8f44cbbf37e2.bc70c3b3ef84644b.6295f64a4ce61473
+r2: f34428d9c8833f5b.78fb29445f3bc8d7.fcd015ff8f2e73a3.a0fae06860b606c7
+r3: da30ef8bc0b5573e.34a901384a97a32f.a93bf6332d650e02.66478ac4fc21a428
+r4: f9da7f07e00794eb.00b0940ba5e08516.20fd62bd65b57115.8e48704b3c31abc2
+ m: ac8dd5bbc503330e.b9dd5dab8e212ab7.be625608d5abd787.f5c90ee73af5d7c0
+ after
+r1: e8c72e865de41295.f2db8f44cbbf37e2.bc70c3b3ef84644b.6295f64a4ce61473
+r2: f34428d9c8833f5b.78fb29445f3bc8d7.fcd015ff8f2e73a3.a0fae06860b606c7
+r3: da30ef8bc0b5573e.34a901384a97a32f.a93bf6332d650e02.66478ac4fc21a428
+r4: [ ZERO ].[ ZERO ].[ ZERO ].[ -INF ]
+ m: ac8dd5bbc503330e.b9dd5dab8e212ab7.be625608d5abd787.f5c90ee73af5d7c0
+
+VFMADDSS_xmm ones
+ before
+r1: 01010101.01010101.01010101.01010101.01010101.01010101.01010101.01010101
+r2: 01010101.01010101.01010101.01010101.01010101.01010101.01010101.01010101
+r3: 01010101.01010101.01010101.01010101.01010101.01010101.01010101.01010101
+r4: 01010101.01010101.01010101.01010101.01010101.01010101.01010101.01010101
+ m: 01010101.01010101.01010101.01010101.01010101.01010101.01010101.01010101
+ after
+r1: 01010101.01010101.01010101.01010101.01010101.01010101.01010101.01010101
+r2: 01010101.01010101.01010101.01010101.01010101.01010101.01010101.01010101
+r3: 01010101.01010101.01010101.01010101.01010101.01010101.01010101.01010101
+r4: [ ZERO ].[ ZERO ].[ ZERO ].[ ZERO ].[ ZERO ].[ ZERO ].[ ZERO ].01010101
+ m: 01010101.01010101.01010101.01010101.01010101.01010101.01010101.01010101
+
+VFMADDSS_xmm specialF
+ before
+r1: [ NAN ].[ NAN ].[ -INF ].[ INF ].bf800000.3f800000.[-ZERO ].[ ZERO ]
+r2: [ -INF ].[ INF ].bf800000.3f800000.[-ZERO ].[ ZERO ].[-ZERO ].[ ZERO ]
+r3: bf800000.3f800000.[-ZERO ].[ ZERO ].[-ZERO ].[ ZERO ].[ NAN ].[ NAN ]
+r4: [-ZERO ].[ ZERO ].[-ZERO ].[ ZERO ].[ NAN ].[ NAN ].[ -INF ].[ INF ]
+ m: [-ZERO ].[ ZERO ].[ NAN ].[ NAN ].[ -INF ].[ INF ].bf800000.3f800000
+ after
+r1: [ NAN ].[ NAN ].[ -INF ].[ INF ].bf800000.3f800000.[-ZERO ].[ ZERO ]
+r2: [ -INF ].[ INF ].bf800000.3f800000.[-ZERO ].[ ZERO ].[-ZERO ].[ ZERO ]
+r3: bf800000.3f800000.[-ZERO ].[ ZERO ].[-ZERO ].[ ZERO ].[ NAN ].[ NAN ]
+r4: [ ZERO ].[ ZERO ].[ ZERO ].[ ZERO ].[ ZERO ].[ ZERO ].[ ZERO ].[ NAN ]
+ m: [-ZERO ].[ ZERO ].[ NAN ].[ NAN ].[ -INF ].[ INF ].bf800000.3f800000
+
+VFMADDSS_xmm rand
+ before
+r1: 4e94ec12.0b386f52.3bfcd803.21664d3e.ddb5cd80.16d27d05.7796e086.1576e44f
+r2: 3d3cc078.4c2f8563.63d98100.79bbabd9.db43c391.c6b69f3a.f17a6312.e7c28d9a
+r3: d4d14e59.2776b1ef.0b40d58c.b22d00b1.125934a7.81e479d3.3d431279.cce48fce
+r4: 6f9f9022.35982fa0.10fd4e94.e9c808f5.df411d2e.e2e7467c.38bb69a6.e1e9a617
+ m: 69f2843d.15223a22.4edb6a05.3a967ecf.9e477892.854b43e0.beafe485.41dc8da0
+ after
+r1: 4e94ec12.0b386f52.3bfcd803.21664d3e.ddb5cd80.16d27d05.7796e086.1576e44f
+r2: 3d3cc078.4c2f8563.63d98100.79bbabd9.db43c391.c6b69f3a.f17a6312.e7c28d9a
+r3: d4d14e59.2776b1ef.0b40d58c.b22d00b1.125934a7.81e479d3.3d431279.cce48fce
+r4: [ ZERO ].[ ZERO ].[ ZERO ].[ ZERO ].[ ZERO ].[ ZERO ].[ ZERO ].752db367
+ m: 69f2843d.15223a22.4edb6a05.3a967ecf.9e477892.854b43e0.beafe485.41dc8da0
+
+VFMADDSS_xmm_src_dst ones
+ before
+r1: 01010101.01010101.01010101.01010101.01010101.01010101.01010101.01010101
+r2: 01010101.01010101.01010101.01010101.01010101.01010101.01010101.01010101
+r3: 01010101.01010101.01010101.01010101.01010101.01010101.01010101.01010101
+r4: 01010101.01010101.01010101.01010101.01010101.01010101.01010101.01010101
+ m: 01010101.01010101.01010101.01010101.01010101.01010101.01010101.01010101
+ after
+r1: 01010101.01010101.01010101.01010101.01010101.01010101.01010101.01010101
+r2: 01010101.01010101.01010101.01010101.01010101.01010101.01010101.01010101
+r3: 01010101.01010101.01010101.01010101.01010101.01010101.01010101.01010101
+r4: [ ZERO ].[ ZERO ].[ ZERO ].[ ZERO ].[ ZERO ].[ ZERO ].[ ZERO ].01010101
+ m: 01010101.01010101.01010101.01010101.01010101.01010101.01010101.01010101
+
+VFMADDSS_xmm_src_dst specialF
+ before
+r1: [ NAN ].[ NAN ].[ -INF ].[ INF ].bf800000.3f800000.[-ZERO ].[ ZERO ]
+r2: [ -INF ].[ INF ].bf800000.3f800000.[-ZERO ].[ ZERO ].[-ZERO ].[ ZERO ]
+r3: bf800000.3f800000.[-ZERO ].[ ZERO ].[-ZERO ].[ ZERO ].[ NAN ].[ NAN ]
+r4: [-ZERO ].[ ZERO ].[-ZERO ].[ ZERO ].[ NAN ].[ NAN ].[ -INF ].[ INF ]
+ m: [-ZERO ].[ ZERO ].[ NAN ].[ NAN ].[ -INF ].[ INF ].bf800000.3f800000
+ after
+r1: [ NAN ].[ NAN ].[ -INF ].[ INF ].bf800000.3f800000.[-ZERO ].[ ZERO ]
+r2: [ -INF ].[ INF ].bf800000.3f800000.[-ZERO ].[ ZERO ].[-ZERO ].[ ZERO ]
+r3: bf800000.3f800000.[-ZERO ].[ ZERO ].[-ZERO ].[ ZERO ].[ NAN ].[ NAN ]
+r4: [ ZERO ].[ ZERO ].[ ZERO ].[ ZERO ].[ ZERO ].[ ZERO ].[ ZERO ].[ NAN ]
+ m: [-ZERO ].[ ZERO ].[ NAN ].[ NAN ].[ -INF ].[ INF ].bf800000.3f800000
+
+VFMADDSS_xmm_src_dst rand
+ before
+r1: 20162517.609f0f22.a1a7a4c9.c0a51f6b.acb9433f.079dacac.abeb0002.08c90296
+r2: ef56701d.b49bea4c.e52e79ce.9700a7f7.63e279a2.0368bc8b.db3b3709.54bcbf24
+r3: 31005fb9.ada2074b.f63a63fe.dcb4d29c.200d1726.1638b12a.2a6a0786.3ec28077
+r4: 445ef059.e641a1cc.b097e047.aacc5b89.3f871736.dc9ac535.7446eb65.e4e703bb
+ m: 83bd1e68.fb03f57b.ef136b94.1e54ffe8.1c9c7740.ef193457.95996092.6235021b
+ after
+r1: 20162517.609f0f22.a1a7a4c9.c0a51f6b.acb9433f.079dacac.abeb0002.08c90296
+r2: ef56701d.b49bea4c.e52e79ce.9700a7f7.63e279a2.0368bc8b.db3b3709.54bcbf24
+r3: 31005fb9.ada2074b.f63a63fe.dcb4d29c.200d1726.1638b12a.2a6a0786.3ec28077
+r4: [ ZERO ].[ ZERO ].[ ZERO ].[ ZERO ].[ ZERO ].[ ZERO ].[ ZERO ].fa2a533a
+ m: 83bd1e68.fb03f57b.ef136b94.1e54ffe8.1c9c7740.ef193457.95996092.6235021b
+
+VFMADDSS_xmm_mem1 ones
+ before
+r1: 01010101.01010101.01010101.01010101.01010101.01010101.01010101.01010101
+r2: 01010101.01010101.01010101.01010101.01010101.01010101.01010101.01010101
+r3: 01010101.01010101.01010101.01010101.01010101.01010101.01010101.01010101
+r4: 01010101.01010101.01010101.01010101.01010101.01010101.01010101.01010101
+ m: 01010101.01010101.01010101.01010101.01010101.01010101.01010101.01010101
+ after
+r1: 01010101.01010101.01010101.01010101.01010101.01010101.01010101.01010101
+r2: 01010101.01010101.01010101.01010101.01010101.01010101.01010101.01010101
+r3: 01010101.01010101.01010101.01010101.01010101.01010101.01010101.01010101
+r4: [ ZERO ].[ ZERO ].[ ZERO ].[ ZERO ].[ ZERO ].[ ZERO ].[ ZERO ].01010101
+ m: 01010101.01010101.0101...
[truncated message content] |