VirtualBox

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


Ignore:
Timestamp:
Nov 12, 2024 5:32:50 AM (2 months ago)
Author:
vboxsync
Message:

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

Note: this exposes that IEM [v]dppd 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.)

  • also add missed [v]dpps DAZ tests
Location:
trunk/src/VBox/ValidationKit/bootsectors
Files:
2 edited

Legend:

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

    r106943 r106947  
    919919EMIT_INSTR_PLUS_ICEBP_C64   vdpps, YMM8, YMM8,  YMM8,  0E1h
    920920EMIT_INSTR_PLUS_ICEBP_C64   vdpps, YMM8, YMM8,  FSxBX, 0E1h
     921
     922;
     923;; dppd
     924;
     925EMIT_INSTR_PLUS_ICEBP       dppd,  XMM1, XMM2,  000h
     926EMIT_INSTR_PLUS_ICEBP       dppd,  XMM1, XMM2,  0FFh
     927EMIT_INSTR_PLUS_ICEBP       dppd,  XMM1, XMM2,  022h
     928EMIT_INSTR_PLUS_ICEBP       dppd,  XMM1, FSxBX, 000h
     929EMIT_INSTR_PLUS_ICEBP       dppd,  XMM1, FSxBX, 0FFh
     930EMIT_INSTR_PLUS_ICEBP       dppd,  XMM1, FSxBX, 022h
     931EMIT_INSTR_PLUS_ICEBP_C64   dppd,  XMM8, XMM9,  022h
     932EMIT_INSTR_PLUS_ICEBP_C64   dppd,  XMM8, FSxBX, 022h
     933
     934EMIT_INSTR_PLUS_ICEBP       vdppd, XMM1, XMM2,  XMM3,  000h
     935EMIT_INSTR_PLUS_ICEBP       vdppd, XMM1, XMM2,  XMM3,  0FFh
     936EMIT_INSTR_PLUS_ICEBP       vdppd, XMM1, XMM2,  XMM3,  022h
     937EMIT_INSTR_PLUS_ICEBP       vdppd, XMM1, XMM2,  FSxBX, 000h
     938EMIT_INSTR_PLUS_ICEBP       vdppd, XMM1, XMM2,  FSxBX, 0FFh
     939EMIT_INSTR_PLUS_ICEBP       vdppd, XMM1, XMM2,  FSxBX, 022h
     940EMIT_INSTR_PLUS_ICEBP_C64   vdppd, XMM8, XMM9,  XMM10, 022h
     941EMIT_INSTR_PLUS_ICEBP_C64   vdppd, XMM8, XMM9,  FSxBX, 022h
     942
     943EMIT_INSTR_PLUS_ICEBP       dppd,  XMM1, XMM1,  022h
     944EMIT_INSTR_PLUS_ICEBP_C64   dppd,  XMM8, XMM8,  022h
     945
     946EMIT_INSTR_PLUS_ICEBP       vdppd, XMM1, XMM1,  XMM1,  022h
     947EMIT_INSTR_PLUS_ICEBP       vdppd, XMM1, XMM2,  XMM1,  022h
     948EMIT_INSTR_PLUS_ICEBP       vdppd, XMM1, XMM1,  XMM2,  022h
     949EMIT_INSTR_PLUS_ICEBP       vdppd, XMM1, XMM2,  XMM2,  022h
     950EMIT_INSTR_PLUS_ICEBP       vdppd, XMM1, XMM1,  FSxBX, 022h
     951EMIT_INSTR_PLUS_ICEBP_C64   vdppd, XMM8, XMM8,  XMM8,  022h
     952EMIT_INSTR_PLUS_ICEBP_C64   vdppd, XMM8, XMM8,  FSxBX, 022h
    921953
    922954;
  • trunk/src/VBox/ValidationKit/bootsectors/bs3-cpu-instr-4.c32

    r106943 r106947  
    1644616446     */
    1644716447    };
     16448    static BS3CPUINSTR4_TEST1_VALUES_PS_T const s_aValuesE1[] =
     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_0(0),   FP32_0(0),   FP32_0(0),   FP32_INF(0), FP32_0(0),   FP32_0(0),   FP32_0(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_0(0),   FP32_0(0),   FP32_0(0),   FP32_QNAN(1), FP32_0(0),   FP32_0(0),   FP32_0(0)   } },
     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_0(0),   FP32_0(0),   FP32_0(0),   FP32_0(0),   FP32_0(0), FP32_0(0), FP32_0(0) } },
     16483              /*mxcsr:in */ 0,                                /* no IE: the oo * 0 dot-product is skipped */
     16484              /*128:out  */ 0,
     16485              /*256:out  */ 0 },
     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_0(0),        FP32_0(0),        FP32_0(0),        FP32_INF(1),      FP32_0(0),        FP32_0(0),        FP32_0(0)        } },
     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          { { /*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) } },
     16493            { /*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) } },
     16494            { /* =>      */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0)                                                            /* unused */ } },
     16495              /*mxcsr:in */ 0,                                /* big * big = oo (OE); big * -big = -oo (OE) */
     16496              /*128:out  */ 0,                                /* OE hits in multiply step, before IE in addition step */
     16497              /*256:out  */ X86_MXCSR_OE | X86_MXCSR_PE | BS3_MXCSR_OM_FIXED },
     16498          { { /*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) } },
     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), FP32_INF(1),      FP32_0(0),        FP32_0(0),        FP32_0(0)        } },
     16501              /*mxcsr:in */ X86_MXCSR_OM | X86_MXCSR_PM,      /* big * big = oo (OE) is skipped; big * -big = -oo (OE); -oo + -oo = -oo (!IE) */
     16502              /*128:out  */ X86_MXCSR_OM | X86_MXCSR_PM,
     16503              /*256:out  */ X86_MXCSR_OM | X86_MXCSR_PM | X86_MXCSR_OE | X86_MXCSR_PE | BS3_MXCSR_OM_FIXED | BS3_MXCSR_PM_FIXED },
     16504    /*
     16505     * Normals, Precision, Overflow.
     16506     */
     16507    /* 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) } },
     16508            { /*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) } },
     16509            { /* =>      */ { 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) } },
     16510                              /*9.0*/
     16511              /*mxcsr:in */ 0,
     16512              /*128:out  */ 0,
     16513              /*256:out  */ 0 },
     16514          { { /*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) } },
     16515            { /*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)        } },
     16516            { /* =>      */ { FP32_ROW_UNUSED } },
     16517              /*mxcsr:in */ 0,
     16518              /*128:out  */ X86_MXCSR_OE | BS3_MXCSR_OM_FIXED,
     16519              /*256:out  */ X86_MXCSR_OE | BS3_MXCSR_OM_FIXED },
     16520          { { /*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) } },
     16521            { /*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)        } },
     16522            { /* =>      */ { FP32_INF(0),      FP32_0(0),        FP32_0(0),        FP32_0(0),        FP32_INF(1),      FP32_0(0),        FP32_0(0),        FP32_0(0)        } },
     16523              /*mxcsr:in */ X86_MXCSR_OM,
     16524              /*128:out  */ X86_MXCSR_OM | X86_MXCSR_OE | X86_MXCSR_PE | BS3_MXCSR_OM_FIXED,
     16525              /*256:out  */ X86_MXCSR_OM | X86_MXCSR_OE | X86_MXCSR_PE | BS3_MXCSR_OM_FIXED },
     16526   /** @todo more normals; rounding controls affecting different steps of the calculation */
     16527   /*
     16528    * Denormals, Underflow.
     16529    */
     16530    /*11*/{ { /*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) } },
     16531            { /*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) } },
     16532            { /* =>      */ { FP32_0(0),         FP32_0(0),          FP32_0(0),          FP32_0(0),         FP32_0(0),          FP32_0(0),          FP32_0(0),         FP32_0(0)         } },
     16533              /*mxcsr:in */ 0,
     16534              /*128:out  */ X86_MXCSR_DE | X86_MXCSR_PE | X86_MXCSR_UE | BS3_MXCSR_DM_FIXED,
     16535              /*256:out  */ X86_MXCSR_DE | X86_MXCSR_PE | X86_MXCSR_UE },
     16536          { { /*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) } },
     16537            { /*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) } },
     16538            { /* =>      */ { FP32_0(0),         FP32_0(0),          FP32_0(0),          FP32_0(0),         FP32_0(0),          FP32_0(0),          FP32_0(0),         FP32_0(0)         } },
     16539              /*mxcsr:in */ X86_MXCSR_UM,
     16540              /*128:out  */ X86_MXCSR_UM | X86_MXCSR_DE | X86_MXCSR_PE | X86_MXCSR_UE | BS3_MXCSR_UM_FIXED,
     16541              /*256:out  */ X86_MXCSR_DE | X86_MXCSR_PE | X86_MXCSR_UE },
     16542          { { /*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) } },
     16543            { /*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) } },
     16544            { /* =>      */ { FP32_0(0),         FP32_0(0),          FP32_0(0),          FP32_0(0),         FP32_0(0),          FP32_0(0),          FP32_0(0),         FP32_0(0)         } },
     16545              /*mxcsr:in */ X86_MXCSR_DM,
     16546              /*128:out  */ X86_MXCSR_DM | X86_MXCSR_DE | X86_MXCSR_UE | BS3_MXCSR_DM_FIXED | BS3_MXCSR_UM_FIXED,
     16547              /*256:out  */ X86_MXCSR_DE | X86_MXCSR_PE | X86_MXCSR_UE },
     16548          { { /*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) } },
     16549            { /*src2     */ { FP32_NORM_MAX(1),  FP32_NORM_MAX(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) } },
     16550            { /* =>      */ { FP32_0(0),         FP32_0(0),          FP32_0(0),          FP32_0(0),         FP32_0(0),          FP32_0(0),          FP32_0(0),         FP32_0(0)         } },
     16551              /*mxcsr:in */ X86_MXCSR_DAZ,
     16552              /*128:out  */ X86_MXCSR_DAZ,
     16553              /*256:out  */ X86_MXCSR_DAZ },
     16554#define TINY_MAXx6 FP32_V(0,0x3ffffe,3) /* 6 * FP32_DENORM_MAX(0) */
     16555#define TINY_MINx6 FP32_V(0,6,0)        /* 6 * FP32_DENORM_MIN(0) */
     16556          { { /*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) } },
     16557            { /*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)          } },
     16558            { /* =>      */ { TINY_MAXx6,         FP32_0(0),          FP32_0(0),          FP32_0(0)                                                                             /* unused */ } },
     16559              /*mxcsr:in */ 0,
     16560              /*128:out  */ X86_MXCSR_DE | X86_MXCSR_PE,
     16561              /*256:out  */ X86_MXCSR_DE | X86_MXCSR_UE | BS3_MXCSR_UM_FIXED },
     16562          { { /*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) } },
     16563            { /*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)          } },
     16564            { /* =>      */ { TINY_MAXx6,         FP32_0(0),          FP32_0(0),          FP32_0(0)                                                                             /* unused */ } },
     16565              /*mxcsr:in */ 0,
     16566              /*128:out  */ X86_MXCSR_DE | X86_MXCSR_PE,
     16567              /*256:out  */ X86_MXCSR_DE | BS3_MXCSR_DM_FIXED },
     16568          { { /*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) } },
     16569            { /*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)          } },
     16570            { /* =>      */ { TINY_MAXx6,         FP32_0(0),          FP32_0(0),          FP32_0(0),          TINY_MINx6,         FP32_0(0),          FP32_0(0),          FP32_0(0)          } },
     16571              /*mxcsr:in */ X86_MXCSR_DM | X86_MXCSR_UM,
     16572              /*128:out  */ X86_MXCSR_DE | X86_MXCSR_PE,
     16573              /*256:out  */ X86_MXCSR_DM | X86_MXCSR_UM | X86_MXCSR_DE | X86_MXCSR_PE | BS3_MXCSR_DM_FIXED | BS3_MXCSR_UM_FIXED },
     16574          { { /*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) } },
     16575            { /*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)          } },
     16576            { /* =>      */ { TINY_MAXx6,         FP32_0(0),          FP32_0(0),          FP32_0(0),          TINY_MINx6,         FP32_0(0),          FP32_0(0),          FP32_0(0)          } },
     16577              /*mxcsr:in */ X86_MXCSR_FZ,
     16578              /*128:out  */ X86_MXCSR_FZ | X86_MXCSR_DE | X86_MXCSR_PE,
     16579              /*256:out  */ X86_MXCSR_FZ | X86_MXCSR_DE | X86_MXCSR_UE | BS3_MXCSR_UM_FIXED },
     16580          { { /*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) } },
     16581            { /*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)          } },
     16582            { /* =>      */ { TINY_MAXx6,         FP32_0(0),          FP32_0(0),          FP32_0(0),          FP32_0(0),          FP32_0(0),          FP32_0(0),          FP32_0(0)          } },
     16583              /*mxcsr:in */ X86_MXCSR_UM | X86_MXCSR_FZ,
     16584              /*128:out  */ X86_MXCSR_UM | X86_MXCSR_FZ | X86_MXCSR_DE | X86_MXCSR_PE,
     16585              /*256:out  */ X86_MXCSR_UM | X86_MXCSR_FZ | X86_MXCSR_DE | X86_MXCSR_PE | X86_MXCSR_UE | BS3_MXCSR_UM_FIXED },
     16586#undef  TINY_MAXx6
     16587#undef  TINY_MINx6
     16588   /*
     16589    * Invalids.
     16590    */
     16591    /*20*/{ { /*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)  } },
     16592            { /*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) } },
     16593            { /* =>      */ { 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)        } },
     16594              /*mxcsr:in */ 0,                                /* output swaps src2 input pairs?!? -- result from i7-10700 */
     16595              /*128:out  */ 0,
     16596              /*256:out  */ 0 },
     16597          { { /*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)  } },
     16598            { /*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) } },
     16599            { /* =>      */ { 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)        } },
     16600              /*mxcsr:in */ 0,                                /* output has swapped src2 input pairs?!? -- result from i7-10700 */
     16601              /*128:out  */ X86_MXCSR_IE,
     16602              /*256:out  */ X86_MXCSR_IE },
     16603          { { /*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)        } },
     16604            { /*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) } },
     16605            { /* =>      */ { 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)        } },
     16606                              /*3.0*/
     16607              /*mxcsr:in */ 0,                                /* output grabs the one NaN -- result from i7-10700 */
     16608              /*128:out  */ 0,
     16609              /*256:out  */ 0 },
     16610          { { /*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) } },
     16611            { /*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) } },
     16612            { /* =>      */ { 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) } },
     16613                              /*3.0*/                                                   /*3.0*/
     16614              /*mxcsr:in */ 0,                                /* the NaN isn't in the specified set of calculations */
     16615              /*128:out  */ 0,
     16616              /*256:out  */ 0 },
     16617          { { /*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) } },
     16618            { /*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) } },
     16619            { /* =>      */ { 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) } },
     16620                              /*3.0*/
     16621              /*mxcsr:in */ 0,                                /* output grabs the one NaN -- result from i7-10700 */
     16622              /*128:out  */ 0,
     16623              /*256:out  */ 0 },
     16624          { { /*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)        } },
     16625            { /*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) } },
     16626            { /* =>      */ { 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)        } },
     16627                              /*3.0*/
     16628              /*mxcsr:in */ 0,                                /* output grabs the one NaN -- result from i7-10700 */
     16629              /*128:out  */ 0,
     16630              /*256:out  */ X86_MXCSR_IE },
     16631    };
    1644816632    static BS3CPUINSTR4_TEST1_VALUES_PS_T const s_aValuesFF[] =
    1644916633    {
     
    1654816732              /*128:out  */ X86_MXCSR_DE | X86_MXCSR_PE | X86_MXCSR_UE,
    1654916733              /*256:out  */ X86_MXCSR_DE | X86_MXCSR_PE | X86_MXCSR_UE },
     16734          { { /*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) } },
     16735            { /*src2     */ { FP32_NORM_MAX(1),  FP32_NORM_MAX(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) } },
     16736            { /* =>      */ { FP32_0(0),         FP32_0(0),          FP32_0(0),          FP32_0(0),         FP32_0(0),          FP32_0(0),          FP32_0(0),         FP32_0(0)         } },
     16737              /*mxcsr:in */ X86_MXCSR_DAZ,
     16738              /*128:out  */ X86_MXCSR_DAZ,
     16739              /*256:out  */ X86_MXCSR_DAZ },
    1655016740#define TINY_MAXx8 FP32_V(0,0x7ffffe,3) /* 8 * FP32_DENORM_MAX(0) */
    1655116741#define TINY_MINx8 FP32_V(0,8,0)        /* 8 * FP32_DENORM_MIN(0) */
     
    1657916769    * Invalids.
    1658016770    */
    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)  } },
     16771 /*17|18*/{ { /*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)  } },
    1658216772            { /*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) } },
    1658316773            { /* =>      */ { 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)  } },
     
    1662016810              /*256:out  */ X86_MXCSR_IE },
    1662116811    };
    16622     static BS3CPUINSTR4_TEST1_VALUES_PS_T const s_aValuesE1[] =
     16812    static BS3CPUINSTR4_TEST1_VALUES_PS_T const s_aValuesSR[] =
    1662316813    {
    1662416814    /*
    1662516815     * Zero.
    1662616816     */
    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) } },
     16817    /* 0*/{ { /*unused   */ { FP32_ROW_UNUSED } },
     16818            { /*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) } },
    1662916819            { /* =>      */ { 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)   } },
    1680816820              /*mxcsr:in */ 0,
    1680916821              /*128:out  */ 0,
     
    1694116953        {  bs3CpuInstr4_vdpps_YMM8_YMM8_YMM8_0E1h_icebp_c64,  255, RM_REG, T_AVX_256, YMM8, YMM8, NOREG, PASS_ELEMENTS(s_aValuesSR) },
    1694216954        {  bs3CpuInstr4_vdpps_YMM8_YMM8_FSxBX_0E1h_icebp_c64, 255, RM_MEM, T_AVX_256, YMM8, YMM8, FSxBX, PASS_ELEMENTS(s_aValuesE1) },
     16955    };
     16956
     16957    static BS3CPUINSTR4_TEST1_MODE_T const s_aTests[3] = BS3CPUINSTR4_TEST1_MODES_INIT(s_aTests16,s_aTests32,s_aTests64);
     16958    unsigned const                         iTest       = BS3CPUINSTR4_TEST_MODES_INDEX(bMode);
     16959    return bs3CpuInstr4_WorkerTestType1(bMode,s_aTests[iTest].paTests,s_aTests[iTest].cTests,
     16960                                        g_aXcptConfig4,RT_ELEMENTS(g_aXcptConfig4));
     16961}
     16962
     16963
     16964/*
     16965 * [V]DPPD.
     16966 */
     16967/** @todo this fails entirely under IEM, getting #GP faults and many differences in exceptions */
     16968BS3_DECL_FAR(uint8_t) bs3CpuInstr4_v_dppd(uint8_t bMode)
     16969{
     16970    static BS3CPUINSTR4_TEST1_VALUES_PD_T const s_aValues00[] =
     16971    {
     16972    /*
     16973     * Zero.
     16974     */
     16975    /* 0*/{ { /*src1     */ { FP64_0(0), FP64_0(1) } },
     16976            { /*src2     */ { FP64_0(0), FP64_0(1) } },
     16977            { /* =>      */ { FP64_0(0), FP64_0(0) } },
     16978              /*mxcsr:in */ 0,
     16979              /*128:out  */ 0,
     16980              /*256:out  */ 0 },
     16981          { { /*src1     */ { FP64_0(0), FP64_0(0) } },
     16982            { /*src2     */ { FP64_1(0), FP64_1(1) } },
     16983            { /* =>      */ { FP64_0(0), FP64_0(0) } },
     16984              /*mxcsr:in */ 0,
     16985              /*128:out  */ 0,
     16986              /*256:out  */ 0 },
     16987    /*
     16988     * Infinity.
     16989     */
     16990    /* 2*/{ { /*src1     */ { FP64_INF(0), FP64_INF(1) } },
     16991            { /*src2     */ { FP64_INF(0), FP64_INF(1) } },
     16992            { /* =>      */ { FP64_0(0),   FP64_0(0)   } },
     16993              /*mxcsr:in */ 0,
     16994              /*128:out  */ 0,
     16995              /*256:out  */ 0 },
     16996    /*
     16997     * Normals.
     16998     */
     16999    /* 3*/{ { /*src1     */ { FP64_NORM_V0(0), FP64_NORM_V1(1) } },
     17000            { /*src2     */ { FP64_NORM_V2(0), FP64_NORM_V3(0) } },
     17001            { /* =>      */ { FP64_0(0),       FP64_0(0)       } },
     17002              /*mxcsr:in */ 0,
     17003              /*128:out  */ 0,
     17004              /*256:out  */ 0 },
     17005   /*
     17006    * Denormals.
     17007    */
     17008    /* 4*/{ { /*src1     */ { FP64_DENORM_MIN(1), FP64_DENORM_MAX(0) } },
     17009            { /*src2     */ { FP64_DENORM_MIN(0), FP64_DENORM_MAX(0) } },
     17010            { /* =>      */ { FP64_0(0),          FP64_0(0)          } },
     17011              /*mxcsr:in */ 0,
     17012              /*128:out  */ 0,
     17013              /*256:out  */ 0 },
     17014   /*
     17015    * Invalids.
     17016    */
     17017    /* 5*/{ { /*src1     */ { FP64_QNAN_V1(0),  FP64_QNAN_V2(1) } },
     17018            { /*src2     */ { FP64_QNAN_MAX(0), FP64_QNAN_V0(0) } },
     17019            { /* =>      */ { FP64_0(0),        FP64_0(0)       } },
     17020              /*mxcsr:in */ 0,
     17021              /*128:out  */ 0,
     17022              /*256:out  */ 0 },
     17023          { { /*src1     */ { FP64_SNAN_V1(0),  FP64_SNAN_V2(1) } },
     17024            { /*src2     */ { FP64_SNAN_MAX(0), FP64_SNAN_V0(0) } },
     17025            { /* =>      */ { FP64_0(0),        FP64_0(0)       } },
     17026              /*mxcsr:in */ 0,
     17027              /*128:out  */ 0,
     17028              /*256:out  */ 0 },
     17029    /*
     17030     * Precision, Overflow, Underflow not possible in 'imm 0' case.
     17031     */
     17032    };
     17033    static BS3CPUINSTR4_TEST1_VALUES_PD_T const s_aValues22[] =
     17034    {
     17035    /*
     17036     * Zero.
     17037     */
     17038    /* 0*/{ { /*src1     */ { FP64_0(0), FP64_0(1) } },
     17039            { /*src2     */ { FP64_0(0), FP64_0(1) } },
     17040            { /* =>      */ { FP64_0(0), FP64_0(0) } },
     17041              /*mxcsr:in */ 0,
     17042              /*128:out  */ 0,
     17043              /*256:out  */ 0 },
     17044          { { /*src1     */ { FP64_0(0), FP64_0(1) } },
     17045            { /*src2     */ { FP64_1(0), FP64_1(1) } },
     17046            { /* =>      */ { FP64_0(0), FP64_0(0) } },
     17047              /*mxcsr:in */ 0,
     17048              /*128:out  */ 0,
     17049              /*256:out  */ 0 },
     17050    /*
     17051     * Infinity.
     17052     */
     17053    /* 2*/{ { /*src1     */ { FP64_INF(0), FP64_INF(1) } },
     17054            { /*src2     */ { FP64_INF(0), FP64_INF(1) } },
     17055            { /* =>      */ { FP64_0(0),   FP64_INF(0) } },
     17056              /*mxcsr:in */ 0,                                /* -oo * -oo = oo */
     17057              /*128:out  */ 0,
     17058              /*256:out  */ 0 },
     17059          { { /*src1     */ { FP64_INF(0),  FP64_INF(0) } },
     17060            { /*src2     */ { FP64_INF(0),  FP64_INF(1) } },
     17061            { /* =>      */ { FP64_0(0),    FP64_INF(1) } },
     17062              /*mxcsr:in */ 0,                                /* oo * -oo = -oo */
     17063              /*128:out  */ 0,
     17064              /*256:out  */ -1 },
     17065          { { /*src1     */ { FP64_INF(0), FP64_0(0) } },
     17066            { /*src2     */ { FP64_0(0),   FP64_0(0) } },
     17067            { /* =>      */ { FP64_0(0),   FP64_0(0) } },
     17068              /*mxcsr:in */ 0,                                /* 0 * 0 = 0 */
     17069              /*128:out  */ 0,
     17070              /*256:out  */ -1 },
     17071          { { /*src1     */ { FP64_NORM_MAX(0), FP64_NORM_MAX(0) } },
     17072            { /*src2     */ { FP64_NORM_MAX(0), FP64_NORM_MAX(0) } },
     17073            { /* =>      */ { FP64_0(0),        FP64_INF(0)      } },
     17074              /*mxcsr:in */ 0,                                /* big * big = oo (OE) */
     17075              /*128:out  */ X86_MXCSR_OE | X86_MXCSR_PE,
     17076              /*256:out  */ -1 },
     17077          { { /*src1     */ { FP64_NORM_MAX(1), FP64_NORM_MAX(0) } },
     17078            { /*src2     */ { FP64_NORM_MAX(1), FP64_NORM_MAX(1) } },
     17079            { /* =>      */ { FP64_0(0),        FP64_INF(1)      } },
     17080              /*mxcsr:in */ 0,                                /* big * -big = -oo (OE) */
     17081              /*128:out  */ X86_MXCSR_OE | X86_MXCSR_PE,
     17082              /*256:out  */ -1 },
     17083    /*
     17084     * Normals, Precision, Overflow.
     17085     */
     17086    /* 7*/{ { /*src1     */ { FP64_1(0), FP64_2(0)                } },
     17087            { /*src2     */ { FP64_1(0), FP64_2(0)                } },
     17088            { /* =>      */ { FP64_0(0), FP64_V(0,0,0x401)/*4.0*/ } },
     17089              /*mxcsr:in */ 0,
     17090              /*128:out  */ 0,
     17091              /*256:out  */ -1 },
     17092          { { /*src1     */ { FP64_NORM_MAX(0), FP64_NORM_MAX(1) } },
     17093            { /*src2     */ { FP64_2(0),        FP64_2(0),       } },
     17094            { /* =>      */ { FP64_ROW_UNUSED } },
     17095              /*mxcsr:in */ 0,                               /* big * 2 = inf (unmasked OE hits before PE) */
     17096              /*128:out  */ X86_MXCSR_OE | BS3_MXCSR_OM_FIXED,
     17097              /*256:out  */ -1 },
     17098          { { /*src1     */ { FP64_NORM_MAX(0), FP64_NORM_MAX(1) } },
     17099            { /*src2     */ { FP64_2(0),        FP64_2(0),       } },
     17100            { /* =>      */ { FP64_0(0),        FP64_INF(1)      } },
     17101              /*mxcsr:in */ X86_MXCSR_OM,                    /* big * 2 = inf (OE | PE) */
     17102              /*128:out  */ X86_MXCSR_OM | X86_MXCSR_OE | X86_MXCSR_PE | BS3_MXCSR_OM_FIXED,
     17103              /*256:out  */ -1 },
     17104   /** @todo more normals; rounding controls affecting different steps of the calculation */
     17105   /*
     17106    * Denormals, Underflow.
     17107    */
     17108    /*10*/{ { /*src1     */ { FP64_DENORM_V0(0), FP64_DENORM_MIN(1) } },
     17109            { /*src2     */ { FP64_DENORM_V1(0), FP64_DENORM_MAX(0) } },
     17110            { /* =>      */ { FP64_0(0),         FP64_0(0)          } },
     17111              /*mxcsr:in */ 0,
     17112              /*128:out  */ X86_MXCSR_DE | X86_MXCSR_UE | BS3_MXCSR_UM_FIXED,
     17113              /*256:out  */ -1 },
     17114          { { /*src1     */ { FP64_DENORM_V0(0), FP64_DENORM_MIN(1) } },
     17115            { /*src2     */ { FP64_DENORM_V1(0), FP64_DENORM_MAX(0) } },
     17116            { /* =>      */ { FP64_0(0),         FP64_0(0)          } },
     17117              /*mxcsr:in */ X86_MXCSR_UM,
     17118              /*128:out  */ X86_MXCSR_UM | X86_MXCSR_DE | X86_MXCSR_PE | X86_MXCSR_UE | BS3_MXCSR_UM_FIXED,
     17119              /*256:out  */ -1 },
     17120#define TINY_MAXx2 FP64_V(0,0xffffffffffffe,0x1) /* 2 * FP64_DENORM_MAX(0) */
     17121#define TINY_MINx2 FP64_V(0,2,0)                 /* 2 * FP64_DENORM_MIN(0) */
     17122          { { /*src1     */ { FP64_DENORM_MAX(0), FP64_DENORM_MAX(0) } },
     17123            { /*src2     */ { FP64_2(0),          FP64_2(0)          } },
     17124            { /* =>      */ { FP64_0(0),          TINY_MAXx2         } },
     17125              /*mxcsr:in */ 0,
     17126              /*128:out  */ X86_MXCSR_DE,
     17127              /*256:out  */ -1 },
     17128          { { /*src1     */ { FP64_DENORM_MIN(0), FP64_DENORM_MIN(0) } },
     17129            { /*src2     */ { FP64_2(0),          FP64_2(0)          } },
     17130            { /* =>      */ { FP64_ROW_UNUSED } },
     17131              /*mxcsr:in */ 0,
     17132              /*128:out  */ X86_MXCSR_DE | X86_MXCSR_UE | BS3_MXCSR_UM_FIXED,
     17133              /*256:out  */ -1 },
     17134          { { /*src1     */ { FP64_DENORM_MIN(0), FP64_DENORM_MIN(0) } },
     17135            { /*src2     */ { FP64_2(0),          FP64_2(0)          } },
     17136            { /* =>      */ { FP64_0(0),          TINY_MINx2         } },
     17137              /*mxcsr:in */ X86_MXCSR_UM,
     17138              /*128:out  */ X86_MXCSR_UM | X86_MXCSR_DE | BS3_MXCSR_UM_FIXED,
     17139              /*256:out  */ -1 },
     17140          { { /*src1     */ { FP64_DENORM_MAX(0), FP64_DENORM_MIN(0) } },
     17141            { /*src2     */ { FP64_2(0),          FP64_2(0)          } },
     17142            { /* =>      */ { FP64_0(0),          FP64_0(0)          } },
     17143              /*mxcsr:in */ X86_MXCSR_DAZ,
     17144              /*128:out  */ X86_MXCSR_DAZ,
     17145              /*256:out  */ -1 },
     17146          { { /*src1     */ { FP64_DENORM_MIN(0), FP64_DENORM_MIN(0) } },
     17147            { /*src2     */ { FP64_2(0),          FP64_2(0)          } },
     17148            { /* =>      */ { FP64_ROW_UNUSED } },
     17149              /*mxcsr:in */ X86_MXCSR_FZ,
     17150              /*128:out  */ X86_MXCSR_FZ | X86_MXCSR_DE | X86_MXCSR_UE | BS3_MXCSR_UM_FIXED,
     17151              /*256:out  */ -1 },
     17152          { { /*src1     */ { FP64_DENORM_MIN(0), FP64_DENORM_MIN(0) } },
     17153            { /*src2     */ { FP64_2(0),          FP64_2(0)          } },
     17154            { /* =>      */ { FP64_0(0),          FP64_0(0)          } },
     17155              /*mxcsr:in */ X86_MXCSR_UM | X86_MXCSR_FZ,
     17156              /*128:out  */ X86_MXCSR_UM | X86_MXCSR_FZ | X86_MXCSR_DE | X86_MXCSR_PE | X86_MXCSR_UE | BS3_MXCSR_UM_FIXED,
     17157              /*256:out  */ -1 },
     17158#undef  TINY_MAXx2
     17159#undef  TINY_MINx2
     17160   /*
     17161    * Invalids.
     17162    */
     17163    /*18*/{ { /*src1     */ { FP64_QNAN_V0(0), FP64_QNAN_V2(1) } },
     17164            { /*src2     */ { FP64_QNAN(1),    FP64_QNAN_V1(0) } },
     17165            { /* =>      */ { FP64_0(0),       FP64_QNAN_V1(0) } },
     17166              /*mxcsr:in */ 0,                                /* output equals src2 input, same slot -- result from i7-10700 */
     17167              /*128:out  */ 0,
     17168              /*256:out  */ 0 },
     17169          { { /*src1     */ { FP64_QNAN_V0(0), FP64_QNAN_V2(1) } },
     17170            { /*src2     */ { FP64_2(1),       FP64_2(0)       } },
     17171            { /* =>      */ { FP64_0(0),       FP64_QNAN_V2(1) } },
     17172              /*mxcsr:in */ 0,                                /* output equals src1 input, same slot -- result from i7-10700 */
     17173              /*128:out  */ 0,
     17174              /*256:out  */ 0 },
     17175          { { /*src1     */ { FP64_1(0), FP64_QNAN_V3(0) } },
     17176            { /*src2     */ { FP64_1(0), FP64_1(0)       } },
     17177            { /* =>      */ { FP64_0(0), FP64_QNAN_V3(0) } },
     17178              /*mxcsr:in */ 0,                                /* output equals src1 input, same slot -- result from i7-10700 */
     17179              /*128:out  */ 0,
     17180              /*256:out  */ 0 },
     17181          { { /*src1     */ { FP64_QNAN(0), FP64_1(0) } },
     17182            { /*src2     */ { FP64_1(0),    FP64_1(0) } },
     17183            { /* =>      */ { FP64_0(0),    FP64_1(0) } },
     17184              /*mxcsr:in */ 0,                                /* NaN not accessed */
     17185              /*128:out  */ 0,
     17186              /*256:out  */ 0 },
     17187          { { /*src1     */ { FP64_1(0), FP64_1(0)       } },
     17188            { /*src2     */ { FP64_1(0), FP64_QNAN_V1(0) } },
     17189            { /* =>      */ { FP64_0(0), FP64_QNAN_V1(0) } },
     17190              /*mxcsr:in */ 0,                                /* output equals src2 input, same slot -- result from i7-10700 */
     17191              /*128:out  */ 0,
     17192              /*256:out  */ 0 },
     17193          { { /*src1     */ { FP64_1(0),    FP64_1(0) } },
     17194            { /*src2     */ { FP64_QNAN(1), FP64_1(0) } },
     17195            { /* =>      */ { FP64_0(0),    FP64_1(0) } },
     17196              /*mxcsr:in */ 0,                                /* NaN not accessed */
     17197              /*128:out  */ 0,
     17198              /*256:out  */ 0 },
     17199          { { /*src1     */ { FP64_SNAN_V0(0), FP64_SNAN_V2(1) } },
     17200            { /*src2     */ { FP64_SNAN(1),    FP64_SNAN_V1(0) } },
     17201            { /* =>      */ { FP64_0(0),       FP64_QNAN_V1(0) } },
     17202              /*mxcsr:in */ 0,                                /* output equals src2 input, same slot, quieted -- result from i7-10700 */
     17203              /*128:out  */ X86_MXCSR_IE,
     17204              /*256:out  */ -1 },
     17205          { { /*src1     */ { FP64_SNAN_V0(0), FP64_SNAN_V2(1) } },
     17206            { /*src2     */ { FP64_2(1),       FP64_2(0)       } },
     17207            { /* =>      */ { FP64_0(0),       FP64_QNAN_V2(1) } },
     17208              /*mxcsr:in */ 0,                                /* output equals src1 input, same slot, quieted -- result from i7-10700 */
     17209              /*128:out  */ X86_MXCSR_IE,
     17210              /*256:out  */ -1 },
     17211          { { /*src1     */ { FP64_1(0), FP64_SNAN_V3(0) } },
     17212            { /*src2     */ { FP64_1(0), FP64_1(0)       } },
     17213            { /* =>      */ { FP64_0(0), FP64_QNAN_V3(0) } },
     17214              /*mxcsr:in */ 0,                                /* output equals src1 input, same slot, quieted -- result from i7-10700 */
     17215              /*128:out  */ X86_MXCSR_IE,
     17216              /*256:out  */ -1 },
     17217          { { /*src1     */ { FP64_SNAN(0), FP64_1(0) } },
     17218            { /*src2     */ { FP64_1(0),    FP64_1(0) } },
     17219            { /* =>      */ { FP64_0(0),    FP64_1(0) } },
     17220              /*mxcsr:in */ 0,                                /* NaN not accessed */
     17221              /*128:out  */ 0,
     17222              /*256:out  */ -1 },
     17223          { { /*src1     */ { FP64_1(0), FP64_1(0)       } },
     17224            { /*src2     */ { FP64_1(0), FP64_SNAN_V1(0) } },
     17225            { /* =>      */ { FP64_0(0), FP64_QNAN_V1(0) } },
     17226              /*mxcsr:in */ 0,                                /* output equals src2 NaN duplicated, quieted -- result from i7-10700 */
     17227              /*128:out  */ X86_MXCSR_IE,
     17228              /*256:out  */ -1 },
     17229          { { /*src1     */ { FP64_1(0),    FP64_1(0) } },
     17230            { /*src2     */ { FP64_SNAN(1), FP64_1(0) } },
     17231            { /* =>      */ { FP64_0(0),    FP64_1(0) } },
     17232              /*mxcsr:in */ 0,                                /* NaN not accessed */
     17233              /*128:out  */ 0,
     17234              /*256:out  */ -1 },
     17235    };
     17236    static BS3CPUINSTR4_TEST1_VALUES_PD_T const s_aValuesFF[] =
     17237    {
     17238    /*
     17239     * Zero.
     17240     */
     17241    /* 0*/{ { /*src1     */ { FP64_0(0), FP64_0(1) } },
     17242            { /*src2     */ { FP64_0(0), FP64_0(1) } },
     17243            { /* =>      */ { FP64_0(0), FP64_0(0) } },
     17244              /*mxcsr:in */ 0,
     17245              /*128:out  */ 0,
     17246              /*256:out  */ 0 },
     17247          { { /*src1     */ { FP64_0(0), FP64_0(1) } },
     17248            { /*src2     */ { FP64_1(0), FP64_1(1) } },
     17249            { /* =>      */ { FP64_0(0), FP64_0(0) } },
     17250              /*mxcsr:in */ 0,
     17251              /*128:out  */ 0,
     17252              /*256:out  */ 0 },
     17253    /*
     17254     * Infinity.
     17255     */
     17256    /* 2*/{ { /*src1     */ { FP64_INF(0), FP64_INF(1) } },
     17257            { /*src2     */ { FP64_INF(0), FP64_INF(1) } },
     17258            { /* =>      */ { FP64_INF(0), FP64_INF(0) } },
     17259              /*mxcsr:in */ 0,                                /* oo + oo = oo */
     17260              /*128:out  */ 0,
     17261              /*256:out  */ 0 },
     17262          { { /*src1     */ { FP64_INF(0),  FP64_INF(0)  } },
     17263            { /*src2     */ { FP64_INF(0),  FP64_INF(1)  } },
     17264            { /* =>      */ { FP64_QNAN(1), FP64_QNAN(1) } },
     17265              /*mxcsr:in */ 0,                                /* oo + -oo = IE */
     17266              /*128:out  */ X86_MXCSR_IE,
     17267              /*256:out  */ -1 },
     17268          { { /*src1     */ { FP64_INF(0),  FP64_0(0)    } },
     17269            { /*src2     */ { FP64_0(0),    FP64_0(0)    } },
     17270            { /* =>      */ { FP64_QNAN(1), FP64_QNAN(1) } },
     17271              /*mxcsr:in */ 0,                                /* oo * 0 = IE */
     17272              /*128:out  */ X86_MXCSR_IE,
     17273              /*256:out  */ -1 },
     17274          { { /*src1     */ { FP64_NORM_MAX(0), FP64_NORM_MAX(0) } },
     17275            { /*src2     */ { FP64_NORM_MAX(0), FP64_NORM_MAX(0) } },
     17276            { /* =>      */ { FP64_INF(0),      FP64_INF(0)      } },
     17277              /*mxcsr:in */ 0,                                /* big * big = oo (OE) */
     17278              /*128:out  */ X86_MXCSR_OE | X86_MXCSR_PE,
     17279              /*256:out  */ -1 },
     17280          { { /*src1     */ { FP64_NORM_MAX(0), FP64_NORM_MAX(0) } },
     17281            { /*src2     */ { FP64_NORM_MAX(1), FP64_NORM_MAX(1) } },
     17282            { /* =>      */ { FP64_INF(1),      FP64_INF(1)      } },
     17283              /*mxcsr:in */ 0,                                /* big * -big = -oo (OE) */
     17284              /*128:out  */ X86_MXCSR_OE | X86_MXCSR_PE,
     17285              /*256:out  */ -1 },
     17286          /** @todo the following three entries (including ifdef'd out one) are one test, with some corners unexplored due to tester issues.
     17287           *  The tester 'knows' that DE/IE/ZE are 'early' exceptions while OE/PE/UE are 'late'.  This instruction can hit them in different
     17288           *  orders due to its internal sequence of operations.  Possible fix: for all instructions, first run it unmasked; then, whatever
     17289           *  exception(s) hit, run it with those masked; repeat, adding more masks until the expected exceptions have all been delivered (or not).
     17290           *  Note this is a tester issue, the CPU is behaving correctly, we just aren't able to test it properly at the moment.
     17291           */
     17292          { { /*src1     */ { FP64_NORM_MAX(0), FP64_NORM_MAX(0) } },
     17293            { /*src2     */ { FP64_NORM_MAX(0), FP64_NORM_MAX(1) } },
     17294            { /* =>      */ { FP64_ROW_UNUSED } },
     17295              /*mxcsr:in */ 0,                                /* big * big = oo (OE | PE); big * -big = -oo (OE | PE) */
     17296              /*128:out  */ X86_MXCSR_OE | X86_MXCSR_PE | BS3_MXCSR_OM_FIXED,
     17297              /*256:out  */ -1 },                             /* OE hits in multiply step, before IE in addition step */
     17298          { { /*src1     */ { FP64_NORM_MAX(0), FP64_NORM_MAX(0) } },
     17299            { /*src2     */ { FP64_NORM_MAX(0), FP64_NORM_MAX(1) } },
     17300            { /* =>      */ { FP64_QNAN(1),     FP64_QNAN(1)     } },
     17301              /*mxcsr:in */ X86_MXCSR_IM | X86_MXCSR_OM | X86_MXCSR_PM,      /* big * big = oo (OE | PE); big * -big = -oo (OE | PE) */
     17302              /*128: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,
     17303              /*256:out  */ -1 },                             /* big * big = oo (OE | PE); big * -big = -oo (OE | PE); oo + -oo = IE */
     17304#ifdef TODO_MXCSR_ORDER /** @todo wrong order of exceptions, see above */
     17305 /*--| 9*/{ { /*src1     */ { FP64_NORM_MAX(0), FP64_NORM_MAX(0) } },
     17306            { /*src2     */ { FP64_NORM_MAX(0), FP64_NORM_MAX(1) } },
     17307            { /* =>      */ { FP64_QNAN(1),     FP64_QNAN(1)     } },
     17308              /*mxcsr:in */ X86_MXCSR_OM,                     /* big * big = oo (OE | PE); big * -big = -oo (OE | PE); oo + -oo = IE */
     17309              /*128:out  */ X86_MXCSR_OM | X86_MXCSR_IE | X86_MXCSR_OE | X86_MXCSR_PE | BS3_MXCSR_OM_FIXED,
     17310              /*256:out  */ -1 },
     17311#endif /* TODO_MXCSR_ORDER */
     17312    /*
     17313     * Normals, Precision, Overflow.
     17314     */
     17315 /* 9|10*/{ { /*src1     */ { FP64_1(0),                       FP64_2(0)                       } },
     17316            { /*src2     */ { FP64_1(0),                       FP64_2(0)                       } },
     17317            { /* =>      */ { FP64_V(0,0x4000000000000,0x401), FP64_V(0,0x4000000000000,0x401) } },
     17318                              /*5.0*/                          /*5.0*/
     17319              /*mxcsr:in */ 0,
     17320              /*128:out  */ 0,
     17321              /*256:out  */ -1 },
     17322          { { /*src1     */ { FP64_NORM_MAX(0), FP64_NORM_MAX(1) } },
     17323            { /*src2     */ { FP64_2(0),        FP64_2(0),       } },
     17324            { /* =>      */ { FP64_ROW_UNUSED } },
     17325              /*mxcsr:in */ 0,
     17326              /*128:out  */ X86_MXCSR_OE | BS3_MXCSR_OM_FIXED,
     17327              /*256:out  */ -1 },
     17328          { { /*src1     */ { FP64_NORM_MAX(0), FP64_NORM_MAX(0) } },
     17329            { /*src2     */ { FP64_1(0),        FP64_1(0),       } },
     17330            { /* =>      */ { FP64_ROW_UNUSED } },
     17331              /*mxcsr:in */ 0,                               /* big * 1 = big; big * 1 = big; big + big = oo (unmasked OE hits before PE) */
     17332              /*128:out  */ X86_MXCSR_OE | BS3_MXCSR_OM_FIXED,
     17333              /*256:out  */ -1 },
     17334          { { /*src1     */ { FP64_NORM_MAX(0), FP64_NORM_MAX(0) } },
     17335            { /*src2     */ { FP64_2(0),        FP64_2(0),       } },
     17336            { /* =>      */ { FP64_INF(0),      FP64_INF(0)      } },
     17337              /*mxcsr:in */ X86_MXCSR_OM,                     /* big * 2 = oo (OE | PE); big * 2 = oo (OE | PE) */
     17338              /*128:out  */ X86_MXCSR_OM | X86_MXCSR_OE | X86_MXCSR_PE | BS3_MXCSR_OM_FIXED,
     17339              /*256:out  */ -1 },
     17340   /** @todo more normals; rounding controls affecting different steps of the calculation */
     17341   /*
     17342    * Denormals, Underflow.
     17343    */
     17344 /*13|14*/{ { /*src1     */ { FP64_DENORM_V0(0), FP64_DENORM_MIN(1) } },
     17345            { /*src2     */ { FP64_DENORM_V1(0), FP64_DENORM_MAX(0) } },
     17346            { /* =>      */ { FP64_0(0),         FP64_0(0)          } },
     17347              /*mxcsr:in */ 0,
     17348              /*128:out  */ X86_MXCSR_DE | X86_MXCSR_PE | X86_MXCSR_UE,
     17349              /*256:out  */ -1 },
     17350#define TINY_MAXx4 FP64_V(0,0xffffffffffffe,0x2) /* 4 * FP64_DENORM_MAX(0) */
     17351#define TINY_MINx4 FP64_V(0,4,0)                 /* 4 * FP64_DENORM_MIN(0) */
     17352          { { /*src1     */ { FP64_DENORM_MAX(0), FP64_DENORM_MAX(0) } },
     17353            { /*src2     */ { FP64_2(0),          FP64_2(0)          } },
     17354            { /* =>      */ { TINY_MAXx4,         TINY_MAXx4         } },
     17355              /*mxcsr:in */ 0,
     17356              /*128:out  */ X86_MXCSR_DE,
     17357              /*256:out  */ -1 },
     17358          { { /*src1     */ { FP64_DENORM_MIN(0), FP64_DENORM_MIN(0) } },
     17359            { /*src2     */ { FP64_2(0),          FP64_2(0)          } },
     17360            { /* =>      */ { FP64_ROW_UNUSED } },
     17361              /*mxcsr:in */ 0,
     17362              /*128:out  */ X86_MXCSR_DE | X86_MXCSR_UE | BS3_MXCSR_UM_FIXED,
     17363              /*256:out  */ -1 },
     17364          { { /*src1     */ { FP64_DENORM_MIN(0), FP64_DENORM_MIN(0) } },
     17365            { /*src2     */ { FP64_2(0),          FP64_2(0)          } },
     17366            { /* =>      */ { TINY_MINx4,         TINY_MINx4         } },
     17367              /*mxcsr:in */ X86_MXCSR_UM,
     17368              /*128:out  */ X86_MXCSR_UM | X86_MXCSR_DE | BS3_MXCSR_UM_FIXED,
     17369              /*256:out  */ -1 },
     17370          { { /*src1     */ { FP64_DENORM_MAX(0), FP64_DENORM_MIN(0) } },
     17371            { /*src2     */ { FP64_2(0),          FP64_2(0)          } },
     17372            { /* =>      */ { FP64_0(0),          FP64_0(0)          } },
     17373              /*mxcsr:in */ X86_MXCSR_DAZ,
     17374              /*128:out  */ X86_MXCSR_DAZ,
     17375              /*256:out  */ -1 },
     17376          { { /*src1     */ { FP64_DENORM_MIN(0), FP64_DENORM_MIN(0) } },
     17377            { /*src2     */ { FP64_2(0),          FP64_2(0)          } },
     17378            { /* =>      */ { FP64_ROW_UNUSED } },
     17379              /*mxcsr:in */ X86_MXCSR_FZ,
     17380              /*128:out  */ X86_MXCSR_FZ | X86_MXCSR_DE | X86_MXCSR_UE | BS3_MXCSR_UM_FIXED,
     17381              /*256:out  */ -1 },
     17382          { { /*src1     */ { FP64_DENORM_MIN(0), FP64_DENORM_MIN(0) } },
     17383            { /*src2     */ { FP64_2(0),          FP64_2(0)          } },
     17384            { /* =>      */ { FP64_0(0),          FP64_0(0)          } },
     17385              /*mxcsr:in */ X86_MXCSR_UM | X86_MXCSR_FZ,
     17386              /*128:out  */ X86_MXCSR_UM | X86_MXCSR_FZ | X86_MXCSR_DE | X86_MXCSR_PE | X86_MXCSR_UE | BS3_MXCSR_UM_FIXED,
     17387              /*256:out  */ -1 },
     17388#undef  TINY_MAXx4
     17389#undef  TINY_MINx4
     17390   /*
     17391    * Invalids.
     17392    */
     17393 /*20|21*/{ { /*src1     */ { FP64_QNAN_V0(0), FP64_QNAN_V2(1) } },
     17394            { /*src2     */ { FP64_QNAN(1),    FP64_QNAN_V1(0) } },
     17395            { /* =>      */ { FP64_QNAN(1),    FP64_QNAN_V1(0) } },
     17396              /*mxcsr:in */ 0,                                /* output equals src2 input -- result from i7-10700 */
     17397              /*128:out  */ 0,
     17398              /*256:out  */ 0 },
     17399          { { /*src1     */ { FP64_QNAN_V0(0), FP64_QNAN_V2(1) } },
     17400            { /*src2     */ { FP64_2(1),       FP64_2(0)       } },
     17401            { /* =>      */ { FP64_QNAN_V0(0), FP64_QNAN_V2(1) } },
     17402              /*mxcsr:in */ 0,                                /* output equals src1 input -- result from i7-10700 */
     17403              /*128:out  */ 0,
     17404              /*256:out  */ 0 },
     17405          { { /*src1     */ { FP64_1(0),       FP64_QNAN_V3(0) } },
     17406            { /*src2     */ { FP64_1(0),       FP64_1(0)       } },
     17407            { /* =>      */ { FP64_QNAN_V3(0), FP64_QNAN_V3(0) } },
     17408              /*mxcsr:in */ 0,                                /* output equals src1 NaN duplicated -- result from i7-10700 */
     17409              /*128:out  */ 0,
     17410              /*256:out  */ 0 },
     17411          { { /*src1     */ { FP64_QNAN(0), FP64_1(0)    } },
     17412            { /*src2     */ { FP64_1(0),    FP64_1(0)    } },
     17413            { /* =>      */ { FP64_QNAN(0), FP64_QNAN(0) } },
     17414              /*mxcsr:in */ 0,                                /* output equals src1 NaN duplicated -- result from i7-10700 */
     17415              /*128:out  */ 0,
     17416              /*256:out  */ 0 },
     17417          { { /*src1     */ { FP64_1(0),       FP64_1(0)       } },
     17418            { /*src2     */ { FP64_1(0),       FP64_QNAN_V1(0) } },
     17419            { /* =>      */ { FP64_QNAN_V1(0), FP64_QNAN_V1(0) } },
     17420              /*mxcsr:in */ 0,                                /* output equals src2 NaN duplicated -- result from i7-10700 */
     17421              /*128:out  */ 0,
     17422              /*256:out  */ 0 },
     17423          { { /*src1     */ { FP64_1(0),    FP64_1(0)    } },
     17424            { /*src2     */ { FP64_QNAN(1), FP64_1(0)    } },
     17425            { /* =>      */ { FP64_QNAN(1), FP64_QNAN(1) } },
     17426              /*mxcsr:in */ 0,                                /* output equals src2 NaN duplicated -- result from i7-10700 */
     17427              /*128:out  */ 0,
     17428              /*256:out  */ 0 },
     17429          { { /*src1     */ { FP64_SNAN_V0(0),  FP64_SNAN_V2(1) } },
     17430            { /*src2     */ { FP64_SNAN(1),     FP64_SNAN_V1(0) } },
     17431            { /* =>      */ { FP64_QNAN_V(1,1), FP64_QNAN_V1(0) } },
     17432              /*mxcsr:in */ 0,                                /* output equals src2 input, quieted -- result from i7-10700 */
     17433              /*128:out  */ X86_MXCSR_IE,
     17434              /*256:out  */ -1 },
     17435          { { /*src1     */ { FP64_SNAN_V0(0), FP64_SNAN_V2(1) } },
     17436            { /*src2     */ { FP64_2(1),       FP64_2(0)       } },
     17437            { /* =>      */ { FP64_QNAN_V0(0), FP64_QNAN_V2(1) } },
     17438              /*mxcsr:in */ 0,                                /* output equals src1 input, quieted -- result from i7-10700 */
     17439              /*128:out  */ X86_MXCSR_IE,
     17440              /*256:out  */ -1 },
     17441          { { /*src1     */ { FP64_1(0),       FP64_SNAN_V3(0) } },
     17442            { /*src2     */ { FP64_1(0),       FP64_1(0)       } },
     17443            { /* =>      */ { FP64_QNAN_V3(0), FP64_QNAN_V3(0) } },
     17444              /*mxcsr:in */ 0,                                /* output equals src1 NaN duplicated, quieted -- result from i7-10700 */
     17445              /*128:out  */ X86_MXCSR_IE,
     17446              /*256:out  */ -1 },
     17447          { { /*src1     */ { FP64_SNAN(0),     FP64_1(0)        } },
     17448            { /*src2     */ { FP64_1(0),        FP64_1(0)        } },
     17449            { /* =>      */ { FP64_QNAN_V(0,1), FP64_QNAN_V(0,1) } },
     17450              /*mxcsr:in */ 0,                                /* output equals src1 NaN duplicated, quieted -- result from i7-10700 */
     17451              /*128:out  */ X86_MXCSR_IE,
     17452              /*256:out  */ -1 },
     17453          { { /*src1     */ { FP64_1(0),       FP64_1(0)       } },
     17454            { /*src2     */ { FP64_1(0),       FP64_SNAN_V1(0) } },
     17455            { /* =>      */ { FP64_QNAN_V1(0), FP64_QNAN_V1(0) } },
     17456              /*mxcsr:in */ 0,                                /* output equals src2 NaN duplicated, quieted -- result from i7-10700 */
     17457              /*128:out  */ X86_MXCSR_IE,
     17458              /*256:out  */ -1 },
     17459          { { /*src1     */ { FP64_1(0),        FP64_1(0)        } },
     17460            { /*src2     */ { FP64_SNAN(1),     FP64_1(0)        } },
     17461            { /* =>      */ { FP64_QNAN_V(1,1), FP64_QNAN_V(1,1) } },
     17462              /*mxcsr:in */ 0,                                /* output equals src2 NaN duplicated, quieted -- result from i7-10700 */
     17463              /*128:out  */ X86_MXCSR_IE,
     17464              /*256:out  */ -1 },
     17465    };
     17466    static BS3CPUINSTR4_TEST1_VALUES_PD_T const s_aValuesSR[] =
     17467    {
     17468    /*
     17469     * Zero.
     17470     */
     17471    /* 0*/{ { /*unused   */ { FP64_ROW_UNUSED } },
     17472            { /*src1     */ { FP64_0(0), FP64_0(0) } },
     17473            { /* =>      */ { FP64_0(0), FP64_0(0) } },
     17474              /*mxcsr:in */ 0,
     17475              /*128:out  */ 0,
     17476              /*256:out  */ 0 },
     17477    /*
     17478     * Infinity.
     17479     */
     17480    /* 1*/{ { /*src1     */ { FP64_ROW_UNUSED } },
     17481            { /*unused   */ { FP64_INF(0), FP64_INF(1) } },
     17482            { /* =>      */ { FP64_0(0),   FP64_INF(0) } },
     17483              /*mxcsr:in */ 0,
     17484              /*128:out  */ 0,
     17485              /*256:out  */ 0 },
     17486    };
     17487
     17488    static BS3CPUINSTR4_TEST1_T const s_aTests16[] =
     17489    {
     17490        {  bs3CpuInstr4_dppd_XMM1_XMM2_000h_icebp_c16,        255, RM_REG, T_SSE4_1,  XMM1, XMM1, XMM2,  PASS_ELEMENTS(s_aValues00) },
     17491        {  bs3CpuInstr4_dppd_XMM1_XMM2_022h_icebp_c16,        255, RM_REG, T_SSE4_1,  XMM1, XMM1, XMM2,  PASS_ELEMENTS(s_aValues22) },
     17492        {  bs3CpuInstr4_dppd_XMM1_XMM2_0FFh_icebp_c16,        255, RM_REG, T_SSE4_1,  XMM1, XMM1, XMM2,  PASS_ELEMENTS(s_aValuesFF) },
     17493        {  bs3CpuInstr4_dppd_XMM1_FSxBX_000h_icebp_c16,       255, RM_MEM, T_SSE4_1,  XMM1, XMM1, FSxBX, PASS_ELEMENTS(s_aValues00) },
     17494        {  bs3CpuInstr4_dppd_XMM1_FSxBX_022h_icebp_c16,       255, RM_MEM, T_SSE4_1,  XMM1, XMM1, FSxBX, PASS_ELEMENTS(s_aValues22) },
     17495        {  bs3CpuInstr4_dppd_XMM1_FSxBX_0FFh_icebp_c16,       255, RM_MEM, T_SSE4_1,  XMM1, XMM1, FSxBX, PASS_ELEMENTS(s_aValuesFF) },
     17496
     17497        {  bs3CpuInstr4_vdppd_XMM1_XMM2_XMM3_000h_icebp_c16,  255, RM_REG, T_AVX_128, XMM1, XMM2, XMM3,  PASS_ELEMENTS(s_aValues00) },
     17498        {  bs3CpuInstr4_vdppd_XMM1_XMM2_XMM3_022h_icebp_c16,  255, RM_REG, T_AVX_128, XMM1, XMM2, XMM3,  PASS_ELEMENTS(s_aValues22) },
     17499        {  bs3CpuInstr4_vdppd_XMM1_XMM2_XMM3_0FFh_icebp_c16,  255, RM_REG, T_AVX_128, XMM1, XMM2, XMM3,  PASS_ELEMENTS(s_aValuesFF) },
     17500        {  bs3CpuInstr4_vdppd_XMM1_XMM2_FSxBX_000h_icebp_c16, 255, RM_MEM, T_AVX_128, XMM1, XMM2, FSxBX, PASS_ELEMENTS(s_aValues00) },
     17501        {  bs3CpuInstr4_vdppd_XMM1_XMM2_FSxBX_022h_icebp_c16, 255, RM_MEM, T_AVX_128, XMM1, XMM2, FSxBX, PASS_ELEMENTS(s_aValues22) },
     17502        {  bs3CpuInstr4_vdppd_XMM1_XMM2_FSxBX_0FFh_icebp_c16, 255, RM_MEM, T_AVX_128, XMM1, XMM2, FSxBX, PASS_ELEMENTS(s_aValuesFF) },
     17503
     17504        {  bs3CpuInstr4_dppd_XMM1_XMM1_022h_icebp_c16,        255, RM_REG, T_SSE4_1,  XMM1, XMM1, NOREG, PASS_ELEMENTS(s_aValuesSR) },
     17505
     17506        {  bs3CpuInstr4_vdppd_XMM1_XMM1_XMM1_022h_icebp_c16,  255, RM_REG, T_AVX_128, XMM1, XMM1, NOREG, PASS_ELEMENTS(s_aValuesSR) },
     17507        {  bs3CpuInstr4_vdppd_XMM1_XMM1_XMM2_022h_icebp_c16,  255, RM_REG, T_AVX_128, XMM1, XMM1, XMM2,  PASS_ELEMENTS(s_aValues22) },
     17508        {  bs3CpuInstr4_vdppd_XMM1_XMM2_XMM1_022h_icebp_c16,  255, RM_REG, T_AVX_128, XMM1, XMM2, XMM1,  PASS_ELEMENTS(s_aValues22) },
     17509        {  bs3CpuInstr4_vdppd_XMM1_XMM2_XMM2_022h_icebp_c16,  255, RM_REG, T_AVX_128, XMM1, XMM2, NOREG, PASS_ELEMENTS(s_aValuesSR) },
     17510        {  bs3CpuInstr4_vdppd_XMM1_XMM1_FSxBX_022h_icebp_c16, 255, RM_MEM, T_AVX_128, XMM1, XMM1, FSxBX, PASS_ELEMENTS(s_aValues22) },
     17511    };
     17512    static BS3CPUINSTR4_TEST1_T const s_aTests32[] =
     17513    {
     17514        {  bs3CpuInstr4_dppd_XMM1_XMM2_000h_icebp_c32,        255, RM_REG, T_SSE4_1,  XMM1, XMM1, XMM2,  PASS_ELEMENTS(s_aValues00) },
     17515        {  bs3CpuInstr4_dppd_XMM1_XMM2_022h_icebp_c32,        255, RM_REG, T_SSE4_1,  XMM1, XMM1, XMM2,  PASS_ELEMENTS(s_aValues22) },
     17516        {  bs3CpuInstr4_dppd_XMM1_XMM2_0FFh_icebp_c32,        255, RM_REG, T_SSE4_1,  XMM1, XMM1, XMM2,  PASS_ELEMENTS(s_aValuesFF) },
     17517        {  bs3CpuInstr4_dppd_XMM1_FSxBX_000h_icebp_c32,       255, RM_MEM, T_SSE4_1,  XMM1, XMM1, FSxBX, PASS_ELEMENTS(s_aValues00) },
     17518        {  bs3CpuInstr4_dppd_XMM1_FSxBX_022h_icebp_c32,       255, RM_MEM, T_SSE4_1,  XMM1, XMM1, FSxBX, PASS_ELEMENTS(s_aValues22) },
     17519        {  bs3CpuInstr4_dppd_XMM1_FSxBX_0FFh_icebp_c32,       255, RM_MEM, T_SSE4_1,  XMM1, XMM1, FSxBX, PASS_ELEMENTS(s_aValuesFF) },
     17520
     17521        {  bs3CpuInstr4_vdppd_XMM1_XMM2_XMM3_000h_icebp_c32,  255, RM_REG, T_AVX_128, XMM1, XMM2, XMM3,  PASS_ELEMENTS(s_aValues00) },
     17522        {  bs3CpuInstr4_vdppd_XMM1_XMM2_XMM3_022h_icebp_c32,  255, RM_REG, T_AVX_128, XMM1, XMM2, XMM3,  PASS_ELEMENTS(s_aValues22) },
     17523        {  bs3CpuInstr4_vdppd_XMM1_XMM2_XMM3_0FFh_icebp_c32,  255, RM_REG, T_AVX_128, XMM1, XMM2, XMM3,  PASS_ELEMENTS(s_aValuesFF) },
     17524        {  bs3CpuInstr4_vdppd_XMM1_XMM2_FSxBX_000h_icebp_c32, 255, RM_MEM, T_AVX_128, XMM1, XMM2, FSxBX, PASS_ELEMENTS(s_aValues00) },
     17525        {  bs3CpuInstr4_vdppd_XMM1_XMM2_FSxBX_022h_icebp_c32, 255, RM_MEM, T_AVX_128, XMM1, XMM2, FSxBX, PASS_ELEMENTS(s_aValues22) },
     17526        {  bs3CpuInstr4_vdppd_XMM1_XMM2_FSxBX_0FFh_icebp_c32, 255, RM_MEM, T_AVX_128, XMM1, XMM2, FSxBX, PASS_ELEMENTS(s_aValuesFF) },
     17527
     17528        {  bs3CpuInstr4_dppd_XMM1_XMM1_022h_icebp_c32,        255, RM_REG, T_SSE4_1,  XMM1, XMM1, NOREG, PASS_ELEMENTS(s_aValuesSR) },
     17529
     17530        {  bs3CpuInstr4_vdppd_XMM1_XMM1_XMM1_022h_icebp_c32,  255, RM_REG, T_AVX_128, XMM1, XMM1, NOREG, PASS_ELEMENTS(s_aValuesSR) },
     17531        {  bs3CpuInstr4_vdppd_XMM1_XMM1_XMM2_022h_icebp_c32,  255, RM_REG, T_AVX_128, XMM1, XMM1, XMM2,  PASS_ELEMENTS(s_aValues22) },
     17532        {  bs3CpuInstr4_vdppd_XMM1_XMM2_XMM1_022h_icebp_c32,  255, RM_REG, T_AVX_128, XMM1, XMM2, XMM1,  PASS_ELEMENTS(s_aValues22) },
     17533        {  bs3CpuInstr4_vdppd_XMM1_XMM2_XMM2_022h_icebp_c32,  255, RM_REG, T_AVX_128, XMM1, XMM2, NOREG, PASS_ELEMENTS(s_aValuesSR) },
     17534        {  bs3CpuInstr4_vdppd_XMM1_XMM1_FSxBX_022h_icebp_c32, 255, RM_MEM, T_AVX_128, XMM1, XMM1, FSxBX, PASS_ELEMENTS(s_aValues22) },
     17535    };
     17536    static BS3CPUINSTR4_TEST1_T const s_aTests64[] =
     17537    {
     17538        {  bs3CpuInstr4_dppd_XMM1_XMM2_000h_icebp_c64,        255, RM_REG, T_SSE4_1,  XMM1, XMM1, XMM2,  PASS_ELEMENTS(s_aValues00) },
     17539        {  bs3CpuInstr4_dppd_XMM1_XMM2_022h_icebp_c64,        255, RM_REG, T_SSE4_1,  XMM1, XMM1, XMM2,  PASS_ELEMENTS(s_aValues22) },
     17540        {  bs3CpuInstr4_dppd_XMM1_XMM2_0FFh_icebp_c64,        255, RM_REG, T_SSE4_1,  XMM1, XMM1, XMM2,  PASS_ELEMENTS(s_aValuesFF) },
     17541        {  bs3CpuInstr4_dppd_XMM1_FSxBX_000h_icebp_c64,       255, RM_MEM, T_SSE4_1,  XMM1, XMM1, FSxBX, PASS_ELEMENTS(s_aValues00) },
     17542        {  bs3CpuInstr4_dppd_XMM1_FSxBX_022h_icebp_c64,       255, RM_MEM, T_SSE4_1,  XMM1, XMM1, FSxBX, PASS_ELEMENTS(s_aValues22) },
     17543        {  bs3CpuInstr4_dppd_XMM1_FSxBX_0FFh_icebp_c64,       255, RM_MEM, T_SSE4_1,  XMM1, XMM1, FSxBX, PASS_ELEMENTS(s_aValuesFF) },
     17544        {  bs3CpuInstr4_dppd_XMM8_XMM9_022h_icebp_c64,        255, RM_REG, T_SSE4_1,  XMM8, XMM8, XMM9,  PASS_ELEMENTS(s_aValues22) },
     17545        {  bs3CpuInstr4_dppd_XMM8_FSxBX_022h_icebp_c64,       255, RM_MEM, T_SSE4_1,  XMM8, XMM8, FSxBX, PASS_ELEMENTS(s_aValues22) },
     17546
     17547        {  bs3CpuInstr4_vdppd_XMM1_XMM2_XMM3_000h_icebp_c64,  255, RM_REG, T_AVX_128, XMM1, XMM2, XMM3,  PASS_ELEMENTS(s_aValues00) },
     17548        {  bs3CpuInstr4_vdppd_XMM1_XMM2_XMM3_022h_icebp_c64,  255, RM_REG, T_AVX_128, XMM1, XMM2, XMM3,  PASS_ELEMENTS(s_aValues22) },
     17549        {  bs3CpuInstr4_vdppd_XMM1_XMM2_XMM3_0FFh_icebp_c64,  255, RM_REG, T_AVX_128, XMM1, XMM2, XMM3,  PASS_ELEMENTS(s_aValuesFF) },
     17550        {  bs3CpuInstr4_vdppd_XMM1_XMM2_FSxBX_000h_icebp_c64, 255, RM_MEM, T_AVX_128, XMM1, XMM2, FSxBX, PASS_ELEMENTS(s_aValues00) },
     17551        {  bs3CpuInstr4_vdppd_XMM1_XMM2_FSxBX_022h_icebp_c64, 255, RM_MEM, T_AVX_128, XMM1, XMM2, FSxBX, PASS_ELEMENTS(s_aValues22) },
     17552        {  bs3CpuInstr4_vdppd_XMM1_XMM2_FSxBX_0FFh_icebp_c64, 255, RM_MEM, T_AVX_128, XMM1, XMM2, FSxBX, PASS_ELEMENTS(s_aValuesFF) },
     17553        {  bs3CpuInstr4_vdppd_XMM8_XMM9_XMM10_022h_icebp_c64, 255, RM_REG, T_AVX_128, XMM8, XMM9, XMM10, PASS_ELEMENTS(s_aValues22) },
     17554        {  bs3CpuInstr4_vdppd_XMM8_XMM9_FSxBX_022h_icebp_c64, 255, RM_MEM, T_AVX_128, XMM8, XMM9, FSxBX, PASS_ELEMENTS(s_aValues22) },
     17555
     17556        {  bs3CpuInstr4_dppd_XMM1_XMM1_022h_icebp_c64,        255, RM_REG, T_SSE4_1,  XMM1, XMM1, NOREG, PASS_ELEMENTS(s_aValuesSR) },
     17557        {  bs3CpuInstr4_dppd_XMM8_XMM8_022h_icebp_c64,        255, RM_REG, T_SSE4_1,  XMM8, XMM8, NOREG, PASS_ELEMENTS(s_aValuesSR) },
     17558
     17559        {  bs3CpuInstr4_vdppd_XMM1_XMM1_XMM1_022h_icebp_c64,  255, RM_REG, T_AVX_128, XMM1, XMM1, NOREG, PASS_ELEMENTS(s_aValuesSR) },
     17560        {  bs3CpuInstr4_vdppd_XMM1_XMM1_XMM2_022h_icebp_c64,  255, RM_REG, T_AVX_128, XMM1, XMM1, XMM2,  PASS_ELEMENTS(s_aValues22) },
     17561        {  bs3CpuInstr4_vdppd_XMM1_XMM2_XMM1_022h_icebp_c64,  255, RM_REG, T_AVX_128, XMM1, XMM2, XMM1,  PASS_ELEMENTS(s_aValues22) },
     17562        {  bs3CpuInstr4_vdppd_XMM1_XMM2_XMM2_022h_icebp_c64,  255, RM_REG, T_AVX_128, XMM1, XMM2, NOREG, PASS_ELEMENTS(s_aValuesSR) },
     17563        {  bs3CpuInstr4_vdppd_XMM1_XMM1_FSxBX_022h_icebp_c64, 255, RM_MEM, T_AVX_128, XMM1, XMM1, FSxBX, PASS_ELEMENTS(s_aValues22) },
     17564        {  bs3CpuInstr4_vdppd_XMM8_XMM8_XMM8_022h_icebp_c64,  255, RM_REG, T_AVX_128, XMM8, XMM8, NOREG, PASS_ELEMENTS(s_aValuesSR) },
     17565        {  bs3CpuInstr4_vdppd_XMM8_XMM8_FSxBX_022h_icebp_c64, 255, RM_MEM, T_AVX_128, XMM8, XMM8, FSxBX, PASS_ELEMENTS(s_aValues22) },
    1694317566    };
    1694417567
     
    2228422907        { "[v]rsqrtss",     bs3CpuInstr4_v_rsqrtss,   0 },
    2228522908        { "[v]dpps",        bs3CpuInstr4_v_dpps,      0 },
     22909        { "[v]dppd",        bs3CpuInstr4_v_dppd,      0 },
    2228622910        { "cvtpi2ps",       bs3CpuInstr4_cvtpi2ps,    0 },
    2228722911        { "cvtps2pi",       bs3CpuInstr4_cvtps2pi,    0 },
Note: See TracChangeset for help on using the changeset viewer.

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