VirtualBox

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


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

ValidationKit/bootsectors: adapt haddps, hsubps to auto-MXCSR; bugref:10658

haddps: fix 1 previously-masked wrong output value
haddps: split 2 entries, using FIXED for complex DM vs UM vs UE behavior
haddps: split 6 entries, using FIXED for complex OM vs PE behavior
haddps: remove 1 entry made redundant by mask randomization

hsubps: fix 2 previously-masked wrong output values
hsubps: split 2 entries, using FIXED for complex DM vs UM vs UE behavior
hsubps: split 4 entries, using FIXED for complex OM vs PE behavior
hsubps: remove 1 entry made redundant by mask randomization

File:
1 edited

Legend:

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

    r106215 r106216  
    665665/**
    666666 * Table D-1: Packed single-precision floating-point invalid values.
    667  * For instructions: addps, subps, mulps, divps, addsubps, haddps, hsubps.
     667 * For instructions: addps, subps, mulps, divps, addsubps.
    668668 **/
    669669#define FP32_TABLE_D1_PS_INVALIDS \
     
    758758 **/
    759759#define FP64_TABLE_D1_PD_INVALIDS \
    760     /*0 */{ { /*src2     */ { FP64_QNAN(0), FP64_QNAN_MAX(0), FP64_QNAN_V0(0),  FP64_QNAN_V1(0) } },       \
     760    /* 0*/{ { /*src2     */ { FP64_QNAN(0), FP64_QNAN_MAX(0), FP64_QNAN_V0(0),  FP64_QNAN_V1(0) } },       \
    761761            { /*src1     */ { FP64_QNAN(0), FP64_QNAN(0),     FP64_QNAN_MAX(0), FP64_QNAN_V2(0) } },       \
    762762            { /* =>      */ { FP64_QNAN(0), FP64_QNAN(0),     FP64_QNAN_MAX(0), FP64_QNAN_V2(0) } },       \
     
    10641064#define FP64_TABLE_D1_SD_INVALIDS \
    10651065    /* QNan, QNan (Masked). */                                                                            \
    1066     /*0 */{ { /*src2     */ { FP64_QNAN(0), FP64_QNAN_MAX(0), FP64_QNAN_V0(0),  FP64_QNAN_V1(0) } },      \
     1066    /* 0*/{ { /*src2     */ { FP64_QNAN(0), FP64_QNAN_MAX(0), FP64_QNAN_V0(0),  FP64_QNAN_V1(0) } },      \
    10671067            { /*src1     */ { FP64_QNAN(0), FP64_QNAN(1),     FP64_QNAN_MAX(1), FP64_QNAN_V2(0) } },      \
    10681068            { /* =>      */ { FP64_QNAN(0), FP64_QNAN(1),     FP64_QNAN_MAX(1), FP64_QNAN_V2(0) } },      \
     
    13681368 **/
    13691369#define FP64_TABLE_D1_H_PD_INVALIDS \
    1370     /*0 */{ { /*src2     */ { FP64_QNAN_MAX(0), FP64_QNAN(0),     FP64_QNAN_V0(0), FP64_QNAN_V1(0)  } },     \
     1370    /* 0*/{ { /*src2     */ { FP64_QNAN_MAX(0), FP64_QNAN(0),     FP64_QNAN_V0(0), FP64_QNAN_V1(0)  } },     \
    13711371            { /*src1     */ { FP64_QNAN(0),     FP64_QNAN(0),     FP64_QNAN(0),    FP64_QNAN_MAX(0) } },     \
    13721372            { /* =>      */ { FP64_QNAN(0),     FP64_QNAN_MAX(0), FP64_QNAN(0),    FP64_QNAN_V0(0)  } },     \
     
    14241424              /*256:out  */ X86_MXCSR_DAZ | X86_MXCSR_RC_UP | X86_MXCSR_IE,                                  \
    14251425              /*xcpt?    */ true, true },                                                                    \
    1426           { { /*src2     */ { FP64_SNAN_MAX(0),  FP64_QNAN_V2(0),  FP64_SNAN_V1(0),   FP64_QNAN_V2(0) } },    \
    1427             { /*src1     */ { FP64_SNAN(0),      FP64_QNAN(0),     FP64_SNAN(0),      FP64_QNAN_V3(0) } },    \
    1428             { /* =>      */ { FP64_QNAN_V(0, 1), FP64_QNAN_MAX(0), FP64_QNAN_V(0, 1), FP64_QNAN_V1(0) } },    \
     1426          { { /*src2     */ { FP64_SNAN_MAX(0),  FP64_QNAN_V2(0),  FP64_SNAN_V1(0),   FP64_QNAN_V2(0) } },   \
     1427            { /*src1     */ { FP64_SNAN(0),      FP64_QNAN(0),     FP64_SNAN(0),      FP64_QNAN_V3(0) } },   \
     1428            { /* =>      */ { FP64_QNAN_V(0, 1), FP64_QNAN_MAX(0), FP64_QNAN_V(0, 1), FP64_QNAN_V1(0) } },   \
    14291429              /*mxcsr:in */ 0,                                                                               \
    14301430              /*128:out  */ X86_MXCSR_IE,                                                                    \
     
    15341534 **/
    15351535#define FP64_TABLE_D9_PD_INVALIDS \
    1536     /*0 */{ { /*src2     */ { FP64_QNAN(0), FP64_QNAN_MAX(0), FP64_QNAN_V0(0),  FP64_QNAN_V1(0) } }, \
     1536    /* 0*/{ { /*src2     */ { FP64_QNAN(0), FP64_QNAN_MAX(0), FP64_QNAN_V0(0),  FP64_QNAN_V1(0) } }, \
    15371537            { /*src1     */ { FP64_QNAN(0), FP64_QNAN(0),     FP64_QNAN_MAX(0), FP64_QNAN_V2(0) } }, \
    15381538            { /* =>      */ { FP64_QNAN(0), FP64_QNAN_MAX(0), FP64_QNAN_V0(0),  FP64_QNAN_V1(0) } }, \
     
    18251825#define FP64_TABLE_D9_SD_INVALIDS \
    18261826    /* QNan, QNan (Masked). */                                                                         \
    1827     /*0 */{ { /*src2     */ { FP64_QNAN(0), FP64_RAND_V2(0), FP64_RAND_V0(1), FP64_RAND_V1(0) } },     \
     1827    /* 0*/{ { /*src2     */ { FP64_QNAN(0), FP64_RAND_V2(0), FP64_RAND_V0(1), FP64_RAND_V1(0) } },     \
    18281828            { /*src1     */ { FP64_QNAN(0), FP64_RAND_V3(0), FP64_RAND_V2(0), FP64_RAND_V3(1) } },     \
    18291829            { /* =>      */ { FP64_QNAN(0), FP64_RAND_V3(0), FP64_RAND_V2(0), FP64_RAND_V3(1) } },     \
     
    19121912              /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_IE,                                        \
    19131913              /*xcpt?    */ false, false },                                                            \
    1914     /* QNan, Normal (Unmasked). */                                                                     \
     1914    /* QNan, Normal (Masked). */                                                                       \
    19151915          { { /*src2     */ { FP64_QNAN(0), FP64_RAND_V3(1), FP64_RAND_V2(1), FP64_RAND_V2(0) } },     \
    19161916            { /*src1     */ { FP64_1(0),    FP64_RAND_V2(1), FP64_RAND_V2(1), FP64_RAND_V1(1) } },     \
     
    19291929              /*xcpt?    */ false, false },                                                            \
    19301930    /* QNan, QNan (Unmasked). */                                                                       \
    1931     /*0 */{ { /*src2     */ { FP64_QNAN(0), FP64_RAND_V2(0), FP64_RAND_V0(1), FP64_RAND_V1(0) } },     \
     1931    /* 0*/{ { /*src2     */ { FP64_QNAN(0), FP64_RAND_V2(0), FP64_RAND_V0(1), FP64_RAND_V1(0) } },     \
    19321932            { /*src1     */ { FP64_QNAN(0), FP64_RAND_V3(0), FP64_RAND_V2(0), FP64_RAND_V3(1) } },     \
    19331933            { /* =>      */ { FP64_QNAN(0), FP64_RAND_V3(0), FP64_RAND_V2(0), FP64_RAND_V3(1) } },     \
     
    20242024              /*256:out  */ X86_MXCSR_IE,                                                              \
    20252025              /*xcpt?    */ true, true },                                                              \
    2026     /* SNan, Normal (Masked). */                                                                       \
     2026    /* SNan, Normal (Unmasked). */                                                                     \
    20272027          { { /*src2     */ { FP64_SNAN(1), FP64_RAND_V0(1), FP64_RAND_V2(1), FP64_RAND_V2(0) } },     \
    20282028            { /*src1     */ { FP64_1(0),    FP64_RAND_V0(1), FP64_RAND_V1(1), FP64_RAND_V3(1) } },     \
     
    48894889            { /*src1     */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0) } },
    48904890            { /* =>      */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0) } },
    4891               /*mxcsr:in */ X86_MXCSR_XCPT_MASK,
    4892               /*128:out  */ X86_MXCSR_XCPT_MASK,
    4893               /*256:out  */ X86_MXCSR_XCPT_MASK,
    4894               /*xcpt?    */ false, false },
    4895           { { /*src2     */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0) } },
    4896             { /*src1     */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0) } },
    4897             { /* =>      */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0) } },
    48984891              /*mxcsr:in */ 0,
    48994892              /*128:out  */ 0,
     
    49314924     * Infinity.
    49324925     */
    4933     /* 6*/{ { /*src2     */ { FP32_INF(0),  FP32_INF(1),  FP32_INF(0),  FP32_INF(1),  FP32_INF(0),  FP32_INF(1), FP32_INF(0),  FP32_INF(1)  } },
     4926    /* 5*/{ { /*src2     */ { FP32_INF(0),  FP32_INF(1),  FP32_INF(0),  FP32_INF(1),  FP32_INF(0),  FP32_INF(1), FP32_INF(0),  FP32_INF(1)  } },
    49344927            { /*src1     */ { FP32_INF(1),  FP32_INF(0),  FP32_0(0),    FP32_0(0),    FP32_INF(0),  FP32_INF(1), FP32_0(0),    FP32_0(0)    } },
    49354928            { /* =>      */ { FP32_QNAN(1), FP32_0(0),    FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_0(0),   FP32_QNAN(1), FP32_QNAN(1) } },
     
    49694962     * Overflow, Precision.
    49704963     */
    4971     /*11*/{ { /*src2     */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_NORM_MIN(1), FP32_NORM_MIN(1), FP32_NORM_MAX(0), FP32_NORM_MAX(0) } },
    4972             { /*src1     */ { 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(1) } },
    4973             { /* =>      */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0),        FP32_0(0),        FP32_0(0),        FP32_0(0)        } },
     4964    /*10*/{ { /*src2     */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_NORM_MIN(1), FP32_NORM_MIN(1), FP32_NORM_MAX(0),                                    FP32_NORM_MAX(0) } },
     4965            { /*src1     */ { 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(1) } },
     4966            { /* =>      */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_INF(1),      FP32_INF(1),      FP32_V(1, FP32_FRAC_NORM_MIN, FP32_EXP_NORM_MIN + 1), FP32_INF(0)      } },
    49744967              /*mxcsr:in */ 0,
    49754968              /*128:out  */ 0,
    4976               /*256:out  */ X86_MXCSR_OE,
     4969              /*256:out  */ X86_MXCSR_OE | BS3_MXCSR_OM_FIXED,
     4970              /*xcpt?    */ false, true },
     4971          { { /*src2     */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_NORM_MIN(1), FP32_NORM_MIN(1), FP32_NORM_MAX(0),                                     FP32_NORM_MAX(0) } },
     4972            { /*src1     */ { 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(1) } },
     4973            { /* =>      */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_INF(1),      FP32_INF(1),      FP32_V(1, FP32_FRAC_NORM_MIN, FP32_EXP_NORM_MIN + 1), FP32_INF(0)      } },
     4974              /*mxcsr:in */ X86_MXCSR_OM,
     4975              /*128:out  */ X86_MXCSR_OM,
     4976              /*256:out  */ X86_MXCSR_OM | X86_MXCSR_OE | X86_MXCSR_PE | BS3_MXCSR_OM_FIXED,
    49774977              /*xcpt?    */ false, true },
    49784978          { { /*src2     */ { FP32_NORM_MIN(1), FP32_NORM_MIN(1), FP32_NORM_MAX(0),                                     FP32_NORM_MAX(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0) } },
    49794979            { /*src1     */ { FP32_NORM_MAX(1), FP32_NORM_MAX(1), FP32_NORM_MAX(1),                                     FP32_NORM_MAX(1), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0) } },
    49804980            { /* =>      */ { FP32_INF(1),      FP32_INF(1),      FP32_V(1, FP32_FRAC_NORM_MIN, FP32_EXP_NORM_MIN + 1), FP32_INF(0),      FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0) } },
    4981               /*mxcsr:in */ X86_MXCSR_OM | X86_MXCSR_PM,
    4982               /*128:out  */ X86_MXCSR_OM | X86_MXCSR_PM | X86_MXCSR_OE | X86_MXCSR_PE,
    4983               /*256:out  */ X86_MXCSR_OM | X86_MXCSR_PM | X86_MXCSR_OE | X86_MXCSR_PE,
     4981              /*mxcsr:in */ 0,
     4982              /*128:out  */ X86_MXCSR_OE | BS3_MXCSR_OM_FIXED,
     4983              /*256:out  */ X86_MXCSR_OE | BS3_MXCSR_OM_FIXED,
     4984              /*xcpt?    */ false, false },
     4985          { { /*src2     */ { FP32_NORM_MIN(1), FP32_NORM_MIN(1), FP32_NORM_MAX(0),                                     FP32_NORM_MAX(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0) } },
     4986            { /*src1     */ { FP32_NORM_MAX(1), FP32_NORM_MAX(1), FP32_NORM_MAX(1),                                     FP32_NORM_MAX(1), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0) } },
     4987            { /* =>      */ { FP32_INF(1),      FP32_INF(1),      FP32_V(1, FP32_FRAC_NORM_MIN, FP32_EXP_NORM_MIN + 1), FP32_INF(0),      FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0) } },
     4988              /*mxcsr:in */ X86_MXCSR_OM,
     4989              /*128:out  */ X86_MXCSR_OM | X86_MXCSR_OE | X86_MXCSR_PE | BS3_MXCSR_OM_FIXED,
     4990              /*256:out  */ X86_MXCSR_OM | X86_MXCSR_OE | X86_MXCSR_PE | BS3_MXCSR_OM_FIXED,
    49844991              /*xcpt?    */ false, false },
    49854992          { { /*src2     */ { FP32_NORM_MAX(1), FP32_NORM_MAX(0), FP32_0(0), FP32_0(0), FP32_0(0),        FP32_0(0),        FP32_0(0), FP32_NORM_MAX(0) } },
    49864993            { /*src1     */ { FP32_NORM_MAX(0), FP32_NORM_MAX(0), FP32_0(0), FP32_0(0), FP32_NORM_MAX(1), FP32_NORM_MAX(1), FP32_0(0), FP32_NORM_MAX(0) } },
    49874994            { /* =>      */ { FP32_NORM_MAX(0), FP32_0(0),        FP32_0(0), FP32_0(0), FP32_NORM_MAX(1), FP32_NORM_MAX(0), FP32_0(0), FP32_NORM_MAX(0) } },
    4988               /*mxcsr:in */ X86_MXCSR_OM | X86_MXCSR_PM | X86_MXCSR_RC_ZERO,
    4989               /*128:out  */ X86_MXCSR_OM | X86_MXCSR_PM | X86_MXCSR_RC_ZERO | X86_MXCSR_OE | X86_MXCSR_PE,
    4990               /*256:out  */ X86_MXCSR_OM | X86_MXCSR_PM | X86_MXCSR_RC_ZERO | X86_MXCSR_OE | X86_MXCSR_PE,
     4995              /*mxcsr:in */ X86_MXCSR_RC_ZERO,
     4996              /*128:out  */ X86_MXCSR_RC_ZERO | X86_MXCSR_OE | BS3_MXCSR_OM_FIXED,
     4997              /*256:out  */ X86_MXCSR_RC_ZERO | X86_MXCSR_OE | BS3_MXCSR_OM_FIXED,
     4998              /*xcpt?    */ false, false },
     4999          { { /*src2     */ { FP32_NORM_MAX(1), FP32_NORM_MAX(0), FP32_0(0), FP32_0(0), FP32_0(0),        FP32_0(0),        FP32_0(0), FP32_NORM_MAX(0) } },
     5000            { /*src1     */ { FP32_NORM_MAX(0), FP32_NORM_MAX(0), FP32_0(0), FP32_0(0), FP32_NORM_MAX(1), FP32_NORM_MAX(1), FP32_0(0), FP32_NORM_MAX(0) } },
     5001            { /* =>      */ { FP32_NORM_MAX(0), FP32_0(0),        FP32_0(0), FP32_0(0), FP32_NORM_MAX(1), FP32_NORM_MAX(0), FP32_0(0), FP32_NORM_MAX(0) } },
     5002              /*mxcsr:in */ X86_MXCSR_OM | X86_MXCSR_RC_ZERO,
     5003              /*128:out  */ X86_MXCSR_OM | X86_MXCSR_RC_ZERO | X86_MXCSR_OE | X86_MXCSR_PE | BS3_MXCSR_OM_FIXED,
     5004              /*256:out  */ X86_MXCSR_OM | X86_MXCSR_RC_ZERO | X86_MXCSR_OE | X86_MXCSR_PE | BS3_MXCSR_OM_FIXED,
    49915005              /*xcpt?    */ false, false },
    49925006          { { /*src2     */ { FP32_NORM_MAX(0), FP32_NORM_MAX(1),                     FP32_0(0),        FP32_NORM_MIN(1), FP32_NORM_MAX(0), FP32_NORM_MAX(0),                                     FP32_0(0),        FP32_NORM_MAX(0) } },
    49935007            { /*src1     */ { FP32_NORM_MAX(0), FP32_NORM_MAX(0),                     FP32_NORM_MIN(1), FP32_NORM_MIN(1), FP32_NORM_MIN(1), FP32_NORM_MAX(0),                                     FP32_NORM_MIN(0), FP32_NORM_MAX(1) } },
    49945008            { /* =>      */ { FP32_INF(0),      FP32_V(1, 0, FP32_EXP_NORM_MIN + 1),  FP32_0(0),        FP32_NORM_MIN(1), FP32_NORM_MAX(0), FP32_V(1, FP32_FRAC_NORM_MAX - 1, FP32_EXP_NORM_MAX), FP32_INF(0),      FP32_NORM_MAX(0) } },
    4995               /*mxcsr:in */ X86_MXCSR_DAZ | X86_MXCSR_OM | X86_MXCSR_PM | X86_MXCSR_RC_UP,
    4996               /*128:out  */ X86_MXCSR_DAZ | X86_MXCSR_OM | X86_MXCSR_PM | X86_MXCSR_RC_UP | X86_MXCSR_OE | X86_MXCSR_PE,
    4997               /*256:out  */ X86_MXCSR_DAZ | X86_MXCSR_OM | X86_MXCSR_PM | X86_MXCSR_RC_UP | X86_MXCSR_OE | X86_MXCSR_PE,
     5009              /*mxcsr:in */ X86_MXCSR_DAZ | X86_MXCSR_RC_UP,
     5010              /*128:out  */ X86_MXCSR_DAZ | X86_MXCSR_RC_UP | X86_MXCSR_OE | BS3_MXCSR_OM_FIXED,
     5011              /*256:out  */ X86_MXCSR_DAZ | X86_MXCSR_RC_UP | X86_MXCSR_OE | X86_MXCSR_PE | BS3_MXCSR_OM_FIXED,
     5012              /*xcpt?    */ false, false },
     5013          { { /*src2     */ { FP32_NORM_MAX(0), FP32_NORM_MAX(1),                     FP32_0(0),        FP32_NORM_MIN(1), FP32_NORM_MAX(0), FP32_NORM_MAX(0),                                     FP32_0(0),        FP32_NORM_MAX(0) } },
     5014            { /*src1     */ { FP32_NORM_MAX(0), FP32_NORM_MAX(0),                     FP32_NORM_MIN(1), FP32_NORM_MIN(1), FP32_NORM_MIN(1), FP32_NORM_MAX(0),                                     FP32_NORM_MIN(0), FP32_NORM_MAX(1) } },
     5015            { /* =>      */ { FP32_INF(0),      FP32_V(1, 0, FP32_EXP_NORM_MIN + 1),  FP32_0(0),        FP32_NORM_MIN(1), FP32_NORM_MAX(0), FP32_V(1, FP32_FRAC_NORM_MAX - 1, FP32_EXP_NORM_MAX), FP32_INF(0),      FP32_NORM_MAX(0) } },
     5016              /*mxcsr:in */ X86_MXCSR_DAZ | X86_MXCSR_OM | X86_MXCSR_RC_UP,
     5017              /*128:out  */ X86_MXCSR_DAZ | X86_MXCSR_OM | X86_MXCSR_RC_UP | X86_MXCSR_OE | X86_MXCSR_PE | BS3_MXCSR_OM_FIXED,
     5018              /*256:out  */ X86_MXCSR_DAZ | X86_MXCSR_OM | X86_MXCSR_RC_UP | X86_MXCSR_OE | X86_MXCSR_PE | BS3_MXCSR_OM_FIXED,
    49985019              /*xcpt?    */ false, false },
    49995020          { { /*src2     */ { FP32_NORM_MAX(0),                     FP32_NORM_MAX(0),                     FP32_NORM_MAX(0), FP32_0(0),        FP32_0(0),        FP32_NORM_MAX(0),                     FP32_NORM_MIN(1), FP32_NORM_MIN(0) } },
    50005021            { /*src1     */ { FP32_NORM_MIN(1),                     FP32_NORM_MIN(1),                     FP32_NORM_MIN(0), FP32_NORM_MIN(0), FP32_0(0),        FP32_NORM_MAX(1),                     FP32_NORM_MIN(1), FP32_NORM_MIN(1) } },
    50015022            { /* =>      */ { FP32_V(1, 0, FP32_EXP_NORM_MIN + 1),  FP32_V(0, 0, FP32_EXP_NORM_MIN + 1),  FP32_NORM_MAX(0), FP32_NORM_MAX(0), FP32_NORM_MAX(1), FP32_V(1, 0, FP32_EXP_NORM_MIN + 1),  FP32_NORM_MAX(0), FP32_0(0)        } },
    5002               /*mxcsr:in */ X86_MXCSR_OM | X86_MXCSR_PM | X86_MXCSR_RC_ZERO,
    5003               /*128:out  */ X86_MXCSR_OM | X86_MXCSR_PM | X86_MXCSR_RC_ZERO | X86_MXCSR_OE | X86_MXCSR_PE,
    5004               /*256:out  */ X86_MXCSR_OM | X86_MXCSR_PM | X86_MXCSR_RC_ZERO | X86_MXCSR_OE | X86_MXCSR_PE,
     5023              /*mxcsr:in */ X86_MXCSR_RC_ZERO,
     5024              /*128:out  */ X86_MXCSR_RC_ZERO | X86_MXCSR_OE | BS3_MXCSR_OM_FIXED,
     5025              /*256:out  */ X86_MXCSR_RC_ZERO | X86_MXCSR_OE | BS3_MXCSR_OM_FIXED,
     5026              /*xcpt?    */ false, false },
     5027          { { /*src2     */ { FP32_NORM_MAX(0),                     FP32_NORM_MAX(0),                     FP32_NORM_MAX(0), FP32_0(0),        FP32_0(0),        FP32_NORM_MAX(0),                     FP32_NORM_MIN(1), FP32_NORM_MIN(0) } },
     5028            { /*src1     */ { FP32_NORM_MIN(1),                     FP32_NORM_MIN(1),                     FP32_NORM_MIN(0), FP32_NORM_MIN(0), FP32_0(0),        FP32_NORM_MAX(1),                     FP32_NORM_MIN(1), FP32_NORM_MIN(1) } },
     5029            { /* =>      */ { FP32_V(1, 0, FP32_EXP_NORM_MIN + 1),  FP32_V(0, 0, FP32_EXP_NORM_MIN + 1),  FP32_NORM_MAX(0), FP32_NORM_MAX(0), FP32_NORM_MAX(1), FP32_V(1, 0, FP32_EXP_NORM_MIN + 1),  FP32_NORM_MAX(0), FP32_0(0)        } },
     5030              /*mxcsr:in */ X86_MXCSR_OM | X86_MXCSR_RC_ZERO,
     5031              /*128:out  */ X86_MXCSR_OM | X86_MXCSR_RC_ZERO | X86_MXCSR_OE | X86_MXCSR_PE | BS3_MXCSR_OM_FIXED,
     5032              /*256:out  */ X86_MXCSR_OM | X86_MXCSR_RC_ZERO | X86_MXCSR_OE | X86_MXCSR_PE | BS3_MXCSR_OM_FIXED,
    50055033              /*xcpt?    */ false, false },
    50065034          { { /*src2     */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_NORM_MAX(0), FP32_NORM_MAX(1), FP32_NORM_MAX(1), FP32_NORM_MAX(0) } },
     
    50095037              /*mxcsr:in */ X86_MXCSR_RC_ZERO,
    50105038              /*128:out  */ X86_MXCSR_RC_ZERO,
    5011               /*256:out  */ X86_MXCSR_RC_ZERO | X86_MXCSR_OE,
     5039              /*256:out  */ X86_MXCSR_RC_ZERO | X86_MXCSR_OE | BS3_MXCSR_OM_FIXED,
     5040              /*xcpt?    */ false, true },
     5041          { { /*src2     */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_NORM_MAX(0), FP32_NORM_MAX(1), FP32_NORM_MAX(1), FP32_NORM_MAX(0) } },
     5042            { /*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) } },
     5043            { /* =>      */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_NORM_MAX(0), FP32_NORM_MAX(1), FP32_0(0),        FP32_0(0)        } },
     5044              /*mxcsr:in */ X86_MXCSR_OM | X86_MXCSR_RC_ZERO,
     5045              /*128:out  */ X86_MXCSR_OM | X86_MXCSR_RC_ZERO,
     5046              /*256:out  */ X86_MXCSR_OM | X86_MXCSR_RC_ZERO | X86_MXCSR_OE | X86_MXCSR_PE | BS3_MXCSR_OM_FIXED,
    50125047              /*xcpt?    */ false, true },
    50135048          { { /*src2     */ { FP32_NORM_SAFE_INT_MIN(0), FP32_NORM_MAX(0),                                         FP32_0(0),                 FP32_NORM_SAFE_INT_MAX(1), FP32_NORM_SAFE_INT_MIN(0), FP32_NORM_MAX(0),          FP32_0(0),        FP32_NORM_SAFE_INT_MAX(1) } },
     
    50215056     * Normals.
    50225057     */
    5023     /*18*/{ { /*src2     */ { FP32_V(0, 0,        0x7d)/* 0.25*/, FP32_V(0, 0,        0x7e)/*0.50*/, FP32_NORM_MAX(0),                  FP32_0(0),        FP32_0(0),                         FP32_NORM_MAX(0),           FP32_V(0, 0x400000, 0x7f)/*1.50*/, FP32_V(0, 0,        0x7d)/*0.25*/ } },
     5058    /*23*/{ { /*src2     */ { FP32_V(0, 0,        0x7d)/* 0.25*/, FP32_V(0, 0,        0x7e)/*0.50*/, FP32_NORM_MAX(0),                  FP32_0(0),        FP32_0(0),                         FP32_NORM_MAX(0),           FP32_V(0, 0x400000, 0x7f)/*1.50*/, FP32_V(0, 0,        0x7d)/*0.25*/ } },
    50245059            { /*src1     */ { FP32_V(1, 0,        0x7d)/*-0.25*/, FP32_V(0, 0x600000, 0x7f)/*1.75*/, FP32_NORM_MAX(1),                  FP32_0(0),        FP32_V(0, 0,        0x7e)/*0.50*/, FP32_V(0, 0, 0x7d)/*0.25*/, FP32_0(0),                         FP32_0(0)                         } },
    50255060            { /* =>      */ { FP32_V(0, 0x400000, 0x7f)/* 1.50*/, FP32_NORM_MAX(1),                  FP32_V(0, 0x400000, 0x7e)/*0.75*/, FP32_NORM_MAX(0), FP32_V(0, 0x400000, 0x7e)/*0.75*/, FP32_0(0),                  FP32_NORM_MAX(0),                  FP32_V(0, 0x600000, 0x7f)/*1.75*/ } },
     
    50805115     * Denormals.
    50815116     */
    5082     /*26*/{ { /*src2     */ { FP32_DENORM_MAX(0), FP32_0(0),          FP32_0(0), FP32_0(0), FP32_DENORM_MAX(0), FP32_0(0), FP32_0(0), FP32_0(0)          } },
     5117    /*31*/{ { /*src2     */ { FP32_DENORM_MAX(0), FP32_0(0),          FP32_0(0), FP32_0(0), FP32_DENORM_MAX(0), FP32_0(0), FP32_0(0), FP32_0(0)          } },
    50835118            { /*src1     */ { FP32_0(0),          FP32_DENORM_MAX(1), FP32_0(0), FP32_0(0), FP32_0(0),          FP32_0(0), FP32_0(0), FP32_DENORM_MAX(1) } },
    50845119            { /* =>      */ { FP32_0(0),          FP32_0(0),          FP32_0(0), FP32_0(0), FP32_0(0),          FP32_0(0), FP32_0(0), FP32_0(0)          } },
    50855120              /*mxcsr:in */ 0,
    5086               /*128:out  */ X86_MXCSR_DE,
    5087               /*256:out  */ X86_MXCSR_DE,
     5121              /*128:out  */ X86_MXCSR_DE | BS3_MXCSR_DM_FIXED,
     5122              /*256:out  */ X86_MXCSR_DE | BS3_MXCSR_DM_FIXED,
     5123              /*xcpt?    */ true, true },
     5124#ifdef TODO_X86_MXCSR_UE_IEM /** @todo THIS FAILS ON IEM: X86_MXCSR_UE not set in 128:out or 256:out *AND* different output values */
     5125 /*--|32*/{ { /*src2     */ { FP32_DENORM_MAX(0), FP32_0(0),          FP32_0(0),          FP32_0(0), FP32_DENORM_MAX(0), FP32_0(0),          FP32_0(0),          FP32_0(0)          } },
     5126            { /*src1     */ { FP32_0(0),          FP32_DENORM_MAX(1), FP32_0(0),          FP32_0(0), FP32_0(0),          FP32_0(0),          FP32_0(0),          FP32_DENORM_MAX(1) } },
     5127            { /* =>      */ { FP32_0(0),          FP32_0(0),          FP32_0(0),          FP32_0(0), FP32_0(0),          FP32_0(0),          FP32_0(0),          FP32_0(0)          } } /* result on HW (i7-10700) */,
     5128    // IEM: { /* =>      */ { FP32_DENORM_MAX(1), FP32_0(0),          FP32_DENORM_MAX(0), FP32_0(0), FP32_0(0),          FP32_DENORM_MAX(1), FP32_DENORM_MAX(0), FP32_0(0)          } } /* result on IEM */,
     5129              /*mxcsr:in */ X86_MXCSR_DM,
     5130              /*128:out  */ X86_MXCSR_DM | X86_MXCSR_DE | X86_MXCSR_UE | BS3_MXCSR_DM_FIXED | BS3_MXCSR_UM_FIXED,
     5131              /*256:out  */ X86_MXCSR_DM | X86_MXCSR_DE | X86_MXCSR_UE | BS3_MXCSR_DM_FIXED | BS3_MXCSR_UM_FIXED,
     5132              /*xcpt?    */ true, true },
     5133#endif /* TODO_X86_MXCSR_UE_IEM */
     5134 /*32|33*/{ { /*src2     */ { FP32_DENORM_MAX(0), FP32_0(0),          FP32_0(0),          FP32_0(0), FP32_DENORM_MAX(0), FP32_0(0),          FP32_0(0),          FP32_0(0)          } },
     5135            { /*src1     */ { FP32_0(0),          FP32_DENORM_MAX(1), FP32_0(0),          FP32_0(0), FP32_0(0),          FP32_0(0),          FP32_0(0),          FP32_DENORM_MAX(1) } },
     5136            { /* =>      */ { FP32_DENORM_MAX(1), FP32_0(0),          FP32_DENORM_MAX(0), FP32_0(0), FP32_0(0),          FP32_DENORM_MAX(1), FP32_DENORM_MAX(0), FP32_0(0)          } },
     5137              /*mxcsr:in */ X86_MXCSR_DM | X86_MXCSR_UM,
     5138              /*128:out  */ X86_MXCSR_DE | X86_MXCSR_DM | X86_MXCSR_UM | BS3_MXCSR_DM_FIXED | BS3_MXCSR_UM_FIXED,
     5139              /*256:out  */ X86_MXCSR_DE | X86_MXCSR_DM | X86_MXCSR_UM | BS3_MXCSR_DM_FIXED | BS3_MXCSR_UM_FIXED,
    50885140              /*xcpt?    */ true, true },
    50895141          { { /*src2     */ { FP32_0(0), FP32_0(0),          FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0),          FP32_0(0), FP32_0(0) } },
     
    51025154              /*xcpt?    */ false, false },
    51035155          { { /*src2     */ { FP32_DENORM_MAX(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0),          FP32_0(0), FP32_0(0), FP32_0(0) } },
    5104             { /*src1     */ { FP32_0(0),         FP32_0(0), FP32_0(0), FP32_0(0), FP32_DENORM_MAX(0), FP32_0(0), FP32_0(0), FP32_0(0) } },
    5105             { /* =>      */ { FP32_0(0),         FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0),          FP32_0(0), FP32_0(0), FP32_0(0) } },
     5156            { /*src1     */ { FP32_0(0),          FP32_0(0), FP32_0(0), FP32_0(0), FP32_DENORM_MAX(0), FP32_0(0), FP32_0(0), FP32_0(0) } },
     5157            { /* =>      */ { FP32_0(0),          FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0),          FP32_0(0), FP32_0(0), FP32_0(0) } },
    51065158              /*mxcsr:in */ 0,
    5107               /*128:out  */ X86_MXCSR_DE,
    5108               /*256:out  */ X86_MXCSR_DE,
     5159              /*128:out  */ X86_MXCSR_DE | BS3_MXCSR_DM_FIXED,
     5160              /*256:out  */ X86_MXCSR_DE | BS3_MXCSR_DM_FIXED,
     5161              /*xcpt?    */ true, true },
     5162#ifdef TODO_X86_MXCSR_UE_IEM /** @todo THIS FAILS ON IEM: X86_MXCSR_UE not set in 128:out or 256:out *AND* different output values */
     5163 /*--|37*/{ { /*src2     */ { FP32_DENORM_MAX(0), FP32_0(0), FP32_0(0),          FP32_0(0), FP32_0(0),          FP32_0(0), FP32_0(0), FP32_0(0) } },
     5164            { /*src1     */ { FP32_0(0),          FP32_0(0), FP32_0(0),          FP32_0(0), FP32_DENORM_MAX(0), FP32_0(0), FP32_0(0), FP32_0(0) } },
     5165            { /* =>      */ { FP32_0(0),          FP32_0(0), FP32_0(0),          FP32_0(0), FP32_0(0),          FP32_0(0), FP32_0(0), FP32_0(0) } } /* result on HW (i7-10700) */,
     5166    // IEM: { /* =>      */ { FP32_0(0),          FP32_0(0), FP32_DENORM_MAX(0), FP32_0(0), FP32_DENORM_MAX(0), FP32_0(0), FP32_0(0), FP32_0(0) } } /* result on IEM */,
     5167              /*mxcsr:in */ X86_MXCSR_DM,
     5168              /*128:out  */ X86_MXCSR_DM | X86_MXCSR_DE | X86_MXCSR_UE | BS3_MXCSR_DM_FIXED | BS3_MXCSR_UM_FIXED,
     5169              /*256:out  */ X86_MXCSR_DM | X86_MXCSR_DE | X86_MXCSR_UE | BS3_MXCSR_DM_FIXED | BS3_MXCSR_UM_FIXED,
     5170              /*xcpt?    */ true, true },
     5171#endif /* TODO_X86_MXCSR_UE_IEM */
     5172 /*36|38*/{ { /*src2     */ { FP32_DENORM_MAX(0), FP32_0(0), FP32_0(0),          FP32_0(0), FP32_0(0),          FP32_0(0), FP32_0(0), FP32_0(0) } },
     5173            { /*src1     */ { FP32_0(0),          FP32_0(0), FP32_0(0),          FP32_0(0), FP32_DENORM_MAX(0), FP32_0(0), FP32_0(0), FP32_0(0) } },
     5174            { /* =>      */ { FP32_0(0),          FP32_0(0), FP32_DENORM_MAX(0), FP32_0(0), FP32_DENORM_MAX(0), FP32_0(0), FP32_0(0), FP32_0(0) } },
     5175              /*mxcsr:in */ X86_MXCSR_DM | X86_MXCSR_UM,
     5176              /*128:out  */ X86_MXCSR_DM | X86_MXCSR_UM | X86_MXCSR_DE | BS3_MXCSR_DM_FIXED | BS3_MXCSR_UM_FIXED,
     5177              /*256:out  */ X86_MXCSR_DM | X86_MXCSR_UM | X86_MXCSR_DE | BS3_MXCSR_DM_FIXED | BS3_MXCSR_UM_FIXED,
    51095178              /*xcpt?    */ true, true },
    51105179          { { /*src2     */ { FP32_0(0), FP32_0(0),          FP32_0(0), FP32_0(0), FP32_0(0),          FP32_0(0), FP32_0(0), FP32_DENORM_MAX(1) } },
     
    51265195     * Invalids.
    51275196     */
    5128     /*32*/ FP32_TABLE_D1_H_PS_INVALIDS
     5197 /*39|41*/ FP32_TABLE_D1_H_PS_INVALIDS
    51295198    /** @todo Underflow; Precision; Rounding; FZ etc. */
    51305199    };
     
    51765245    static BS3CPUINSTR4_TEST1_MODE_T const s_aTests[3] = BS3CPUINSTR4_TEST1_MODES_INIT(s_aTests16, s_aTests32, s_aTests64);
    51775246    unsigned const                         iTest       = BS3CPUINSTR4_TEST_MODES_INDEX(bMode);
    5178     return bs3CpuInstr4_WorkerTestType1(bMode, s_aTests[iTest].paTests, s_aTests[iTest].cTests,
     5247    return bs3CpuInstr4_WorkerTestType1A(bMode, s_aTests[iTest].paTests, s_aTests[iTest].cTests,
    51795248                                        g_aXcptConfig2, RT_ELEMENTS(g_aXcptConfig2));
    51805249}
     
    68166885            { /*src1     */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0) } },
    68176886            { /* =>      */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0) } },
    6818               /*mxcsr:in */ X86_MXCSR_XCPT_MASK,
    6819               /*128:out  */ X86_MXCSR_XCPT_MASK,
    6820               /*256:out  */ X86_MXCSR_XCPT_MASK,
    6821               /*xcpt?    */ false, false },
    6822           { { /*src2     */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0) } },
    6823             { /*src1     */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0) } },
    6824             { /* =>      */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0) } },
    68256887              /*mxcsr:in */ 0,
    68266888              /*128:out  */ 0,
     
    68586920     * Infinity.
    68596921     */
    6860     /* 6*/{ { /*src2     */ { FP32_INF(1),  FP32_INF(0), FP32_INF(0), FP32_INF(1), FP32_INF(0),  FP32_INF(1), FP32_INF(0), FP32_INF(1)  } },
     6922    /* 5*/{ { /*src2     */ { FP32_INF(1),  FP32_INF(0), FP32_INF(0), FP32_INF(1), FP32_INF(0),  FP32_INF(1), FP32_INF(0), FP32_INF(1)  } },
    68616923            { /*src1     */ { FP32_INF(0),  FP32_INF(1), FP32_0(0),   FP32_0(0),   FP32_INF(0),  FP32_INF(1), FP32_0(0),   FP32_0(0)    } },
    6862             { /* =>      */ { FP32_INF(0),  FP32_0(0),   FP32_INF(1), FP32_INF(0), FP32_INF(0),  FP32_0(0),   FP32_INF(0), FP32_INF(0) } },
     6924            { /* =>      */ { FP32_INF(0),  FP32_0(0),   FP32_INF(1), FP32_INF(0), FP32_INF(0),  FP32_0(0),   FP32_INF(0), FP32_INF(0)  } },
    68636925              /*mxcsr:in */ X86_MXCSR_IM,
    68646926              /*128:out  */ X86_MXCSR_IM,
     
    68796941              /*256:out  */ X86_MXCSR_FZ | X86_MXCSR_IE,
    68806942              /*xcpt?    */ false, true },
    6881           { { /*src2     */ { FP32_INF(1), FP32_INF(1), FP32_INF(0), FP32_0(0),   FP32_INF(1), FP32_INF(1), FP32_INF(0), FP32_0(0)   } },
    6882             { /*src1     */ { FP32_INF(0), FP32_INF(0), FP32_INF(1), FP32_0(0),   FP32_0(0),   FP32_0(0),   FP32_0(0),   FP32_0(0)   } },
    6883             { /* =>      */ { FP32_INF(0), FP32_INF(0), FP32_INF(1), FP32_INF(0), FP32_0(0),   FP32_0(0),   FP32_INF(1), FP32_INF(0) } },
     6943          { { /*src2     */ { FP32_INF(1),  FP32_INF(1), FP32_INF(0),  FP32_0(0),   FP32_INF(1), FP32_INF(1), FP32_INF(0), FP32_0(0)   } },
     6944            { /*src1     */ { FP32_INF(0),  FP32_INF(0), FP32_INF(1),  FP32_0(0),   FP32_0(0),   FP32_0(0),   FP32_0(0),    FP32_0(0)   } },
     6945            { /* =>      */ { FP32_QNAN(1), FP32_INF(1), FP32_QNAN(1), FP32_INF(0), FP32_0(0),   FP32_0(0),   FP32_QNAN(1), FP32_INF(0) } },
    68846946              /*mxcsr:in */ 0,
    68856947              /*128:out  */ X86_MXCSR_IE,
     
    68966958     * Overflow, Precision.
    68976959     */
    6898     /*11*/{ { /*src2     */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_NORM_MIN(0), FP32_NORM_MAX(0), FP32_NORM_MAX(0), FP32_NORM_MAX(0) } },
     6960    /*10*/{ { /*src2     */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_NORM_MIN(0), FP32_NORM_MAX(0), FP32_NORM_MAX(0), FP32_NORM_MAX(0) } },
    68996961            { /*src1     */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_NORM_MAX(1), FP32_NORM_MIN(1), FP32_NORM_MAX(1), FP32_NORM_MAX(1) } },
    6900             { /* =>      */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0),        FP32_0(0),        FP32_0(0),        FP32_0(0)        } },
     6962            { /* =>      */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_NORM_MAX(1), FP32_0(0),        FP32_NORM_MAX(1), FP32_0(0)        } },
    69016963              /*mxcsr:in */ 0,
    69026964              /*128:out  */ 0,
     
    69206982            { /*src1     */ { FP32_NORM_MAX(0), FP32_NORM_MAX(1), FP32_NORM_MAX(1), FP32_NORM_MAX(0), FP32_NORM_MAX(1), FP32_0(1),        FP32_0(0), FP32_NORM_MAX(0) } },
    69216983            { /* =>      */ { FP32_NORM_MAX(0), FP32_NORM_MAX(1), FP32_0(0),        FP32_0(0),        FP32_NORM_MAX(1), FP32_NORM_MAX(1), FP32_0(0), FP32_NORM_MAX(0) } },
    6922               /*mxcsr:in */ X86_MXCSR_OM | X86_MXCSR_PM | X86_MXCSR_RC_ZERO,
    6923               /*128:out  */ X86_MXCSR_OM | X86_MXCSR_PM | X86_MXCSR_RC_ZERO | X86_MXCSR_OE | X86_MXCSR_PE,
    6924               /*256:out  */ X86_MXCSR_OM | X86_MXCSR_PM | X86_MXCSR_RC_ZERO | X86_MXCSR_OE | X86_MXCSR_PE,
     6984              /*mxcsr:in */ X86_MXCSR_RC_ZERO,
     6985              /*128:out  */ X86_MXCSR_RC_ZERO | X86_MXCSR_OE | BS3_MXCSR_OM_FIXED,
     6986              /*256:out  */ X86_MXCSR_RC_ZERO | X86_MXCSR_OE | BS3_MXCSR_OM_FIXED,
     6987              /*xcpt?    */ false, false },
     6988          { { /*src2     */ { FP32_0(0),        FP32_0(0),        FP32_0(0),        FP32_0(0),        FP32_0(0),        FP32_0(0),        FP32_0(0), FP32_NORM_MAX(1) } },
     6989            { /*src1     */ { FP32_NORM_MAX(0), FP32_NORM_MAX(1), FP32_NORM_MAX(1), FP32_NORM_MAX(0), FP32_NORM_MAX(1), FP32_0(1),        FP32_0(0), FP32_NORM_MAX(0) } },
     6990            { /* =>      */ { FP32_NORM_MAX(0), FP32_NORM_MAX(1), FP32_0(0),        FP32_0(0),        FP32_NORM_MAX(1), FP32_NORM_MAX(1), FP32_0(0), FP32_NORM_MAX(0) } },
     6991              /*mxcsr:in */ X86_MXCSR_OM | X86_MXCSR_RC_ZERO,
     6992              /*128:out  */ X86_MXCSR_OM | X86_MXCSR_RC_ZERO | X86_MXCSR_OE | X86_MXCSR_PE | BS3_MXCSR_OM_FIXED,
     6993              /*256:out  */ X86_MXCSR_OM | X86_MXCSR_RC_ZERO | X86_MXCSR_OE | X86_MXCSR_PE | BS3_MXCSR_OM_FIXED,
    69256994              /*xcpt?    */ false, false },
    69266995          { { /*src2     */ { FP32_NORM_MAX(0), FP32_NORM_MAX(1), FP32_0(0),        FP32_NORM_MIN(1), FP32_NORM_MAX(0), FP32_NORM_MAX(0), FP32_0(0),        FP32_NORM_MAX(0) } },
    69276996            { /*src1     */ { FP32_NORM_MAX(0), FP32_NORM_MAX(0), FP32_NORM_MIN(1), FP32_NORM_MIN(1), FP32_NORM_MIN(1), FP32_NORM_MAX(0), FP32_NORM_MIN(0), FP32_NORM_MAX(1) } },
    69286997            { /* =>      */ { FP32_0(0),        FP32_0(0),        FP32_INF(0),      FP32_NORM_MIN(0), FP32_NORM_MAX(1), FP32_INF(0),      FP32_0(0),        FP32_NORM_MAX(1) } },
    6929               /*mxcsr:in */ X86_MXCSR_DAZ | X86_MXCSR_OM | X86_MXCSR_PM | X86_MXCSR_RC_UP,
    6930               /*128:out  */ X86_MXCSR_DAZ | X86_MXCSR_OM | X86_MXCSR_PM | X86_MXCSR_RC_UP | X86_MXCSR_OE | X86_MXCSR_PE,
    6931               /*256:out  */ X86_MXCSR_DAZ | X86_MXCSR_OM | X86_MXCSR_PM | X86_MXCSR_RC_UP | X86_MXCSR_OE | X86_MXCSR_PE,
     6998              /*mxcsr:in */ X86_MXCSR_DAZ | X86_MXCSR_RC_UP,
     6999              /*128:out  */ X86_MXCSR_DAZ | X86_MXCSR_RC_UP | X86_MXCSR_OE | BS3_MXCSR_OM_FIXED,
     7000              /*256:out  */ X86_MXCSR_DAZ | X86_MXCSR_RC_UP | X86_MXCSR_OE | X86_MXCSR_PE | BS3_MXCSR_OM_FIXED,
     7001              /*xcpt?    */ false, false },
     7002          { { /*src2     */ { FP32_NORM_MAX(0), FP32_NORM_MAX(1), FP32_0(0),        FP32_NORM_MIN(1), FP32_NORM_MAX(0), FP32_NORM_MAX(0), FP32_0(0),        FP32_NORM_MAX(0) } },
     7003            { /*src1     */ { FP32_NORM_MAX(0), FP32_NORM_MAX(0), FP32_NORM_MIN(1), FP32_NORM_MIN(1), FP32_NORM_MIN(1), FP32_NORM_MAX(0), FP32_NORM_MIN(0), FP32_NORM_MAX(1) } },
     7004            { /* =>      */ { FP32_0(0),        FP32_0(0),        FP32_INF(0),      FP32_NORM_MIN(0), FP32_NORM_MAX(1), FP32_INF(0),      FP32_0(0),        FP32_NORM_MAX(1) } },
     7005              /*mxcsr:in */ X86_MXCSR_DAZ | X86_MXCSR_OM | X86_MXCSR_RC_UP,
     7006              /*128:out  */ X86_MXCSR_DAZ | X86_MXCSR_OM | X86_MXCSR_RC_UP | X86_MXCSR_OE | X86_MXCSR_PE | BS3_MXCSR_OM_FIXED,
     7007              /*256:out  */ X86_MXCSR_DAZ | X86_MXCSR_OM | X86_MXCSR_RC_UP | X86_MXCSR_OE | X86_MXCSR_PE | BS3_MXCSR_OM_FIXED,
    69327008              /*xcpt?    */ false, false },
    69337009          { { /*src2     */ { FP32_NORM_MAX(0), FP32_NORM_MAX(1), FP32_0(0),        FP32_NORM_MIN(1), FP32_NORM_MAX(0), FP32_NORM_MAX(0), FP32_0(0),        FP32_NORM_MAX(0) } },
    69347010            { /*src1     */ { FP32_NORM_MAX(0), FP32_NORM_MAX(0), FP32_NORM_MIN(1), FP32_NORM_MIN(1), FP32_NORM_MIN(1), FP32_NORM_MAX(0), FP32_NORM_MIN(0), FP32_NORM_MAX(1) } },
    69357011            { /* =>      */ { FP32_0(0),        FP32_0(0),        FP32_NORM_MAX(0), FP32_NORM_MIN(0), FP32_NORM_MAX(1), FP32_NORM_MAX(0), FP32_0(0),        FP32_NORM_MAX(1) } },
    6936               /*mxcsr:in */ X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_ZERO,
    6937               /*128:out  */ X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_ZERO | X86_MXCSR_OE | X86_MXCSR_PE,
    6938               /*256:out  */ X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_ZERO | X86_MXCSR_OE | X86_MXCSR_PE,
     7012              /*mxcsr:in */ X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_ZERO,
     7013              /*128:out  */ X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_ZERO | X86_MXCSR_OE | BS3_MXCSR_OM_FIXED,
     7014              /*256:out  */ X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_ZERO | X86_MXCSR_OE | X86_MXCSR_PE | BS3_MXCSR_OM_FIXED,
     7015              /*xcpt?    */ false, false },
     7016          { { /*src2     */ { FP32_NORM_MAX(0), FP32_NORM_MAX(1), FP32_0(0),        FP32_NORM_MIN(1), FP32_NORM_MAX(0), FP32_NORM_MAX(0), FP32_0(0),        FP32_NORM_MAX(0) } },
     7017            { /*src1     */ { FP32_NORM_MAX(0), FP32_NORM_MAX(0), FP32_NORM_MIN(1), FP32_NORM_MIN(1), FP32_NORM_MIN(1), FP32_NORM_MAX(0), FP32_NORM_MIN(0), FP32_NORM_MAX(1) } },
     7018            { /* =>      */ { FP32_0(0),        FP32_0(0),        FP32_NORM_MAX(0), FP32_NORM_MIN(0), FP32_NORM_MAX(1), FP32_NORM_MAX(0), FP32_0(0),        FP32_NORM_MAX(1) } },
     7019              /*mxcsr:in */ X86_MXCSR_DAZ | X86_MXCSR_OM | X86_MXCSR_FZ | X86_MXCSR_RC_ZERO,
     7020              /*128:out  */ X86_MXCSR_DAZ | X86_MXCSR_OM | X86_MXCSR_FZ | X86_MXCSR_RC_ZERO | X86_MXCSR_OE | X86_MXCSR_PE | BS3_MXCSR_OM_FIXED,
     7021              /*256:out  */ X86_MXCSR_DAZ | X86_MXCSR_OM | X86_MXCSR_FZ | X86_MXCSR_RC_ZERO | X86_MXCSR_OE | X86_MXCSR_PE | BS3_MXCSR_OM_FIXED,
    69397022              /*xcpt?    */ false, false },
    69407023          { { /*src2     */ { 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) } },
     
    69437026              /*mxcsr:in */ X86_MXCSR_RC_ZERO,
    69447027              /*128:out  */ X86_MXCSR_RC_ZERO,
    6945               /*256:out  */ X86_MXCSR_RC_ZERO | X86_MXCSR_OE,
     7028              /*256:out  */ X86_MXCSR_RC_ZERO | X86_MXCSR_OE | BS3_MXCSR_OM_FIXED,
    69467029              /*xcpt?    */ false, true },
     7030          { { /*src2     */ { 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) } },
     7031            { /*src1     */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_NORM_MAX(0), FP32_NORM_MAX(0), FP32_NORM_MAX(0), FP32_NORM_MAX(1) } },
     7032            { /* =>      */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0),        FP32_NORM_MAX(0), FP32_NORM_MAX(1), FP32_NORM_MAX(0) } },
     7033              /*mxcsr:in */ X86_MXCSR_RC_ZERO | X86_MXCSR_OM,
     7034              /*128:out  */ X86_MXCSR_RC_ZERO | X86_MXCSR_OM,
     7035              /*256:out  */ X86_MXCSR_RC_ZERO | X86_MXCSR_OM | X86_MXCSR_OE | X86_MXCSR_PE | BS3_MXCSR_OM_FIXED,
     7036              /*xcpt?    */ false, true },
    69477037    /*
    69487038     * Normals.
    69497039     */
    6950     /*18*/{ { /*src2     */ { FP32_V(0, 0,        0x7d)/*0.25*/, FP32_V(0, 0x400000, 0x7e)/*0.75*/, FP32_NORM_MAX(0),            FP32_0(0),        FP32_0(0),                          FP32_NORM_MAX(0),            FP32_V(0, 0x600000, 0x7f)/*1.75*/, FP32_V(0, 0,        0x7d)/*0.25*/ } },
     7040    /*21*/{ { /*src2     */ { FP32_V(0, 0,        0x7d)/*0.25*/, FP32_V(0, 0x400000, 0x7e)/*0.75*/, FP32_NORM_MAX(0),            FP32_0(0),        FP32_0(0),                          FP32_NORM_MAX(0),            FP32_V(0, 0x600000, 0x7f)/*1.75*/, FP32_V(0, 0,        0x7d)/*0.25*/ } },
    69517041            { /*src1     */ { FP32_V(0, 0x600000, 0x7f)/*1.75*/, FP32_V(0, 0,        0x7d)/*0.25*/, FP32_NORM_MAX(1),            FP32_0(0),        FP32_V(1, 0,        0x7e)/*-0.50*/, FP32_V(0, 0, 0x7d)/*-0.25*/, FP32_0(0),                         FP32_0(0)                         } },
    69527042            { /* =>      */ { FP32_V(0, 0x400000, 0x7f)/*1.50*/, FP32_NORM_MAX(1),                  FP32_V(1, 0, 0x7e)/*-0.50*/, FP32_NORM_MAX(0), FP32_V(1, 0x400000, 0x7e)/*-0.75*/, FP32_0(0),                   FP32_NORM_MAX(1),                  FP32_V(0, 0x400000, 0x7f)/*1.50*/ } },
     
    70217111     * Denormals.
    70227112     */
    7023     /*28*/{ { /*src2     */ { FP32_DENORM_MAX(0), FP32_0(0),          FP32_0(0), FP32_0(0), FP32_DENORM_MAX(0), FP32_0(0), FP32_0(0), FP32_0(0)          } },
     7113    /*31*/{ { /*src2     */ { FP32_DENORM_MAX(0), FP32_0(0),          FP32_0(0), FP32_0(0), FP32_DENORM_MAX(0), FP32_0(0), FP32_0(0), FP32_0(0)          } },
    70247114            { /*src1     */ { FP32_0(0),          FP32_DENORM_MAX(1), FP32_0(0), FP32_0(0), FP32_0(0),          FP32_0(0), FP32_0(0), FP32_DENORM_MAX(1) } },
    70257115            { /* =>      */ { FP32_0(0),          FP32_0(0),          FP32_0(0), FP32_0(0), FP32_0(0),          FP32_0(0), FP32_0(0), FP32_0(0)          } },
    70267116              /*mxcsr:in */ 0,
    7027               /*128:out  */ X86_MXCSR_DE,
    7028               /*256:out  */ X86_MXCSR_DE,
     7117              /*128:out  */ X86_MXCSR_DE | BS3_MXCSR_DM_FIXED,
     7118              /*256:out  */ X86_MXCSR_DE | BS3_MXCSR_DM_FIXED,
     7119              /*xcpt?    */ true, true },
     7120#ifdef TODO_X86_MXCSR_UE_IEM /** @todo THIS FAILS ON IEM: X86_MXCSR_UE not set in 128:out or 256:out *AND* different output values */
     7121 /*--|32*/{ { /*src2     */ { FP32_DENORM_MAX(0), FP32_0(0),          FP32_0(0),          FP32_0(0), FP32_DENORM_MAX(0), FP32_0(0),          FP32_0(0),          FP32_0(0)          } },
     7122            { /*src1     */ { FP32_0(0),          FP32_DENORM_MAX(1), FP32_0(0),          FP32_0(0), FP32_0(0),          FP32_0(0),          FP32_0(0),          FP32_DENORM_MAX(1) } },
     7123            { /* =>      */ { FP32_0(0),          FP32_0(0),          FP32_0(0),          FP32_0(0), FP32_0(0),          FP32_0(0),          FP32_0(0),          FP32_0(0)          } } /* result on HW (i7-10700) */,
     7124    // IEM: { /* =>      */ { FP32_DENORM_MAX(0), FP32_0(0),          FP32_DENORM_MAX(0), FP32_0(0), FP32_0(0),          FP32_DENORM_MAX(0), FP32_DENORM_MAX(0), FP32_0(0)          } } /* result on IEM */,
     7125              /*mxcsr:in */ X86_MXCSR_DM,
     7126              /*128:out  */ X86_MXCSR_DM | X86_MXCSR_DE | X86_MXCSR_UE | BS3_MXCSR_DM_FIXED | BS3_MXCSR_UM_FIXED,
     7127              /*256:out  */ X86_MXCSR_DM | X86_MXCSR_DE | X86_MXCSR_UE | BS3_MXCSR_DM_FIXED | BS3_MXCSR_UM_FIXED,
     7128              /*xcpt?    */ true, true },
     7129#endif /* TODO_X86_MXCSR_UE_IEM */
     7130 /*32|33*/{ { /*src2     */ { FP32_DENORM_MAX(0), FP32_0(0),          FP32_0(0),          FP32_0(0), FP32_DENORM_MAX(0), FP32_0(0),          FP32_0(0),          FP32_0(0)          } },
     7131            { /*src1     */ { FP32_0(0),          FP32_DENORM_MAX(1), FP32_0(0),          FP32_0(0), FP32_0(0),          FP32_0(0),          FP32_0(0),          FP32_DENORM_MAX(1) } },
     7132            { /* =>      */ { FP32_DENORM_MAX(0), FP32_0(0),          FP32_DENORM_MAX(0), FP32_0(0), FP32_0(0),          FP32_DENORM_MAX(0), FP32_DENORM_MAX(0), FP32_0(0)          } },
     7133              /*mxcsr:in */ X86_MXCSR_DM | X86_MXCSR_UM,
     7134              /*128:out  */ X86_MXCSR_DM | X86_MXCSR_UM | X86_MXCSR_DE | BS3_MXCSR_DM_FIXED | BS3_MXCSR_UM_FIXED,
     7135              /*256:out  */ X86_MXCSR_DM | X86_MXCSR_UM | X86_MXCSR_DE | BS3_MXCSR_DM_FIXED | BS3_MXCSR_UM_FIXED,
    70297136              /*xcpt?    */ true, true },
    70307137          { { /*src2     */ { FP32_0(0), FP32_0(0),          FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0),          FP32_0(0), FP32_0(0) } },
     
    70437150              /*xcpt?    */ false, false },
    70447151          { { /*src2     */ { FP32_DENORM_MAX(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0),          FP32_0(0), FP32_0(0), FP32_0(0) } },
    7045             { /*src1     */ { FP32_0(0),         FP32_0(0), FP32_0(0), FP32_0(0), FP32_DENORM_MAX(0), FP32_0(0), FP32_0(0), FP32_0(0) } },
    7046             { /* =>      */ { FP32_0(0),         FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0),          FP32_0(0), FP32_0(0), FP32_0(0) } },
     7152            { /*src1     */ { FP32_0(0),          FP32_0(0), FP32_0(0), FP32_0(0), FP32_DENORM_MAX(0), FP32_0(0), FP32_0(0), FP32_0(0) } },
     7153            { /* =>      */ { FP32_0(0),          FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0),          FP32_0(0), FP32_0(0), FP32_0(0) } },
    70477154              /*mxcsr:in */ 0,
    7048               /*128:out  */ X86_MXCSR_DE,
    7049               /*256:out  */ X86_MXCSR_DE,
     7155              /*128:out  */ X86_MXCSR_DE | BS3_MXCSR_DM_FIXED,
     7156              /*256:out  */ X86_MXCSR_DE | BS3_MXCSR_DM_FIXED,
     7157              /*xcpt?    */ true, true },
     7158#ifdef TODO_X86_MXCSR_UE_IEM /** @todo THIS FAILS ON IEM: X86_MXCSR_UE not set in 128:out or 256:out *AND* different output values */
     7159 /*--|37*/{ { /*src2     */ { FP32_DENORM_MAX(0), FP32_0(0), FP32_0(0),          FP32_0(0), FP32_0(0),          FP32_0(0), FP32_0(0), FP32_0(0) } },
     7160            { /*src1     */ { FP32_0(0),          FP32_0(0), FP32_0(0),          FP32_0(0), FP32_DENORM_MAX(0), FP32_0(0), FP32_0(0), FP32_0(0) } },
     7161            { /* =>      */ { FP32_0(0),          FP32_0(0), FP32_0(0),          FP32_0(0), FP32_0(0),          FP32_0(0), FP32_0(0), FP32_0(0) } } /* result on HW (i7-10700) */,
     7162    // IEM: { /* =>      */ { FP32_0(0),          FP32_0(0), FP32_DENORM_MAX(0), FP32_0(0), FP32_DENORM_MAX(0), FP32_0(0), FP32_0(0), FP32_0(0) } } /* result on IEM */,
     7163              /*mxcsr:in */ X86_MXCSR_DM,
     7164              /*128:out  */ X86_MXCSR_DM | X86_MXCSR_DE | X86_MXCSR_UE | BS3_MXCSR_DM_FIXED | BS3_MXCSR_UM_FIXED,
     7165              /*256:out  */ X86_MXCSR_DM | X86_MXCSR_DE | X86_MXCSR_UE | BS3_MXCSR_DM_FIXED | BS3_MXCSR_UM_FIXED,
     7166              /*xcpt?    */ true, true },
     7167#endif /* TODO_X86_MXCSR_UE_IEM */
     7168 /*36|38*/{ { /*src2     */ { FP32_DENORM_MAX(0), FP32_0(0), FP32_0(0),          FP32_0(0), FP32_0(0),          FP32_0(0), FP32_0(0), FP32_0(0) } },
     7169            { /*src1     */ { FP32_0(0),          FP32_0(0), FP32_0(0),          FP32_0(0), FP32_DENORM_MAX(0), FP32_0(0), FP32_0(0), FP32_0(0) } },
     7170            { /* =>      */ { FP32_0(0),          FP32_0(0), FP32_DENORM_MAX(0), FP32_0(0), FP32_DENORM_MAX(0), FP32_0(0), FP32_0(0), FP32_0(0) } },
     7171              /*mxcsr:in */ X86_MXCSR_DM | X86_MXCSR_UM,
     7172              /*128:out  */ X86_MXCSR_DM | X86_MXCSR_UM | X86_MXCSR_DE | BS3_MXCSR_DM_FIXED | BS3_MXCSR_UM_FIXED,
     7173              /*256:out  */ X86_MXCSR_DM | X86_MXCSR_UM | X86_MXCSR_DE | BS3_MXCSR_DM_FIXED | BS3_MXCSR_UM_FIXED,
    70507174              /*xcpt?    */ true, true },
    70517175          { { /*src2     */ { FP32_0(0), FP32_0(0),          FP32_0(0), FP32_0(0), FP32_0(0),          FP32_0(0), FP32_0(0), FP32_DENORM_MAX(1) } },
     
    70677191     * Invalids.
    70687192     */
    7069     /*32*/ FP32_TABLE_D1_H_PS_INVALIDS
     7193 /*39|41*/ FP32_TABLE_D1_H_PS_INVALIDS
    70707194    /** @todo Underflow; Precision; Rounding; FZ etc. */
    70717195    };
     
    71177241    static BS3CPUINSTR4_TEST1_MODE_T const s_aTests[3] = BS3CPUINSTR4_TEST1_MODES_INIT(s_aTests16, s_aTests32, s_aTests64);
    71187242    unsigned const                         iTest       = BS3CPUINSTR4_TEST_MODES_INDEX(bMode);
    7119     return bs3CpuInstr4_WorkerTestType1(bMode, s_aTests[iTest].paTests, s_aTests[iTest].cTests,
     7243    return bs3CpuInstr4_WorkerTestType1A(bMode, s_aTests[iTest].paTests, s_aTests[iTest].cTests,
    71207244                                        g_aXcptConfig2, RT_ELEMENTS(g_aXcptConfig2));
    71217245}
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