VirtualBox

Changeset 106943 in vbox for trunk/src/VBox/ValidationKit


Ignore:
Timestamp:
Nov 11, 2024 9:31:30 PM (6 months ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
165869
Message:

ValidationKit/bootsectors: Implement SIMD FP testcases for [v]dpps; bugref:10658; jiraref:VBP-1205

Note: this exposes that IEM [v]dpps support is significantly wrong; left as @todo in tester code.
(Testing on different physical CPUs will probably show that it varies a lot there as well.)

  • disable TODO_CVTDQ2PD_M64_IEM, mistakenly turned on by r165749
Location:
trunk/src/VBox/ValidationKit/bootsectors
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/ValidationKit/bootsectors/bs3-cpu-instr-4-template.mac

    r106838 r106943  
    870870EMIT_INSTR_PLUS_ICEBP       vrsqrtss, XMM1, XMM1, FSxBX
    871871EMIT_INSTR_PLUS_ICEBP_C64   vrsqrtss, XMM8, XMM8, XMM8
     872
     873;
     874;; dpps
     875;
     876EMIT_INSTR_PLUS_ICEBP       dpps,  XMM1, XMM2,  000h
     877EMIT_INSTR_PLUS_ICEBP       dpps,  XMM1, XMM2,  0FFh
     878EMIT_INSTR_PLUS_ICEBP       dpps,  XMM1, XMM2,  0E1h
     879EMIT_INSTR_PLUS_ICEBP       dpps,  XMM1, FSxBX, 000h
     880EMIT_INSTR_PLUS_ICEBP       dpps,  XMM1, FSxBX, 0FFh
     881EMIT_INSTR_PLUS_ICEBP       dpps,  XMM1, FSxBX, 0E1h
     882EMIT_INSTR_PLUS_ICEBP_C64   dpps,  XMM8, XMM9,  0E1h
     883EMIT_INSTR_PLUS_ICEBP_C64   dpps,  XMM8, FSxBX, 0E1h
     884
     885EMIT_INSTR_PLUS_ICEBP       vdpps, XMM1, XMM2,  XMM3,  000h
     886EMIT_INSTR_PLUS_ICEBP       vdpps, XMM1, XMM2,  XMM3,  0FFh
     887EMIT_INSTR_PLUS_ICEBP       vdpps, XMM1, XMM2,  XMM3,  0E1h
     888EMIT_INSTR_PLUS_ICEBP       vdpps, XMM1, XMM2,  FSxBX, 000h
     889EMIT_INSTR_PLUS_ICEBP       vdpps, XMM1, XMM2,  FSxBX, 0FFh
     890EMIT_INSTR_PLUS_ICEBP       vdpps, XMM1, XMM2,  FSxBX, 0E1h
     891EMIT_INSTR_PLUS_ICEBP_C64   vdpps, XMM8, XMM9,  XMM10, 0E1h
     892EMIT_INSTR_PLUS_ICEBP_C64   vdpps, XMM8, XMM9,  FSxBX, 0E1h
     893
     894EMIT_INSTR_PLUS_ICEBP       vdpps, YMM1, YMM2,  YMM3,  000h
     895EMIT_INSTR_PLUS_ICEBP       vdpps, YMM1, YMM2,  YMM3,  0FFh
     896EMIT_INSTR_PLUS_ICEBP       vdpps, YMM1, YMM2,  YMM3,  0E1h
     897EMIT_INSTR_PLUS_ICEBP       vdpps, YMM1, YMM2,  FSxBX, 000h
     898EMIT_INSTR_PLUS_ICEBP       vdpps, YMM1, YMM2,  FSxBX, 0FFh
     899EMIT_INSTR_PLUS_ICEBP       vdpps, YMM1, YMM2,  FSxBX, 0E1h
     900EMIT_INSTR_PLUS_ICEBP_C64   vdpps, YMM8, YMM9,  YMM10, 0E1h
     901EMIT_INSTR_PLUS_ICEBP_C64   vdpps, YMM8, YMM9,  FSxBX, 0E1h
     902
     903EMIT_INSTR_PLUS_ICEBP       dpps,  XMM1, XMM1,  0E1h
     904EMIT_INSTR_PLUS_ICEBP_C64   dpps,  XMM8, XMM8,  0E1h
     905
     906EMIT_INSTR_PLUS_ICEBP       vdpps, XMM1, XMM1,  XMM1,  0E1h
     907EMIT_INSTR_PLUS_ICEBP       vdpps, XMM1, XMM2,  XMM1,  0E1h
     908EMIT_INSTR_PLUS_ICEBP       vdpps, XMM1, XMM1,  XMM2,  0E1h
     909EMIT_INSTR_PLUS_ICEBP       vdpps, XMM1, XMM2,  XMM2,  0E1h
     910EMIT_INSTR_PLUS_ICEBP       vdpps, XMM1, XMM1,  FSxBX, 0E1h
     911EMIT_INSTR_PLUS_ICEBP_C64   vdpps, XMM8, XMM8,  XMM8,  0E1h
     912EMIT_INSTR_PLUS_ICEBP_C64   vdpps, XMM8, XMM8,  FSxBX, 0E1h
     913
     914EMIT_INSTR_PLUS_ICEBP       vdpps, YMM1, YMM1,  YMM1,  0E1h
     915EMIT_INSTR_PLUS_ICEBP       vdpps, YMM1, YMM2,  YMM1,  0E1h
     916EMIT_INSTR_PLUS_ICEBP       vdpps, YMM1, YMM1,  YMM2,  0E1h
     917EMIT_INSTR_PLUS_ICEBP       vdpps, YMM1, YMM2,  YMM2,  0E1h
     918EMIT_INSTR_PLUS_ICEBP       vdpps, YMM1, YMM1,  FSxBX, 0E1h
     919EMIT_INSTR_PLUS_ICEBP_C64   vdpps, YMM8, YMM8,  YMM8,  0E1h
     920EMIT_INSTR_PLUS_ICEBP_C64   vdpps, YMM8, YMM8,  FSxBX, 0E1h
    872921
    873922;
  • trunk/src/VBox/ValidationKit/bootsectors/bs3-cpu-instr-4.c32

    r106872 r106943  
    32113211# define TODO_X86_MXCSR_UE_IEM
    32123212# define TODO_CVTDQ2PD_M64_IEM
     3213# define TODO_MXCSR_ORDER      /* (test harness issue, not IEM) */
    32133214#endif /* TODO_EXPOSE_IEM_ERRATA */
    32143215
     
    53775378    /*11*/{ { /*src2     */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_NORM_MIN(1), FP32_0(0), FP32_NORM_MIN(1), FP32_NORM_MIN(0) } },
    53785379            { /*src1     */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_NORM_MAX(0), FP32_0(0), FP32_NORM_MAX(0), FP32_NORM_MAX(0) } },
    5379             { /* =>      */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_NORM_MAX(0), FP32_0(0), FP32_NORM_MAX(0), FP32_NORM_MAX(0),} },
     5380            { /* =>      */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_NORM_MAX(0), FP32_0(0), FP32_NORM_MAX(0), FP32_NORM_MAX(0) } },
    53805381              /*mxcsr:in */ 0,
    53815382              /*128:out  */ 0,
     
    72867287          { { /*src2     */ { FP32_0(0), FP32_1(1), FP32_0(0), FP32_1(0), FP32_NORM_MAX(1), FP32_1(0), FP32_NORM_MAX(1),  FP32_2(0)        } },
    72877288            { /*src1     */ { FP32_0(0), FP32_1(1), FP32_0(0), FP32_1(0), FP32_0(1),        FP32_1(0), FP32_2(0),         FP32_NORM_MAX(0) } },
    7288             { /* =>      */ { FP32_0(0), FP32_1(0), FP32_0(0), FP32_1(0), FP32_0(0),        FP32_1(0), FP32_INF(1),       FP32_INF(0),     } },
     7289            { /* =>      */ { FP32_0(0), FP32_1(0), FP32_0(0), FP32_1(0), FP32_0(0),        FP32_1(0), FP32_INF(1),       FP32_INF(0)      } },
    72897290              /*mxcsr:in */ X86_MXCSR_OM,
    72907291              /*128:out  */ X86_MXCSR_OM,
     
    77497750          { { /*src2     */ { FP64_DENORM_MAX(0), FP64_DENORM_MAX(0), FP64_DENORM_MAX(0), FP64_DENORM_MAX(1) } },
    77507751            { /*src1     */ { FP64_DENORM_MAX(0), FP64_DENORM_MIN(0), FP64_DENORM_MAX(1), FP64_DENORM_MIN(1) } },
    7751             { /* =>      */ { FP64_0(0),          FP64_0(0),          FP64_0(1),          FP64_0(0),         } },
     7752            { /* =>      */ { FP64_0(0),          FP64_0(0),          FP64_0(1),          FP64_0(0)          } },
    77527753              /*mxcsr:in */ X86_MXCSR_FZ | X86_MXCSR_RC_ZERO,
    77537754              /*128:out  */ X86_MXCSR_FZ | X86_MXCSR_RC_ZERO | X86_MXCSR_DE | X86_MXCSR_PE | X86_MXCSR_UE | BS3_MXCSR_PE_FUZZY /* IEM */,
     
    88668867     * Denormals.
    88678868     */
    8868     /*18*/{ { /*src2     */ { FP64_DENORM_MAX(1), FP64_DENORM_MIN(0), FP64_DENORM_MIN(1), FP64_DENORM_MAX(0),} },
    8869             { /*src1     */ { FP64_0(1),          FP64_DENORM_MIN(1), FP64_0(0),          FP64_DENORM_MAX(0),} },
     8869    /*18*/{ { /*src2     */ { FP64_DENORM_MAX(1), FP64_DENORM_MIN(0), FP64_DENORM_MIN(1), FP64_DENORM_MAX(0) } },
     8870            { /*src1     */ { FP64_0(1),          FP64_DENORM_MIN(1), FP64_0(0),          FP64_DENORM_MAX(0) } },
    88708871            { /* =>      */ { FP64_0(0),          FP64_1(1),          FP64_0(1),          FP64_1(0)          } },
    88718872              /*mxcsr:in */ 0,
     
    89188919              /*128:out  */ X86_MXCSR_DAZ | X86_MXCSR_FZ,
    89198920              /*256:out  */ X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_IE | X86_MXCSR_ZE },
    8920           { { /*src2     */ { FP64_1(0),          FP64_1(0),          FP64_DENORM_MAX(0), FP64_DENORM_MIN(0),} },
     8921          { { /*src2     */ { FP64_1(0),          FP64_1(0),          FP64_DENORM_MAX(0), FP64_DENORM_MIN(0) } },
    89218922            { /*src1     */ { FP64_DENORM_MAX(0), FP64_DENORM_MIN(0), FP64_1(0),          FP64_1(0)          } },
    89228923            { /* =>      */ { FP64_0(0),          FP64_0(0),          FP64_INF(0),        FP64_INF(0)        } },
     
    1493114932          { { /*src1     */ { FP64_DENORM_MIN(0), FP64_DENORM_MAX(0), FP64_DENORM_MIN(1), FP64_DENORM_MAX(1) } },
    1493214933            { /*unused   */ { FP64_ROW_UNUSED } },
    14933             { /* =>      */ { FP64_0(0),          FP64_0(0),          FP64_0(1),          FP64_0(1),         } },
     14934            { /* =>      */ { FP64_0(0),          FP64_0(0),          FP64_0(1),          FP64_0(1)          } },
    1493414935              /*mxcsr:in */ X86_MXCSR_DAZ,
    1493514936              /*128:out  */ X86_MXCSR_DAZ,
     
    1637716378
    1637816379/*
     16380 * [V]DPPS.
     16381 */
     16382/** @todo this fails entirely under IEM, getting #GP faults and many differences in exceptions */
     16383BS3_DECL_FAR(uint8_t) bs3CpuInstr4_v_dpps(uint8_t bMode)
     16384{
     16385    static BS3CPUINSTR4_TEST1_VALUES_PS_T const s_aValues00[] =
     16386    {
     16387    /*
     16388     * Zero.
     16389     */
     16390    /* 0*/{ { /*src1     */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(1), FP32_0(1), FP32_0(1), FP32_0(1) } },
     16391            { /*src2     */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(1), FP32_0(1), FP32_0(1), FP32_0(1) } },
     16392            { /* =>      */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0) } },
     16393              /*mxcsr:in */ 0,
     16394              /*128:out  */ 0,
     16395              /*256:out  */ 0 },
     16396          { { /*src1     */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(1),   FP32_0(1),   FP32_0(1),       FP32_0(1)       } },
     16397            { /*src2     */ { FP32_1(0), FP32_1(1), FP32_2(0), FP32_2(1), FP32_INF(0), FP32_INF(1), FP32_RAND_V0(0), FP32_RAND_V0(1) } },
     16398            { /* =>      */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0),   FP32_0(0),   FP32_0(0),       FP32_0(0)       } },
     16399              /*mxcsr:in */ 0,
     16400              /*128:out  */ 0,
     16401              /*256:out  */ 0 },
     16402    /*
     16403     * Infinity.
     16404     */
     16405    /* 2*/{ { /*src1     */ { FP32_INF(0), FP32_INF(1), FP32_INF(1), FP32_INF(0),     FP32_INF(1),  FP32_INF(1), FP32_INF(0), FP32_INF(0) } },
     16406            { /*src2     */ { FP32_INF(0), FP32_INF(1), FP32_2(0),   FP32_RAND_V0(1), FP32_2(1),    FP32_2(0),   FP32_1(0),   FP32_1(1)   } },
     16407            { /* =>      */ { FP32_0(0),   FP32_0(0),   FP32_0(0),   FP32_0(0),       FP32_0(0),    FP32_0(0),   FP32_0(0),   FP32_0(0)   } },
     16408              /*mxcsr:in */ 0,
     16409              /*128:out  */ 0,
     16410              /*256:out  */ 0 },
     16411    /*
     16412     * Normals.
     16413     */
     16414    /* 3*/{ { /*src1     */ { FP32_NORM_V0(0), FP32_NORM_V1(1), FP32_NORM_V2(0), FP32_NORM_V3(1), FP32_RAND_V4(0), FP32_RAND_V5(1), FP32_RAND_V6(1), FP32_RAND_V7(0) } },
     16415            { /*src2     */ { FP32_NORM_V4(0), FP32_NORM_V5(0), FP32_NORM_V6(1), FP32_NORM_V7(1), FP32_RAND_V3(1), FP32_RAND_V2(0), FP32_RAND_V1(0), FP32_RAND_V0(0) } },
     16416            { /* =>      */ { FP32_0(0),       FP32_0(0),       FP32_0(0),       FP32_0(0),       FP32_0(0),       FP32_0(0),       FP32_0(0),       FP32_0(0)       } },
     16417              /*mxcsr:in */ 0,
     16418              /*128:out  */ 0,
     16419              /*256:out  */ 0 },
     16420   /*
     16421    * Denormals.
     16422    */
     16423    /* 4*/{ { /*src1     */ { FP32_DENORM_V0(0), FP32_DENORM_MIN(1), FP32_DENORM_MIN(0), FP32_DENORM_V3(1), FP32_DENORM_V4(0),  FP32_DENORM_V5(1),  FP32_DENORM_V6(1), FP32_DENORM_V7(0) } },
     16424            { /*src2     */ { FP32_DENORM_V4(0), FP32_DENORM_V5(0),  FP32_DENORM_V6(1),  FP32_DENORM_V7(1), FP32_DENORM_MAX(1), FP32_DENORM_MAX(0), FP32_DENORM_V1(0), FP32_DENORM_V0(0) } },
     16425            { /* =>      */ { FP32_0(0),         FP32_0(0),          FP32_0(0),          FP32_0(0),         FP32_0(0),          FP32_0(0),          FP32_0(0),         FP32_0(0)         } },
     16426              /*mxcsr:in */ 0,
     16427              /*128:out  */ 0,
     16428              /*256:out  */ 0 },
     16429   /*
     16430    * Invalids.
     16431    */
     16432    /* 5*/{ { /*src1     */ { FP32_QNAN_V5(0), FP32_QNAN_V2(1), FP32_QNAN_V0(1),  FP32_QNAN_V0(0), FP32_QNAN_V3(1), FP32_QNAN_V7(0), FP32_QNAN(0),    FP32_QNAN_V4(1)  } },
     16433            { /*src2     */ { FP32_QNAN(1),    FP32_QNAN_V1(0), FP32_QNAN_MAX(0), FP32_QNAN_V6(0), FP32_QNAN_V5(1), FP32_QNAN_V7(1), FP32_QNAN_V6(1), FP32_QNAN_MAX(1) } },
     16434            { /* =>      */ { FP32_0(0),       FP32_0(0),       FP32_0(0),        FP32_0(0),       FP32_0(0),       FP32_0(0),       FP32_0(0),       FP32_0(0)        } },
     16435              /*mxcsr:in */ 0,
     16436              /*128:out  */ 0,
     16437              /*256:out  */ 0 },
     16438          { { /*src1     */ { FP32_SNAN_V5(0), FP32_SNAN_V2(1), FP32_SNAN_V0(1),  FP32_SNAN_V0(0), FP32_SNAN_V3(1), FP32_SNAN_V7(0), FP32_SNAN(0),    FP32_SNAN_V4(1)  } },
     16439            { /*src2     */ { FP32_SNAN(1),    FP32_SNAN_V1(0), FP32_SNAN_MAX(0), FP32_SNAN_V6(0), FP32_SNAN_V5(1), FP32_SNAN_V7(1), FP32_SNAN_V6(1), FP32_SNAN_MAX(1) } },
     16440            { /* =>      */ { FP32_0(0),       FP32_0(0),       FP32_0(0),        FP32_0(0),       FP32_0(0),       FP32_0(0),       FP32_0(0),       FP32_0(0)        } },
     16441              /*mxcsr:in */ 0,
     16442              /*128:out  */ 0,
     16443              /*256:out  */ 0 },
     16444    /*
     16445     * Precision, Overflow, Underflow not possible in 'imm 0' case.
     16446     */
     16447    };
     16448    static BS3CPUINSTR4_TEST1_VALUES_PS_T const s_aValuesFF[] =
     16449    {
     16450    /*
     16451     * Zero.
     16452     */
     16453    /* 0*/{ { /*src1     */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(1), FP32_0(1), FP32_0(1), FP32_0(1) } },
     16454            { /*src2     */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(1), FP32_0(1), FP32_0(1), FP32_0(1) } },
     16455            { /* =>      */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0) } },
     16456              /*mxcsr:in */ 0,
     16457              /*128:out  */ 0,
     16458              /*256:out  */ 0 },
     16459          { { /*src1     */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(1),       FP32_0(1),       FP32_0(1),       FP32_0(1)       } },
     16460            { /*src2     */ { FP32_1(0), FP32_1(1), FP32_2(0), FP32_2(1), FP32_NORM_V0(0), FP32_NORM_V0(1), FP32_RAND_V0(0), FP32_RAND_V0(1) } },
     16461            { /* =>      */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0),       FP32_0(0),       FP32_0(0),       FP32_0(0)       } },
     16462              /*mxcsr:in */ 0,
     16463              /*128:out  */ 0,
     16464              /*256:out  */ 0 },
     16465    /*
     16466     * Infinity.
     16467     */
     16468    /* 2*/{ { /*src1     */ { FP32_INF(0), FP32_INF(0), FP32_INF(0), FP32_INF(0), FP32_INF(1), FP32_INF(0), FP32_INF(1), FP32_INF(0) } },
     16469            { /*src2     */ { FP32_INF(0), FP32_INF(0), FP32_INF(0), FP32_INF(0), FP32_INF(1), FP32_INF(0), FP32_INF(1), FP32_INF(0) } },
     16470            { /* =>      */ { FP32_INF(0), FP32_INF(0), FP32_INF(0), FP32_INF(0), FP32_INF(0), FP32_INF(0), FP32_INF(0), FP32_INF(0) } },
     16471              /*mxcsr:in */ 0,
     16472              /*128:out  */ 0,
     16473              /*256:out  */ 0 },
     16474          { { /*src1     */ { FP32_INF(0), FP32_INF(0), FP32_INF(0), FP32_INF(0), FP32_INF(1),  FP32_INF(0),  FP32_INF(1),  FP32_INF(0)  } },
     16475            { /*src2     */ { FP32_INF(0), FP32_INF(0), FP32_INF(0), FP32_INF(0), FP32_INF(1),  FP32_INF(0),  FP32_INF(1),  FP32_INF(1)  } },
     16476            { /* =>      */ { FP32_INF(0), FP32_INF(0), FP32_INF(0), FP32_INF(0), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1) } },
     16477              /*mxcsr:in */ 0,                                /* oo + -oo = IE */
     16478              /*128:out  */ 0,
     16479              /*256:out  */ X86_MXCSR_IE },
     16480          { { /*src1     */ { FP32_INF(0), FP32_INF(0), FP32_INF(0), FP32_INF(0), FP32_INF(0),  FP32_0(0),    FP32_0(1),    FP32_0(0)    } },
     16481            { /*src2     */ { FP32_INF(0), FP32_INF(0), FP32_INF(0), FP32_INF(0), FP32_0(0),    FP32_0(0),    FP32_0(1),    FP32_0(1)    } },
     16482            { /* =>      */ { FP32_INF(0), FP32_INF(0), FP32_INF(0), FP32_INF(0), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1) } },
     16483              /*mxcsr:in */ 0,                                /* oo * 0 = IE */
     16484              /*128:out  */ 0,
     16485              /*256:out  */ X86_MXCSR_IE },
     16486          { { /*src1     */ { FP32_NORM_MAX(0), FP32_NORM_MAX(0), FP32_NORM_MAX(0), FP32_NORM_MAX(0), FP32_NORM_MAX(0), FP32_NORM_MAX(0), FP32_NORM_MAX(1), FP32_NORM_MAX(1) } },
     16487            { /*src2     */ { FP32_NORM_MAX(0), FP32_NORM_MAX(0), FP32_NORM_MAX(0), FP32_NORM_MAX(0), FP32_NORM_MAX(1), FP32_NORM_MAX(1), FP32_NORM_MAX(0), FP32_NORM_MAX(0) } },
     16488            { /* =>      */ { FP32_INF(0),      FP32_INF(0),      FP32_INF(0),      FP32_INF(0),      FP32_INF(1),      FP32_INF(1),      FP32_INF(1),      FP32_INF(1)      } },
     16489              /*mxcsr:in */ 0,                                /* big * big = oo (OE); big * -big = -oo (OE) */
     16490              /*128:out  */ X86_MXCSR_OE | X86_MXCSR_PE,
     16491              /*256:out  */ X86_MXCSR_OE | X86_MXCSR_PE },
     16492          /** @todo the following three entries (including ifdef'd out one) are one test, with some corners unexplored due to tester issues.
     16493           *  The tester 'knows' that DE/IE/ZE are 'early' exceptions while OE/PE/UE are 'late'.  This instruction can hit them in different
     16494           *  orders due to its internal sequence of operations.  Possible fix: for all instructions, first run it unmasked; then, whatever
     16495           *  exception(s) hit, run it with those masked; repeat, adding more masks until the expected exceptions have all been delivered (or not).
     16496           *  Note this is a tester issue, the CPU is behaving correctly, we just aren't able to test it properly at the moment.
     16497           */
     16498          { { /*src1     */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_NORM_MAX(0), FP32_NORM_MAX(0), FP32_NORM_MAX(1), FP32_NORM_MAX(1) } },
     16499            { /*src2     */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_NORM_MAX(1), FP32_NORM_MAX(1), FP32_NORM_MAX(1), FP32_NORM_MAX(0) } },
     16500            { /* =>      */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0)                                                            /* unused */ } },
     16501              /*mxcsr:in */ 0,                                /* big * big = oo (OE); big * -big = -oo (OE) */
     16502              /*128:out  */ 0,                                /* OE hits in multiply step, before IE in addition step */
     16503              /*256:out  */ X86_MXCSR_OE | X86_MXCSR_PE | BS3_MXCSR_OM_FIXED },
     16504          { { /*src1     */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_NORM_MAX(0), FP32_NORM_MAX(0), FP32_NORM_MAX(1), FP32_NORM_MAX(1) } },
     16505            { /*src2     */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_NORM_MAX(1), FP32_NORM_MAX(1), FP32_NORM_MAX(1), FP32_NORM_MAX(0) } },
     16506            { /* =>      */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_QNAN(1),     FP32_QNAN(1),     FP32_QNAN(1),     FP32_QNAN(1)     } },
     16507              /*mxcsr:in */ X86_MXCSR_IM | X86_MXCSR_OM | X86_MXCSR_PM,                     /* big * big = oo (OE); big * -big = -oo (OE); oo + -oo = IE */
     16508              /*128:out  */ X86_MXCSR_IM | X86_MXCSR_OM | X86_MXCSR_PM,
     16509              /*256:out  */ X86_MXCSR_IM | X86_MXCSR_OM | X86_MXCSR_PM | X86_MXCSR_IE | X86_MXCSR_OE | X86_MXCSR_PE | BS3_MXCSR_IM_FIXED | BS3_MXCSR_OM_FIXED | BS3_MXCSR_PM_FIXED },
     16510#ifdef TODO_MXCSR_ORDER /** @todo wrong order of exceptions, see above */
     16511 /*--| 8*/{ { /*src1     */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_NORM_MAX(0), FP32_NORM_MAX(0), FP32_NORM_MAX(1), FP32_NORM_MAX(1) } },
     16512            { /*src2     */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_NORM_MAX(1), FP32_NORM_MAX(1), FP32_NORM_MAX(1), FP32_NORM_MAX(0) } },
     16513            { /* =>      */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0)                                                            /* unused */ } },
     16514              /*mxcsr:in */ X86_MXCSR_OM,                     /* big * big = oo (OE); big * -big = -oo (OE); oo + -oo = IE */
     16515              /*128:out  */ X86_MXCSR_OM,
     16516              /*256:out  */ X86_MXCSR_OM | X86_MXCSR_IE | X86_MXCSR_OE | X86_MXCSR_PE | BS3_MXCSR_OM_FIXED },
     16517#endif /* TODO_MXCSR_ORDER */
     16518    /*
     16519     * Normals, Precision, Overflow.
     16520     */
     16521 /* 8| 9*/{ { /*src1     */ { FP32_1(0),               FP32_1(1),               FP32_2(0),               FP32_2(1),               FP32_1(0), FP32_1(1), FP32_2(0), FP32_2(1) } },
     16522            { /*src2     */ { FP32_1(0),               FP32_1(1),               FP32_2(0),               FP32_2(1),               FP32_1(1), FP32_1(0), FP32_2(0), FP32_2(0) } },
     16523            { /* =>      */ { FP32_V(0,0x200000,0x82), FP32_V(0,0x200000,0x82), FP32_V(0,0x200000,0x82), FP32_V(0,0x200000,0x82), FP32_2(1), FP32_2(1), FP32_2(1), FP32_2(1) } },
     16524                              /*10.0*/                 /*10.0*/                 /*10.0*/                 /*10.0*/
     16525              /*mxcsr:in */ 0,
     16526              /*128:out  */ 0,
     16527              /*256:out  */ 0 },
     16528          { { /*src1     */ { FP32_NORM_MAX(0), FP32_NORM_MAX(0), FP32_NORM_MAX(0), FP32_NORM_MAX(0), FP32_NORM_MAX(1), FP32_NORM_MAX(1), FP32_NORM_MAX(1), FP32_NORM_MAX(1) } },
     16529            { /*src2     */ { FP32_2(0),        FP32_2(0),        FP32_2(0),        FP32_2(0),        FP32_2(0),        FP32_2(0),        FP32_2(0),        FP32_2(0)        } },
     16530            { /* =>      */ { FP32_ROW_UNUSED } },
     16531              /*mxcsr:in */ 0,
     16532              /*128:out  */ X86_MXCSR_OE | BS3_MXCSR_OM_FIXED,
     16533              /*256:out  */ X86_MXCSR_OE | BS3_MXCSR_OM_FIXED },
     16534          { { /*src1     */ { FP32_NORM_MAX(0), FP32_NORM_MAX(1), FP32_NORM_MAX(0), FP32_NORM_MAX(0), FP32_NORM_MAX(1), FP32_NORM_MAX(1), FP32_NORM_MAX(0), FP32_NORM_MAX(1) } },
     16535            { /*src2     */ { FP32_2(0),        FP32_2(1),        FP32_2(0),        FP32_2(0),        FP32_2(0),        FP32_2(0),        FP32_2(1),        FP32_2(0)        } },
     16536            { /* =>      */ { FP32_INF(0),      FP32_INF(0),      FP32_INF(0),      FP32_INF(0),      FP32_INF(1),      FP32_INF(1),      FP32_INF(1),      FP32_INF(1)      } },
     16537              /*mxcsr:in */ X86_MXCSR_OM,
     16538              /*128:out  */ X86_MXCSR_OM | X86_MXCSR_OE | X86_MXCSR_PE | BS3_MXCSR_OM_FIXED,
     16539              /*256:out  */ X86_MXCSR_OM | X86_MXCSR_OE | X86_MXCSR_PE | BS3_MXCSR_OM_FIXED },
     16540   /** @todo more normals; rounding controls affecting different steps of the calculation */
     16541   /*
     16542    * Denormals, Underflow.
     16543    */
     16544 /*11|12*/{ { /*src1     */ { FP32_DENORM_V0(0), FP32_DENORM_MIN(1), FP32_DENORM_MIN(0), FP32_DENORM_V3(1), FP32_DENORM_V4(0),  FP32_DENORM_V5(1),  FP32_DENORM_V6(1), FP32_DENORM_V7(0) } },
     16545            { /*src2     */ { FP32_DENORM_V4(0), FP32_DENORM_V5(0),  FP32_DENORM_V6(1),  FP32_DENORM_V7(1), FP32_DENORM_MAX(1), FP32_DENORM_MAX(0), FP32_DENORM_V1(0), FP32_DENORM_V0(0) } },
     16546            { /* =>      */ { FP32_0(0),         FP32_0(0),          FP32_0(0),          FP32_0(0),         FP32_0(0),          FP32_0(0),          FP32_0(0),         FP32_0(0)         } },
     16547              /*mxcsr:in */ 0,
     16548              /*128:out  */ X86_MXCSR_DE | X86_MXCSR_PE | X86_MXCSR_UE,
     16549              /*256:out  */ X86_MXCSR_DE | X86_MXCSR_PE | X86_MXCSR_UE },
     16550#define TINY_MAXx8 FP32_V(0,0x7ffffe,3) /* 8 * FP32_DENORM_MAX(0) */
     16551#define TINY_MINx8 FP32_V(0,8,0)        /* 8 * FP32_DENORM_MIN(0) */
     16552          { { /*src1     */ { FP32_DENORM_MAX(0), FP32_DENORM_MAX(0), FP32_DENORM_MAX(0), FP32_DENORM_MAX(0), FP32_DENORM_MIN(0), FP32_DENORM_MIN(0), FP32_DENORM_MIN(0), FP32_DENORM_MIN(0) } },
     16553            { /*src2     */ { FP32_2(0),          FP32_2(0),          FP32_2(0),          FP32_2(0),          FP32_2(0),          FP32_2(0),          FP32_2(0),          FP32_2(0)          } },
     16554            { /* =>      */ { TINY_MAXx8,         TINY_MAXx8,         TINY_MAXx8,         TINY_MAXx8,                                                                           /* unused */ } },
     16555              /*mxcsr:in */ 0,
     16556              /*128:out  */ X86_MXCSR_DE,
     16557              /*256:out  */ X86_MXCSR_DE | X86_MXCSR_UE | BS3_MXCSR_UM_FIXED },
     16558          { { /*src1     */ { FP32_DENORM_MAX(0), FP32_DENORM_MAX(0), FP32_DENORM_MAX(0), FP32_DENORM_MAX(0), FP32_DENORM_MIN(0), FP32_DENORM_MIN(0), FP32_DENORM_MIN(0), FP32_DENORM_MIN(0) } },
     16559            { /*src2     */ { FP32_2(0),          FP32_2(0),          FP32_2(0),          FP32_2(0),          FP32_2(0),          FP32_2(0),          FP32_2(0),          FP32_2(0)          } },
     16560            { /* =>      */ { TINY_MAXx8,         TINY_MAXx8,         TINY_MAXx8,         TINY_MAXx8,         TINY_MINx8,         TINY_MINx8,         TINY_MINx8,         TINY_MINx8         } },
     16561              /*mxcsr:in */ X86_MXCSR_UM,
     16562              /*128:out  */ X86_MXCSR_DE,
     16563              /*256:out  */ X86_MXCSR_UM | X86_MXCSR_DE | BS3_MXCSR_UM_FIXED },
     16564          { { /*src1     */ { FP32_DENORM_MAX(0), FP32_DENORM_MAX(0), FP32_DENORM_MAX(0), FP32_DENORM_MAX(0), FP32_DENORM_MIN(0), FP32_DENORM_MIN(0), FP32_DENORM_MIN(0), FP32_DENORM_MIN(0) } },
     16565            { /*src2     */ { FP32_2(0),          FP32_2(0),          FP32_2(0),          FP32_2(0),          FP32_2(0),          FP32_2(0),          FP32_2(0),          FP32_2(0)          } },
     16566            { /* =>      */ { TINY_MAXx8,         TINY_MAXx8,         TINY_MAXx8,         TINY_MAXx8,                                                                           /* unused */ } },
     16567              /*mxcsr:in */ X86_MXCSR_FZ,
     16568              /*128:out  */ X86_MXCSR_FZ | X86_MXCSR_DE,
     16569              /*256:out  */ X86_MXCSR_FZ | X86_MXCSR_DE | X86_MXCSR_UE | BS3_MXCSR_UM_FIXED },
     16570          { { /*src1     */ { FP32_DENORM_MAX(0), FP32_DENORM_MAX(0), FP32_DENORM_MAX(0), FP32_DENORM_MAX(0), FP32_DENORM_MIN(0), FP32_DENORM_MIN(0), FP32_DENORM_MIN(0), FP32_DENORM_MIN(0) } },
     16571            { /*src2     */ { FP32_2(0),          FP32_2(0),          FP32_2(0),          FP32_2(0),          FP32_2(0),          FP32_2(0),          FP32_2(0),          FP32_2(0)          } },
     16572            { /* =>      */ { TINY_MAXx8,         TINY_MAXx8,         TINY_MAXx8,         TINY_MAXx8,         FP32_0(0),          FP32_0(0),          FP32_0(0),          FP32_0(0)          } },
     16573              /*mxcsr:in */ X86_MXCSR_UM | X86_MXCSR_FZ,
     16574              /*128:out  */ X86_MXCSR_UM | X86_MXCSR_FZ | X86_MXCSR_DE,
     16575              /*256:out  */ X86_MXCSR_UM | X86_MXCSR_FZ | X86_MXCSR_DE | X86_MXCSR_PE | X86_MXCSR_UE | BS3_MXCSR_UM_FIXED },
     16576#undef  TINY_MAXx8
     16577#undef  TINY_MINx8
     16578   /*
     16579    * Invalids.
     16580    */
     16581 /*16|17*/{ { /*src1     */ { FP32_QNAN_V5(0), FP32_QNAN_V2(1), FP32_QNAN_V0(1),  FP32_QNAN_V0(0),  FP32_QNAN_V3(1), FP32_QNAN_V7(0), FP32_QNAN(0),     FP32_QNAN_V4(1)  } },
     16582            { /*src2     */ { FP32_QNAN(1),    FP32_QNAN_V1(0), FP32_QNAN_MAX(0), FP32_QNAN_V6(0),  FP32_QNAN_V5(1), FP32_QNAN_V7(1), FP32_QNAN_V6(1),  FP32_QNAN_MAX(1) } },
     16583            { /* =>      */ { FP32_QNAN_V1(0), FP32_QNAN(1),    FP32_QNAN_V6(0),  FP32_QNAN_MAX(0), FP32_QNAN_V7(1), FP32_QNAN_V5(1), FP32_QNAN_MAX(1), FP32_QNAN_V6(1)  } },
     16584              /*mxcsr:in */ 0,                                /* output swaps src2 input pairs?!? -- result from i7-10700 */
     16585              /*128:out  */ 0,
     16586              /*256:out  */ 0 },
     16587          { { /*src1     */ { FP32_SNAN_V5(0), FP32_SNAN_V2(1),  FP32_SNAN_V0(1),  FP32_SNAN_V0(0),  FP32_SNAN_V3(1), FP32_SNAN_V7(0), FP32_SNAN(0),     FP32_SNAN_V4(1)  } },
     16588            { /*src2     */ { FP32_SNAN(1),    FP32_SNAN_V1(0),  FP32_SNAN_MAX(0), FP32_SNAN_V6(0),  FP32_SNAN_V5(1), FP32_SNAN_V7(1), FP32_SNAN_V6(1),  FP32_SNAN_MAX(1) } },
     16589            { /* =>      */ { FP32_QNAN_V1(0), FP32_QNAN_V(1,1), FP32_QNAN_V6(0),  FP32_QNAN_MAX(0), FP32_QNAN_V7(1), FP32_QNAN_V5(1), FP32_QNAN_MAX(1), FP32_QNAN_V6(1)  } },
     16590              /*mxcsr:in */ 0,                                /* output has swapped src2 input pairs?!? -- result from i7-10700 */
     16591              /*128:out  */ X86_MXCSR_IE,
     16592              /*256:out  */ X86_MXCSR_IE },
     16593          { { /*src1     */ { FP32_1(0),        FP32_1(0),        FP32_1(0),        FP32_1(0),        FP32_1(0),        FP32_1(0),        FP32_1(0),        FP32_1(0)        } },
     16594            { /*src2     */ { FP32_1(0),        FP32_1(0),        FP32_1(0),        FP32_1(0),        FP32_1(0),        FP32_1(0),        FP32_1(0),        FP32_QNAN_MAX(1) } },
     16595            { /* =>      */ { FP32_V(0,0,0x81), FP32_V(0,0,0x81), FP32_V(0,0,0x81), FP32_V(0,0,0x81), FP32_QNAN_MAX(1), FP32_QNAN_MAX(1), FP32_QNAN_MAX(1), FP32_QNAN_MAX(1) } },
     16596                              /*4.0*/           /*4.0*/           /*4.0*/           /*4.0*/
     16597              /*mxcsr:in */ 0,                                /* output duplicates the NaN 4x?!? -- result from i7-10700 */
     16598              /*128:out  */ 0,
     16599              /*256:out  */ 0 },
     16600          { { /*src1     */ { FP32_1(0),        FP32_1(0),        FP32_1(0),        FP32_1(0),        FP32_1(0),        FP32_1(0),        FP32_1(0),        FP32_1(0)        } },
     16601            { /*src2     */ { FP32_1(0),        FP32_1(0),        FP32_1(0),        FP32_1(0),        FP32_QNAN_MAX(1), FP32_1(0),        FP32_1(0),        FP32_1(0)        } },
     16602            { /* =>      */ { FP32_V(0,0,0x81), FP32_V(0,0,0x81), FP32_V(0,0,0x81), FP32_V(0,0,0x81), FP32_QNAN_MAX(1), FP32_QNAN_MAX(1), FP32_QNAN_MAX(1), FP32_QNAN_MAX(1) } },
     16603                              /*4.0*/           /*4.0*/           /*4.0*/           /*4.0*/
     16604              /*mxcsr:in */ 0,                                /* output duplicates the NaN 4x?!? -- result from i7-10700 */
     16605              /*128:out  */ 0,
     16606              /*256:out  */ 0 },
     16607          { { /*src1     */ { FP32_1(0),        FP32_1(0),        FP32_1(0),        FP32_1(0),        FP32_1(0),        FP32_1(0),        FP32_QNAN_MAX(1), FP32_1(0)        } },
     16608            { /*src2     */ { FP32_1(0),        FP32_1(0),        FP32_1(0),        FP32_1(0),        FP32_1(0),        FP32_1(0),        FP32_1(0),        FP32_1(0)        } },
     16609            { /* =>      */ { FP32_V(0,0,0x81), FP32_V(0,0,0x81), FP32_V(0,0,0x81), FP32_V(0,0,0x81), FP32_QNAN_MAX(1), FP32_QNAN_MAX(1), FP32_QNAN_MAX(1), FP32_QNAN_MAX(1) } },
     16610                              /*4.0*/           /*4.0*/           /*4.0*/           /*4.0*/
     16611              /*mxcsr:in */ 0,                                /* output duplicates the NaN 4x?!? -- result from i7-10700 */
     16612              /*128:out  */ 0,
     16613              /*256:out  */ 0 },
     16614          { { /*src1     */ { FP32_1(0),        FP32_1(0),        FP32_1(0),        FP32_1(0),        FP32_1(0),        FP32_1(0),        FP32_1(0),        FP32_1(0)        } },
     16615            { /*src2     */ { FP32_1(0),        FP32_1(0),        FP32_1(0),        FP32_1(0),        FP32_1(0),        FP32_1(0),        FP32_1(0),        FP32_SNAN_MAX(1) } },
     16616            { /* =>      */ { FP32_V(0,0,0x81), FP32_V(0,0,0x81), FP32_V(0,0,0x81), FP32_V(0,0,0x81), FP32_QNAN_MAX(1), FP32_QNAN_MAX(1), FP32_QNAN_MAX(1), FP32_QNAN_MAX(1) } },
     16617                              /*4.0*/           /*4.0*/           /*4.0*/           /*4.0*/
     16618              /*mxcsr:in */ 0,                                /* output duplicates the NaN 4x?!? -- result from i7-10700 */
     16619              /*128:out  */ 0,
     16620              /*256:out  */ X86_MXCSR_IE },
     16621    };
     16622    static BS3CPUINSTR4_TEST1_VALUES_PS_T const s_aValuesE1[] =
     16623    {
     16624    /*
     16625     * Zero.
     16626     */
     16627    /* 0*/{ { /*src1     */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(1), FP32_0(1), FP32_0(1), FP32_0(1) } },
     16628            { /*src2     */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(1), FP32_0(1), FP32_0(1), FP32_0(1) } },
     16629            { /* =>      */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0) } },
     16630              /*mxcsr:in */ 0,
     16631              /*128:out  */ 0,
     16632              /*256:out  */ 0 },
     16633          { { /*src1     */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(1),       FP32_0(1),       FP32_0(1),       FP32_0(1)       } },
     16634            { /*src2     */ { FP32_1(0), FP32_1(1), FP32_2(0), FP32_2(1), FP32_NORM_V0(0), FP32_NORM_V0(1), FP32_RAND_V0(0), FP32_RAND_V0(1) } },
     16635            { /* =>      */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0),       FP32_0(0),       FP32_0(0),       FP32_0(0)       } },
     16636              /*mxcsr:in */ 0,
     16637              /*128:out  */ 0,
     16638              /*256:out  */ 0 },
     16639    /*
     16640     * Infinity.
     16641     */
     16642    /* 2*/{ { /*src1     */ { FP32_INF(0), FP32_INF(0), FP32_INF(0), FP32_INF(0), FP32_INF(1), FP32_INF(0), FP32_INF(1), FP32_INF(0) } },
     16643            { /*src2     */ { FP32_INF(0), FP32_INF(0), FP32_INF(0), FP32_INF(0), FP32_INF(1), FP32_INF(0), FP32_INF(1), FP32_INF(0) } },
     16644            { /* =>      */ { FP32_INF(0), FP32_0(0),   FP32_0(0),   FP32_0(0),   FP32_INF(0), FP32_0(0),   FP32_0(0),   FP32_0(0)   } },
     16645              /*mxcsr:in */ 0,
     16646              /*128:out  */ 0,
     16647              /*256:out  */ 0 },
     16648          { { /*src1     */ { FP32_INF(0), FP32_INF(0), FP32_INF(0), FP32_INF(0), FP32_INF(1),  FP32_INF(0), FP32_INF(1), FP32_INF(0) } },
     16649            { /*src2     */ { FP32_INF(0), FP32_INF(0), FP32_INF(0), FP32_INF(0), FP32_INF(1),  FP32_INF(0), FP32_INF(1), FP32_INF(1) } },
     16650            { /* =>      */ { FP32_INF(0), FP32_0(0),   FP32_0(0),   FP32_0(0),   FP32_QNAN(1), FP32_0(0),   FP32_0(0),   FP32_0(0)   } },
     16651              /*mxcsr:in */ 0,                                /* oo + -oo = IE */
     16652              /*128:out  */ 0,
     16653              /*256:out  */ X86_MXCSR_IE },
     16654          { { /*src1     */ { FP32_INF(0), FP32_INF(0), FP32_INF(0), FP32_INF(0), FP32_INF(0), FP32_0(0), FP32_0(1), FP32_0(0) } },
     16655            { /*src2     */ { FP32_INF(0), FP32_INF(0), FP32_INF(0), FP32_INF(0), FP32_0(0),   FP32_0(0), FP32_0(1), FP32_0(1) } },
     16656            { /* =>      */ { FP32_INF(0), FP32_0(0),   FP32_0(0),   FP32_0(0),   FP32_0(0),   FP32_0(0), FP32_0(0), FP32_0(0) } },
     16657              /*mxcsr:in */ 0,                                /* no IE: the oo * 0 dot-product is skipped */
     16658              /*128:out  */ 0,
     16659              /*256:out  */ 0 },
     16660          { { /*src1     */ { FP32_NORM_MAX(0), FP32_NORM_MAX(0), FP32_NORM_MAX(0), FP32_NORM_MAX(0), FP32_NORM_MAX(0), FP32_NORM_MAX(0), FP32_NORM_MAX(1), FP32_NORM_MAX(1) } },
     16661            { /*src2     */ { FP32_NORM_MAX(0), FP32_NORM_MAX(0), FP32_NORM_MAX(0), FP32_NORM_MAX(0), FP32_NORM_MAX(1), FP32_NORM_MAX(1), FP32_NORM_MAX(0), FP32_NORM_MAX(0) } },
     16662            { /* =>      */ { FP32_INF(0),      FP32_0(0),        FP32_0(0),        FP32_0(0),        FP32_INF(1),      FP32_0(0),        FP32_0(0),        FP32_0(0)        } },
     16663              /*mxcsr:in */ 0,                                /* big * big = oo (OE); big * -big = -oo (OE) */
     16664              /*128:out  */ X86_MXCSR_OE | X86_MXCSR_PE,
     16665              /*256:out  */ X86_MXCSR_OE | X86_MXCSR_PE },
     16666          { { /*src1     */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_NORM_MAX(0), FP32_NORM_MAX(0), FP32_NORM_MAX(1), FP32_NORM_MAX(1) } },
     16667            { /*src2     */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_NORM_MAX(1), FP32_NORM_MAX(1), FP32_NORM_MAX(1), FP32_NORM_MAX(0) } },
     16668            { /* =>      */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0)                                                            /* unused */ } },
     16669              /*mxcsr:in */ 0,                                /* big * big = oo (OE); big * -big = -oo (OE) */
     16670              /*128:out  */ 0,                                /* OE hits in multiply step, before IE in addition step */
     16671              /*256:out  */ X86_MXCSR_OE | X86_MXCSR_PE | BS3_MXCSR_OM_FIXED },
     16672          { { /*src1     */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_NORM_MAX(1), FP32_NORM_MAX(0), FP32_NORM_MAX(0), FP32_NORM_MAX(1) } },
     16673            { /*src2     */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_NORM_MAX(1), FP32_NORM_MAX(1), FP32_NORM_MAX(1), FP32_NORM_MAX(0) } },
     16674            { /* =>      */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_INF(1),      FP32_0(0),        FP32_0(0),        FP32_0(0)        } },
     16675              /*mxcsr:in */ X86_MXCSR_OM | X86_MXCSR_PM,      /* big * big = oo (OE) is skipped; big * -big = -oo (OE); -oo + -oo = -oo (!IE) */
     16676              /*128:out  */ X86_MXCSR_OM | X86_MXCSR_PM,
     16677              /*256:out  */ X86_MXCSR_OM | X86_MXCSR_PM | X86_MXCSR_OE | X86_MXCSR_PE | BS3_MXCSR_OM_FIXED | BS3_MXCSR_PM_FIXED },
     16678    /*
     16679     * Normals, Precision, Overflow.
     16680     */
     16681    /* 8*/{ { /*src1     */ { FP32_1(0),               FP32_1(1), FP32_2(0), FP32_2(1), FP32_1(0), FP32_1(1), FP32_2(0), FP32_2(1) } },
     16682            { /*src2     */ { FP32_1(0),               FP32_1(1), FP32_2(0), FP32_2(1), FP32_1(1), FP32_1(0), FP32_2(0), FP32_2(0) } },
     16683            { /* =>      */ { FP32_V(0,0x100000,0x82), FP32_0(0), FP32_0(0), FP32_0(0), FP32_1(1), FP32_0(0), FP32_0(0), FP32_0(0) } },
     16684                              /*9.0*/
     16685              /*mxcsr:in */ 0,
     16686              /*128:out  */ 0,
     16687              /*256:out  */ 0 },
     16688          { { /*src1     */ { FP32_NORM_MAX(0), FP32_NORM_MAX(0), FP32_NORM_MAX(0), FP32_NORM_MAX(0), FP32_NORM_MAX(1), FP32_NORM_MAX(1), FP32_NORM_MAX(1), FP32_NORM_MAX(1) } },
     16689            { /*src2     */ { FP32_2(0),        FP32_2(0),        FP32_2(0),        FP32_2(0),        FP32_2(0),        FP32_2(0),        FP32_2(0),        FP32_2(0)        } },
     16690            { /* =>      */ { FP32_ROW_UNUSED } },
     16691              /*mxcsr:in */ 0,
     16692              /*128:out  */ X86_MXCSR_OE | BS3_MXCSR_OM_FIXED,
     16693              /*256:out  */ X86_MXCSR_OE | BS3_MXCSR_OM_FIXED },
     16694          { { /*src1     */ { FP32_NORM_MAX(0), FP32_NORM_MAX(1), FP32_NORM_MAX(0), FP32_NORM_MAX(0), FP32_NORM_MAX(1), FP32_NORM_MAX(1), FP32_NORM_MAX(0), FP32_NORM_MAX(1) } },
     16695            { /*src2     */ { FP32_2(0),        FP32_2(1),        FP32_2(0),        FP32_2(0),        FP32_2(0),        FP32_2(0),        FP32_2(1),        FP32_2(0)        } },
     16696            { /* =>      */ { FP32_INF(0),      FP32_0(0),        FP32_0(0),        FP32_0(0),        FP32_INF(1),      FP32_0(0),        FP32_0(0),        FP32_0(0)        } },
     16697              /*mxcsr:in */ X86_MXCSR_OM,
     16698              /*128:out  */ X86_MXCSR_OM | X86_MXCSR_OE | X86_MXCSR_PE | BS3_MXCSR_OM_FIXED,
     16699              /*256:out  */ X86_MXCSR_OM | X86_MXCSR_OE | X86_MXCSR_PE | BS3_MXCSR_OM_FIXED },
     16700   /** @todo more normals; rounding controls affecting different steps of the calculation */
     16701   /*
     16702    * Denormals, Underflow.
     16703    */
     16704          { { /*src1     */ { FP32_DENORM_V0(0), FP32_DENORM_MIN(1), FP32_DENORM_MIN(0), FP32_DENORM_V3(1), FP32_DENORM_V4(0),  FP32_DENORM_V5(1),  FP32_DENORM_V6(1), FP32_DENORM_V7(0) } },
     16705            { /*src2     */ { FP32_DENORM_V4(0), FP32_DENORM_V5(0),  FP32_DENORM_V6(1),  FP32_DENORM_V7(1), FP32_DENORM_MAX(1), FP32_DENORM_MAX(0), FP32_DENORM_V1(0), FP32_DENORM_V0(0) } },
     16706            { /* =>      */ { FP32_0(0),         FP32_0(0),          FP32_0(0),          FP32_0(0),         FP32_0(0),          FP32_0(0),          FP32_0(0),         FP32_0(0)         } },
     16707              /*mxcsr:in */ 0,
     16708              /*128:out  */ X86_MXCSR_DE | X86_MXCSR_PE | X86_MXCSR_UE | BS3_MXCSR_DM_FIXED,
     16709              /*256:out  */ X86_MXCSR_DE | X86_MXCSR_PE | X86_MXCSR_UE },
     16710          { { /*src1     */ { FP32_DENORM_V0(0), FP32_DENORM_MIN(1), FP32_DENORM_MIN(0), FP32_DENORM_V3(1), FP32_DENORM_V4(0),  FP32_DENORM_V5(1),  FP32_DENORM_V6(1), FP32_DENORM_V7(0) } },
     16711            { /*src2     */ { FP32_DENORM_V4(0), FP32_DENORM_V5(0),  FP32_DENORM_V6(1),  FP32_DENORM_V7(1), FP32_DENORM_MAX(1), FP32_DENORM_MAX(0), FP32_DENORM_V1(0), FP32_DENORM_V0(0) } },
     16712            { /* =>      */ { FP32_0(0),         FP32_0(0),          FP32_0(0),          FP32_0(0),         FP32_0(0),          FP32_0(0),          FP32_0(0),         FP32_0(0)         } },
     16713              /*mxcsr:in */ X86_MXCSR_UM,
     16714              /*128:out  */ X86_MXCSR_UM | X86_MXCSR_DE | X86_MXCSR_PE | X86_MXCSR_UE | BS3_MXCSR_UM_FIXED,
     16715              /*256:out  */ X86_MXCSR_DE | X86_MXCSR_PE | X86_MXCSR_UE },
     16716          { { /*src1     */ { FP32_DENORM_V0(0), FP32_DENORM_MIN(1), FP32_DENORM_MIN(0), FP32_DENORM_V3(1), FP32_DENORM_V4(0),  FP32_DENORM_V5(1),  FP32_DENORM_V6(1), FP32_DENORM_V7(0) } },
     16717            { /*src2     */ { FP32_DENORM_V4(0), FP32_DENORM_V5(0),  FP32_DENORM_V6(1),  FP32_DENORM_V7(1), FP32_DENORM_MAX(1), FP32_DENORM_MAX(0), FP32_DENORM_V1(0), FP32_DENORM_V0(0) } },
     16718            { /* =>      */ { FP32_0(0),         FP32_0(0),          FP32_0(0),          FP32_0(0),         FP32_0(0),          FP32_0(0),          FP32_0(0),         FP32_0(0)         } },
     16719              /*mxcsr:in */ X86_MXCSR_DM,
     16720              /*128:out  */ X86_MXCSR_DM | X86_MXCSR_DE | X86_MXCSR_UE | BS3_MXCSR_DM_FIXED | BS3_MXCSR_UM_FIXED,
     16721              /*256:out  */ X86_MXCSR_DE | X86_MXCSR_PE | X86_MXCSR_UE },
     16722#define TINY_MAXx6 FP32_V(0,0x3ffffe,3) /* 6 * FP32_DENORM_MAX(0) */
     16723#define TINY_MINx6 FP32_V(0,6,0)        /* 6 * FP32_DENORM_MIN(0) */
     16724          { { /*src1     */ { FP32_DENORM_MAX(0), FP32_DENORM_MAX(0), FP32_DENORM_MAX(0), FP32_DENORM_MAX(0), FP32_DENORM_MIN(0), FP32_DENORM_MIN(0), FP32_DENORM_MIN(0), FP32_DENORM_MIN(0) } },
     16725            { /*src2     */ { FP32_2(0),          FP32_2(0),          FP32_2(0),          FP32_2(0),          FP32_2(0),          FP32_2(0),          FP32_2(0),          FP32_2(0)          } },
     16726            { /* =>      */ { TINY_MAXx6,         FP32_0(0),          FP32_0(0),          FP32_0(0)                                                                             /* unused */ } },
     16727              /*mxcsr:in */ 0,
     16728              /*128:out  */ X86_MXCSR_DE | X86_MXCSR_PE,
     16729              /*256:out  */ X86_MXCSR_DE | X86_MXCSR_UE | BS3_MXCSR_UM_FIXED },
     16730          { { /*src1     */ { FP32_DENORM_MAX(0), FP32_DENORM_MAX(0), FP32_DENORM_MAX(0), FP32_DENORM_MAX(0), FP32_DENORM_MIN(0), FP32_DENORM_MIN(0), FP32_DENORM_MIN(0), FP32_DENORM_MIN(0) } },
     16731            { /*src2     */ { FP32_2(0),          FP32_2(0),          FP32_2(0),          FP32_2(0),          FP32_2(0),          FP32_2(0),          FP32_2(0),          FP32_2(0)          } },
     16732            { /* =>      */ { TINY_MAXx6,         FP32_0(0),          FP32_0(0),          FP32_0(0)                                                                             /* unused */ } },
     16733              /*mxcsr:in */ 0,
     16734              /*128:out  */ X86_MXCSR_DE | X86_MXCSR_PE,
     16735              /*256:out  */ X86_MXCSR_DE | BS3_MXCSR_DM_FIXED },
     16736          { { /*src1     */ { FP32_DENORM_MAX(0), FP32_DENORM_MAX(0), FP32_DENORM_MAX(0), FP32_DENORM_MAX(0), FP32_DENORM_MIN(0), FP32_DENORM_MIN(0), FP32_DENORM_MIN(0), FP32_DENORM_MIN(0) } },
     16737            { /*src2     */ { FP32_2(0),          FP32_2(0),          FP32_2(0),          FP32_2(0),          FP32_2(0),          FP32_2(0),          FP32_2(0),          FP32_2(0)          } },
     16738            { /* =>      */ { TINY_MAXx6,         FP32_0(0),          FP32_0(0),          FP32_0(0),          TINY_MINx6,         FP32_0(0),          FP32_0(0),          FP32_0(0)          } },
     16739              /*mxcsr:in */ X86_MXCSR_DM | X86_MXCSR_UM,
     16740              /*128:out  */ X86_MXCSR_DE | X86_MXCSR_PE,
     16741              /*256:out  */ X86_MXCSR_DM | X86_MXCSR_UM | X86_MXCSR_DE | X86_MXCSR_PE | BS3_MXCSR_DM_FIXED | BS3_MXCSR_UM_FIXED },
     16742          { { /*src1     */ { FP32_DENORM_MAX(0), FP32_DENORM_MAX(0), FP32_DENORM_MAX(0), FP32_DENORM_MAX(0), FP32_DENORM_MIN(0), FP32_DENORM_MIN(0), FP32_DENORM_MIN(0), FP32_DENORM_MIN(0) } },
     16743            { /*src2     */ { FP32_2(0),          FP32_2(0),          FP32_2(0),          FP32_2(0),          FP32_2(0),          FP32_2(0),          FP32_2(0),          FP32_2(0)          } },
     16744            { /* =>      */ { TINY_MAXx6,         FP32_0(0),          FP32_0(0),          FP32_0(0),          TINY_MINx6,         FP32_0(0),          FP32_0(0),          FP32_0(0)          } },
     16745              /*mxcsr:in */ X86_MXCSR_FZ,
     16746              /*128:out  */ X86_MXCSR_FZ | X86_MXCSR_DE | X86_MXCSR_PE,
     16747              /*256:out  */ X86_MXCSR_FZ | X86_MXCSR_DE | X86_MXCSR_UE | BS3_MXCSR_UM_FIXED },
     16748          { { /*src1     */ { FP32_DENORM_MAX(0), FP32_DENORM_MAX(0), FP32_DENORM_MAX(0), FP32_DENORM_MAX(0), FP32_DENORM_MIN(0), FP32_DENORM_MIN(0), FP32_DENORM_MIN(0), FP32_DENORM_MIN(0) } },
     16749            { /*src2     */ { FP32_2(0),          FP32_2(0),          FP32_2(0),          FP32_2(0),          FP32_2(0),          FP32_2(0),          FP32_2(0),          FP32_2(0)          } },
     16750            { /* =>      */ { TINY_MAXx6,         FP32_0(0),          FP32_0(0),          FP32_0(0),          FP32_0(0),          FP32_0(0),          FP32_0(0),          FP32_0(0)          } },
     16751              /*mxcsr:in */ X86_MXCSR_UM | X86_MXCSR_FZ,
     16752              /*128:out  */ X86_MXCSR_UM | X86_MXCSR_FZ | X86_MXCSR_DE | X86_MXCSR_PE,
     16753              /*256:out  */ X86_MXCSR_UM | X86_MXCSR_FZ | X86_MXCSR_DE | X86_MXCSR_PE | X86_MXCSR_UE | BS3_MXCSR_UM_FIXED },
     16754#undef  TINY_MAXx6
     16755#undef  TINY_MINx6
     16756   /*
     16757    * Invalids.
     16758    */
     16759 /*16|17*/{ { /*src1     */ { FP32_QNAN_V5(0), FP32_QNAN_V2(1), FP32_QNAN_V0(1),  FP32_QNAN_V0(0),  FP32_QNAN_V3(1), FP32_QNAN_V7(0), FP32_QNAN(0),     FP32_QNAN_V4(1)  } },
     16760            { /*src2     */ { FP32_QNAN(1),    FP32_QNAN_V1(0), FP32_QNAN_MAX(0), FP32_QNAN_V6(0),  FP32_QNAN_V5(1), FP32_QNAN_V7(1), FP32_QNAN_V6(1),  FP32_QNAN_MAX(1) } },
     16761            { /* =>      */ { FP32_QNAN_V1(0), FP32_0(0),       FP32_0(0),        FP32_0(0),        FP32_QNAN_V7(1), FP32_0(0),       FP32_0(0),        FP32_0(0)        } },
     16762              /*mxcsr:in */ 0,                                /* output swaps src2 input pairs?!? -- result from i7-10700 */
     16763              /*128:out  */ 0,
     16764              /*256:out  */ 0 },
     16765          { { /*src1     */ { FP32_SNAN_V5(0), FP32_SNAN_V2(1),  FP32_SNAN_V0(1),  FP32_SNAN_V0(0),  FP32_SNAN_V3(1), FP32_SNAN_V7(0), FP32_SNAN(0),     FP32_SNAN_V4(1)  } },
     16766            { /*src2     */ { FP32_SNAN(1),    FP32_SNAN_V1(0),  FP32_SNAN_MAX(0), FP32_SNAN_V6(0),  FP32_SNAN_V5(1), FP32_SNAN_V7(1), FP32_SNAN_V6(1),  FP32_SNAN_MAX(1) } },
     16767            { /* =>      */ { FP32_QNAN_V1(0), FP32_0(0),        FP32_0(0),        FP32_0(0),        FP32_QNAN_V7(1), FP32_0(0),       FP32_0(0),        FP32_0(0)        } },
     16768              /*mxcsr:in */ 0,                                /* output has swapped src2 input pairs?!? -- result from i7-10700 */
     16769              /*128:out  */ X86_MXCSR_IE,
     16770              /*256:out  */ X86_MXCSR_IE },
     16771          { { /*src1     */ { FP32_1(0),               FP32_1(0), FP32_1(0), FP32_1(0), FP32_1(0),        FP32_1(0), FP32_1(0), FP32_1(0)        } },
     16772            { /*src2     */ { FP32_1(0),               FP32_1(0), FP32_1(0), FP32_1(0), FP32_1(0),        FP32_1(0), FP32_1(0), FP32_QNAN_MAX(1) } },
     16773            { /* =>      */ { FP32_V(0,0x400000,0x80), FP32_0(0), FP32_0(0), FP32_0(0), FP32_QNAN_MAX(1), FP32_0(0), FP32_0(0), FP32_0(0)        } },
     16774                              /*3.0*/
     16775              /*mxcsr:in */ 0,                                /* output grabs the one NaN -- result from i7-10700 */
     16776              /*128:out  */ 0,
     16777              /*256:out  */ 0 },
     16778          { { /*src1     */ { FP32_1(0),               FP32_1(0), FP32_1(0), FP32_1(0), FP32_1(0),               FP32_1(0), FP32_1(0), FP32_1(0) } },
     16779            { /*src2     */ { FP32_1(0),               FP32_1(0), FP32_1(0), FP32_1(0), FP32_QNAN_MAX(1),        FP32_1(0), FP32_1(0), FP32_1(0) } },
     16780            { /* =>      */ { FP32_V(0,0x400000,0x80), FP32_0(0), FP32_0(0), FP32_0(0), FP32_V(0,0x400000,0x80), FP32_0(0), FP32_0(0), FP32_0(0) } },
     16781                              /*3.0*/                                                   /*3.0*/
     16782              /*mxcsr:in */ 0,                                /* the NaN isn't in the specified set of calculations */
     16783              /*128:out  */ 0,
     16784              /*256:out  */ 0 },
     16785          { { /*src1     */ { FP32_1(0),               FP32_1(0), FP32_1(0), FP32_1(0), FP32_1(0),        FP32_1(0), FP32_QNAN_MAX(1), FP32_1(0) } },
     16786            { /*src2     */ { FP32_1(0),               FP32_1(0), FP32_1(0), FP32_1(0), FP32_1(0),        FP32_1(0), FP32_1(0),        FP32_1(0) } },
     16787            { /* =>      */ { FP32_V(0,0x400000,0x80), FP32_0(0), FP32_0(0), FP32_0(0), FP32_QNAN_MAX(1), FP32_0(0), FP32_0(0),        FP32_0(0) } },
     16788                              /*3.0*/
     16789              /*mxcsr:in */ 0,                                /* output grabs the one NaN -- result from i7-10700 */
     16790              /*128:out  */ 0,
     16791              /*256:out  */ 0 },
     16792          { { /*src1     */ { FP32_1(0),               FP32_1(0), FP32_1(0), FP32_1(0), FP32_1(0),        FP32_1(0), FP32_1(0), FP32_1(0)        } },
     16793            { /*src2     */ { FP32_1(0),               FP32_1(0), FP32_1(0), FP32_1(0), FP32_1(0),        FP32_1(0), FP32_1(0), FP32_SNAN_MAX(1) } },
     16794            { /* =>      */ { FP32_V(0,0x400000,0x80), FP32_0(0), FP32_0(0), FP32_0(0), FP32_QNAN_MAX(1), FP32_0(0), FP32_0(0), FP32_0(0)        } },
     16795                              /*3.0*/
     16796              /*mxcsr:in */ 0,                                /* output grabs the one NaN -- result from i7-10700 */
     16797              /*128:out  */ 0,
     16798              /*256:out  */ X86_MXCSR_IE },
     16799    };
     16800    static BS3CPUINSTR4_TEST1_VALUES_PS_T const s_aValuesSR[] =
     16801    {
     16802    /*
     16803     * Zero.
     16804     */
     16805    /* 0*/{ { /*unused   */ { FP32_ROW_UNUSED } },
     16806            { /*src1     */ { FP32_0(0),   FP32_0(0),   FP32_0(0),   FP32_0(0),   FP32_0(1),   FP32_0(1),   FP32_0(1),   FP32_0(1)   } },
     16807            { /* =>      */ { FP32_0(0),   FP32_0(0),   FP32_0(0),   FP32_0(0),   FP32_0(0),   FP32_0(0),   FP32_0(0),   FP32_0(0)   } },
     16808              /*mxcsr:in */ 0,
     16809              /*128:out  */ 0,
     16810              /*256:out  */ 0 },
     16811    /*
     16812     * Infinity.
     16813     */
     16814    /* 1*/{ { /*src1     */ { FP32_ROW_UNUSED } },
     16815            { /*unused   */ { FP32_INF(0), FP32_INF(0), FP32_INF(0), FP32_INF(0), FP32_INF(1), FP32_INF(1), FP32_INF(1), FP32_INF(1) } },
     16816            { /* =>      */ { FP32_INF(0), FP32_0(0),   FP32_0(0),   FP32_0(0),   FP32_INF(0), FP32_0(0),   FP32_0(0),   FP32_0(0)   } },
     16817              /*mxcsr:in */ 0,
     16818              /*128:out  */ 0,
     16819              /*256:out  */ 0 },
     16820    };
     16821
     16822    static BS3CPUINSTR4_TEST1_T const s_aTests16[] =
     16823    {
     16824        {  bs3CpuInstr4_dpps_XMM1_XMM2_000h_icebp_c16,        255, RM_REG, T_SSE4_1,  XMM1, XMM1, XMM2,  PASS_ELEMENTS(s_aValues00) },
     16825        {  bs3CpuInstr4_dpps_XMM1_XMM2_0E1h_icebp_c16,        255, RM_REG, T_SSE4_1,  XMM1, XMM1, XMM2,  PASS_ELEMENTS(s_aValuesE1) },
     16826        {  bs3CpuInstr4_dpps_XMM1_XMM2_0FFh_icebp_c16,        255, RM_REG, T_SSE4_1,  XMM1, XMM1, XMM2,  PASS_ELEMENTS(s_aValuesFF) },
     16827        {  bs3CpuInstr4_dpps_XMM1_FSxBX_000h_icebp_c16,       255, RM_MEM, T_SSE4_1,  XMM1, XMM1, FSxBX, PASS_ELEMENTS(s_aValues00) },
     16828        {  bs3CpuInstr4_dpps_XMM1_FSxBX_0E1h_icebp_c16,       255, RM_MEM, T_SSE4_1,  XMM1, XMM1, FSxBX, PASS_ELEMENTS(s_aValuesE1) },
     16829        {  bs3CpuInstr4_dpps_XMM1_FSxBX_0FFh_icebp_c16,       255, RM_MEM, T_SSE4_1,  XMM1, XMM1, FSxBX, PASS_ELEMENTS(s_aValuesFF) },
     16830
     16831        {  bs3CpuInstr4_vdpps_XMM1_XMM2_XMM3_000h_icebp_c16,  255, RM_REG, T_AVX_128, XMM1, XMM2, XMM3,  PASS_ELEMENTS(s_aValues00) },
     16832        {  bs3CpuInstr4_vdpps_XMM1_XMM2_XMM3_0E1h_icebp_c16,  255, RM_REG, T_AVX_128, XMM1, XMM2, XMM3,  PASS_ELEMENTS(s_aValuesE1) },
     16833        {  bs3CpuInstr4_vdpps_XMM1_XMM2_XMM3_0FFh_icebp_c16,  255, RM_REG, T_AVX_128, XMM1, XMM2, XMM3,  PASS_ELEMENTS(s_aValuesFF) },
     16834        {  bs3CpuInstr4_vdpps_XMM1_XMM2_FSxBX_000h_icebp_c16, 255, RM_MEM, T_AVX_128, XMM1, XMM2, FSxBX, PASS_ELEMENTS(s_aValues00) },
     16835        {  bs3CpuInstr4_vdpps_XMM1_XMM2_FSxBX_0E1h_icebp_c16, 255, RM_MEM, T_AVX_128, XMM1, XMM2, FSxBX, PASS_ELEMENTS(s_aValuesE1) },
     16836        {  bs3CpuInstr4_vdpps_XMM1_XMM2_FSxBX_0FFh_icebp_c16, 255, RM_MEM, T_AVX_128, XMM1, XMM2, FSxBX, PASS_ELEMENTS(s_aValuesFF) },
     16837
     16838        {  bs3CpuInstr4_vdpps_YMM1_YMM2_YMM3_000h_icebp_c16,  255, RM_REG, T_AVX_256, YMM1, YMM2, YMM3,  PASS_ELEMENTS(s_aValues00) },
     16839        {  bs3CpuInstr4_vdpps_YMM1_YMM2_YMM3_0E1h_icebp_c16,  255, RM_REG, T_AVX_256, YMM1, YMM2, YMM3,  PASS_ELEMENTS(s_aValuesE1) },
     16840        {  bs3CpuInstr4_vdpps_YMM1_YMM2_YMM3_0FFh_icebp_c16,  255, RM_REG, T_AVX_256, YMM1, YMM2, YMM3,  PASS_ELEMENTS(s_aValuesFF) },
     16841        {  bs3CpuInstr4_vdpps_YMM1_YMM2_FSxBX_000h_icebp_c16, 255, RM_MEM, T_AVX_256, YMM1, YMM2, FSxBX, PASS_ELEMENTS(s_aValues00) },
     16842        {  bs3CpuInstr4_vdpps_YMM1_YMM2_FSxBX_0E1h_icebp_c16, 255, RM_MEM, T_AVX_256, YMM1, YMM2, FSxBX, PASS_ELEMENTS(s_aValuesE1) },
     16843        {  bs3CpuInstr4_vdpps_YMM1_YMM2_FSxBX_0FFh_icebp_c16, 255, RM_MEM, T_AVX_256, YMM1, YMM2, FSxBX, PASS_ELEMENTS(s_aValuesFF) },
     16844
     16845        {  bs3CpuInstr4_dpps_XMM1_XMM1_0E1h_icebp_c16,        255, RM_REG, T_SSE4_1,  XMM1, XMM1, NOREG, PASS_ELEMENTS(s_aValuesSR) },
     16846
     16847        {  bs3CpuInstr4_vdpps_XMM1_XMM1_XMM1_0E1h_icebp_c16,  255, RM_REG, T_AVX_128, XMM1, XMM1, NOREG, PASS_ELEMENTS(s_aValuesSR) },
     16848        {  bs3CpuInstr4_vdpps_XMM1_XMM1_XMM2_0E1h_icebp_c16,  255, RM_REG, T_AVX_128, XMM1, XMM1, XMM2,  PASS_ELEMENTS(s_aValuesE1) },
     16849        {  bs3CpuInstr4_vdpps_XMM1_XMM2_XMM1_0E1h_icebp_c16,  255, RM_REG, T_AVX_128, XMM1, XMM2, XMM1,  PASS_ELEMENTS(s_aValuesE1) },
     16850        {  bs3CpuInstr4_vdpps_XMM1_XMM2_XMM2_0E1h_icebp_c16,  255, RM_REG, T_AVX_128, XMM1, XMM2, NOREG, PASS_ELEMENTS(s_aValuesSR) },
     16851        {  bs3CpuInstr4_vdpps_XMM1_XMM1_FSxBX_0E1h_icebp_c16, 255, RM_MEM, T_AVX_128, XMM1, XMM1, FSxBX, PASS_ELEMENTS(s_aValuesE1) },
     16852
     16853        {  bs3CpuInstr4_vdpps_YMM1_YMM1_YMM1_0E1h_icebp_c16,  255, RM_REG, T_AVX_256, YMM1, YMM1, NOREG, PASS_ELEMENTS(s_aValuesSR) },
     16854        {  bs3CpuInstr4_vdpps_YMM1_YMM1_YMM2_0E1h_icebp_c16,  255, RM_REG, T_AVX_256, YMM1, YMM1, YMM2,  PASS_ELEMENTS(s_aValuesE1) },
     16855        {  bs3CpuInstr4_vdpps_YMM1_YMM2_YMM1_0E1h_icebp_c16,  255, RM_REG, T_AVX_256, YMM1, YMM2, YMM1,  PASS_ELEMENTS(s_aValuesE1) },
     16856        {  bs3CpuInstr4_vdpps_YMM1_YMM2_YMM2_0E1h_icebp_c16,  255, RM_REG, T_AVX_256, YMM1, YMM2, NOREG, PASS_ELEMENTS(s_aValuesSR) },
     16857        {  bs3CpuInstr4_vdpps_YMM1_YMM1_FSxBX_0E1h_icebp_c16, 255, RM_MEM, T_AVX_256, YMM1, YMM1, FSxBX, PASS_ELEMENTS(s_aValuesE1) },
     16858    };
     16859    static BS3CPUINSTR4_TEST1_T const s_aTests32[] =
     16860    {
     16861        {  bs3CpuInstr4_dpps_XMM1_XMM2_000h_icebp_c32,        255, RM_REG, T_SSE4_1,  XMM1, XMM1, XMM2,  PASS_ELEMENTS(s_aValues00) },
     16862        {  bs3CpuInstr4_dpps_XMM1_XMM2_0E1h_icebp_c32,        255, RM_REG, T_SSE4_1,  XMM1, XMM1, XMM2,  PASS_ELEMENTS(s_aValuesE1) },
     16863        {  bs3CpuInstr4_dpps_XMM1_XMM2_0FFh_icebp_c32,        255, RM_REG, T_SSE4_1,  XMM1, XMM1, XMM2,  PASS_ELEMENTS(s_aValuesFF) },
     16864        {  bs3CpuInstr4_dpps_XMM1_FSxBX_000h_icebp_c32,       255, RM_MEM, T_SSE4_1,  XMM1, XMM1, FSxBX, PASS_ELEMENTS(s_aValues00) },
     16865        {  bs3CpuInstr4_dpps_XMM1_FSxBX_0E1h_icebp_c32,       255, RM_MEM, T_SSE4_1,  XMM1, XMM1, FSxBX, PASS_ELEMENTS(s_aValuesE1) },
     16866        {  bs3CpuInstr4_dpps_XMM1_FSxBX_0FFh_icebp_c32,       255, RM_MEM, T_SSE4_1,  XMM1, XMM1, FSxBX, PASS_ELEMENTS(s_aValuesFF) },
     16867
     16868        {  bs3CpuInstr4_vdpps_XMM1_XMM2_XMM3_000h_icebp_c32,  255, RM_REG, T_AVX_128, XMM1, XMM2, XMM3,  PASS_ELEMENTS(s_aValues00) },
     16869        {  bs3CpuInstr4_vdpps_XMM1_XMM2_XMM3_0E1h_icebp_c32,  255, RM_REG, T_AVX_128, XMM1, XMM2, XMM3,  PASS_ELEMENTS(s_aValuesE1) },
     16870        {  bs3CpuInstr4_vdpps_XMM1_XMM2_XMM3_0FFh_icebp_c32,  255, RM_REG, T_AVX_128, XMM1, XMM2, XMM3,  PASS_ELEMENTS(s_aValuesFF) },
     16871        {  bs3CpuInstr4_vdpps_XMM1_XMM2_FSxBX_000h_icebp_c32, 255, RM_MEM, T_AVX_128, XMM1, XMM2, FSxBX, PASS_ELEMENTS(s_aValues00) },
     16872        {  bs3CpuInstr4_vdpps_XMM1_XMM2_FSxBX_0E1h_icebp_c32, 255, RM_MEM, T_AVX_128, XMM1, XMM2, FSxBX, PASS_ELEMENTS(s_aValuesE1) },
     16873        {  bs3CpuInstr4_vdpps_XMM1_XMM2_FSxBX_0FFh_icebp_c32, 255, RM_MEM, T_AVX_128, XMM1, XMM2, FSxBX, PASS_ELEMENTS(s_aValuesFF) },
     16874
     16875        {  bs3CpuInstr4_vdpps_YMM1_YMM2_YMM3_000h_icebp_c32,  255, RM_REG, T_AVX_256, YMM1, YMM2, YMM3,  PASS_ELEMENTS(s_aValues00) },
     16876        {  bs3CpuInstr4_vdpps_YMM1_YMM2_YMM3_0E1h_icebp_c32,  255, RM_REG, T_AVX_256, YMM1, YMM2, YMM3,  PASS_ELEMENTS(s_aValuesE1) },
     16877        {  bs3CpuInstr4_vdpps_YMM1_YMM2_YMM3_0FFh_icebp_c32,  255, RM_REG, T_AVX_256, YMM1, YMM2, YMM3,  PASS_ELEMENTS(s_aValuesFF) },
     16878        {  bs3CpuInstr4_vdpps_YMM1_YMM2_FSxBX_000h_icebp_c32, 255, RM_MEM, T_AVX_256, YMM1, YMM2, FSxBX, PASS_ELEMENTS(s_aValues00) },
     16879        {  bs3CpuInstr4_vdpps_YMM1_YMM2_FSxBX_0E1h_icebp_c32, 255, RM_MEM, T_AVX_256, YMM1, YMM2, FSxBX, PASS_ELEMENTS(s_aValuesE1) },
     16880        {  bs3CpuInstr4_vdpps_YMM1_YMM2_FSxBX_0FFh_icebp_c32, 255, RM_MEM, T_AVX_256, YMM1, YMM2, FSxBX, PASS_ELEMENTS(s_aValuesFF) },
     16881
     16882        {  bs3CpuInstr4_dpps_XMM1_XMM1_0E1h_icebp_c32,        255, RM_REG, T_SSE4_1,  XMM1, XMM1, NOREG, PASS_ELEMENTS(s_aValuesSR) },
     16883
     16884        {  bs3CpuInstr4_vdpps_XMM1_XMM1_XMM1_0E1h_icebp_c32,  255, RM_REG, T_AVX_128, XMM1, XMM1, NOREG, PASS_ELEMENTS(s_aValuesSR) },
     16885        {  bs3CpuInstr4_vdpps_XMM1_XMM1_XMM2_0E1h_icebp_c32,  255, RM_REG, T_AVX_128, XMM1, XMM1, XMM2,  PASS_ELEMENTS(s_aValuesE1) },
     16886        {  bs3CpuInstr4_vdpps_XMM1_XMM2_XMM1_0E1h_icebp_c32,  255, RM_REG, T_AVX_128, XMM1, XMM2, XMM1,  PASS_ELEMENTS(s_aValuesE1) },
     16887        {  bs3CpuInstr4_vdpps_XMM1_XMM2_XMM2_0E1h_icebp_c32,  255, RM_REG, T_AVX_128, XMM1, XMM2, NOREG, PASS_ELEMENTS(s_aValuesSR) },
     16888        {  bs3CpuInstr4_vdpps_XMM1_XMM1_FSxBX_0E1h_icebp_c32, 255, RM_MEM, T_AVX_128, XMM1, XMM1, FSxBX, PASS_ELEMENTS(s_aValuesE1) },
     16889
     16890        {  bs3CpuInstr4_vdpps_YMM1_YMM1_YMM1_0E1h_icebp_c32,  255, RM_REG, T_AVX_256, YMM1, YMM1, NOREG, PASS_ELEMENTS(s_aValuesSR) },
     16891        {  bs3CpuInstr4_vdpps_YMM1_YMM1_YMM2_0E1h_icebp_c32,  255, RM_REG, T_AVX_256, YMM1, YMM1, YMM2,  PASS_ELEMENTS(s_aValuesE1) },
     16892        {  bs3CpuInstr4_vdpps_YMM1_YMM2_YMM1_0E1h_icebp_c32,  255, RM_REG, T_AVX_256, YMM1, YMM2, YMM1,  PASS_ELEMENTS(s_aValuesE1) },
     16893        {  bs3CpuInstr4_vdpps_YMM1_YMM2_YMM2_0E1h_icebp_c32,  255, RM_REG, T_AVX_256, YMM1, YMM2, NOREG, PASS_ELEMENTS(s_aValuesSR) },
     16894        {  bs3CpuInstr4_vdpps_YMM1_YMM1_FSxBX_0E1h_icebp_c32, 255, RM_MEM, T_AVX_256, YMM1, YMM1, FSxBX, PASS_ELEMENTS(s_aValuesE1) },
     16895    };
     16896    static BS3CPUINSTR4_TEST1_T const s_aTests64[] =
     16897    {
     16898        {  bs3CpuInstr4_dpps_XMM1_XMM2_000h_icebp_c64,        255, RM_REG, T_SSE4_1,  XMM1, XMM1, XMM2,  PASS_ELEMENTS(s_aValues00) },
     16899        {  bs3CpuInstr4_dpps_XMM1_XMM2_0E1h_icebp_c64,        255, RM_REG, T_SSE4_1,  XMM1, XMM1, XMM2,  PASS_ELEMENTS(s_aValuesE1) },
     16900        {  bs3CpuInstr4_dpps_XMM1_XMM2_0FFh_icebp_c64,        255, RM_REG, T_SSE4_1,  XMM1, XMM1, XMM2,  PASS_ELEMENTS(s_aValuesFF) },
     16901        {  bs3CpuInstr4_dpps_XMM1_FSxBX_000h_icebp_c64,       255, RM_MEM, T_SSE4_1,  XMM1, XMM1, FSxBX, PASS_ELEMENTS(s_aValues00) },
     16902        {  bs3CpuInstr4_dpps_XMM1_FSxBX_0E1h_icebp_c64,       255, RM_MEM, T_SSE4_1,  XMM1, XMM1, FSxBX, PASS_ELEMENTS(s_aValuesE1) },
     16903        {  bs3CpuInstr4_dpps_XMM1_FSxBX_0FFh_icebp_c64,       255, RM_MEM, T_SSE4_1,  XMM1, XMM1, FSxBX, PASS_ELEMENTS(s_aValuesFF) },
     16904        {  bs3CpuInstr4_dpps_XMM8_XMM9_0E1h_icebp_c64,        255, RM_REG, T_SSE4_1,  XMM8, XMM8, XMM9,  PASS_ELEMENTS(s_aValuesE1) },
     16905        {  bs3CpuInstr4_dpps_XMM8_FSxBX_0E1h_icebp_c64,       255, RM_MEM, T_SSE4_1,  XMM8, XMM8, FSxBX, PASS_ELEMENTS(s_aValuesE1) },
     16906
     16907        {  bs3CpuInstr4_vdpps_XMM1_XMM2_XMM3_000h_icebp_c64,  255, RM_REG, T_AVX_128, XMM1, XMM2, XMM3,  PASS_ELEMENTS(s_aValues00) },
     16908        {  bs3CpuInstr4_vdpps_XMM1_XMM2_XMM3_0E1h_icebp_c64,  255, RM_REG, T_AVX_128, XMM1, XMM2, XMM3,  PASS_ELEMENTS(s_aValuesE1) },
     16909        {  bs3CpuInstr4_vdpps_XMM1_XMM2_XMM3_0FFh_icebp_c64,  255, RM_REG, T_AVX_128, XMM1, XMM2, XMM3,  PASS_ELEMENTS(s_aValuesFF) },
     16910        {  bs3CpuInstr4_vdpps_XMM1_XMM2_FSxBX_000h_icebp_c64, 255, RM_MEM, T_AVX_128, XMM1, XMM2, FSxBX, PASS_ELEMENTS(s_aValues00) },
     16911        {  bs3CpuInstr4_vdpps_XMM1_XMM2_FSxBX_0E1h_icebp_c64, 255, RM_MEM, T_AVX_128, XMM1, XMM2, FSxBX, PASS_ELEMENTS(s_aValuesE1) },
     16912        {  bs3CpuInstr4_vdpps_XMM1_XMM2_FSxBX_0FFh_icebp_c64, 255, RM_MEM, T_AVX_128, XMM1, XMM2, FSxBX, PASS_ELEMENTS(s_aValuesFF) },
     16913        {  bs3CpuInstr4_vdpps_XMM8_XMM9_XMM10_0E1h_icebp_c64, 255, RM_REG, T_AVX_128, XMM8, XMM9, XMM10, PASS_ELEMENTS(s_aValuesE1) },
     16914        {  bs3CpuInstr4_vdpps_XMM8_XMM9_FSxBX_0E1h_icebp_c64, 255, RM_MEM, T_AVX_128, XMM8, XMM9, FSxBX, PASS_ELEMENTS(s_aValuesE1) },
     16915
     16916        {  bs3CpuInstr4_vdpps_YMM1_YMM2_YMM3_000h_icebp_c64,  255, RM_REG, T_AVX_256, YMM1, YMM2, YMM3,  PASS_ELEMENTS(s_aValues00) },
     16917        {  bs3CpuInstr4_vdpps_YMM1_YMM2_YMM3_0E1h_icebp_c64,  255, RM_REG, T_AVX_256, YMM1, YMM2, YMM3,  PASS_ELEMENTS(s_aValuesE1) },
     16918        {  bs3CpuInstr4_vdpps_YMM1_YMM2_YMM3_0FFh_icebp_c64,  255, RM_REG, T_AVX_256, YMM1, YMM2, YMM3,  PASS_ELEMENTS(s_aValuesFF) },
     16919        {  bs3CpuInstr4_vdpps_YMM1_YMM2_FSxBX_000h_icebp_c64, 255, RM_MEM, T_AVX_256, YMM1, YMM2, FSxBX, PASS_ELEMENTS(s_aValues00) },
     16920        {  bs3CpuInstr4_vdpps_YMM1_YMM2_FSxBX_0E1h_icebp_c64, 255, RM_MEM, T_AVX_256, YMM1, YMM2, FSxBX, PASS_ELEMENTS(s_aValuesE1) },
     16921        {  bs3CpuInstr4_vdpps_YMM1_YMM2_FSxBX_0FFh_icebp_c64, 255, RM_MEM, T_AVX_256, YMM1, YMM2, FSxBX, PASS_ELEMENTS(s_aValuesFF) },
     16922        {  bs3CpuInstr4_vdpps_YMM8_YMM9_YMM10_0E1h_icebp_c64, 255, RM_REG, T_AVX_256, YMM8, YMM9, YMM10, PASS_ELEMENTS(s_aValuesE1) },
     16923        {  bs3CpuInstr4_vdpps_YMM8_YMM9_FSxBX_0E1h_icebp_c64, 255, RM_MEM, T_AVX_256, YMM8, YMM9, FSxBX, PASS_ELEMENTS(s_aValuesE1) },
     16924
     16925        {  bs3CpuInstr4_dpps_XMM1_XMM1_0E1h_icebp_c64,        255, RM_REG, T_SSE4_1,  XMM1, XMM1, NOREG, PASS_ELEMENTS(s_aValuesSR) },
     16926        {  bs3CpuInstr4_dpps_XMM8_XMM8_0E1h_icebp_c64,        255, RM_REG, T_SSE4_1,  XMM8, XMM8, NOREG, PASS_ELEMENTS(s_aValuesSR) },
     16927
     16928        {  bs3CpuInstr4_vdpps_XMM1_XMM1_XMM1_0E1h_icebp_c64,  255, RM_REG, T_AVX_128, XMM1, XMM1, NOREG, PASS_ELEMENTS(s_aValuesSR) },
     16929        {  bs3CpuInstr4_vdpps_XMM1_XMM1_XMM2_0E1h_icebp_c64,  255, RM_REG, T_AVX_128, XMM1, XMM1, XMM2,  PASS_ELEMENTS(s_aValuesE1) },
     16930        {  bs3CpuInstr4_vdpps_XMM1_XMM2_XMM1_0E1h_icebp_c64,  255, RM_REG, T_AVX_128, XMM1, XMM2, XMM1,  PASS_ELEMENTS(s_aValuesE1) },
     16931        {  bs3CpuInstr4_vdpps_XMM1_XMM2_XMM2_0E1h_icebp_c64,  255, RM_REG, T_AVX_128, XMM1, XMM2, NOREG, PASS_ELEMENTS(s_aValuesSR) },
     16932        {  bs3CpuInstr4_vdpps_XMM1_XMM1_FSxBX_0E1h_icebp_c64, 255, RM_MEM, T_AVX_128, XMM1, XMM1, FSxBX, PASS_ELEMENTS(s_aValuesE1) },
     16933        {  bs3CpuInstr4_vdpps_XMM8_XMM8_XMM8_0E1h_icebp_c64,  255, RM_REG, T_AVX_128, XMM8, XMM8, NOREG, PASS_ELEMENTS(s_aValuesSR) },
     16934        {  bs3CpuInstr4_vdpps_XMM8_XMM8_FSxBX_0E1h_icebp_c64, 255, RM_MEM, T_AVX_128, XMM8, XMM8, FSxBX, PASS_ELEMENTS(s_aValuesE1) },
     16935
     16936        {  bs3CpuInstr4_vdpps_YMM1_YMM1_YMM1_0E1h_icebp_c64,  255, RM_REG, T_AVX_256, YMM1, YMM1, NOREG, PASS_ELEMENTS(s_aValuesSR) },
     16937        {  bs3CpuInstr4_vdpps_YMM1_YMM1_YMM2_0E1h_icebp_c64,  255, RM_REG, T_AVX_256, YMM1, YMM1, YMM2,  PASS_ELEMENTS(s_aValuesE1) },
     16938        {  bs3CpuInstr4_vdpps_YMM1_YMM2_YMM1_0E1h_icebp_c64,  255, RM_REG, T_AVX_256, YMM1, YMM2, YMM1,  PASS_ELEMENTS(s_aValuesE1) },
     16939        {  bs3CpuInstr4_vdpps_YMM1_YMM2_YMM2_0E1h_icebp_c64,  255, RM_REG, T_AVX_256, YMM1, YMM2, NOREG, PASS_ELEMENTS(s_aValuesSR) },
     16940        {  bs3CpuInstr4_vdpps_YMM1_YMM1_FSxBX_0E1h_icebp_c64, 255, RM_MEM, T_AVX_256, YMM1, YMM1, FSxBX, PASS_ELEMENTS(s_aValuesE1) },
     16941        {  bs3CpuInstr4_vdpps_YMM8_YMM8_YMM8_0E1h_icebp_c64,  255, RM_REG, T_AVX_256, YMM8, YMM8, NOREG, PASS_ELEMENTS(s_aValuesSR) },
     16942        {  bs3CpuInstr4_vdpps_YMM8_YMM8_FSxBX_0E1h_icebp_c64, 255, RM_MEM, T_AVX_256, YMM8, YMM8, FSxBX, PASS_ELEMENTS(s_aValuesE1) },
     16943    };
     16944
     16945    static BS3CPUINSTR4_TEST1_MODE_T const s_aTests[3] = BS3CPUINSTR4_TEST1_MODES_INIT(s_aTests16,s_aTests32,s_aTests64);
     16946    unsigned const                         iTest       = BS3CPUINSTR4_TEST_MODES_INDEX(bMode);
     16947    return bs3CpuInstr4_WorkerTestType1(bMode,s_aTests[iTest].paTests,s_aTests[iTest].cTests,
     16948                                        g_aXcptConfig4,RT_ELEMENTS(g_aXcptConfig4));
     16949}
     16950
     16951
     16952/*
    1637916953 * CVTPI2PS.
    1638016954 */
     
    2005620630    };
    2005720631
    20058 #define TODO_CVTDQ2PD_M64_IEM /** @todo testing IEM fix for unexpected #GP */
    2005920632    static BS3CPUINSTR4_TEST1_T const s_aTests16[] =
    2006020633    {
     
    2171022283        { "[v]rsqrtps",     bs3CpuInstr4_v_rsqrtps,   0 },
    2171122284        { "[v]rsqrtss",     bs3CpuInstr4_v_rsqrtss,   0 },
     22285        { "[v]dpps",        bs3CpuInstr4_v_dpps,      0 },
    2171222286        { "cvtpi2ps",       bs3CpuInstr4_cvtpi2ps,    0 },
    2171322287        { "cvtps2pi",       bs3CpuInstr4_cvtps2pi,    0 },
Note: See TracChangeset for help on using the changeset viewer.

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette