VirtualBox

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


Ignore:
Timestamp:
Oct 1, 2024 10:25:26 AM (5 months ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
164973
Message:

ValidationKit/bootsectors: adapt subpd, mulpd, divpd to auto-MXCSR; bugref:10658

subpd: add BS3_MXCSR_PE_FUZZY to 3 entries that need it
subpd: fix 5 previously-masked wrong output values
subpd: split 1 entry, using FIXED for complex OM vs PE behavior
subpd: split 1 entry, using FIXED for complex DM vs UM vs UE behavior

mulpd: add BS3_MXCSR_PE_FUZZY to 10 entries that need it (reactivating 2)
mulpd: fix 1 previously-masked wrong output value
mulpd: add missing exception outputs to 2 entries

divpd: add BS3_MXCSR_PE_FUZZY to 8 entries that need it
divpd: fix 4 previously-masked wrong output values
divpd: add missing exception outputs to 5 entries
divpd: split 2 entries using FIXED for complex UM vs UE behavior
divpd: split 1 entry, using FIXED for complex OM vs PE fuzzy behavior

File:
1 edited

Legend:

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

    r106185 r106189  
    58075807              /*256:out  */ X86_MXCSR_FZ | X86_MXCSR_IE,
    58085808              /*xcpt?    */ false, true },
    5809           { { /*src2     */ { FP64_INF(1), FP64_INF(0), FP64_INF(1), FP64_INF(0) } },
    5810             { /*src1     */ { FP64_INF(0), FP64_INF(0), FP64_INF(0), FP64_INF(1) } },
    5811             { /* =>      */ { FP64_INF(0), FP64_INF(0),   FP64_0(1),   FP64_0(1)  } },
     5809          { { /*src2     */ { FP64_INF(1), FP64_INF(0),  FP64_INF(1), FP64_INF(0) } },
     5810            { /*src1     */ { FP64_INF(0), FP64_INF(0),  FP64_INF(0), FP64_INF(1) } },
     5811            { /* =>      */ { FP64_INF(0), FP64_QNAN(1), FP64_INF(0), FP64_INF(1) } },
    58125812              /*mxcsr:in */ X86_MXCSR_FZ | X86_MXCSR_RC_ZERO,
    58135813              /*128:out  */ X86_MXCSR_FZ | X86_MXCSR_RC_ZERO | X86_MXCSR_IE,
     
    58195819    /*12*/{ { /*src2     */ { FP64_NORM_MIN(1), FP64_0(0), FP64_NORM_MIN(1), FP64_NORM_MIN(0) } },
    58205820            { /*src1     */ { FP64_NORM_MAX(0), FP64_0(0), FP64_NORM_MAX(0), FP64_NORM_MAX(0) } },
    5821             { /* =>      */ { FP64_0(0),        FP64_0(0), FP64_0(0),        FP64_0(0)        } },
     5821            { /* =>      */ { FP64_NORM_MAX(0), FP64_0(0), FP64_NORM_MAX(0), FP64_NORM_MAX(0) } },
    58225822              /*mxcsr:in */ 0,
    58235823              /*128:out  */ X86_MXCSR_PE,
     
    58265826          { { /*src2     */ { FP64_0(0), FP64_0(0), FP64_NORM_MIN(1), FP64_NORM_MIN(0) } },
    58275827            { /*src1     */ { FP64_0(0), FP64_0(0), FP64_NORM_MAX(0), FP64_NORM_MAX(0) } },
    5828             { /* =>      */ { FP64_0(0), FP64_0(0), FP64_0(0),        FP64_0(0)        } },
     5828            { /* =>      */ { FP64_0(0), FP64_0(0), FP64_NORM_MAX(0), FP64_NORM_MAX(0) } },
    58295829              /*mxcsr:in */ 0,
    58305830              /*128:out  */ 0,
     
    58355835            { /* =>      */ { FP64_NORM_MAX(1), FP64_NORM_MAX(1), FP64_NORM_MAX(0), FP64_0(0)        } },
    58365836              /*mxcsr:in */ X86_MXCSR_OM | X86_MXCSR_PM | X86_MXCSR_RC_ZERO,
    5837               /*128:out  */ X86_MXCSR_OM | X86_MXCSR_PM | X86_MXCSR_RC_ZERO | X86_MXCSR_OE | X86_MXCSR_PE,
    5838               /*256:out  */ X86_MXCSR_OM | X86_MXCSR_PM | X86_MXCSR_RC_ZERO | X86_MXCSR_OE | X86_MXCSR_PE,
     5837              /*128:out  */ X86_MXCSR_OM | X86_MXCSR_PM | X86_MXCSR_RC_ZERO | X86_MXCSR_OE | X86_MXCSR_PE | BS3_MXCSR_OM_FIXED,
     5838              /*256:out  */ X86_MXCSR_OM | X86_MXCSR_PM | X86_MXCSR_RC_ZERO | X86_MXCSR_OE | X86_MXCSR_PE | BS3_MXCSR_OM_FIXED,
     5839              /*xcpt?    */ false, false },
     5840          { { /*src2     */ { FP64_NORM_MAX(0), FP64_NORM_MAX(0), FP64_NORM_MAX(1), FP64_NORM_MAX(1) } },
     5841            { /*src1     */ { FP64_NORM_MAX(1), FP64_NORM_MAX(1), FP64_NORM_MAX(0), FP64_NORM_MAX(1) } },
     5842            { /* =>      */ { FP64_NORM_MAX(1), FP64_NORM_MAX(1), FP64_NORM_MAX(0), FP64_0(0)        } },
     5843              /*mxcsr:in */ X86_MXCSR_PM | X86_MXCSR_RC_ZERO,
     5844              /*128:out  */ X86_MXCSR_PM | X86_MXCSR_RC_ZERO | X86_MXCSR_OE | BS3_MXCSR_OM_FIXED,
     5845              /*256:out  */ X86_MXCSR_PM | X86_MXCSR_RC_ZERO | X86_MXCSR_OE | BS3_MXCSR_OM_FIXED,
    58395846              /*xcpt?    */ false, false },
    58405847          { { /*src2     */ { FP64_NORM_MAX(0), FP64_0(0), FP64_0(0), FP64_NORM_MAX(0) } },
     
    58425849            { /* =>      */ { FP64_INF(1),      FP64_0(0), FP64_0(0), FP64_INF(1)      } },
    58435850              /*mxcsr:in */ X86_MXCSR_OM | X86_MXCSR_PM | X86_MXCSR_FZ,
    5844               /*128:out  */ X86_MXCSR_OM | X86_MXCSR_PM | X86_MXCSR_FZ | X86_MXCSR_OE | X86_MXCSR_PE,
    5845               /*256:out  */ X86_MXCSR_OM | X86_MXCSR_PM | X86_MXCSR_FZ | X86_MXCSR_OE | X86_MXCSR_PE,
     5851              /*128:out  */ X86_MXCSR_OM | X86_MXCSR_PM | X86_MXCSR_FZ | X86_MXCSR_OE | X86_MXCSR_PE | BS3_MXCSR_PE_FUZZY,
     5852              /*256:out  */ X86_MXCSR_OM | X86_MXCSR_PM | X86_MXCSR_FZ | X86_MXCSR_OE | X86_MXCSR_PE | BS3_MXCSR_PE_FUZZY,
    58465853              /*xcpt?    */ false, false },
    58475854          { { /*src2     */ { FP64_NORM_MAX(0), FP64_NORM_MIN(1), FP64_V(1, 0, FP32_EXP_NORM_MIN + 1),  FP64_NORM_MIN(1) } },
     
    58565863            { /* =>      */ { FP64_NORM_MIN(0),                     FP64_NORM_MAX(1), FP64_NORM_MAX(1), FP64_NORM_MIN(0) } },
    58575864              /*mxcsr:in */ X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_ZERO | X86_MXCSR_OM | X86_MXCSR_PM,
    5858               /*128:out  */ X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_ZERO | X86_MXCSR_OM | X86_MXCSR_PM | X86_MXCSR_OE | X86_MXCSR_PE,
    5859               /*256:out  */ X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_ZERO | X86_MXCSR_OM | X86_MXCSR_PM | X86_MXCSR_OE | X86_MXCSR_PE,
     5865              /*128:out  */ X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_ZERO | X86_MXCSR_OM | X86_MXCSR_PM | X86_MXCSR_OE | X86_MXCSR_PE | BS3_MXCSR_PE_FUZZY,
     5866              /*256:out  */ X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_ZERO | X86_MXCSR_OM | X86_MXCSR_PM | X86_MXCSR_OE | X86_MXCSR_PE | BS3_MXCSR_PE_FUZZY,
    58605867              /*xcpt?    */ false, false },
    58615868          { { /*src2     */ { FP64_0(0), FP64_0(0), FP64_NORM_MIN(0), FP64_NORM_MAX(0) } },
     
    58645871              /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_ZERO,
    58655872              /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_ZERO,
    5866               /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_ZERO | X86_MXCSR_OE | X86_MXCSR_PE,
    5867               /*xcpt?    */ false, false },
    5868           { { /*src2     */ { FP64_NORM_MIN(0), FP64_NORM_MIN(0), FP64_NORM_MIN(1), FP64_NORM_MIN(0) } },
    5869             { /*src1     */ { FP64_NORM_MAX(0), FP64_NORM_MAX(0), FP64_NORM_MAX(1), FP64_NORM_MAX(0) } },
    5870             { /* =>      */ { FP64_0(0),        FP64_0(0),        FP64_0(0),        FP64_0(0)        } },
     5873              /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_ZERO | X86_MXCSR_OE | X86_MXCSR_PE | BS3_MXCSR_PE_FUZZY,
     5874              /*xcpt?    */ false, false },
     5875          { { /*src2     */ { FP64_NORM_MIN(0),                FP64_NORM_MIN(0),                FP64_NORM_MIN(1),                FP64_NORM_MIN(0)                } },
     5876            { /*src1     */ { FP64_NORM_MAX(0),                FP64_NORM_MAX(0),                FP64_NORM_MAX(1),                FP64_NORM_MAX(0)                } },
     5877            { /* =>      */ { FP64_V(0,0xffffffffffffe,0x7fe), FP64_V(0,0xffffffffffffe,0x7fe), FP64_V(1,0xffffffffffffe,0x7fe), FP64_V(0,0xffffffffffffe,0x7fe) } },
    58715878              /*mxcsr:in */ X86_MXCSR_XCPT_MASK & ~(X86_MXCSR_OM | X86_MXCSR_PM) | X86_MXCSR_RC_ZERO,
    58725879              /*128:out  */ X86_MXCSR_XCPT_MASK & ~(X86_MXCSR_OM | X86_MXCSR_PM) | X86_MXCSR_RC_ZERO | X86_MXCSR_PE,
    58735880              /*256:out  */ X86_MXCSR_XCPT_MASK & ~(X86_MXCSR_OM | X86_MXCSR_PM) | X86_MXCSR_RC_ZERO | X86_MXCSR_PE,
    58745881              /*xcpt?    */ true, true },
    5875           { { /*src2     */ { FP64_NORM_SAFE_INT_MIN(0), FP64_NORM_MAX(0), FP64_NORM_SAFE_INT_MAX(1), FP64_NORM_SAFE_INT_MAX(1) } },
    5876             { /*src1     */ { FP64_NORM_SAFE_INT_MAX(0), FP64_NORM_MAX(1), FP64_NORM_SAFE_INT_MAX(1), FP64_NORM_SAFE_INT_MAX(1) } },
    5877             { /* =>      */ { FP64_0(0),                 FP64_0(0),        FP64_0(0),                 FP64_0(0)                 } },
     5882          { { /*src2     */ { FP64_NORM_SAFE_INT_MIN(0),       FP64_NORM_MAX(0), FP64_NORM_SAFE_INT_MAX(1), FP64_NORM_SAFE_INT_MAX(1) } },
     5883            { /*src1     */ { FP64_NORM_SAFE_INT_MAX(0),       FP64_NORM_MAX(1), FP64_NORM_SAFE_INT_MAX(1), FP64_NORM_SAFE_INT_MAX(1) } },
     5884            { /* =>      */ { FP64_V(0,0xffffffffffffe,0x433), FP64_NORM_MAX(1), FP64_0(0),                 FP64_0(0)                 } },
    58785885              /*mxcsr:in */ X86_MXCSR_RC_ZERO,
    58795886              /*128:out  */ X86_MXCSR_RC_ZERO | X86_MXCSR_OE | X86_MXCSR_PE,
     
    58835890     * Normals.
    58845891     */
    5885     /*21*/{ { /*src2     */ { FP64_NORM_MAX(0), FP64_NORM_V1(1), FP64_NORM_MAX(1), FP64_NORM_V1(0) } },
     5892    /*22*/{ { /*src2     */ { FP64_NORM_MAX(0), FP64_NORM_V1(1), FP64_NORM_MAX(1), FP64_NORM_V1(0) } },
    58865893            { /*src1     */ { FP64_NORM_MAX(0), FP64_NORM_V1(1), FP64_NORM_MAX(1), FP64_NORM_V1(0) } },
    58875894            { /* =>      */ { FP64_0(0),        FP64_0(0),       FP64_0(0),        FP64_0(0)       } },
     
    59355942     * Denormals.
    59365943     */
    5937     /*28*/{ { /*src2     */ { FP64_DENORM_MAX(0), FP64_0(0), FP64_0(0), FP64_0(0) } },
     5944    /*29*/{ { /*src2     */ { FP64_DENORM_MAX(0), FP64_0(0), FP64_0(0), FP64_0(0) } },
    59385945            { /*src1     */ { FP64_0(0),          FP64_0(0), FP64_0(0), FP64_0(0) } },
    59395946            { /* =>      */ { FP64_0(0),          FP64_0(0), FP64_0(0), FP64_0(0) } },
    59405947              /*mxcsr:in */ 0,
    5941               /*128:out  */ X86_MXCSR_DE,
    5942               /*256:out  */ X86_MXCSR_DE,
     5948              /*128:out  */ X86_MXCSR_DE | BS3_MXCSR_DM_FIXED,
     5949              /*256:out  */ X86_MXCSR_DE | BS3_MXCSR_DM_FIXED,
    59435950              /*xcpt?    */ true, true },
    5944           { { /*src2     */ { FP64_0(0), FP64_0(0),          FP64_0(0), FP64_0(0) } },
     5951#ifdef TODO_X86_MXCSR_UE_HW /** @todo THIS FAILS ON IEM: X86_MXCSR_UE not set in 128:out or 256:out */
     5952          /* this is what works on HW (i7-10700) (same as below, plus 256:out:_UE) */
     5953 /*--|30*/{ { /*src2     */ { FP64_DENORM_MAX(0), FP64_0(0), FP64_0(0), FP64_0(0) } },
     5954            { /*src1     */ { FP64_0(0),          FP64_0(0), FP64_0(0), FP64_0(0) } },
     5955            { /* =>      */ { FP64_DENORM_MAX(1), FP64_0(0), FP64_0(0), FP64_0(0) } },
     5956              /*mxcsr:in */ X86_MXCSR_DM,
     5957              /*128:out  */ X86_MXCSR_DE | X86_MXCSR_UE | BS3_MXCSR_DM_FIXED | BS3_MXCSR_UM_FIXED,
     5958              /*256:out  */ X86_MXCSR_DE | X86_MXCSR_UE | BS3_MXCSR_DM_FIXED | BS3_MXCSR_UM_FIXED,
     5959              /*xcpt?    */ true, true },
     5960#endif /* TODO_X86_MXCSR_UE_HW */
     5961#ifdef TODO_X86_MXCSR_UE_IEM
     5962          /* for comparison, this is what works on IEM (same as above, minus 256:out:_UE) */
     5963 /*--|30*/{ { /*src2     */ { FP64_DENORM_MAX(0), FP64_0(0), FP64_0(0), FP64_0(0) } },
     5964            { /*src1     */ { FP64_0(0),          FP64_0(0), FP64_0(0), FP64_0(0) } },
     5965            { /* =>      */ { FP64_DENORM_MAX(1), FP64_0(0), FP64_0(0), FP64_0(0) } },
     5966              /*mxcsr:in */ X86_MXCSR_DM,
     5967              /*128:out  */ X86_MXCSR_DE | BS3_MXCSR_DM_FIXED | BS3_MXCSR_UM_FIXED,
     5968              /*256:out  */ X86_MXCSR_DE | BS3_MXCSR_DM_FIXED | BS3_MXCSR_UM_FIXED,
     5969              /*xcpt?    */ true, true },
     5970#endif /* TODO_X86_MXCSR_UE_IEM */
     5971 /*30|31*/{ { /*src2     */ { FP64_DENORM_MAX(0), FP64_0(0), FP64_0(0), FP64_0(0) } },
     5972            { /*src1     */ { FP64_0(0),          FP64_0(0), FP64_0(0), FP64_0(0) } },
     5973            { /* =>      */ { FP64_DENORM_MAX(1), FP64_0(0), FP64_0(0), FP64_0(0) } },
     5974              /*mxcsr:in */ X86_MXCSR_DM | X86_MXCSR_UM,
     5975              /*128:out  */ X86_MXCSR_DE | BS3_MXCSR_DM_FIXED | BS3_MXCSR_UM_FIXED,
     5976              /*256:out  */ X86_MXCSR_DE | BS3_MXCSR_DM_FIXED | BS3_MXCSR_UM_FIXED,
     5977              /*xcpt?    */ true, true },
     5978 /*31|32*/{ { /*src2     */ { FP64_0(0), FP64_0(0),          FP64_0(0), FP64_0(0) } },
    59455979            { /*src1     */ { FP64_0(0), FP64_DENORM_MAX(0), FP64_0(0), FP64_0(0) } },
    59465980            { /* =>      */ { FP64_0(0), FP64_0(0),          FP64_0(0), FP64_0(0) } },
     
    59495983              /*256:out  */ X86_MXCSR_DAZ | X86_MXCSR_XCPT_MASK,
    59505984              /*xcpt?    */ false, false },
    5951           { { /*src2     */ { FP64_DENORM_MIN(0), FP64_DENORM_MIN(0), FP64_DENORM_MAX(0), FP64_DENORM_MAX(0) } },
     5985 /*32|33*/{ { /*src2     */ { FP64_DENORM_MIN(0), FP64_DENORM_MIN(0), FP64_DENORM_MAX(0), FP64_DENORM_MAX(0) } },
    59525986            { /*src1     */ { FP64_DENORM_MAX(0), FP64_DENORM_MIN(0), FP64_DENORM_MAX(0), FP64_DENORM_MIN(0) } },
    59535987            { /* =>      */ { FP64_0(0),          FP64_0(0),          FP64_0(0),          FP64_0(0)          } },
     
    59605994     * Invalids.
    59615995     */
    5962     /*31*/ FP64_TABLE_D1_PD_INVALIDS
     5996 /*33|34*/ FP64_TABLE_D1_PD_INVALIDS
    59635997    /** @todo Underflow; Precision; Rounding; FZ etc. */
    59645998    };
     
    60106044    static BS3CPUINSTR4_TEST1_MODE_T const s_aTests[3] = BS3CPUINSTR4_TEST1_MODES_INIT(s_aTests16, s_aTests32, s_aTests64);
    60116045    unsigned const                         iTest       = BS3CPUINSTR4_TEST_MODES_INDEX(bMode);
    6012     return bs3CpuInstr4_WorkerTestType1(bMode, s_aTests[iTest].paTests, s_aTests[iTest].cTests,
     6046    return bs3CpuInstr4_WorkerTestType1A(bMode, s_aTests[iTest].paTests, s_aTests[iTest].cTests,
    60136047                                        g_aXcptConfig2, RT_ELEMENTS(g_aXcptConfig2));
    60146048}
     
    77837817              /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_FZ | X86_MXCSR_RC_UP,
    77847818              /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_FZ | X86_MXCSR_RC_UP,
    7785               /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_FZ | X86_MXCSR_RC_UP | X86_MXCSR_DE | X86_MXCSR_UE | X86_MXCSR_PE,
     7819              /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_FZ | X86_MXCSR_RC_UP | X86_MXCSR_DE | X86_MXCSR_UE | X86_MXCSR_PE | BS3_MXCSR_PE_FUZZY /* IEM */,
    77867820              /*xcpt?    */ false, false },
    77877821          { { /*src2     */ { FP64_DENORM_MAX(0), FP64_DENORM_MAX(0), FP64_DENORM_MAX(0), FP64_DENORM_MAX(1) } },
    77887822            { /*src1     */ { FP64_DENORM_MAX(0), FP64_DENORM_MIN(0), FP64_DENORM_MAX(1), FP64_DENORM_MIN(1) } },
    7789             { /* =>      */ { FP64_0(0),          FP64_0(0),          FP64_INF(1),        FP64_INF(0)        } },
     7823            { /* =>      */ { FP64_0(0),          FP64_0(0),          FP64_0(1),          FP64_0(0),         } },
    77907824              /*mxcsr:in */ X86_MXCSR_FZ | X86_MXCSR_RC_ZERO,
    7791               /*128:out  */ X86_MXCSR_FZ | X86_MXCSR_RC_ZERO | X86_MXCSR_DE,
    7792               /*256:out  */ X86_MXCSR_FZ | X86_MXCSR_RC_ZERO | X86_MXCSR_DE,
     7825              /*128:out  */ X86_MXCSR_FZ | X86_MXCSR_RC_ZERO | X86_MXCSR_DE | X86_MXCSR_PE | X86_MXCSR_UE | BS3_MXCSR_PE_FUZZY /* IEM */,
     7826              /*256:out  */ X86_MXCSR_FZ | X86_MXCSR_RC_ZERO | X86_MXCSR_DE | X86_MXCSR_PE | X86_MXCSR_UE | BS3_MXCSR_PE_FUZZY /* IEM */,
    77937827              /*xcpt?    */ true, true },
    77947828          { { /*src2     */ { FP64_DENORM_MAX(0), FP64_DENORM_MAX(0), FP64_DENORM_MAX(0), FP64_DENORM_MAX(1) } },
     
    77967830            { /* =>      */ { FP64_0(0),          FP64_0(0),          FP64_0(1),          FP64_0(0)          } },
    77977831              /*mxcsr:in */ X86_MXCSR_FZ | X86_MXCSR_RC_ZERO,
    7798               /*128:out  */ X86_MXCSR_FZ | X86_MXCSR_RC_ZERO | X86_MXCSR_DE,
    7799               /*256:out  */ X86_MXCSR_FZ | X86_MXCSR_RC_ZERO | X86_MXCSR_DE,
     7832              /*128:out  */ X86_MXCSR_FZ | X86_MXCSR_RC_ZERO | X86_MXCSR_DE | X86_MXCSR_PE | X86_MXCSR_UE | BS3_MXCSR_PE_FUZZY /* IEM */,
     7833              /*256:out  */ X86_MXCSR_FZ | X86_MXCSR_RC_ZERO | X86_MXCSR_DE | X86_MXCSR_PE | X86_MXCSR_UE | BS3_MXCSR_PE_FUZZY /* IEM */,
    78007834              /*xcpt?    */ true, true },
    78017835    /*
     
    78077841              /*mxcsr:in */ X86_MXCSR_XCPT_MASK,
    78087842              /*128:out  */ X86_MXCSR_XCPT_MASK,
    7809               /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_OE | X86_MXCSR_PE,
     7843              /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_OE | X86_MXCSR_PE | BS3_MXCSR_PE_FUZZY /* IEM */,
    78107844              /*xcpt?    */ false, false },
    78117845          { { /*src2     */ { FP64_NORM_MAX(0), FP64_NORM_MAX(0), FP64_NORM_V3(1), FP64_1(0) } },
     
    78137847            { /* =>      */ { FP64_NORM_MAX(0), FP64_INF(0),      FP64_NORM_V3(1), FP64_1(0) } },
    78147848              /*mxcsr:in */ X86_MXCSR_XCPT_MASK,
    7815               /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_OE | X86_MXCSR_PE,
    7816               /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_OE | X86_MXCSR_PE,
    7817               /*xcpt?    */ false, false },
    7818 #ifdef TODO_X86_MXCSR_PE
     7849              /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_OE | X86_MXCSR_PE | BS3_MXCSR_PE_FUZZY /* IEM */,
     7850              /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_OE | X86_MXCSR_PE | BS3_MXCSR_PE_FUZZY /* IEM */,
     7851              /*xcpt?    */ false, false },
    78197852          { { /*src2     */ { FP64_NORM_V3(0), FP64_NORM_MAX(0), FP64_NORM_MAX(1), FP64_1(0)       } },
    78207853            { /*src1     */ { FP64_1(0),       FP64_NORM_MAX(0), FP64_NORM_MAX(1), FP64_NORM_V1(0) } },
    78217854            { /* =>      */ { FP64_NORM_V3(0), FP64_NORM_MAX(0), FP64_NORM_MAX(0), FP64_NORM_V1(0) } },
    78227855              /*mxcsr:in */ (X86_MXCSR_XCPT_MASK & ~(X86_MXCSR_OM | X86_MXCSR_PM)) | X86_MXCSR_DAZ | X86_MXCSR_RC_ZERO,
    7823               /*128:out  */ (X86_MXCSR_XCPT_MASK & ~(X86_MXCSR_OM | X86_MXCSR_PM)) | X86_MXCSR_DAZ | X86_MXCSR_RC_ZERO | X86_MXCSR_OE | X86_MXCSR_PE,
    7824               /*256:out  */ (X86_MXCSR_XCPT_MASK & ~(X86_MXCSR_OM | X86_MXCSR_PM)) | X86_MXCSR_DAZ | X86_MXCSR_RC_ZERO | X86_MXCSR_OE | X86_MXCSR_PE,
     7856              /*128:out  */ (X86_MXCSR_XCPT_MASK & ~(X86_MXCSR_OM | X86_MXCSR_PM)) | X86_MXCSR_DAZ | X86_MXCSR_RC_ZERO | X86_MXCSR_OE | X86_MXCSR_PE | BS3_MXCSR_PE_FUZZY /* IEM */,
     7857              /*256:out  */ (X86_MXCSR_XCPT_MASK & ~(X86_MXCSR_OM | X86_MXCSR_PM)) | X86_MXCSR_DAZ | X86_MXCSR_RC_ZERO | X86_MXCSR_OE | X86_MXCSR_PE | BS3_MXCSR_PE_FUZZY /* IEM */,
    78257858              /*xcpt?    */ true, true },
    7826 #endif
    78277859          { { /*src2     */ { FP64_NORM_MAX(0), FP64_NORM_MIN(1), FP64_NORM_MIN(1),                                       FP64_NORM_MAX(0) } },
    78287860            { /*src1     */ { FP64_NORM_MAX(0), FP64_NORM_MIN(1), FP64_NORM_MAX(1),                                       FP64_NORM_MAX(0) } },
    78297861            { /* =>      */ { FP64_INF(0),      FP64_0(0),        FP64_V(0, FP64_FRAC_NORM_MAX, RTFLOAT64U_EXP_BIAS + 1), FP64_INF(0)      } },
    78307862              /*mxcsr:in */ X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_OM | X86_MXCSR_UM | X86_MXCSR_PM,
    7831               /*128:out  */ X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_OM | X86_MXCSR_UM | X86_MXCSR_PM | X86_MXCSR_OE | X86_MXCSR_UE | X86_MXCSR_PE,
    7832               /*256:out  */ X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_OM | X86_MXCSR_UM | X86_MXCSR_PM | X86_MXCSR_OE | X86_MXCSR_UE | X86_MXCSR_PE,
    7833               /*xcpt?    */ false, false },
    7834 #ifdef TODO_X86_MXCSR_PE
     7863              /*128:out  */ X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_OM | X86_MXCSR_UM | X86_MXCSR_PM | X86_MXCSR_OE | X86_MXCSR_UE | X86_MXCSR_PE | BS3_MXCSR_PE_FUZZY /* IEM */,
     7864              /*256:out  */ X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_OM | X86_MXCSR_UM | X86_MXCSR_PM | X86_MXCSR_OE | X86_MXCSR_UE | X86_MXCSR_PE | BS3_MXCSR_PE_FUZZY /* IEM */,
     7865              /*xcpt?    */ false, false },
    78357866          { { /*src2     */ { FP64_NORM_V3(0), FP64_1(1),       FP64_NORM_MAX(1), FP64_NORM_MIN(0)                                       } },
    78367867            { /*src1     */ { FP64_1(0),       FP64_NORM_V2(1), FP64_NORM_MAX(1), FP64_NORM_MAX(1)                                       } },
     
    78387869              /*mxcsr:in */ X86_MXCSR_XCPT_MASK & ~(X86_MXCSR_OM | X86_MXCSR_PM) | X86_MXCSR_RC_ZERO,
    78397870              /*128:out  */ X86_MXCSR_XCPT_MASK & ~(X86_MXCSR_OM | X86_MXCSR_PM) | X86_MXCSR_RC_ZERO,
    7840               /*256:out  */ X86_MXCSR_XCPT_MASK & ~(X86_MXCSR_OM | X86_MXCSR_PM) | X86_MXCSR_RC_ZERO | X86_MXCSR_OE | X86_MXCSR_PE,
     7871              /*256:out  */ X86_MXCSR_XCPT_MASK & ~(X86_MXCSR_OM | X86_MXCSR_PM) | X86_MXCSR_RC_ZERO | X86_MXCSR_OE | X86_MXCSR_PE | BS3_MXCSR_PE_FUZZY /* IEM */,
    78417872              /*xcpt?    */ false, true },
    7842 #endif
    78437873          { { /*src2     */ { FP64_NORM_SAFE_INT_MIN(0),                         FP64_NORM_MAX(0), FP64_NORM_SAFE_INT_MAX(1),                FP64_NORM_SAFE_INT_MIN(0)            } },
    78447874            { /*src1     */ { FP64_NORM_SAFE_INT_MAX(0),                         FP64_NORM_MAX(1), FP64_NORM_SAFE_INT_MAX(1),                FP64_NORM_SAFE_INT_MAX(0)            } },
    78457875            { /* =>      */ { FP64_V(0, FP64_FRAC_NORM_MAX, FP64_FRAC_BITS + 1), FP64_NORM_MAX(1), FP64_V(0, FP64_FRAC_NORM_MAX - 1, 0x468), FP64_V(0, FP64_FRAC_NORM_MAX, 0x035) } },
    78467876              /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_ZERO,
    7847               /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_ZERO | X86_MXCSR_OE | X86_MXCSR_PE,
    7848               /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_ZERO | X86_MXCSR_OE | X86_MXCSR_PE,
     7877              /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_ZERO | X86_MXCSR_OE | X86_MXCSR_PE | BS3_MXCSR_PE_FUZZY /* IEM */,
     7878              /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_ZERO | X86_MXCSR_OE | X86_MXCSR_PE | BS3_MXCSR_PE_FUZZY /* IEM */,
    78497879              /*xcpt?    */ false, false },
    78507880          { { /*src2     */ { FP64_NORM_SAFE_INT_MIN(0),                         FP64_NORM_MAX(0), FP64_NORM_SAFE_INT_MAX(1),                FP64_NORM_SAFE_INT_MIN(0)            } },
     
    78527882            { /* =>      */ { FP64_V(0, FP64_FRAC_NORM_MAX, FP64_FRAC_BITS + 1), FP64_INF(1),      FP64_V(0, FP64_FRAC_NORM_MAX - 1, 0x468), FP64_V(0, FP64_FRAC_NORM_MAX, 0x035) } },
    78537883              /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_DOWN,
    7854               /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_DOWN | X86_MXCSR_OE | X86_MXCSR_PE,
     7884              /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_DOWN | X86_MXCSR_OE | X86_MXCSR_PE | BS3_MXCSR_PE_FUZZY /* IEM */,
    78557885              /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_DOWN | X86_MXCSR_OE | X86_MXCSR_PE,
    78567886              /*xcpt?    */ false, false },
     
    79087938    static BS3CPUINSTR4_TEST1_MODE_T const s_aTests[3] = BS3CPUINSTR4_TEST1_MODES_INIT(s_aTests16, s_aTests32, s_aTests64);
    79097939    unsigned const                         iTest       = BS3CPUINSTR4_TEST_MODES_INDEX(bMode);
    7910     return bs3CpuInstr4_WorkerTestType1(bMode, s_aTests[iTest].paTests, s_aTests[iTest].cTests,
     7940    return bs3CpuInstr4_WorkerTestType1A(bMode, s_aTests[iTest].paTests, s_aTests[iTest].cTests,
    79117941                                        g_aXcptConfig2, RT_ELEMENTS(g_aXcptConfig2));
    79127942}
     
    90189048          { { /*src2     */ { FP64_1(0), FP64_1(1), FP64_1(0),          FP64_1(0)          } },
    90199049            { /*src1     */ { FP64_0(0), FP64_0(0), FP64_DENORM_MIN(0), FP64_DENORM_MAX(0) } },
    9020             { /* =>      */ { FP64_0(0), FP64_0(1), FP64_DENORM_MIN(0), FP64_DENORM_MAX(0) } },
     9050            { /* =>      */ { FP64_0(0), FP64_0(1), FP64_0(0),          FP64_0(0)          } },
    90219051             /*mxcsr:in */ X86_MXCSR_FZ,
    90229052             /*128:out  */ X86_MXCSR_FZ,
    9023              /*256:out  */ X86_MXCSR_FZ | X86_MXCSR_DE,
     9053             /*256:out  */ X86_MXCSR_FZ | X86_MXCSR_DE | X86_MXCSR_UE | X86_MXCSR_PE | BS3_MXCSR_PE_FUZZY /* i7-10700, IEM */,
    90249054             /*xcpt?    */ false, true },
    9025           { { /*src2     */ { FP64_1(0), FP64_1(1), FP64_1(0),          FP64_1(0)          } },
     9055#ifdef TODO_X86_MXCSR_UE /** @todo THIS FAILS ON IEM: X86_MXCSR_UE not set in 256:out */
     9056 /*--|21*/{ { /*src2     */ { FP64_1(0), FP64_1(1), FP64_1(0),          FP64_1(0)          } },
    90269057            { /*src1     */ { FP64_0(0), FP64_0(0), FP64_DENORM_MIN(0), FP64_DENORM_MAX(0) } },
    90279058            { /* =>      */ { FP64_0(0), FP64_0(1), FP64_DENORM_MIN(0), FP64_DENORM_MAX(0) } },
    9028              /*mxcsr:in */ X86_MXCSR_DM | X86_MXCSR_UM | 0,
    9029              /*128:out  */ X86_MXCSR_DM | X86_MXCSR_UM | 0,
    9030              /*256:out  */ X86_MXCSR_DM | X86_MXCSR_UM | X86_MXCSR_DE,
     9059             /*mxcsr:in */ 0,
     9060             /*128:out  */ 0,
     9061             /*256:out  */ X86_MXCSR_DE | X86_MXCSR_UE | BS3_MXCSR_UM_FIXED,
     9062             /*xcpt?    */ false, false },
     9063#endif /* TODO_X86_MXCSR_UE */
     9064 /*21|22*/{ { /*src2     */ { FP64_1(0), FP64_1(1), FP64_1(0),          FP64_1(0)          } },
     9065            { /*src1     */ { FP64_0(0), FP64_0(0), FP64_DENORM_MIN(0), FP64_DENORM_MAX(0) } },
     9066            { /* =>      */ { FP64_0(0), FP64_0(1), FP64_DENORM_MIN(0), FP64_DENORM_MAX(0) } },
     9067             /*mxcsr:in */ X86_MXCSR_UM,
     9068             /*128:out  */ X86_MXCSR_UM,
     9069             /*256:out  */ X86_MXCSR_DE | BS3_MXCSR_UM_FIXED,
    90319070             /*xcpt?    */ false, false },
    90329071#ifdef TODO_X86_MXCSR_UE /** @todo THIS FAILS ON IEM: X86_MXCSR_UE not set in 256:out */
    9033  /*--|22*/{ { /*src2     */ { FP64_1(0), FP64_1(1), FP64_1(0),          FP64_1(0)          } },
     9072 /*--|23*/{ { /*src2     */ { FP64_1(0), FP64_1(1), FP64_1(0),          FP64_1(0)          } },
    90349073            { /*src1     */ { FP64_0(0), FP64_0(0), FP64_DENORM_MIN(0), FP64_DENORM_MAX(0) } },
    90359074            { /* =>      */ { FP64_0(0), FP64_0(1), FP64_DENORM_MIN(0), FP64_DENORM_MAX(0) } },
    9036              /*mxcsr:in */ X86_MXCSR_DM | 0,
    9037              /*128:out  */ X86_MXCSR_DM | 0,
    9038              /*256:out  */ X86_MXCSR_DM | X86_MXCSR_DE | X86_MXCSR_UE,
     9075             /*mxcsr:in */ X86_MXCSR_DM,
     9076             /*128:out  */ X86_MXCSR_DM,
     9077             /*256:out  */ X86_MXCSR_DM | X86_MXCSR_DE | X86_MXCSR_UE | BS3_MXCSR_UM_FIXED,
    90399078             /*xcpt?    */ false, true },
    90409079#endif /* TODO_X86_MXCSR_UE */
    9041  /*22|23*/{ { /*src2     */ { FP64_1(0),          FP64_1(0),          FP64_DENORM_MIN(0), FP64_DENORM_MAX(0) } },
     9080 /*22|24*/{ { /*src2     */ { FP64_1(0), FP64_1(1), FP64_1(0),          FP64_1(0)          } },
     9081            { /*src1     */ { FP64_0(0), FP64_0(0), FP64_DENORM_MIN(0), FP64_DENORM_MAX(0) } },
     9082            { /* =>      */ { FP64_0(0), FP64_0(1), FP64_DENORM_MIN(0), FP64_DENORM_MAX(0) } },
     9083             /*mxcsr:in */ X86_MXCSR_DM | X86_MXCSR_UM,
     9084             /*128:out  */ X86_MXCSR_DM | X86_MXCSR_UM,
     9085             /*256:out  */ X86_MXCSR_DM | X86_MXCSR_UM | X86_MXCSR_DE | BS3_MXCSR_UM_FIXED,
     9086             /*xcpt?    */ false, true },
     9087          { { /*src2     */ { FP64_1(0),          FP64_1(0),          FP64_DENORM_MIN(0), FP64_DENORM_MAX(0) } },
    90429088            { /*src1     */ { FP64_DENORM_MAX(0), FP64_DENORM_MIN(0), FP64_0(0),          FP64_1(1)          } },
    90439089            { /* =>      */ { FP64_0(0),          FP64_0(0),          FP64_QNAN(1),       FP64_INF(1)        } },
     
    90659111              /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_FZ | X86_MXCSR_RC_UP,
    90669112              /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_FZ | X86_MXCSR_RC_UP,
    9067               /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_FZ | X86_MXCSR_RC_UP | X86_MXCSR_DE | X86_MXCSR_UE | X86_MXCSR_PE,
     9113              /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_FZ | X86_MXCSR_RC_UP | X86_MXCSR_DE | X86_MXCSR_UE | X86_MXCSR_PE | BS3_MXCSR_PE_FUZZY,
    90689114              /*xcpt?    */ false, false },
    90699115          { { /*src2     */ { FP64_DENORM_MAX(0), FP64_DENORM_MAX(0), FP64_DENORM_MAX(0), FP64_DENORM_MAX(1) } },
    90709116            { /*src1     */ { FP64_0(0),          FP64_0(0),          FP64_INF(1),        FP64_INF(0)        } },
    9071             { /* =>      */ { FP64_DENORM_MAX(0), FP64_DENORM_MIN(0), FP64_DENORM_MAX(1), FP64_DENORM_MIN(1) } },
     9117            { /* =>      */ { FP64_0(0),          FP64_0(0),          FP64_INF(1),        FP64_INF(1)        } },
    90729118              /*mxcsr:in */ X86_MXCSR_FZ | X86_MXCSR_RC_ZERO,
    90739119              /*128:out  */ X86_MXCSR_FZ | X86_MXCSR_RC_ZERO | X86_MXCSR_DE,
     
    90769122          { { /*src2     */ { FP64_DENORM_MAX(0), FP64_DENORM_MAX(0), FP64_DENORM_MAX(0), FP64_DENORM_MAX(1) } },
    90779123            { /*src1     */ { FP64_0(0),          FP64_0(0),          FP64_0(1),          FP64_0(0)          } },
    9078             { /* =>      */ { FP64_DENORM_MAX(0), FP64_DENORM_MIN(0), FP64_DENORM_MAX(1), FP64_DENORM_MIN(1) } },
     9124            { /* =>      */ { FP64_0(0),          FP64_0(0),          FP64_0(1),          FP64_0(1)          } },
    90799125              /*mxcsr:in */ X86_MXCSR_FZ | X86_MXCSR_RC_ZERO,
    90809126              /*128:out  */ X86_MXCSR_FZ | X86_MXCSR_RC_ZERO | X86_MXCSR_DE,
     
    90849130     * Overflow, Precision.
    90859131     */
    9086  /*28|29*/{ { /*src2     */ { FP64_NORM_V3(1), FP64_1(0), FP64_NORM_MAX(0), FP64_NORM_MAX(0) } },
     9132 /*29|31*/{ { /*src2     */ { FP64_NORM_V3(1), FP64_1(0), FP64_NORM_MAX(0), FP64_NORM_MAX(0) } },
    90879133            { /*src1     */ { FP64_NORM_V3(1), FP64_1(0), FP64_NORM_MAX(0), FP64_INF(0)      } },
    90889134            { /* =>      */ { FP64_1(0),       FP64_1(0), FP64_1(0),        FP64_INF(0)      } },
     
    90969142              /*mxcsr:in */ X86_MXCSR_XCPT_MASK,
    90979143              /*128:out  */ X86_MXCSR_XCPT_MASK,
    9098               /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_OE | X86_MXCSR_PE,
     9144              /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_OE | X86_MXCSR_PE | BS3_MXCSR_PE_FUZZY /* i7-10700, IEM */,
    90999145              /*xcpt?    */ false, false },
    91009146          { { /*src2     */ { FP64_NORM_MAX(0), FP64_NORM_MAX(0), FP64_NORM_V3(1), FP64_NORM_MAX(1) } },
     
    91039149              /*mxcsr:in */ X86_MXCSR_XCPT_MASK,
    91049150              /*128:out  */ X86_MXCSR_XCPT_MASK,
    9105               /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_UE | X86_MXCSR_PE,
     9151              /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_UE | X86_MXCSR_PE | BS3_MXCSR_PE_FUZZY /* IEM */,
    91069152              /*xcpt?    */ false, false },
    91079153          { { /*src2     */ { FP64_NORM_V3(0), FP64_NORM_MAX(0), FP64_NORM_MAX(1), FP64_V(1, 0, 0x3fe)/*-0.5*/ } },
    91089154            { /*src1     */ { FP64_NORM_V3(1), FP64_NORM_MAX(0), FP64_NORM_MAX(0), FP64_NORM_MAX(1)            } },
    91099155            { /* =>      */ { FP64_1(1),       FP64_1(0),        FP64_1(1),        FP64_NORM_MAX(0)            } },
    9110               /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_RC_ZERO,
    9111               /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_RC_ZERO,
    9112               /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_RC_ZERO | X86_MXCSR_OE | X86_MXCSR_PE,
     9156              /*mxcsr:in */ X86_MXCSR_OM | X86_MXCSR_DAZ | X86_MXCSR_RC_ZERO,
     9157              /*128:out  */ X86_MXCSR_OM | X86_MXCSR_DAZ | X86_MXCSR_RC_ZERO,
     9158              /*256:out  */ X86_MXCSR_OM | X86_MXCSR_DAZ | X86_MXCSR_RC_ZERO | X86_MXCSR_OE | X86_MXCSR_PE | BS3_MXCSR_OM_FIXED,
     9159              /*xcpt?    */ false, false },
     9160          { { /*src2     */ { FP64_NORM_V3(0), FP64_NORM_MAX(0), FP64_NORM_MAX(1), FP64_V(1, 0, 0x3fe)/*-0.5*/ } },
     9161            { /*src1     */ { FP64_NORM_V3(1), FP64_NORM_MAX(0), FP64_NORM_MAX(0), FP64_NORM_MAX(1)            } },
     9162            { /* =>      */ { FP64_1(1),       FP64_1(0),        FP64_1(1),        FP64_NORM_MAX(0)            } },
     9163              /*mxcsr:in */ X86_MXCSR_DAZ | X86_MXCSR_RC_ZERO,
     9164              /*128:out  */ X86_MXCSR_DAZ | X86_MXCSR_RC_ZERO,
     9165              /*256:out  */ X86_MXCSR_DAZ | X86_MXCSR_RC_ZERO | X86_MXCSR_OE | X86_MXCSR_PE | BS3_MXCSR_OM_FIXED | BS3_MXCSR_PE_FUZZY,
    91139166              /*xcpt?    */ false, false },
    91149167          { { /*src2     */ { FP64_NORM_V3(0), FP64_NORM_MAX(0), FP64_NORM_MAX(1), FP64_V(1, 0, 0x3fe)/*-0.5*/ } },
     
    91179170              /*mxcsr:in */ (X86_MXCSR_XCPT_MASK & ~(X86_MXCSR_OM | X86_MXCSR_PM)) | X86_MXCSR_DAZ | X86_MXCSR_RC_ZERO,
    91189171              /*128:out  */ (X86_MXCSR_XCPT_MASK & ~(X86_MXCSR_OM | X86_MXCSR_PM)) | X86_MXCSR_DAZ | X86_MXCSR_RC_ZERO,
    9119               /*256:out  */ (X86_MXCSR_XCPT_MASK & ~(X86_MXCSR_OM | X86_MXCSR_PM)) | X86_MXCSR_DAZ | X86_MXCSR_RC_ZERO | X86_MXCSR_OE,
     9172              /*256:out  */ (X86_MXCSR_XCPT_MASK & ~(X86_MXCSR_OM | X86_MXCSR_PM)) | X86_MXCSR_DAZ | X86_MXCSR_RC_ZERO | X86_MXCSR_OE | X86_MXCSR_PE | BS3_MXCSR_PE_FUZZY /* i7-10700, IEM */,
    91209173              /*xcpt?    */ false, true },
    91219174          { { /*src2     */ { FP64_NORM_V3(0), FP64_NORM_MAX(0), FP64_NORM_MAX(1), FP64_V(1, 0, 0x3fe)/*-0.5*/ } },
    91229175            { /*src1     */ { FP64_NORM_V3(1), FP64_NORM_MAX(0), FP64_NORM_MAX(0), FP64_NORM_MAX(1)            } },
    9123             { /* =>      */ { FP64_1(1),       FP64_1(0),        FP64_1(1),        FP64_NORM_MAX(0)            } },
     9176            { /* =>      */ { FP64_1(1),       FP64_1(0),        FP64_1(1),        FP64_INF(0)                 } },
    91249177              /*mxcsr:in */ (X86_MXCSR_XCPT_MASK & ~(X86_MXCSR_OM | X86_MXCSR_PM)) | X86_MXCSR_DAZ,
    91259178              /*128:out  */ (X86_MXCSR_XCPT_MASK & ~(X86_MXCSR_OM | X86_MXCSR_PM)) | X86_MXCSR_DAZ,
    9126               /*256:out  */ (X86_MXCSR_XCPT_MASK & ~(X86_MXCSR_OM | X86_MXCSR_PM)) | X86_MXCSR_DAZ | X86_MXCSR_OE,
     9179              /*256:out  */ (X86_MXCSR_XCPT_MASK & ~(X86_MXCSR_OM | X86_MXCSR_PM)) | X86_MXCSR_DAZ | X86_MXCSR_OE | X86_MXCSR_PE | BS3_MXCSR_PE_FUZZY /* i7-10700, IEM */,
    91279180              /*xcpt?    */ false, true },
    91289181          { { /*src2     */ { FP64_NORM_MAX(0), FP64_NORM_MIN(1), FP64_NORM_MIN(1),                                       FP64_NORM_MAX(0) } },
     
    91389191              /*mxcsr:in */ X86_MXCSR_XCPT_MASK & ~(X86_MXCSR_OM | X86_MXCSR_PM) | X86_MXCSR_RC_ZERO,
    91399192              /*128:out  */ X86_MXCSR_XCPT_MASK & ~(X86_MXCSR_OM | X86_MXCSR_PM) | X86_MXCSR_RC_ZERO,
    9140               /*256:out  */ X86_MXCSR_XCPT_MASK & ~(X86_MXCSR_OM | X86_MXCSR_PM) | X86_MXCSR_RC_ZERO | X86_MXCSR_OE,
     9193              /*256:out  */ X86_MXCSR_XCPT_MASK & ~(X86_MXCSR_OM | X86_MXCSR_PM) | X86_MXCSR_RC_ZERO | X86_MXCSR_OE | X86_MXCSR_PE | BS3_MXCSR_PE_FUZZY /* i7-10700, IEM */,
    91419194              /*xcpt?    */ false, true },
    91429195          { { /*src2     */ { FP64_NORM_SAFE_INT_MIN(0),                         FP64_NORM_MAX(0), FP64_NORM_SAFE_INT_MAX(1),                                FP64_NORM_SAFE_INT_MIN(0)            } },
     
    91579210     * Invalids.
    91589211     */
    9159  /*38|39*/ FP64_TABLE_D1_PD_INVALIDS
     9212 /*40|42*/ FP64_TABLE_D1_PD_INVALIDS
    91609213    /** @todo Underflow, Precision; Rounding; FZ etc. */
    91619214    };
     
    92079260    static BS3CPUINSTR4_TEST1_MODE_T const s_aTests[3] = BS3CPUINSTR4_TEST1_MODES_INIT(s_aTests16, s_aTests32, s_aTests64);
    92089261    unsigned const                         iTest       = BS3CPUINSTR4_TEST_MODES_INDEX(bMode);
    9209     return bs3CpuInstr4_WorkerTestType1(bMode, s_aTests[iTest].paTests, s_aTests[iTest].cTests,
     9262    return bs3CpuInstr4_WorkerTestType1A(bMode, s_aTests[iTest].paTests, s_aTests[iTest].cTests,
    92109263                                        g_aXcptConfig2, RT_ELEMENTS(g_aXcptConfig2));
    92119264}
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