VirtualBox

Changeset 106102 in vbox for trunk/src/VBox


Ignore:
Timestamp:
Sep 20, 2024 1:31:45 AM (2 months ago)
Author:
vboxsync
Message:

ValidationKit/bootsectors: Implement SIMD FP testcases for [v]divps; bugref:10658 [nits]

(fix order of divxx test functions & instruction emit macros; no code changes despite big diff)

Location:
trunk/src/VBox/ValidationKit/bootsectors
Files:
2 edited

Legend:

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

    r106087 r106102  
    409409
    410410;
     411;; [v]divps
     412;
     413EMIT_INSTR_PLUS_ICEBP       divps, XMM1, XMM2
     414EMIT_INSTR_PLUS_ICEBP       divps, XMM1, FSxBX
     415EMIT_INSTR_PLUS_ICEBP_C64   divps, XMM8, XMM9
     416EMIT_INSTR_PLUS_ICEBP_C64   divps, XMM8, FSxBX
     417
     418EMIT_INSTR_PLUS_ICEBP       vdivps, XMM1, XMM2, XMM3
     419EMIT_INSTR_PLUS_ICEBP       vdivps, XMM1, XMM2, FSxBX
     420EMIT_INSTR_PLUS_ICEBP_C64   vdivps, XMM8, XMM9, XMM10
     421EMIT_INSTR_PLUS_ICEBP_C64   vdivps, XMM8, XMM9, FSxBX
     422
     423EMIT_INSTR_PLUS_ICEBP       vdivps, YMM1, YMM2, YMM3
     424EMIT_INSTR_PLUS_ICEBP       vdivps, YMM1, YMM2, FSxBX
     425EMIT_INSTR_PLUS_ICEBP_C64   vdivps, YMM8, YMM9, YMM10
     426EMIT_INSTR_PLUS_ICEBP_C64   vdivps, YMM8, YMM9, FSxBX
     427
     428;
    411429;; [v]divss
    412430;
     
    435453
    436454;
    437 ;; [v]divps
    438 ;
    439 EMIT_INSTR_PLUS_ICEBP       divps, XMM1, XMM2
    440 EMIT_INSTR_PLUS_ICEBP       divps, XMM1, FSxBX
    441 EMIT_INSTR_PLUS_ICEBP_C64   divps, XMM8, XMM9
    442 EMIT_INSTR_PLUS_ICEBP_C64   divps, XMM8, FSxBX
    443 
    444 EMIT_INSTR_PLUS_ICEBP       vdivps, XMM1, XMM2, XMM3
    445 EMIT_INSTR_PLUS_ICEBP       vdivps, XMM1, XMM2, FSxBX
    446 EMIT_INSTR_PLUS_ICEBP_C64   vdivps, XMM8, XMM9, XMM10
    447 EMIT_INSTR_PLUS_ICEBP_C64   vdivps, XMM8, XMM9, FSxBX
    448 
    449 EMIT_INSTR_PLUS_ICEBP       vdivps, YMM1, YMM2, YMM3
    450 EMIT_INSTR_PLUS_ICEBP       vdivps, YMM1, YMM2, FSxBX
    451 EMIT_INSTR_PLUS_ICEBP_C64   vdivps, YMM8, YMM9, YMM10
    452 EMIT_INSTR_PLUS_ICEBP_C64   vdivps, YMM8, YMM9, FSxBX
    453 
    454 ;
    455455;; [v]addsubps
    456456;
  • trunk/src/VBox/ValidationKit/bootsectors/bs3-cpu-instr-4.c32

    r106092 r106102  
    75847584
    75857585/*
     7586 * [V]DIVPS.
     7587 */
     7588BS3_DECL_FAR(uint8_t) bs3CpuInstr4_v_divps(uint8_t bMode)
     7589{
     7590    static BS3CPUINSTR4_TEST1_VALUES_PS_T const s_aValues[] =
     7591    {
     7592    /** @todo Improve port from mulps */
     7593    /*
     7594     * Zero.
     7595     */
     7596    /* 0*/{ { /*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) } },
     7597            { /*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) } },
     7598            { /* =>      */ { FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1) } },
     7599              /*mxcsr:in */ X86_MXCSR_XCPT_MASK,
     7600              /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_IE,
     7601              /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_IE,
     7602              /*xcpt?    */ false, false },
     7603          { { /*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) } },
     7604            { /*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) } },
     7605            { /* =>      */ { FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1) } },
     7606              /*mxcsr:in */ 0,
     7607              /*128:out  */ X86_MXCSR_IE,
     7608              /*256:out  */ X86_MXCSR_IE,
     7609              /*xcpt?    */ true, true },
     7610          { { /*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) } },
     7611            { /*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) } },
     7612            { /* =>      */ { FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1) } },
     7613              /*mxcsr:in */ X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_UP,
     7614              /*128:out  */ X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_UP | X86_MXCSR_IE,
     7615              /*256:out  */ X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_UP | X86_MXCSR_IE,
     7616              /*xcpt?    */ true, true },
     7617          { { /*src2     */ { FP32_0(1), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(1) } },
     7618            { /*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) } },
     7619            { /* =>      */ { FP32_QNAN(1), FP32_QNAN(0), FP32_QNAN(0), FP32_QNAN(0), FP32_QNAN(0), FP32_QNAN(0), FP32_QNAN(0), FP32_QNAN(1) } },
     7620              /*mxcsr:in */ X86_MXCSR_DAZ | X86_MXCSR_RC_ZERO,
     7621              /*128:out  */ X86_MXCSR_DAZ | X86_MXCSR_RC_ZERO | X86_MXCSR_IE,
     7622              /*256:out  */ X86_MXCSR_DAZ | X86_MXCSR_RC_ZERO | X86_MXCSR_IE,
     7623              /*xcpt?    */ true, true },
     7624          { { /*src2     */ { FP32_0(0), FP32_0(0), FP32_0(1), FP32_0(0), FP32_0(1), FP32_0(0), FP32_0(1), FP32_0(1) } },
     7625            { /*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) } },
     7626            { /* =>      */ { FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1) } },
     7627              /*mxcsr:in */ X86_MXCSR_FZ | X86_MXCSR_RC_ZERO,
     7628              /*128:out  */ X86_MXCSR_FZ | X86_MXCSR_RC_ZERO | X86_MXCSR_IE,
     7629              /*256:out  */ X86_MXCSR_FZ | X86_MXCSR_RC_ZERO | X86_MXCSR_IE,
     7630              /*xcpt?    */ true, true },
     7631          { { /*src2     */ { FP32_0(0), FP32_0(1), FP32_0(0), FP32_0(1), FP32_0(0), FP32_0(1), FP32_0(0), FP32_0(1) } },
     7632            { /*src1     */ { FP32_0(0), FP32_0(1), FP32_0(1), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(1), FP32_0(0) } },
     7633            { /* =>      */ { FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1) } },
     7634              /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_RC_ZERO,
     7635              /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_RC_ZERO | X86_MXCSR_IE,
     7636              /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_RC_ZERO | X86_MXCSR_IE,
     7637              /*xcpt?    */ false, false },
     7638          { { /*src2     */ { FP32_NORM_V0(0), FP32_NORM_V1(1), FP32_0(0),       FP32_NORM_V3(1), FP32_0(0), FP32_NORM_V1(1), FP32_NORM_V4(0), FP32_NORM_V3(0) } },
     7639            { /*src1     */ { FP32_0(0),       FP32_0(1),       FP32_0(1),       FP32_0(0),       FP32_0(0), FP32_0(0),       FP32_0(0),       FP32_0(1)       } },
     7640            { /* =>      */ { FP32_0(0),       FP32_0(0),       FP32_QNAN(1),    FP32_0(1),       FP32_QNAN(1), FP32_0(1),    FP32_0(0),       FP32_0(1)       } },
     7641              /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_DOWN,
     7642              /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_DOWN | X86_MXCSR_IE,
     7643              /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_DOWN | X86_MXCSR_IE,
     7644              /*xcpt?    */ false, false },
     7645    /*
     7646     * Infinity.
     7647     */
     7648    /* 7*/{ { /*src2     */ { FP32_INF(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0) } },
     7649            { /*src1     */ { FP32_INF(1), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0) } },
     7650            { /* =>      */ { FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1) } },
     7651              /*mxcsr:in */ X86_MXCSR_XCPT_MASK & ~X86_MXCSR_IM,
     7652              /*128:out  */ (X86_MXCSR_XCPT_MASK & ~X86_MXCSR_IM) | X86_MXCSR_IE,
     7653              /*256:out  */ (X86_MXCSR_XCPT_MASK & ~X86_MXCSR_IM) | X86_MXCSR_IE,
     7654              /*xcpt?    */ true, true },
     7655          { { /*src2     */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_INF(1), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0) } },
     7656            { /*src1     */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_INF(1), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0) } },
     7657            { /* =>      */ { FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1) } },
     7658              /*mxcsr:in */ X86_MXCSR_XCPT_MASK,
     7659              /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_IE,
     7660              /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_IE,
     7661              /*xcpt?    */ false, false },
     7662          { { /*src2     */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_INF(0), FP32_0(1), FP32_0(1), FP32_0(0) } },
     7663            { /*src1     */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_INF(1), FP32_0(0), FP32_0(0), FP32_0(0) } },
     7664            { /* =>      */ { FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1) } },
     7665              /*mxcsr:in */ X86_MXCSR_FZ | X86_MXCSR_XCPT_MASK,
     7666              /*128:out  */ X86_MXCSR_FZ | X86_MXCSR_XCPT_MASK | X86_MXCSR_IE,
     7667              /*256:out  */ X86_MXCSR_FZ | X86_MXCSR_XCPT_MASK | X86_MXCSR_IE,
     7668              /*xcpt?    */ false, false },
     7669          { { /*src2     */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_INF(0)  } },
     7670            { /*src1     */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_INF(1) } },
     7671            { /* =>      */ { FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1)  } },
     7672              /*mxcsr:in */ X86_MXCSR_FZ,
     7673              /*128:out  */ X86_MXCSR_FZ | X86_MXCSR_IE,
     7674              /*256:out  */ X86_MXCSR_FZ | X86_MXCSR_IE,
     7675              /*xcpt?    */ true, true },
     7676          { { /*src2     */ { FP32_INF(0), FP32_INF(1), FP32_0(0), FP32_INF(1), FP32_0(1), FP32_INF(1), FP32_INF(1), FP32_INF(0) } },
     7677            { /*src1     */ { FP32_INF(1), FP32_INF(1), FP32_0(1), FP32_INF(1), FP32_0(1), FP32_INF(1), FP32_INF(1), FP32_INF(1) } },
     7678            { /* =>      */ { FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1) } },
     7679              /*mxcsr:in */ X86_MXCSR_FZ | X86_MXCSR_RC_ZERO,
     7680              /*128:out  */ X86_MXCSR_FZ | X86_MXCSR_RC_ZERO | X86_MXCSR_IE,
     7681              /*256:out  */ X86_MXCSR_FZ | X86_MXCSR_RC_ZERO | X86_MXCSR_IE,
     7682              /*xcpt?    */ true, true },
     7683          { { /*src2     */ { FP32_INF(0),  FP32_INF(1),  FP32_QNAN(0), FP32_QNAN(1), FP32_INF(0),  FP32_QNAN(1), FP32_QNAN(0), FP32_INF(1)  } },
     7684            { /*src1     */ { FP32_QNAN(0), FP32_QNAN(0), FP32_INF(1),  FP32_INF(1),  FP32_QNAN(1), FP32_INF(0),  FP32_INF(0),  FP32_QNAN(1) } },
     7685            { /* =>      */ { FP32_QNAN(0), FP32_QNAN(0), FP32_QNAN(0), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(0), FP32_QNAN(1)  } },
     7686              /*mxcsr:in */ X86_MXCSR_XCPT_MASK,
     7687              /*128:out  */ X86_MXCSR_XCPT_MASK,
     7688              /*256:out  */ X86_MXCSR_XCPT_MASK,
     7689              /*xcpt?    */ false, false },
     7690          { { /*src2     */ { FP32_INF(0),  FP32_INF(1),  FP32_QNAN(0), FP32_QNAN(1), FP32_INF(0),  FP32_QNAN(1), FP32_QNAN(0), FP32_INF(1)  } },
     7691            { /*src1     */ { FP32_QNAN(0), FP32_QNAN(0), FP32_INF(1),  FP32_INF(1),  FP32_QNAN(1), FP32_INF(0),  FP32_INF(0),  FP32_QNAN(1) } },
     7692            { /* =>      */ { FP32_QNAN(0), FP32_QNAN(0), FP32_QNAN(0), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(0), FP32_QNAN(1)  } },
     7693              /*mxcsr:in */ X86_MXCSR_DAZ,
     7694              /*128:out  */ X86_MXCSR_DAZ,
     7695              /*256:out  */ X86_MXCSR_DAZ,
     7696              /*xcpt?    */ false, false },
     7697    /*
     7698     * Overflow, Precision.
     7699     */
     7700#ifdef TODO_X86_MXCSR_PE /** @todo THIS FAILS ON IEM: X86_MXCSR_PE not set in 256:out */
     7701 /*--|14*/{ { /*src2     */ { FP32_1(0), FP32_1(1), FP32_1(0), FP32_1(0), FP32_NORM_MAX(1), FP32_1(0), FP32_NORM_MAX(1),  FP32_2(0)        } },
     7702            { /*src1     */ { FP32_0(0), FP32_1(0), FP32_0(0), FP32_1(0), FP32_0(0),        FP32_1(0), FP32_2(0),         FP32_NORM_MAX(0) } },
     7703            { /* =>      */ { FP32_0(0), FP32_1(1), FP32_0(0), FP32_1(0), FP32_0(1),        FP32_1(0), FP32_2(0),         FP32_NORM_MAX(0) } },
     7704              /*mxcsr:in */ 0,
     7705              /*128:out  */ 0,
     7706              /*256:out  */ X86_MXCSR_UE | X86_MXCSR_PE,
     7707              /*xcpt?    */ false, true },
     7708#endif /* TODO_X86_MXCSR_PE */
     7709 /*14|15*/{ { /*src2     */ { FP32_V(0,0,0x7e)/*0.50*/, FP32_1(1), FP32_1(0), FP32_1(0), FP32_NORM_MAX(1), FP32_1(0), FP32_NORM_MAX(1),     FP32_NORM_MAX(0) } },
     7710            { /*src1     */ { FP32_NORM_MAX(0),         FP32_1(0), FP32_0(0), FP32_1(0), FP32_0(0),        FP32_1(0), FP32_1(0),            FP32_0(0)        } },
     7711            { /* =>      */ { FP32_INF(0),              FP32_1(1), FP32_0(0), FP32_1(0), FP32_0(1),        FP32_1(0), FP32_V(1,0x200000,0), FP32_0(0)        } },
     7712              /*mxcsr:in */ X86_MXCSR_XCPT_MASK,
     7713              /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_OE | X86_MXCSR_PE,
     7714              /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_OE | X86_MXCSR_PE | X86_MXCSR_UE,
     7715              /*xcpt?    */ false, false },
     7716#ifdef TODO_X86_MXCSR_PE /** @todo THIS FAILS ON IEM: X86_MXCSR_PE not set in 256:out */
     7717 /*--|16*/{ { /*src2     */ { FP32_V(0,0,0x7e)/*0.50*/, FP32_1(1), FP32_1(0), FP32_1(0), FP32_NORM_MAX(1), FP32_1(0), FP32_NORM_MAX(1),     FP32_NORM_MAX(0) } },
     7718            { /*src1     */ { FP32_NORM_MAX(0),         FP32_1(0), FP32_0(0), FP32_1(0), FP32_0(0),        FP32_1(0), FP32_1(0),            FP32_0(0)        } },
     7719            { /* =>      */ { FP32_INF(0),              FP32_1(1), FP32_0(0), FP32_1(0), FP32_0(1),        FP32_1(0), FP32_V(1,0x200000,0), FP32_0(0)        } },
     7720              /*mxcsr:in */ 0,
     7721              /*128:out  */ X86_MXCSR_OE,
     7722              /*256:out  */ X86_MXCSR_OE | X86_MXCSR_PE | X86_MXCSR_UE,
     7723              /*xcpt?    */ true, true },
     7724#endif /* TODO_X86_MXCSR_PE */
     7725 /*15|17*/{ { /*src2     */ { FP32_V(0,0,0x7e)/*0.50*/, FP32_1(1), FP32_1(0), FP32_1(0), FP32_NORM_MAX(1), FP32_1(0), FP32_NORM_MAX(1),     FP32_NORM_MAX(0) } },
     7726            { /*src1     */ { FP32_NORM_MAX(0),         FP32_1(0), FP32_0(0), FP32_1(0), FP32_0(0),        FP32_1(0), FP32_1(0),            FP32_0(0)        } },
     7727            { /* =>      */ { FP32_INF(0),              FP32_1(1), FP32_0(0), FP32_1(0), FP32_0(1),        FP32_1(0), FP32_V(1,0x200000,0), FP32_0(0)        } },
     7728              /*mxcsr:in */ X86_MXCSR_OM,
     7729              /*128:out  */ X86_MXCSR_OM | X86_MXCSR_OE | X86_MXCSR_PE,
     7730              /*256:out  */ X86_MXCSR_OM | X86_MXCSR_OE | X86_MXCSR_PE | X86_MXCSR_UE,
     7731              /*xcpt?    */ true, true },
     7732          { { /*src2     */ { FP32_NORM_MAX(0), FP32_NORM_MIN(0), FP32_1(0), FP32_1(0), FP32_NORM_MAX(0), FP32_1(1), FP32_1(0), FP32_NORM_MIN(0) } },
     7733            { /*src1     */ { FP32_NORM_MIN(0), FP32_NORM_MAX(1), FP32_1(0), FP32_1(0), FP32_NORM_MIN(1), FP32_1(0), FP32_1(1), FP32_NORM_MAX(0) } },
     7734            { /* =>      */ { FP32_0(0),        FP32_NORM_MAX(1), FP32_1(0), FP32_1(0), FP32_0(1),        FP32_1(1), FP32_1(1), FP32_NORM_MAX(0) } },
     7735              /*mxcsr:in */ X86_MXCSR_OM | X86_MXCSR_PM | X86_MXCSR_UM | X86_MXCSR_RC_ZERO,
     7736              /*128:out  */ X86_MXCSR_OM | X86_MXCSR_PM | X86_MXCSR_UM | X86_MXCSR_RC_ZERO | X86_MXCSR_OE | X86_MXCSR_PE | X86_MXCSR_UE,
     7737              /*256:out  */ X86_MXCSR_OM | X86_MXCSR_PM | X86_MXCSR_UM | X86_MXCSR_RC_ZERO | X86_MXCSR_OE | X86_MXCSR_PE | X86_MXCSR_UE,
     7738              /*xcpt?    */ false, false },
     7739          { { /*src2     */ { FP32_NORM_MAX(0), FP32_NORM_MIN(1), FP32_NORM_V1(0), FP32_NORM_MAX(0), FP32_NORM_MAX(1), FP32_NORM_MIN(0), FP32_NORM_MIN(1), FP32_NORM_MAX(0) } },
     7740            { /*src1     */ { FP32_INF(0),      FP32_0(0),        FP32_NORM_V1(0), FP32_INF(0),      FP32_INF(0),      FP32_0(1),        FP32_0(1),        FP32_INF(1)      } },
     7741            { /* =>      */ { FP32_INF(0),      FP32_0(1),        FP32_1(0),       FP32_INF(0),      FP32_INF(1),      FP32_0(1),        FP32_0(0),        FP32_INF(1)      } },
     7742              /*mxcsr:in */ X86_MXCSR_OM | X86_MXCSR_UM | X86_MXCSR_PM,
     7743              /*128:out  */ X86_MXCSR_OM | X86_MXCSR_UM | X86_MXCSR_PM,
     7744              /*256:out  */ X86_MXCSR_OM | X86_MXCSR_UM | X86_MXCSR_PM,
     7745              /*xcpt?    */ false, false },
     7746          { { /*src2     */ { FP32_NORM_MAX(0), FP32_NORM_MIN(0), FP32_NORM_V3(0), FP32_NORM_MAX(0), FP32_NORM_MAX(1), FP32_NORM_MIN(0), FP32_NORM_MIN(1), FP32_NORM_MAX(0) } },
     7747            { /*src1     */ { FP32_NORM_MAX(0), FP32_0(1),        FP32_0(0),       FP32_NORM_MAX(0), FP32_NORM_MAX(0), FP32_0(1),        FP32_0(1),        FP32_INF(1)      } },
     7748            { /* =>      */ { FP32_1(0),        FP32_0(1),        FP32_0(0),       FP32_1(0),        FP32_1(1),        FP32_0(1),        FP32_0(0),        FP32_INF(1)      } },
     7749              /*mxcsr:in */ X86_MXCSR_OM | X86_MXCSR_UM | X86_MXCSR_PM | X86_MXCSR_FZ | X86_MXCSR_RC_DOWN,
     7750              /*128:out  */ X86_MXCSR_OM | X86_MXCSR_UM | X86_MXCSR_PM | X86_MXCSR_FZ | X86_MXCSR_RC_DOWN,
     7751              /*256:out  */ X86_MXCSR_OM | X86_MXCSR_UM | X86_MXCSR_PM | X86_MXCSR_FZ | X86_MXCSR_RC_DOWN,
     7752              /*xcpt?    */ false, false },
     7753          { { /*src2     */ { FP32_NORM_MIN(1), FP32_NORM_MAX(0), FP32_NORM_MAX(0), FP32_2(0), FP32_1(1), FP32_NORM_MAX(0), FP32_NORM_MAX(0), FP32_NORM_MIN(1) } },
     7754            { /*src1     */ { FP32_0(0),        FP32_NORM_MAX(0), FP32_INF(1),      FP32_2(1), FP32_2(0), FP32_INF(1),      FP32_NORM_MAX(0), FP32_0(0)        } },
     7755            { /* =>      */ { FP32_0(1),        FP32_1(0),        FP32_INF(1),      FP32_1(1), FP32_2(1), FP32_INF(1),      FP32_1(0),        FP32_0(1)        } },
     7756              /*mxcsr:in */ X86_MXCSR_OM | X86_MXCSR_UM | X86_MXCSR_PM | X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_DOWN,
     7757              /*128:out  */ X86_MXCSR_OM | X86_MXCSR_UM | X86_MXCSR_PM | X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_DOWN,
     7758              /*256:out  */ X86_MXCSR_OM | X86_MXCSR_UM | X86_MXCSR_PM | X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_DOWN,
     7759              /*xcpt?    */ false, false },
     7760          { { /*src2     */ { FP32_1(0),       FP32_NORM_V2(1), FP32_1(1),       FP32_NORM_V6(0), FP32_NORM_MAX(0), FP32_NORM_MAX(1), FP32_NORM_MAX(1), FP32_NORM_MAX(0) } },
     7761            { /*src1     */ { FP32_NORM_V7(0), FP32_NORM_V2(0), FP32_NORM_V4(1), FP32_NORM_V6(1), FP32_INF(0),      FP32_INF(0),      FP32_INF(0),      FP32_INF(0)      } },
     7762            { /* =>      */ { FP32_NORM_V7(0), FP32_1(1),       FP32_NORM_V4(0), FP32_1(1),       FP32_INF(0),      FP32_INF(1),      FP32_INF(1),      FP32_INF(0)      } },
     7763              /*mxcsr:in */ X86_MXCSR_DAZ | X86_MXCSR_FZ,
     7764              /*128:out  */ X86_MXCSR_DAZ | X86_MXCSR_FZ,
     7765              /*256:out  */ X86_MXCSR_DAZ | X86_MXCSR_FZ,
     7766              /*xcpt?    */ false, false },
     7767          { { /*src2     */ { FP32_1(0),       FP32_NORM_V2(1), FP32_1(1),       FP32_NORM_V6(0), FP32_NORM_MAX(0), FP32_NORM_MAX(1), FP32_NORM_MAX(1), FP32_NORM_MAX(0) } },
     7768            { /*src1     */ { FP32_NORM_V7(0), FP32_NORM_V2(0), FP32_NORM_V4(1), FP32_NORM_V6(1), FP32_INF(0),      FP32_INF(0),      FP32_INF(0),      FP32_INF(0)      } },
     7769            { /* =>      */ { FP32_NORM_V7(0), FP32_1(1),       FP32_NORM_V4(0), FP32_1(1),       FP32_INF(0),      FP32_INF(1),      FP32_INF(1),      FP32_INF(0)      } },
     7770              /*mxcsr:in */ X86_MXCSR_OM | X86_MXCSR_PM | X86_MXCSR_DAZ | X86_MXCSR_FZ,
     7771              /*128:out  */ X86_MXCSR_OM | X86_MXCSR_PM | X86_MXCSR_DAZ | X86_MXCSR_FZ,
     7772              /*256:out  */ X86_MXCSR_OM | X86_MXCSR_PM | X86_MXCSR_DAZ | X86_MXCSR_FZ,
     7773              /*xcpt?    */ false, false },
     7774    /** @todo More Overflow/Precision. */
     7775    /*
     7776     * Normals.
     7777     */
     7778 /*22|24*/{ { /*src2     */ { FP32_V(0, 0x600000, 0x7f)/*1.7500*/, FP32_NORM_V0(0), FP32_NORM_V1(0), FP32_NORM_V2(1), FP32_1(1),       FP32_1(0),       FP32_1(1),       FP32_NORM_V6(1) } },
     7779            { /*src1     */ { FP32_V(0, 0x600000, 0x7d)/*0.4375*/, FP32_NORM_V0(0), FP32_NORM_V1(1), FP32_0(1),       FP32_NORM_V0(0), FP32_NORM_V3(0), FP32_NORM_V4(1), FP32_NORM_V6(1) } },
     7780            { /* =>      */ { FP32_V(0, 0,        0x7d)/*0.2500*/, FP32_1(0),       FP32_1(1),       FP32_0(0),       FP32_NORM_V0(1), FP32_NORM_V3(0), FP32_NORM_V4(0), FP32_1(0)       } },
     7781              /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_DOWN,
     7782              /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_DOWN,
     7783              /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_DOWN,
     7784              /*xcpt?    */ false, false },
     7785          { { /*src2     */ { FP32_V(0, 0x61e000, 0x89)/*   1807*/, FP32_V(0, 0x61e000, 0x89)/*   1807*/, FP32_V(0, 0x4a30b8, 0x8f)/* 103521.4375*/, FP32_V(0, 0x1a5200, 0x8c)/*     9876.5*/, FP32_V(0, 0x23b6a0, 0x8e)/*41910.625000*/, FP32_V(0, 0x23b6a0, 0x8e)/*41910.625000*/, FP32_V(0, 0,        0x7d)/*0.2500*/, FP32_V(0, 0x504000, 0x8a)/*    3332*/ } },
     7786            { /*src1     */ { FP32_V(0, 0x37be78, 0x95)/*6020924*/, FP32_V(0, 0x37be78, 0x95)/*6020924*/, FP32_V(0, 0x30eaa1, 0x93)/*1449300.1250*/, FP32_V(1, 0x39f7d1, 0x96)/*-12187601.0*/, FP32_V(0, 0x23b6a0, 0x8b)/* 5238.828125*/, FP32_V(0, 0x23b6a0, 0x8b)/* 5238.828125*/, FP32_V(0, 0x600000, 0x7d)/*0.4375*/, FP32_V(1, 0x37be78, 0x95)/*-6020924*/ } },
     7787            { /* =>      */ { FP32_V(0, 0x504000, 0x8a)/*   3332*/, FP32_V(0, 0x504000, 0x8a)/*   3332*/, FP32_V(0, 0x600000, 0x82)/*     14.0000*/, FP32_V(1, 0x1a4000, 0x89)/*    -1234.0*/, FP32_V(0, 0,        0x7c)/*    0.125000*/, FP32_V(0, 0,        0x7c)/*    0.125000*/, FP32_V(0, 0x600000, 0x7f)/*1.7500*/, FP32_V(1, 0x61e000, 0x89)/*   -1807*/ } },
     7788              /*mxcsr:in */ X86_MXCSR_XCPT_MASK,
     7789              /*128:out  */ X86_MXCSR_XCPT_MASK,
     7790              /*256:out  */ X86_MXCSR_XCPT_MASK,
     7791              /*xcpt?    */ false, false },
     7792          { { /*src2     */ { FP32_NORM_SAFE_INT_MAX(0), FP32_1(0),                 FP32_NORM_SAFE_INT_MAX(1), FP32_1(1),                 FP32_NORM_SAFE_INT_MIN(1), FP32_1(1),                 FP32_NORM_SAFE_INT_MIN(0), FP32_NORM_SAFE_INT_MAX(0) } },
     7793            { /*src1     */ { FP32_NORM_SAFE_INT_MAX(0), FP32_NORM_SAFE_INT_MIN(0), FP32_NORM_SAFE_INT_MAX(1), FP32_NORM_SAFE_INT_MAX(0), FP32_NORM_SAFE_INT_MIN(1), FP32_NORM_SAFE_INT_MIN(0), FP32_0(0),                 FP32_0(1)                 } },
     7794            { /* =>      */ { FP32_1(0),                 FP32_NORM_SAFE_INT_MIN(0), FP32_1(0),                 FP32_NORM_SAFE_INT_MAX(1), FP32_1(0),                 FP32_NORM_SAFE_INT_MIN(1), FP32_0(0),                 FP32_0(1)                 } },
     7795              /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_ZERO,
     7796              /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_ZERO,
     7797              /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_ZERO,
     7798              /*xcpt?    */ false, false },
     7799          { { /*src2     */ { FP32_NORM_MAX(0), FP32_1(0),        FP32_NORM_MAX(1), FP32_1(1),        FP32_NORM_MIN(0), FP32_NORM_MIN(0), FP32_1(0),        FP32_1(1)        } },
     7800            { /*src1     */ { FP32_NORM_MAX(0), FP32_NORM_MAX(1), FP32_NORM_MAX(1), FP32_NORM_MAX(0), FP32_NORM_MIN(0), FP32_NORM_MIN(1), FP32_NORM_MIN(1), FP32_NORM_MIN(0) } },
     7801            { /* =>      */ { FP32_1(0),        FP32_NORM_MAX(1), FP32_1(0),        FP32_NORM_MAX(1), FP32_1(0),        FP32_1(1),        FP32_NORM_MIN(1), FP32_NORM_MIN(1) } },
     7802              /*mxcsr:in */ 0,
     7803              /*128:out  */ 0,
     7804              /*256:out  */ 0,
     7805              /*xcpt?    */ false, false },
     7806    /** @todo More Normals. */
     7807   /*
     7808    * Denormals.
     7809    */
     7810 /*26|28*/{ { /*src2     */ { FP32_DENORM_MAX(0), FP32_DENORM_MAX(0), FP32_DENORM_MAX(1), FP32_DENORM_MAX(1), FP32_0(0),          FP32_0(0),          FP32_0(1),          FP32_0(1)          } },
     7811            { /*src1     */ { FP32_0(0),          FP32_0(1),          FP32_0(1),          FP32_0(0),          FP32_DENORM_MAX(0), FP32_DENORM_MAX(1), FP32_DENORM_MAX(0), FP32_DENORM_MAX(1) } },
     7812            { /* =>      */ { FP32_0(0),          FP32_0(1),          FP32_0(0),          FP32_0(1),          FP32_INF(0),        FP32_INF(1),        FP32_INF(1),        FP32_INF(0)          } },
     7813              /*mxcsr:in */ 0,
     7814              /*128:out  */ X86_MXCSR_DE,
     7815              /*256:out  */ X86_MXCSR_DE | X86_MXCSR_ZE,
     7816              /*xcpt?    */ true, true },
     7817          { { /*src2     */ { FP32_DENORM_MAX(0), FP32_DENORM_MAX(0), FP32_DENORM_MAX(1), FP32_DENORM_MAX(1), FP32_0(0),          FP32_0(0),          FP32_0(1),          FP32_0(1)          } },
     7818            { /*src1     */ { FP32_0(0),          FP32_0(1),          FP32_0(1),          FP32_0(0),          FP32_DENORM_MAX(0), FP32_DENORM_MAX(1), FP32_DENORM_MAX(0), FP32_DENORM_MAX(1) } },
     7819            { /* =>      */ { FP32_0(0),          FP32_0(1),          FP32_0(0),          FP32_0(1),          FP32_INF(0),        FP32_INF(1),        FP32_INF(1),        FP32_INF(0)        } },
     7820              /*mxcsr:in */ X86_MXCSR_XCPT_MASK,
     7821              /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DE,
     7822              /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DE | X86_MXCSR_ZE,
     7823              /*xcpt?    */ false, false },
     7824          { { /*src2     */ { FP32_DENORM_MAX(0), FP32_DENORM_MAX(0), FP32_DENORM_MAX(1), FP32_DENORM_MAX(1), FP32_1(0),          FP32_1(0),          FP32_1(1),          FP32_1(1)          } },
     7825            { /*src1     */ { FP32_DENORM_MAX(0), FP32_DENORM_MAX(1), FP32_DENORM_MAX(1), FP32_DENORM_MAX(0), FP32_DENORM_MAX(0), FP32_DENORM_MAX(1), FP32_DENORM_MAX(1), FP32_DENORM_MAX(0) } },
     7826            { /* =>      */ { FP32_1(0),          FP32_1(1),          FP32_1(0),          FP32_1(1),          FP32_DENORM_MAX(0), FP32_DENORM_MAX(1), FP32_DENORM_MAX(0), FP32_DENORM_MAX(1) } },
     7827              /*mxcsr:in */ X86_MXCSR_XCPT_MASK,
     7828              /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DE,
     7829              /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DE,
     7830              /*xcpt?    */ false, false },
     7831          { { /*src2     */ { FP32_DENORM_MAX(0), FP32_DENORM_MAX(0), FP32_DENORM_MAX(1), FP32_DENORM_MAX(1), FP32_0(0),          FP32_0(0),          FP32_0(1),          FP32_0(1)          } },
     7832            { /*src1     */ { FP32_0(0),          FP32_0(1),          FP32_0(1),          FP32_0(0),          FP32_DENORM_MAX(0), FP32_DENORM_MAX(1), FP32_DENORM_MAX(0), FP32_DENORM_MAX(1) } },
     7833            { /* =>      */ { FP32_QNAN(1),       FP32_QNAN(1),       FP32_QNAN(1),       FP32_QNAN(1),       FP32_QNAN(1),       FP32_QNAN(1),       FP32_QNAN(1),       FP32_QNAN(1)       } },
     7834              /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ,
     7835              /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_IE,
     7836              /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_IE,
     7837              /*xcpt?    */ false, false },
     7838          { { /*src2     */ { FP32_DENORM_MAX(0), FP32_DENORM_MAX(0), FP32_DENORM_MAX(1), FP32_DENORM_MAX(1), FP32_1(0),          FP32_1(0),          FP32_1(1),          FP32_1(1)          } },
     7839            { /*src1     */ { FP32_0(0),          FP32_0(1),          FP32_0(1),          FP32_0(0),          FP32_DENORM_MAX(0), FP32_DENORM_MAX(1), FP32_DENORM_MAX(0), FP32_DENORM_MAX(1) } },
     7840            { /* =>      */ { FP32_QNAN(1),       FP32_QNAN(1),       FP32_QNAN(1),       FP32_QNAN(1),       FP32_0(0),          FP32_0(1),          FP32_0(1),          FP32_0(0)          } },
     7841              /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ,
     7842              /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_IE,
     7843              /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_IE,
     7844              /*xcpt?    */ false, false },
     7845          { { /*src2     */ { FP32_DENORM_MIN(0), FP32_DENORM_MIN(0), FP32_DENORM_MIN(1), FP32_DENORM_MIN(1), FP32_0(0),          FP32_0(0),          FP32_0(1),          FP32_0(1)          } },
     7846            { /*src1     */ { FP32_0(0),          FP32_0(1),          FP32_0(1),          FP32_0(0),          FP32_DENORM_MIN(0), FP32_DENORM_MIN(1), FP32_DENORM_MIN(0), FP32_DENORM_MIN(1) } },
     7847            { /* =>      */ { FP32_0(0),          FP32_0(1),          FP32_0(0),          FP32_0(1),          FP32_QNAN(1),       FP32_QNAN(1),       FP32_QNAN(1),       FP32_QNAN(1)       } },
     7848              /*mxcsr:in */ 0,
     7849              /*128:out  */ X86_MXCSR_DE,
     7850              /*256:out  */ X86_MXCSR_DE | X86_MXCSR_ZE,
     7851              /*xcpt?    */ true, true },
     7852          { { /*src2     */ { FP32_DENORM_MIN(0), FP32_DENORM_MIN(0), FP32_DENORM_MIN(1), FP32_DENORM_MIN(1), FP32_0(0),          FP32_0(0),          FP32_0(1),          FP32_0(1)          } },
     7853            { /*src1     */ { FP32_0(0),          FP32_0(1),          FP32_0(1),          FP32_0(0),          FP32_DENORM_MIN(0), FP32_DENORM_MIN(1), FP32_DENORM_MIN(0), FP32_DENORM_MIN(1) } },
     7854            { /* =>      */ { FP32_0(0),          FP32_0(1),          FP32_0(0),          FP32_0(1),          FP32_INF(0),        FP32_INF(1),        FP32_INF(1),        FP32_INF(0)        } },
     7855              /*mxcsr:in */ X86_MXCSR_XCPT_MASK,
     7856              /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DE,
     7857              /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DE | X86_MXCSR_ZE,
     7858              /*xcpt?    */ false, false },
     7859          { { /*src2     */ { FP32_DENORM_MIN(0), FP32_DENORM_MIN(0), FP32_DENORM_MIN(1), FP32_DENORM_MIN(1), FP32_1(0),          FP32_1(0),          FP32_1(1),          FP32_1(1)          } },
     7860            { /* =>      */ { FP32_DENORM_MIN(0), FP32_DENORM_MIN(1), FP32_DENORM_MIN(1), FP32_DENORM_MIN(0), FP32_DENORM_MIN(0), FP32_DENORM_MIN(1), FP32_DENORM_MIN(1), FP32_DENORM_MIN(0) } },
     7861            { /*src1     */ { FP32_1(0),          FP32_1(1),          FP32_1(0),          FP32_1(1),          FP32_DENORM_MIN(0), FP32_DENORM_MIN(1), FP32_DENORM_MIN(0), FP32_DENORM_MIN(1) } },
     7862              /*mxcsr:in */ X86_MXCSR_XCPT_MASK,
     7863              /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DE,
     7864              /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DE,
     7865              /*xcpt?    */ false, false },
     7866          { { /*src2     */ { FP32_DENORM_MIN(0), FP32_DENORM_MIN(0), FP32_DENORM_MIN(1), FP32_DENORM_MIN(1), FP32_0(0),          FP32_0(0),          FP32_0(1),          FP32_0(1)          } },
     7867            { /*src1     */ { FP32_0(0),          FP32_0(1),          FP32_0(1),          FP32_0(0),          FP32_DENORM_MIN(0), FP32_DENORM_MIN(1), FP32_DENORM_MIN(0), FP32_DENORM_MIN(1) } },
     7868            { /* =>      */ { FP32_QNAN(1),       FP32_QNAN(1),       FP32_QNAN(1),       FP32_QNAN(1),       FP32_QNAN(1),       FP32_QNAN(1),       FP32_QNAN(1),       FP32_QNAN(1)       } },
     7869              /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ,
     7870              /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_IE,
     7871              /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_IE,
     7872              /*xcpt?    */ false, false },
     7873          { { /*src2     */ { FP32_1(0),          FP32_1(0),          FP32_1(1),          FP32_1(1),          FP32_DENORM_MIN(0), FP32_DENORM_MIN(0), FP32_DENORM_MIN(1), FP32_DENORM_MIN(1) } },
     7874            { /*src1     */ { FP32_DENORM_MIN(0), FP32_DENORM_MIN(1), FP32_DENORM_MIN(0), FP32_DENORM_MIN(1), FP32_0(0),          FP32_0(1),          FP32_0(1),          FP32_0(0)          } },
     7875            { /* =>      */ { FP32_0(0),          FP32_0(1),          FP32_0(1),          FP32_0(0),          FP32_QNAN(1),       FP32_QNAN(1),       FP32_QNAN(1),       FP32_QNAN(1)       } },
     7876              /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ,
     7877              /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ,
     7878              /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_IE,
     7879              /*xcpt?    */ false, false },
     7880          { { /*src2     */ { FP32_DENORM_MIN(0), FP32_DENORM_MAX(0), FP32_DENORM_MIN(0), FP32_DENORM_MAX(1), FP32_DENORM_MIN(0), FP32_DENORM_MAX(0), FP32_DENORM_MIN(1), FP32_DENORM_MAX(1) } },
     7881            { /*src1     */ { FP32_DENORM_MAX(0), FP32_DENORM_MIN(1), FP32_DENORM_MAX(1), FP32_DENORM_MIN(1), FP32_DENORM_MAX(0), FP32_DENORM_MIN(1), FP32_DENORM_MAX(0), FP32_DENORM_MIN(1) } },
     7882            { /* =>      */ { FP32_QNAN(1),       FP32_QNAN(1),       FP32_QNAN(1),       FP32_QNAN(1),       FP32_QNAN(1),       FP32_QNAN(1),       FP32_QNAN(1),       FP32_QNAN(1)       } },
     7883              /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_RC_UP,
     7884              /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_RC_UP | X86_MXCSR_IE,
     7885              /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_RC_UP | X86_MXCSR_IE,
     7886              /*xcpt?    */ false, false },
     7887          { { /*src2     */ { FP32_DENORM_MIN(0), FP32_DENORM_MAX(0), FP32_DENORM_MIN(0), FP32_DENORM_MAX(1), FP32_DENORM_MIN(0), FP32_DENORM_MAX(0), FP32_DENORM_MIN(1), FP32_DENORM_MAX(1) } },
     7888            { /*src1     */ { FP32_DENORM_MAX(0), FP32_DENORM_MIN(1), FP32_DENORM_MAX(1), FP32_DENORM_MIN(1), FP32_DENORM_MAX(0), FP32_DENORM_MIN(1), FP32_DENORM_MAX(0), FP32_DENORM_MIN(1) } },
     7889            { /* =>      */ { FP32_QNAN(1),       FP32_QNAN(1),       FP32_QNAN(1),       FP32_QNAN(1),       FP32_QNAN(1),       FP32_QNAN(1),       FP32_QNAN(1),       FP32_QNAN(1)       } },
     7890              /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_RC_DOWN,
     7891              /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_RC_DOWN | X86_MXCSR_IE,
     7892              /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_RC_DOWN | X86_MXCSR_IE,
     7893              /*xcpt?    */ false, false },
     7894          { { /*src2     */ { FP32_DENORM_MIN(0), FP32_DENORM_MAX(0), FP32_DENORM_MIN(0), FP32_DENORM_MAX(1), FP32_DENORM_MIN(0), FP32_DENORM_MAX(0), FP32_DENORM_MIN(1), FP32_DENORM_MAX(1) } },
     7895            { /*src1     */ { FP32_DENORM_MAX(0), FP32_DENORM_MIN(1), FP32_DENORM_MAX(1), FP32_DENORM_MIN(1), FP32_DENORM_MAX(0), FP32_DENORM_MIN(1), FP32_DENORM_MAX(0), FP32_DENORM_MIN(1) } },
     7896            { /* =>      */ { FP32_QNAN(1),       FP32_QNAN(1),       FP32_QNAN(1),       FP32_QNAN(1),       FP32_QNAN(1),       FP32_QNAN(1),       FP32_QNAN(1),       FP32_QNAN(1)       } },
     7897              /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_RC_ZERO,
     7898              /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_RC_ZERO | X86_MXCSR_IE,
     7899              /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_RC_ZERO | X86_MXCSR_IE,
     7900              /*xcpt?    */ false, false },
     7901          { { /*src2     */ { FP32_DENORM_MIN(0), FP32_DENORM_MAX(0), FP32_DENORM_MIN(0), FP32_DENORM_MAX(1), FP32_DENORM_MIN(0), FP32_DENORM_MAX(0), FP32_DENORM_MIN(1), FP32_DENORM_MAX(1) } },
     7902            { /*src1     */ { FP32_DENORM_MAX(0), FP32_DENORM_MIN(1), FP32_DENORM_MAX(1), FP32_DENORM_MIN(1), FP32_DENORM_MAX(0), FP32_DENORM_MIN(1), FP32_DENORM_MAX(0), FP32_DENORM_MIN(1) } },
     7903            { /* =>      */ { FP32_QNAN(1),       FP32_QNAN(1),       FP32_QNAN(1),       FP32_QNAN(1),       FP32_QNAN(1),       FP32_QNAN(1),       FP32_QNAN(1),       FP32_QNAN(1)       } },
     7904              /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_FZ,
     7905              /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_IE,
     7906              /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_IE,
     7907              /*xcpt?    */ false, false },
     7908    /** @todo More Denormals. */
     7909    /*
     7910     * Invalids.
     7911     */
     7912 /*40|42*/ FP32_TABLE_D1_PS_INVALIDS
     7913    /** @todo Underflow, Precision; Rounding; FZ etc. */
     7914    };
     7915
     7916#define PASS_s_aValues RT_ELEMENTS(s_aValues), (BS3CPUINSTR4_TEST1_VALUES_T *)s_aValues
     7917    static BS3CPUINSTR4_TEST1_T const s_aTests16[] =
     7918    {
     7919        { bs3CpuInstr4_divps_XMM1_XMM2_icebp_c16,  255, RM_REG, T_SSE, 1, 1, 2,   PASS_s_aValues },
     7920        { bs3CpuInstr4_divps_XMM1_FSxBX_icebp_c16, 255, RM_MEM, T_SSE, 1, 1, 255, PASS_s_aValues },
     7921
     7922        { bs3CpuInstr4_vdivps_XMM1_XMM2_XMM3_icebp_c16,  255, RM_REG, T_AVX_128, 1, 2, 3,   PASS_s_aValues },
     7923        { bs3CpuInstr4_vdivps_XMM1_XMM2_FSxBX_icebp_c16, 255, RM_MEM, T_AVX_128, 1, 2, 255, PASS_s_aValues },
     7924
     7925        { bs3CpuInstr4_vdivps_YMM1_YMM2_YMM3_icebp_c16,  255, RM_REG, T_AVX_256, 1, 2, 3,   PASS_s_aValues },
     7926        { bs3CpuInstr4_vdivps_YMM1_YMM2_FSxBX_icebp_c16, 255, RM_MEM, T_AVX_256, 1, 2, 255, PASS_s_aValues },
     7927    };
     7928    static BS3CPUINSTR4_TEST1_T const s_aTests32[] =
     7929    {
     7930        { bs3CpuInstr4_divps_XMM1_XMM2_icebp_c32,  255, RM_REG, T_SSE, 1, 1, 2,   PASS_s_aValues },
     7931        { bs3CpuInstr4_divps_XMM1_FSxBX_icebp_c32, 255, RM_MEM, T_SSE, 1, 1, 255, PASS_s_aValues },
     7932
     7933        { bs3CpuInstr4_vdivps_XMM1_XMM2_XMM3_icebp_c32,  255, RM_REG, T_AVX_128, 1, 2, 3,   PASS_s_aValues },
     7934        { bs3CpuInstr4_vdivps_XMM1_XMM2_FSxBX_icebp_c32, 255, RM_MEM, T_AVX_128, 1, 2, 255, PASS_s_aValues },
     7935
     7936        { bs3CpuInstr4_vdivps_YMM1_YMM2_YMM3_icebp_c32,  255, RM_REG, T_AVX_256, 1, 2, 3,   PASS_s_aValues },
     7937        { bs3CpuInstr4_vdivps_YMM1_YMM2_FSxBX_icebp_c32, 255, RM_MEM, T_AVX_256, 1, 2, 255, PASS_s_aValues },
     7938    };
     7939    static BS3CPUINSTR4_TEST1_T const s_aTests64[] =
     7940    {
     7941        { bs3CpuInstr4_divps_XMM1_XMM2_icebp_c64,  255, RM_REG, T_SSE, 1, 1, 2,   PASS_s_aValues },
     7942        { bs3CpuInstr4_divps_XMM1_FSxBX_icebp_c64, 255, RM_MEM, T_SSE, 1, 1, 255, PASS_s_aValues },
     7943
     7944        { bs3CpuInstr4_vdivps_XMM1_XMM2_XMM3_icebp_c64,  255, RM_REG, T_AVX_128, 1, 2, 3,   PASS_s_aValues },
     7945        { bs3CpuInstr4_vdivps_XMM1_XMM2_FSxBX_icebp_c64, 255, RM_MEM, T_AVX_128, 1, 2, 255, PASS_s_aValues },
     7946
     7947        { bs3CpuInstr4_vdivps_YMM1_YMM2_YMM3_icebp_c64,  255, RM_REG, T_AVX_256, 1, 2, 3,   PASS_s_aValues },
     7948        { bs3CpuInstr4_vdivps_YMM1_YMM2_FSxBX_icebp_c64, 255, RM_MEM, T_AVX_256, 1, 2, 255, PASS_s_aValues },
     7949
     7950        { bs3CpuInstr4_divps_XMM8_XMM9_icebp_c64,  255, RM_REG, T_SSE, 8, 8, 9,   PASS_s_aValues },
     7951        { bs3CpuInstr4_divps_XMM8_FSxBX_icebp_c64, 255, RM_MEM, T_SSE, 8, 8, 255, PASS_s_aValues },
     7952
     7953        { bs3CpuInstr4_vdivps_XMM8_XMM9_XMM10_icebp_c64, 255, RM_REG, T_AVX_128, 8, 9, 10,  PASS_s_aValues },
     7954        { bs3CpuInstr4_vdivps_XMM8_XMM9_FSxBX_icebp_c64, 255, RM_MEM, T_AVX_128, 8, 9, 255, PASS_s_aValues },
     7955        { bs3CpuInstr4_vdivps_YMM8_YMM9_YMM10_icebp_c64, 255, RM_REG, T_AVX_256, 8, 9, 10,  PASS_s_aValues },
     7956        { bs3CpuInstr4_vdivps_YMM8_YMM9_FSxBX_icebp_c64, 255, RM_MEM, T_AVX_256, 8, 9, 255, PASS_s_aValues },
     7957    };
     7958#undef PASS_s_aValues
     7959
     7960    static BS3CPUINSTR4_TEST1_MODE_T const s_aTests[3] = BS3CPUINSTR4_TEST1_MODES_INIT(s_aTests16, s_aTests32, s_aTests64);
     7961    unsigned const                         iTest       = BS3CPUINSTR4_TEST_MODES_INDEX(bMode);
     7962    return bs3CpuInstr4_WorkerTestType1(bMode, s_aTests[iTest].paTests, s_aTests[iTest].cTests,
     7963                                        g_aXcptConfig2, RT_ELEMENTS(g_aXcptConfig2));
     7964}
     7965
     7966
     7967/*
    75867968 * [V]DIVSS.
    75877969 */
     
    82378619
    82388620/*
    8239  * [V]DIVPS.
    8240  */
    8241 BS3_DECL_FAR(uint8_t) bs3CpuInstr4_v_divps(uint8_t bMode)
    8242 {
    8243     static BS3CPUINSTR4_TEST1_VALUES_PS_T const s_aValues[] =
    8244     {
    8245     /** @todo Improve port from mulps */
    8246     /*
    8247      * Zero.
    8248      */
    8249     /* 0*/{ { /*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) } },
    8250             { /*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) } },
    8251             { /* =>      */ { FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1) } },
    8252              /*mxcsr:in */ X86_MXCSR_XCPT_MASK,
    8253              /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_IE,
    8254              /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_IE,
    8255              /*xcpt?    */ false, false },
    8256           { { /*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) } },
    8257             { /*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) } },
    8258             { /* =>      */ { FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1) } },
    8259               /*mxcsr:in */ 0,
    8260               /*128:out  */ X86_MXCSR_IE,
    8261               /*256:out  */ X86_MXCSR_IE,
    8262               /*xcpt?    */ true, true },
    8263           { { /*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) } },
    8264             { /*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) } },
    8265             { /* =>      */ { FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1) } },
    8266               /*mxcsr:in */ X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_UP,
    8267               /*128:out  */ X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_UP | X86_MXCSR_IE,
    8268               /*256:out  */ X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_UP | X86_MXCSR_IE,
    8269               /*xcpt?    */ true, true },
    8270           { { /*src2     */ { FP32_0(1), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(1) } },
    8271             { /*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) } },
    8272             { /* =>      */ { FP32_QNAN(1), FP32_QNAN(0), FP32_QNAN(0), FP32_QNAN(0), FP32_QNAN(0), FP32_QNAN(0), FP32_QNAN(0), FP32_QNAN(1) } },
    8273               /*mxcsr:in */ X86_MXCSR_DAZ | X86_MXCSR_RC_ZERO,
    8274               /*128:out  */ X86_MXCSR_DAZ | X86_MXCSR_RC_ZERO | X86_MXCSR_IE,
    8275               /*256:out  */ X86_MXCSR_DAZ | X86_MXCSR_RC_ZERO | X86_MXCSR_IE,
    8276               /*xcpt?    */ true, true },
    8277           { { /*src2     */ { FP32_0(0), FP32_0(0), FP32_0(1), FP32_0(0), FP32_0(1), FP32_0(0), FP32_0(1), FP32_0(1) } },
    8278             { /*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) } },
    8279             { /* =>      */ { FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1) } },
    8280               /*mxcsr:in */ X86_MXCSR_FZ | X86_MXCSR_RC_ZERO,
    8281               /*128:out  */ X86_MXCSR_FZ | X86_MXCSR_RC_ZERO | X86_MXCSR_IE,
    8282               /*256:out  */ X86_MXCSR_FZ | X86_MXCSR_RC_ZERO | X86_MXCSR_IE,
    8283               /*xcpt?    */ true, true },
    8284           { { /*src2     */ { FP32_0(0), FP32_0(1), FP32_0(0), FP32_0(1), FP32_0(0), FP32_0(1), FP32_0(0), FP32_0(1) } },
    8285             { /*src1     */ { FP32_0(0), FP32_0(1), FP32_0(1), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(1), FP32_0(0) } },
    8286             { /* =>      */ { FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1) } },
    8287               /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_RC_ZERO,
    8288               /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_RC_ZERO | X86_MXCSR_IE,
    8289               /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_RC_ZERO | X86_MXCSR_IE,
    8290               /*xcpt?    */ false, false },
    8291           { { /*src2     */ { FP32_NORM_V0(0), FP32_NORM_V1(1), FP32_0(0),       FP32_NORM_V3(1), FP32_0(0), FP32_NORM_V1(1), FP32_NORM_V4(0), FP32_NORM_V3(0) } },
    8292             { /*src1     */ { FP32_0(0),       FP32_0(1),       FP32_0(1),       FP32_0(0),       FP32_0(0), FP32_0(0),       FP32_0(0),       FP32_0(1)       } },
    8293             { /* =>      */ { FP32_0(0),       FP32_0(0),       FP32_QNAN(1),    FP32_0(1),       FP32_QNAN(1), FP32_0(1),    FP32_0(0),       FP32_0(1)       } },
    8294               /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_DOWN,
    8295               /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_DOWN | X86_MXCSR_IE,
    8296               /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_DOWN | X86_MXCSR_IE,
    8297               /*xcpt?    */ false, false },
    8298     /*
    8299      * Infinity.
    8300      */
    8301     /* 7*/{ { /*src2     */ { FP32_INF(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0) } },
    8302             { /*src1     */ { FP32_INF(1), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0) } },
    8303             { /* =>      */ { FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1) } },
    8304               /*mxcsr:in */ X86_MXCSR_XCPT_MASK & ~X86_MXCSR_IM,
    8305               /*128:out  */ (X86_MXCSR_XCPT_MASK & ~X86_MXCSR_IM) | X86_MXCSR_IE,
    8306               /*256:out  */ (X86_MXCSR_XCPT_MASK & ~X86_MXCSR_IM) | X86_MXCSR_IE,
    8307               /*xcpt?    */ true, true },
    8308           { { /*src2     */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_INF(1), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0) } },
    8309             { /*src1     */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_INF(1), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0) } },
    8310             { /* =>      */ { FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1) } },
    8311               /*mxcsr:in */ X86_MXCSR_XCPT_MASK,
    8312               /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_IE,
    8313               /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_IE,
    8314               /*xcpt?    */ false, false },
    8315           { { /*src2     */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_INF(0), FP32_0(1), FP32_0(1), FP32_0(0) } },
    8316             { /*src1     */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_INF(1), FP32_0(0), FP32_0(0), FP32_0(0) } },
    8317             { /* =>      */ { FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1) } },
    8318               /*mxcsr:in */ X86_MXCSR_FZ | X86_MXCSR_XCPT_MASK,
    8319               /*128:out  */ X86_MXCSR_FZ | X86_MXCSR_XCPT_MASK | X86_MXCSR_IE,
    8320               /*256:out  */ X86_MXCSR_FZ | X86_MXCSR_XCPT_MASK | X86_MXCSR_IE,
    8321               /*xcpt?    */ false, false },
    8322           { { /*src2     */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_INF(0)  } },
    8323             { /*src1     */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_INF(1) } },
    8324             { /* =>      */ { FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1)  } },
    8325               /*mxcsr:in */ X86_MXCSR_FZ,
    8326               /*128:out  */ X86_MXCSR_FZ | X86_MXCSR_IE,
    8327               /*256:out  */ X86_MXCSR_FZ | X86_MXCSR_IE,
    8328               /*xcpt?    */ true, true },
    8329           { { /*src2     */ { FP32_INF(0), FP32_INF(1), FP32_0(0), FP32_INF(1), FP32_0(1), FP32_INF(1), FP32_INF(1), FP32_INF(0) } },
    8330             { /*src1     */ { FP32_INF(1), FP32_INF(1), FP32_0(1), FP32_INF(1), FP32_0(1), FP32_INF(1), FP32_INF(1), FP32_INF(1) } },
    8331             { /* =>      */ { FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1) } },
    8332               /*mxcsr:in */ X86_MXCSR_FZ | X86_MXCSR_RC_ZERO,
    8333               /*128:out  */ X86_MXCSR_FZ | X86_MXCSR_RC_ZERO | X86_MXCSR_IE,
    8334               /*256:out  */ X86_MXCSR_FZ | X86_MXCSR_RC_ZERO | X86_MXCSR_IE,
    8335               /*xcpt?    */ true, true },
    8336           { { /*src2     */ { FP32_INF(0),  FP32_INF(1),  FP32_QNAN(0), FP32_QNAN(1), FP32_INF(0),  FP32_QNAN(1), FP32_QNAN(0), FP32_INF(1)  } },
    8337             { /*src1     */ { FP32_QNAN(0), FP32_QNAN(0), FP32_INF(1),  FP32_INF(1),  FP32_QNAN(1), FP32_INF(0),  FP32_INF(0),  FP32_QNAN(1) } },
    8338             { /* =>      */ { FP32_QNAN(0), FP32_QNAN(0), FP32_QNAN(0), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(0), FP32_QNAN(1)  } },
    8339               /*mxcsr:in */ X86_MXCSR_XCPT_MASK,
    8340               /*128:out  */ X86_MXCSR_XCPT_MASK,
    8341               /*256:out  */ X86_MXCSR_XCPT_MASK,
    8342               /*xcpt?    */ false, false },
    8343           { { /*src2     */ { FP32_INF(0),  FP32_INF(1),  FP32_QNAN(0), FP32_QNAN(1), FP32_INF(0),  FP32_QNAN(1), FP32_QNAN(0), FP32_INF(1)  } },
    8344             { /*src1     */ { FP32_QNAN(0), FP32_QNAN(0), FP32_INF(1),  FP32_INF(1),  FP32_QNAN(1), FP32_INF(0),  FP32_INF(0),  FP32_QNAN(1) } },
    8345             { /* =>      */ { FP32_QNAN(0), FP32_QNAN(0), FP32_QNAN(0), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(0), FP32_QNAN(1)  } },
    8346               /*mxcsr:in */ X86_MXCSR_DAZ,
    8347               /*128:out  */ X86_MXCSR_DAZ,
    8348               /*256:out  */ X86_MXCSR_DAZ,
    8349               /*xcpt?    */ false, false },
    8350     /*
    8351      * Overflow, Precision.
    8352      */
    8353 #ifdef TODO_X86_MXCSR_PE /** @todo THIS FAILS ON IEM: X86_MXCSR_PE not set in 256:out */
    8354  /*--|14*/{ { /*src2     */ { FP32_1(0), FP32_1(1), FP32_1(0), FP32_1(0), FP32_NORM_MAX(1), FP32_1(0), FP32_NORM_MAX(1),  FP32_2(0)        } },
    8355             { /*src1     */ { FP32_0(0), FP32_1(0), FP32_0(0), FP32_1(0), FP32_0(0),        FP32_1(0), FP32_2(0),         FP32_NORM_MAX(0) } },
    8356             { /* =>      */ { FP32_0(0), FP32_1(1), FP32_0(0), FP32_1(0), FP32_0(1),        FP32_1(0), FP32_2(0),         FP32_NORM_MAX(0) } },
    8357               /*mxcsr:in */ 0,
    8358               /*128:out  */ 0,
    8359               /*256:out  */ X86_MXCSR_UE | X86_MXCSR_PE,
    8360               /*xcpt?    */ false, true },
    8361 #endif /* TODO_X86_MXCSR_PE */
    8362  /*14|15*/{ { /*src2     */ { FP32_V(0,0,0x7e)/*0.50*/, FP32_1(1), FP32_1(0), FP32_1(0), FP32_NORM_MAX(1), FP32_1(0), FP32_NORM_MAX(1),     FP32_NORM_MAX(0) } },
    8363             { /*src1     */ { FP32_NORM_MAX(0),         FP32_1(0), FP32_0(0), FP32_1(0), FP32_0(0),        FP32_1(0), FP32_1(0),            FP32_0(0)        } },
    8364             { /* =>      */ { FP32_INF(0),              FP32_1(1), FP32_0(0), FP32_1(0), FP32_0(1),        FP32_1(0), FP32_V(1,0x200000,0), FP32_0(0)        } },
    8365               /*mxcsr:in */ X86_MXCSR_XCPT_MASK,
    8366               /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_OE | X86_MXCSR_PE,
    8367               /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_OE | X86_MXCSR_PE | X86_MXCSR_UE,
    8368               /*xcpt?    */ false, false },
    8369 #ifdef TODO_X86_MXCSR_PE /** @todo THIS FAILS ON IEM: X86_MXCSR_PE not set in 256:out */
    8370  /*--|16*/{ { /*src2     */ { FP32_V(0,0,0x7e)/*0.50*/, FP32_1(1), FP32_1(0), FP32_1(0), FP32_NORM_MAX(1), FP32_1(0), FP32_NORM_MAX(1),     FP32_NORM_MAX(0) } },
    8371             { /*src1     */ { FP32_NORM_MAX(0),         FP32_1(0), FP32_0(0), FP32_1(0), FP32_0(0),        FP32_1(0), FP32_1(0),            FP32_0(0)        } },
    8372             { /* =>      */ { FP32_INF(0),              FP32_1(1), FP32_0(0), FP32_1(0), FP32_0(1),        FP32_1(0), FP32_V(1,0x200000,0), FP32_0(0)        } },
    8373               /*mxcsr:in */ 0,
    8374               /*128:out  */ X86_MXCSR_OE,
    8375               /*256:out  */ X86_MXCSR_OE | X86_MXCSR_PE | X86_MXCSR_UE,
    8376               /*xcpt?    */ true, true },
    8377 #endif /* TODO_X86_MXCSR_PE */
    8378  /*15|17*/{ { /*src2     */ { FP32_V(0,0,0x7e)/*0.50*/, FP32_1(1), FP32_1(0), FP32_1(0), FP32_NORM_MAX(1), FP32_1(0), FP32_NORM_MAX(1),     FP32_NORM_MAX(0) } },
    8379             { /*src1     */ { FP32_NORM_MAX(0),         FP32_1(0), FP32_0(0), FP32_1(0), FP32_0(0),        FP32_1(0), FP32_1(0),            FP32_0(0)        } },
    8380             { /* =>      */ { FP32_INF(0),              FP32_1(1), FP32_0(0), FP32_1(0), FP32_0(1),        FP32_1(0), FP32_V(1,0x200000,0), FP32_0(0)        } },
    8381               /*mxcsr:in */ X86_MXCSR_OM,
    8382               /*128:out  */ X86_MXCSR_OM | X86_MXCSR_OE | X86_MXCSR_PE,
    8383               /*256:out  */ X86_MXCSR_OM | X86_MXCSR_OE | X86_MXCSR_PE | X86_MXCSR_UE,
    8384               /*xcpt?    */ true, true },
    8385           { { /*src2     */ { FP32_NORM_MAX(0), FP32_NORM_MIN(0), FP32_1(0), FP32_1(0), FP32_NORM_MAX(0), FP32_1(1), FP32_1(0), FP32_NORM_MIN(0) } },
    8386             { /*src1     */ { FP32_NORM_MIN(0), FP32_NORM_MAX(1), FP32_1(0), FP32_1(0), FP32_NORM_MIN(1), FP32_1(0), FP32_1(1), FP32_NORM_MAX(0) } },
    8387             { /* =>      */ { FP32_0(0),        FP32_NORM_MAX(1), FP32_1(0), FP32_1(0), FP32_0(1),        FP32_1(1), FP32_1(1), FP32_NORM_MAX(0) } },
    8388               /*mxcsr:in */ X86_MXCSR_OM | X86_MXCSR_PM | X86_MXCSR_UM | X86_MXCSR_RC_ZERO,
    8389               /*128:out  */ X86_MXCSR_OM | X86_MXCSR_PM | X86_MXCSR_UM | X86_MXCSR_RC_ZERO | X86_MXCSR_OE | X86_MXCSR_PE | X86_MXCSR_UE,
    8390               /*256:out  */ X86_MXCSR_OM | X86_MXCSR_PM | X86_MXCSR_UM | X86_MXCSR_RC_ZERO | X86_MXCSR_OE | X86_MXCSR_PE | X86_MXCSR_UE,
    8391               /*xcpt?    */ false, false },
    8392           { { /*src2     */ { FP32_NORM_MAX(0), FP32_NORM_MIN(1), FP32_NORM_V1(0), FP32_NORM_MAX(0), FP32_NORM_MAX(1), FP32_NORM_MIN(0), FP32_NORM_MIN(1), FP32_NORM_MAX(0) } },
    8393             { /*src1     */ { FP32_INF(0),      FP32_0(0),        FP32_NORM_V1(0), FP32_INF(0),      FP32_INF(0),      FP32_0(1),        FP32_0(1),        FP32_INF(1)      } },
    8394             { /* =>      */ { FP32_INF(0),      FP32_0(1),        FP32_1(0),       FP32_INF(0),      FP32_INF(1),      FP32_0(1),        FP32_0(0),        FP32_INF(1)      } },
    8395               /*mxcsr:in */ X86_MXCSR_OM | X86_MXCSR_UM | X86_MXCSR_PM,
    8396               /*128:out  */ X86_MXCSR_OM | X86_MXCSR_UM | X86_MXCSR_PM,
    8397               /*256:out  */ X86_MXCSR_OM | X86_MXCSR_UM | X86_MXCSR_PM,
    8398               /*xcpt?    */ false, false },
    8399           { { /*src2     */ { FP32_NORM_MAX(0), FP32_NORM_MIN(0), FP32_NORM_V3(0), FP32_NORM_MAX(0), FP32_NORM_MAX(1), FP32_NORM_MIN(0), FP32_NORM_MIN(1), FP32_NORM_MAX(0) } },
    8400             { /*src1     */ { FP32_NORM_MAX(0), FP32_0(1),        FP32_0(0),       FP32_NORM_MAX(0), FP32_NORM_MAX(0), FP32_0(1),        FP32_0(1),        FP32_INF(1)      } },
    8401             { /* =>      */ { FP32_1(0),        FP32_0(1),        FP32_0(0),       FP32_1(0),        FP32_1(1),        FP32_0(1),        FP32_0(0),        FP32_INF(1)      } },
    8402               /*mxcsr:in */ X86_MXCSR_OM | X86_MXCSR_UM | X86_MXCSR_PM | X86_MXCSR_FZ | X86_MXCSR_RC_DOWN,
    8403               /*128:out  */ X86_MXCSR_OM | X86_MXCSR_UM | X86_MXCSR_PM | X86_MXCSR_FZ | X86_MXCSR_RC_DOWN,
    8404               /*256:out  */ X86_MXCSR_OM | X86_MXCSR_UM | X86_MXCSR_PM | X86_MXCSR_FZ | X86_MXCSR_RC_DOWN,
    8405               /*xcpt?    */ false, false },
    8406           { { /*src2     */ { FP32_NORM_MIN(1), FP32_NORM_MAX(0), FP32_NORM_MAX(0), FP32_2(0), FP32_1(1), FP32_NORM_MAX(0), FP32_NORM_MAX(0), FP32_NORM_MIN(1) } },
    8407             { /*src1     */ { FP32_0(0),        FP32_NORM_MAX(0), FP32_INF(1),      FP32_2(1), FP32_2(0), FP32_INF(1),      FP32_NORM_MAX(0), FP32_0(0)        } },
    8408             { /* =>      */ { FP32_0(1),        FP32_1(0),        FP32_INF(1),      FP32_1(1), FP32_2(1), FP32_INF(1),      FP32_1(0),        FP32_0(1)        } },
    8409               /*mxcsr:in */ X86_MXCSR_OM | X86_MXCSR_UM | X86_MXCSR_PM | X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_DOWN,
    8410               /*128:out  */ X86_MXCSR_OM | X86_MXCSR_UM | X86_MXCSR_PM | X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_DOWN,
    8411               /*256:out  */ X86_MXCSR_OM | X86_MXCSR_UM | X86_MXCSR_PM | X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_DOWN,
    8412               /*xcpt?    */ false, false },
    8413           { { /*src2     */ { FP32_1(0),       FP32_NORM_V2(1), FP32_1(1),       FP32_NORM_V6(0), FP32_NORM_MAX(0), FP32_NORM_MAX(1), FP32_NORM_MAX(1), FP32_NORM_MAX(0) } },
    8414             { /*src1     */ { FP32_NORM_V7(0), FP32_NORM_V2(0), FP32_NORM_V4(1), FP32_NORM_V6(1), FP32_INF(0),      FP32_INF(0),      FP32_INF(0),      FP32_INF(0)      } },
    8415             { /* =>      */ { FP32_NORM_V7(0), FP32_1(1),       FP32_NORM_V4(0), FP32_1(1),       FP32_INF(0),      FP32_INF(1),      FP32_INF(1),      FP32_INF(0)      } },
    8416               /*mxcsr:in */ X86_MXCSR_DAZ | X86_MXCSR_FZ,
    8417               /*128:out  */ X86_MXCSR_DAZ | X86_MXCSR_FZ,
    8418               /*256:out  */ X86_MXCSR_DAZ | X86_MXCSR_FZ,
    8419               /*xcpt?    */ false, false },
    8420           { { /*src2     */ { FP32_1(0),       FP32_NORM_V2(1), FP32_1(1),       FP32_NORM_V6(0), FP32_NORM_MAX(0), FP32_NORM_MAX(1), FP32_NORM_MAX(1), FP32_NORM_MAX(0) } },
    8421             { /*src1     */ { FP32_NORM_V7(0), FP32_NORM_V2(0), FP32_NORM_V4(1), FP32_NORM_V6(1), FP32_INF(0),      FP32_INF(0),      FP32_INF(0),      FP32_INF(0)      } },
    8422             { /* =>      */ { FP32_NORM_V7(0), FP32_1(1),       FP32_NORM_V4(0), FP32_1(1),       FP32_INF(0),      FP32_INF(1),      FP32_INF(1),      FP32_INF(0)      } },
    8423               /*mxcsr:in */ X86_MXCSR_OM | X86_MXCSR_PM | X86_MXCSR_DAZ | X86_MXCSR_FZ,
    8424               /*128:out  */ X86_MXCSR_OM | X86_MXCSR_PM | X86_MXCSR_DAZ | X86_MXCSR_FZ,
    8425               /*256:out  */ X86_MXCSR_OM | X86_MXCSR_PM | X86_MXCSR_DAZ | X86_MXCSR_FZ,
    8426               /*xcpt?    */ false, false },
    8427     /** @todo More Overflow/Precision. */
    8428     /*
    8429      * Normals.
    8430      */
    8431  /*22|24*/{ { /*src2     */ { FP32_V(0, 0x600000, 0x7f)/*1.7500*/, FP32_NORM_V0(0), FP32_NORM_V1(0), FP32_NORM_V2(1), FP32_1(1),       FP32_1(0),       FP32_1(1),       FP32_NORM_V6(1) } },
    8432             { /*src1     */ { FP32_V(0, 0x600000, 0x7d)/*0.4375*/, FP32_NORM_V0(0), FP32_NORM_V1(1), FP32_0(1),       FP32_NORM_V0(0), FP32_NORM_V3(0), FP32_NORM_V4(1), FP32_NORM_V6(1) } },
    8433             { /* =>      */ { FP32_V(0, 0,        0x7d)/*0.2500*/, FP32_1(0),       FP32_1(1),       FP32_0(0),       FP32_NORM_V0(1), FP32_NORM_V3(0), FP32_NORM_V4(0), FP32_1(0)       } },
    8434               /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_DOWN,
    8435               /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_DOWN,
    8436               /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_DOWN,
    8437               /*xcpt?    */ false, false },
    8438           { { /*src2     */ { FP32_V(0, 0x61e000, 0x89)/*   1807*/, FP32_V(0, 0x61e000, 0x89)/*   1807*/, FP32_V(0, 0x4a30b8, 0x8f)/* 103521.4375*/, FP32_V(0, 0x1a5200, 0x8c)/*     9876.5*/, FP32_V(0, 0x23b6a0, 0x8e)/*41910.625000*/, FP32_V(0, 0x23b6a0, 0x8e)/*41910.625000*/, FP32_V(0, 0,        0x7d)/*0.2500*/, FP32_V(0, 0x504000, 0x8a)/*    3332*/ } },
    8439             { /*src1     */ { FP32_V(0, 0x37be78, 0x95)/*6020924*/, FP32_V(0, 0x37be78, 0x95)/*6020924*/, FP32_V(0, 0x30eaa1, 0x93)/*1449300.1250*/, FP32_V(1, 0x39f7d1, 0x96)/*-12187601.0*/, FP32_V(0, 0x23b6a0, 0x8b)/* 5238.828125*/, FP32_V(0, 0x23b6a0, 0x8b)/* 5238.828125*/, FP32_V(0, 0x600000, 0x7d)/*0.4375*/, FP32_V(1, 0x37be78, 0x95)/*-6020924*/ } },
    8440             { /* =>      */ { FP32_V(0, 0x504000, 0x8a)/*   3332*/, FP32_V(0, 0x504000, 0x8a)/*   3332*/, FP32_V(0, 0x600000, 0x82)/*     14.0000*/, FP32_V(1, 0x1a4000, 0x89)/*    -1234.0*/, FP32_V(0, 0,        0x7c)/*    0.125000*/, FP32_V(0, 0,        0x7c)/*    0.125000*/, FP32_V(0, 0x600000, 0x7f)/*1.7500*/, FP32_V(1, 0x61e000, 0x89)/*   -1807*/ } },
    8441               /*mxcsr:in */ X86_MXCSR_XCPT_MASK,
    8442               /*128:out  */ X86_MXCSR_XCPT_MASK,
    8443               /*256:out  */ X86_MXCSR_XCPT_MASK,
    8444               /*xcpt?    */ false, false },
    8445           { { /*src2     */ { FP32_NORM_SAFE_INT_MAX(0), FP32_1(0),                 FP32_NORM_SAFE_INT_MAX(1), FP32_1(1),                 FP32_NORM_SAFE_INT_MIN(1), FP32_1(1),                 FP32_NORM_SAFE_INT_MIN(0), FP32_NORM_SAFE_INT_MAX(0) } },
    8446             { /*src1     */ { FP32_NORM_SAFE_INT_MAX(0), FP32_NORM_SAFE_INT_MIN(0), FP32_NORM_SAFE_INT_MAX(1), FP32_NORM_SAFE_INT_MAX(0), FP32_NORM_SAFE_INT_MIN(1), FP32_NORM_SAFE_INT_MIN(0), FP32_0(0),                 FP32_0(1)                 } },
    8447             { /* =>      */ { FP32_1(0),                 FP32_NORM_SAFE_INT_MIN(0), FP32_1(0),                 FP32_NORM_SAFE_INT_MAX(1), FP32_1(0),                 FP32_NORM_SAFE_INT_MIN(1), FP32_0(0),                 FP32_0(1)                 } },
    8448               /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_ZERO,
    8449               /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_ZERO,
    8450               /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_ZERO,
    8451               /*xcpt?    */ false, false },
    8452           { { /*src2     */ { FP32_NORM_MAX(0), FP32_1(0),        FP32_NORM_MAX(1), FP32_1(1),        FP32_NORM_MIN(0), FP32_NORM_MIN(0), FP32_1(0),        FP32_1(1)        } },
    8453             { /*src1     */ { FP32_NORM_MAX(0), FP32_NORM_MAX(1), FP32_NORM_MAX(1), FP32_NORM_MAX(0), FP32_NORM_MIN(0), FP32_NORM_MIN(1), FP32_NORM_MIN(1), FP32_NORM_MIN(0) } },
    8454             { /* =>      */ { FP32_1(0),        FP32_NORM_MAX(1), FP32_1(0),        FP32_NORM_MAX(1), FP32_1(0),        FP32_1(1),        FP32_NORM_MIN(1), FP32_NORM_MIN(1) } },
    8455               /*mxcsr:in */ 0,
    8456               /*128:out  */ 0,
    8457               /*256:out  */ 0,
    8458               /*xcpt?    */ false, false },
    8459     /** @todo More Normals. */
    8460    /*
    8461     * Denormals.
    8462     */
    8463  /*26|28*/{ { /*src2     */ { FP32_DENORM_MAX(0), FP32_DENORM_MAX(0), FP32_DENORM_MAX(1), FP32_DENORM_MAX(1), FP32_0(0),          FP32_0(0),          FP32_0(1),          FP32_0(1)          } },
    8464             { /*src1     */ { FP32_0(0),          FP32_0(1),          FP32_0(1),          FP32_0(0),          FP32_DENORM_MAX(0), FP32_DENORM_MAX(1), FP32_DENORM_MAX(0), FP32_DENORM_MAX(1) } },
    8465             { /* =>      */ { FP32_0(0),          FP32_0(1),          FP32_0(0),          FP32_0(1),          FP32_INF(0),        FP32_INF(1),        FP32_INF(1),        FP32_INF(0)          } },
    8466               /*mxcsr:in */ 0,
    8467               /*128:out  */ X86_MXCSR_DE,
    8468               /*256:out  */ X86_MXCSR_DE | X86_MXCSR_ZE,
    8469               /*xcpt?    */ true, true },
    8470           { { /*src2     */ { FP32_DENORM_MAX(0), FP32_DENORM_MAX(0), FP32_DENORM_MAX(1), FP32_DENORM_MAX(1), FP32_0(0),          FP32_0(0),          FP32_0(1),          FP32_0(1)          } },
    8471             { /*src1     */ { FP32_0(0),          FP32_0(1),          FP32_0(1),          FP32_0(0),          FP32_DENORM_MAX(0), FP32_DENORM_MAX(1), FP32_DENORM_MAX(0), FP32_DENORM_MAX(1) } },
    8472             { /* =>      */ { FP32_0(0),          FP32_0(1),          FP32_0(0),          FP32_0(1),          FP32_INF(0),        FP32_INF(1),        FP32_INF(1),        FP32_INF(0)        } },
    8473               /*mxcsr:in */ X86_MXCSR_XCPT_MASK,
    8474               /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DE,
    8475               /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DE | X86_MXCSR_ZE,
    8476               /*xcpt?    */ false, false },
    8477           { { /*src2     */ { FP32_DENORM_MAX(0), FP32_DENORM_MAX(0), FP32_DENORM_MAX(1), FP32_DENORM_MAX(1), FP32_1(0),          FP32_1(0),          FP32_1(1),          FP32_1(1)          } },
    8478             { /*src1     */ { FP32_DENORM_MAX(0), FP32_DENORM_MAX(1), FP32_DENORM_MAX(1), FP32_DENORM_MAX(0), FP32_DENORM_MAX(0), FP32_DENORM_MAX(1), FP32_DENORM_MAX(1), FP32_DENORM_MAX(0) } },
    8479             { /* =>      */ { FP32_1(0),          FP32_1(1),          FP32_1(0),          FP32_1(1),          FP32_DENORM_MAX(0), FP32_DENORM_MAX(1), FP32_DENORM_MAX(0), FP32_DENORM_MAX(1) } },
    8480               /*mxcsr:in */ X86_MXCSR_XCPT_MASK,
    8481               /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DE,
    8482               /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DE,
    8483               /*xcpt?    */ false, false },
    8484           { { /*src2     */ { FP32_DENORM_MAX(0), FP32_DENORM_MAX(0), FP32_DENORM_MAX(1), FP32_DENORM_MAX(1), FP32_0(0),          FP32_0(0),          FP32_0(1),          FP32_0(1)          } },
    8485             { /*src1     */ { FP32_0(0),          FP32_0(1),          FP32_0(1),          FP32_0(0),          FP32_DENORM_MAX(0), FP32_DENORM_MAX(1), FP32_DENORM_MAX(0), FP32_DENORM_MAX(1) } },
    8486             { /* =>      */ { FP32_QNAN(1),       FP32_QNAN(1),       FP32_QNAN(1),       FP32_QNAN(1),       FP32_QNAN(1),       FP32_QNAN(1),       FP32_QNAN(1),       FP32_QNAN(1)       } },
    8487               /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ,
    8488               /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_IE,
    8489               /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_IE,
    8490               /*xcpt?    */ false, false },
    8491           { { /*src2     */ { FP32_DENORM_MAX(0), FP32_DENORM_MAX(0), FP32_DENORM_MAX(1), FP32_DENORM_MAX(1), FP32_1(0),          FP32_1(0),          FP32_1(1),          FP32_1(1)          } },
    8492             { /*src1     */ { FP32_0(0),          FP32_0(1),          FP32_0(1),          FP32_0(0),          FP32_DENORM_MAX(0), FP32_DENORM_MAX(1), FP32_DENORM_MAX(0), FP32_DENORM_MAX(1) } },
    8493             { /* =>      */ { FP32_QNAN(1),       FP32_QNAN(1),       FP32_QNAN(1),       FP32_QNAN(1),       FP32_0(0),          FP32_0(1),          FP32_0(1),          FP32_0(0)          } },
    8494               /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ,
    8495               /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_IE,
    8496               /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_IE,
    8497               /*xcpt?    */ false, false },
    8498           { { /*src2     */ { FP32_DENORM_MIN(0), FP32_DENORM_MIN(0), FP32_DENORM_MIN(1), FP32_DENORM_MIN(1), FP32_0(0),          FP32_0(0),          FP32_0(1),          FP32_0(1)          } },
    8499             { /*src1     */ { FP32_0(0),          FP32_0(1),          FP32_0(1),          FP32_0(0),          FP32_DENORM_MIN(0), FP32_DENORM_MIN(1), FP32_DENORM_MIN(0), FP32_DENORM_MIN(1) } },
    8500             { /* =>      */ { FP32_0(0),          FP32_0(1),          FP32_0(0),          FP32_0(1),          FP32_QNAN(1),       FP32_QNAN(1),       FP32_QNAN(1),       FP32_QNAN(1)       } },
    8501               /*mxcsr:in */ 0,
    8502               /*128:out  */ X86_MXCSR_DE,
    8503               /*256:out  */ X86_MXCSR_DE | X86_MXCSR_ZE,
    8504               /*xcpt?    */ true, true },
    8505           { { /*src2     */ { FP32_DENORM_MIN(0), FP32_DENORM_MIN(0), FP32_DENORM_MIN(1), FP32_DENORM_MIN(1), FP32_0(0),          FP32_0(0),          FP32_0(1),          FP32_0(1)          } },
    8506             { /*src1     */ { FP32_0(0),          FP32_0(1),          FP32_0(1),          FP32_0(0),          FP32_DENORM_MIN(0), FP32_DENORM_MIN(1), FP32_DENORM_MIN(0), FP32_DENORM_MIN(1) } },
    8507             { /* =>      */ { FP32_0(0),          FP32_0(1),          FP32_0(0),          FP32_0(1),          FP32_INF(0),        FP32_INF(1),        FP32_INF(1),        FP32_INF(0)        } },
    8508               /*mxcsr:in */ X86_MXCSR_XCPT_MASK,
    8509               /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DE,
    8510               /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DE | X86_MXCSR_ZE,
    8511               /*xcpt?    */ false, false },
    8512           { { /*src2     */ { FP32_DENORM_MIN(0), FP32_DENORM_MIN(0), FP32_DENORM_MIN(1), FP32_DENORM_MIN(1), FP32_1(0),          FP32_1(0),          FP32_1(1),          FP32_1(1)          } },
    8513             { /* =>      */ { FP32_DENORM_MIN(0), FP32_DENORM_MIN(1), FP32_DENORM_MIN(1), FP32_DENORM_MIN(0), FP32_DENORM_MIN(0), FP32_DENORM_MIN(1), FP32_DENORM_MIN(1), FP32_DENORM_MIN(0) } },
    8514             { /*src1     */ { FP32_1(0),          FP32_1(1),          FP32_1(0),          FP32_1(1),          FP32_DENORM_MIN(0), FP32_DENORM_MIN(1), FP32_DENORM_MIN(0), FP32_DENORM_MIN(1) } },
    8515               /*mxcsr:in */ X86_MXCSR_XCPT_MASK,
    8516               /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DE,
    8517               /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DE,
    8518               /*xcpt?    */ false, false },
    8519           { { /*src2     */ { FP32_DENORM_MIN(0), FP32_DENORM_MIN(0), FP32_DENORM_MIN(1), FP32_DENORM_MIN(1), FP32_0(0),          FP32_0(0),          FP32_0(1),          FP32_0(1)          } },
    8520             { /*src1     */ { FP32_0(0),          FP32_0(1),          FP32_0(1),          FP32_0(0),          FP32_DENORM_MIN(0), FP32_DENORM_MIN(1), FP32_DENORM_MIN(0), FP32_DENORM_MIN(1) } },
    8521             { /* =>      */ { FP32_QNAN(1),       FP32_QNAN(1),       FP32_QNAN(1),       FP32_QNAN(1),       FP32_QNAN(1),       FP32_QNAN(1),       FP32_QNAN(1),       FP32_QNAN(1)       } },
    8522               /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ,
    8523               /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_IE,
    8524               /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_IE,
    8525               /*xcpt?    */ false, false },
    8526           { { /*src2     */ { FP32_1(0),          FP32_1(0),          FP32_1(1),          FP32_1(1),          FP32_DENORM_MIN(0), FP32_DENORM_MIN(0), FP32_DENORM_MIN(1), FP32_DENORM_MIN(1) } },
    8527             { /*src1     */ { FP32_DENORM_MIN(0), FP32_DENORM_MIN(1), FP32_DENORM_MIN(0), FP32_DENORM_MIN(1), FP32_0(0),          FP32_0(1),          FP32_0(1),          FP32_0(0)          } },
    8528             { /* =>      */ { FP32_0(0),          FP32_0(1),          FP32_0(1),          FP32_0(0),          FP32_QNAN(1),       FP32_QNAN(1),       FP32_QNAN(1),       FP32_QNAN(1)       } },
    8529               /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ,
    8530               /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ,
    8531               /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_IE,
    8532               /*xcpt?    */ false, false },
    8533           { { /*src2     */ { FP32_DENORM_MIN(0), FP32_DENORM_MAX(0), FP32_DENORM_MIN(0), FP32_DENORM_MAX(1), FP32_DENORM_MIN(0), FP32_DENORM_MAX(0), FP32_DENORM_MIN(1), FP32_DENORM_MAX(1) } },
    8534             { /*src1     */ { FP32_DENORM_MAX(0), FP32_DENORM_MIN(1), FP32_DENORM_MAX(1), FP32_DENORM_MIN(1), FP32_DENORM_MAX(0), FP32_DENORM_MIN(1), FP32_DENORM_MAX(0), FP32_DENORM_MIN(1) } },
    8535             { /* =>      */ { FP32_QNAN(1),       FP32_QNAN(1),       FP32_QNAN(1),       FP32_QNAN(1),       FP32_QNAN(1),       FP32_QNAN(1),       FP32_QNAN(1),       FP32_QNAN(1)       } },
    8536               /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_RC_UP,
    8537               /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_RC_UP | X86_MXCSR_IE,
    8538               /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_RC_UP | X86_MXCSR_IE,
    8539               /*xcpt?    */ false, false },
    8540           { { /*src2     */ { FP32_DENORM_MIN(0), FP32_DENORM_MAX(0), FP32_DENORM_MIN(0), FP32_DENORM_MAX(1), FP32_DENORM_MIN(0), FP32_DENORM_MAX(0), FP32_DENORM_MIN(1), FP32_DENORM_MAX(1) } },
    8541             { /*src1     */ { FP32_DENORM_MAX(0), FP32_DENORM_MIN(1), FP32_DENORM_MAX(1), FP32_DENORM_MIN(1), FP32_DENORM_MAX(0), FP32_DENORM_MIN(1), FP32_DENORM_MAX(0), FP32_DENORM_MIN(1) } },
    8542             { /* =>      */ { FP32_QNAN(1),       FP32_QNAN(1),       FP32_QNAN(1),       FP32_QNAN(1),       FP32_QNAN(1),       FP32_QNAN(1),       FP32_QNAN(1),       FP32_QNAN(1)       } },
    8543               /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_RC_DOWN,
    8544               /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_RC_DOWN | X86_MXCSR_IE,
    8545               /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_RC_DOWN | X86_MXCSR_IE,
    8546               /*xcpt?    */ false, false },
    8547           { { /*src2     */ { FP32_DENORM_MIN(0), FP32_DENORM_MAX(0), FP32_DENORM_MIN(0), FP32_DENORM_MAX(1), FP32_DENORM_MIN(0), FP32_DENORM_MAX(0), FP32_DENORM_MIN(1), FP32_DENORM_MAX(1) } },
    8548             { /*src1     */ { FP32_DENORM_MAX(0), FP32_DENORM_MIN(1), FP32_DENORM_MAX(1), FP32_DENORM_MIN(1), FP32_DENORM_MAX(0), FP32_DENORM_MIN(1), FP32_DENORM_MAX(0), FP32_DENORM_MIN(1) } },
    8549             { /* =>      */ { FP32_QNAN(1),       FP32_QNAN(1),       FP32_QNAN(1),       FP32_QNAN(1),       FP32_QNAN(1),       FP32_QNAN(1),       FP32_QNAN(1),       FP32_QNAN(1)       } },
    8550               /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_RC_ZERO,
    8551               /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_RC_ZERO | X86_MXCSR_IE,
    8552               /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_RC_ZERO | X86_MXCSR_IE,
    8553               /*xcpt?    */ false, false },
    8554           { { /*src2     */ { FP32_DENORM_MIN(0), FP32_DENORM_MAX(0), FP32_DENORM_MIN(0), FP32_DENORM_MAX(1), FP32_DENORM_MIN(0), FP32_DENORM_MAX(0), FP32_DENORM_MIN(1), FP32_DENORM_MAX(1) } },
    8555             { /*src1     */ { FP32_DENORM_MAX(0), FP32_DENORM_MIN(1), FP32_DENORM_MAX(1), FP32_DENORM_MIN(1), FP32_DENORM_MAX(0), FP32_DENORM_MIN(1), FP32_DENORM_MAX(0), FP32_DENORM_MIN(1) } },
    8556             { /* =>      */ { FP32_QNAN(1),       FP32_QNAN(1),       FP32_QNAN(1),       FP32_QNAN(1),       FP32_QNAN(1),       FP32_QNAN(1),       FP32_QNAN(1),       FP32_QNAN(1)       } },
    8557               /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_FZ,
    8558               /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_IE,
    8559               /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_IE,
    8560               /*xcpt?    */ false, false },
    8561     /** @todo More Denormals. */
    8562     /*
    8563      * Invalids.
    8564      */
    8565  /*40|42*/ FP32_TABLE_D1_PS_INVALIDS
    8566     /** @todo Underflow, Precision; Rounding; FZ etc. */
    8567     };
    8568 
    8569 #define PASS_s_aValues RT_ELEMENTS(s_aValues), (BS3CPUINSTR4_TEST1_VALUES_T *)s_aValues
    8570     static BS3CPUINSTR4_TEST1_T const s_aTests16[] =
    8571     {
    8572         { bs3CpuInstr4_divps_XMM1_XMM2_icebp_c16,  255, RM_REG, T_SSE, 1, 1, 2,   PASS_s_aValues },
    8573         { bs3CpuInstr4_divps_XMM1_FSxBX_icebp_c16, 255, RM_MEM, T_SSE, 1, 1, 255, PASS_s_aValues },
    8574 
    8575         { bs3CpuInstr4_vdivps_XMM1_XMM2_XMM3_icebp_c16,  255, RM_REG, T_AVX_128, 1, 2, 3,   PASS_s_aValues },
    8576         { bs3CpuInstr4_vdivps_XMM1_XMM2_FSxBX_icebp_c16, 255, RM_MEM, T_AVX_128, 1, 2, 255, PASS_s_aValues },
    8577 
    8578         { bs3CpuInstr4_vdivps_YMM1_YMM2_YMM3_icebp_c16,  255, RM_REG, T_AVX_256, 1, 2, 3,   PASS_s_aValues },
    8579         { bs3CpuInstr4_vdivps_YMM1_YMM2_FSxBX_icebp_c16, 255, RM_MEM, T_AVX_256, 1, 2, 255, PASS_s_aValues },
    8580     };
    8581     static BS3CPUINSTR4_TEST1_T const s_aTests32[] =
    8582     {
    8583         { bs3CpuInstr4_divps_XMM1_XMM2_icebp_c32,  255, RM_REG, T_SSE, 1, 1, 2,   PASS_s_aValues },
    8584         { bs3CpuInstr4_divps_XMM1_FSxBX_icebp_c32, 255, RM_MEM, T_SSE, 1, 1, 255, PASS_s_aValues },
    8585 
    8586         { bs3CpuInstr4_vdivps_XMM1_XMM2_XMM3_icebp_c32,  255, RM_REG, T_AVX_128, 1, 2, 3,   PASS_s_aValues },
    8587         { bs3CpuInstr4_vdivps_XMM1_XMM2_FSxBX_icebp_c32, 255, RM_MEM, T_AVX_128, 1, 2, 255, PASS_s_aValues },
    8588 
    8589         { bs3CpuInstr4_vdivps_YMM1_YMM2_YMM3_icebp_c32,  255, RM_REG, T_AVX_256, 1, 2, 3,   PASS_s_aValues },
    8590         { bs3CpuInstr4_vdivps_YMM1_YMM2_FSxBX_icebp_c32, 255, RM_MEM, T_AVX_256, 1, 2, 255, PASS_s_aValues },
    8591     };
    8592     static BS3CPUINSTR4_TEST1_T const s_aTests64[] =
    8593     {
    8594         { bs3CpuInstr4_divps_XMM1_XMM2_icebp_c64,  255, RM_REG, T_SSE, 1, 1, 2,   PASS_s_aValues },
    8595         { bs3CpuInstr4_divps_XMM1_FSxBX_icebp_c64, 255, RM_MEM, T_SSE, 1, 1, 255, PASS_s_aValues },
    8596 
    8597         { bs3CpuInstr4_vdivps_XMM1_XMM2_XMM3_icebp_c64,  255, RM_REG, T_AVX_128, 1, 2, 3,   PASS_s_aValues },
    8598         { bs3CpuInstr4_vdivps_XMM1_XMM2_FSxBX_icebp_c64, 255, RM_MEM, T_AVX_128, 1, 2, 255, PASS_s_aValues },
    8599 
    8600         { bs3CpuInstr4_vdivps_YMM1_YMM2_YMM3_icebp_c64,  255, RM_REG, T_AVX_256, 1, 2, 3,   PASS_s_aValues },
    8601         { bs3CpuInstr4_vdivps_YMM1_YMM2_FSxBX_icebp_c64, 255, RM_MEM, T_AVX_256, 1, 2, 255, PASS_s_aValues },
    8602 
    8603         { bs3CpuInstr4_divps_XMM8_XMM9_icebp_c64,  255, RM_REG, T_SSE, 8, 8, 9,   PASS_s_aValues },
    8604         { bs3CpuInstr4_divps_XMM8_FSxBX_icebp_c64, 255, RM_MEM, T_SSE, 8, 8, 255, PASS_s_aValues },
    8605 
    8606         { bs3CpuInstr4_vdivps_XMM8_XMM9_XMM10_icebp_c64, 255, RM_REG, T_AVX_128, 8, 9, 10,  PASS_s_aValues },
    8607         { bs3CpuInstr4_vdivps_XMM8_XMM9_FSxBX_icebp_c64, 255, RM_MEM, T_AVX_128, 8, 9, 255, PASS_s_aValues },
    8608         { bs3CpuInstr4_vdivps_YMM8_YMM9_YMM10_icebp_c64, 255, RM_REG, T_AVX_256, 8, 9, 10,  PASS_s_aValues },
    8609         { bs3CpuInstr4_vdivps_YMM8_YMM9_FSxBX_icebp_c64, 255, RM_MEM, T_AVX_256, 8, 9, 255, PASS_s_aValues },
    8610     };
    8611 #undef PASS_s_aValues
    8612 
    8613     static BS3CPUINSTR4_TEST1_MODE_T const s_aTests[3] = BS3CPUINSTR4_TEST1_MODES_INIT(s_aTests16, s_aTests32, s_aTests64);
    8614     unsigned const                         iTest       = BS3CPUINSTR4_TEST_MODES_INDEX(bMode);
    8615     return bs3CpuInstr4_WorkerTestType1(bMode, s_aTests[iTest].paTests, s_aTests[iTest].cTests,
    8616                                         g_aXcptConfig2, RT_ELEMENTS(g_aXcptConfig2));
    8617 }
    8618 
    8619 
    8620 /*
    86218621 * [V]ADDSUBPS.
    86228622 */
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