VirtualBox

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


Ignore:
Timestamp:
Sep 18, 2024 1:35:20 PM (8 months ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
164852
Message:

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

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

Legend:

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

    r106059 r106082  
    435435
    436436;
     437;; [v]divps
     438;
     439EMIT_INSTR_PLUS_ICEBP       divps, XMM1, XMM2
     440EMIT_INSTR_PLUS_ICEBP       divps, XMM1, FSxBX
     441EMIT_INSTR_PLUS_ICEBP_C64   divps, XMM8, XMM9
     442EMIT_INSTR_PLUS_ICEBP_C64   divps, XMM8, FSxBX
     443
     444EMIT_INSTR_PLUS_ICEBP       vdivps, XMM1, XMM2, XMM3
     445EMIT_INSTR_PLUS_ICEBP       vdivps, XMM1, XMM2, FSxBX
     446EMIT_INSTR_PLUS_ICEBP_C64   vdivps, XMM8, XMM9, XMM10
     447EMIT_INSTR_PLUS_ICEBP_C64   vdivps, XMM8, XMM9, FSxBX
     448
     449EMIT_INSTR_PLUS_ICEBP       vdivps, YMM1, YMM2, YMM3
     450EMIT_INSTR_PLUS_ICEBP       vdivps, YMM1, YMM2, FSxBX
     451EMIT_INSTR_PLUS_ICEBP_C64   vdivps, YMM8, YMM9, YMM10
     452EMIT_INSTR_PLUS_ICEBP_C64   vdivps, YMM8, YMM9, FSxBX
     453
     454;
    437455;; [v]addsubps
    438456;
  • trunk/src/VBox/ValidationKit/bootsectors/bs3-cpu-instr-4.c32

    r106069 r106082  
    80248024
    80258025/*
     8026 * [V]DIVPS.
     8027 */
     8028BS3_DECL_FAR(uint8_t) bs3CpuInstr4_v_divps(uint8_t bMode)
     8029{
     8030    static BS3CPUINSTR4_TEST1_VALUES_PS_T const s_aValues[] =
     8031    {
     8032    /** @todo Improve port from mulps */
     8033    /*
     8034     * Zero.
     8035     */
     8036    /* 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) } },
     8037            { /*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) } },
     8038            { /* =>      */ { FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1) } },
     8039             /*mxcsr:in */ X86_MXCSR_XCPT_MASK,
     8040             /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_IE,
     8041             /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_IE,
     8042             /*xcpt?    */ false, false },
     8043          { { /*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) } },
     8044            { /*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) } },
     8045            { /* =>      */ { FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1) } },
     8046              /*mxcsr:in */ 0,
     8047              /*128:out  */ X86_MXCSR_IE,
     8048              /*256:out  */ X86_MXCSR_IE,
     8049              /*xcpt?    */ true, true },
     8050          { { /*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) } },
     8051            { /*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) } },
     8052            { /* =>      */ { FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1) } },
     8053              /*mxcsr:in */ X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_UP,
     8054              /*128:out  */ X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_UP | X86_MXCSR_IE,
     8055              /*256:out  */ X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_UP | X86_MXCSR_IE,
     8056              /*xcpt?    */ true, true },
     8057          { { /*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) } },
     8058            { /*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) } },
     8059            { /* =>      */ { FP32_QNAN(1), FP32_QNAN(0), FP32_QNAN(0), FP32_QNAN(0), FP32_QNAN(0), FP32_QNAN(0), FP32_QNAN(0), FP32_QNAN(1) } },
     8060              /*mxcsr:in */ X86_MXCSR_DAZ | X86_MXCSR_RC_ZERO,
     8061              /*128:out  */ X86_MXCSR_DAZ | X86_MXCSR_RC_ZERO | X86_MXCSR_IE,
     8062              /*256:out  */ X86_MXCSR_DAZ | X86_MXCSR_RC_ZERO | X86_MXCSR_IE,
     8063              /*xcpt?    */ true, true },
     8064          { { /*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) } },
     8065            { /*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) } },
     8066            { /* =>      */ { FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1) } },
     8067              /*mxcsr:in */ X86_MXCSR_FZ | X86_MXCSR_RC_ZERO,
     8068              /*128:out  */ X86_MXCSR_FZ | X86_MXCSR_RC_ZERO | X86_MXCSR_IE,
     8069              /*256:out  */ X86_MXCSR_FZ | X86_MXCSR_RC_ZERO | X86_MXCSR_IE,
     8070              /*xcpt?    */ true, true },
     8071          { { /*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) } },
     8072            { /*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) } },
     8073            { /* =>      */ { FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1) } },
     8074              /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_RC_ZERO,
     8075              /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_RC_ZERO | X86_MXCSR_IE,
     8076              /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_RC_ZERO | X86_MXCSR_IE,
     8077              /*xcpt?    */ false, false },
     8078          { { /*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) } },
     8079            { /*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)       } },
     8080            { /* =>      */ { FP32_0(0),       FP32_0(0),       FP32_QNAN(1),    FP32_0(1),       FP32_QNAN(1), FP32_0(1),    FP32_0(0),       FP32_0(1)       } },
     8081              /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_DOWN,
     8082              /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_DOWN | X86_MXCSR_IE,
     8083              /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_DOWN | X86_MXCSR_IE,
     8084              /*xcpt?    */ false, false },
     8085    /*
     8086     * Infinity.
     8087     */
     8088    /* 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) } },
     8089            { /*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) } },
     8090            { /* =>      */ { FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1) } },
     8091              /*mxcsr:in */ X86_MXCSR_XCPT_MASK & ~X86_MXCSR_IM,
     8092              /*128:out  */ (X86_MXCSR_XCPT_MASK & ~X86_MXCSR_IM) | X86_MXCSR_IE,
     8093              /*256:out  */ (X86_MXCSR_XCPT_MASK & ~X86_MXCSR_IM) | X86_MXCSR_IE,
     8094              /*xcpt?    */ true, true },
     8095          { { /*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) } },
     8096            { /*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) } },
     8097            { /* =>      */ { FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1) } },
     8098              /*mxcsr:in */ X86_MXCSR_XCPT_MASK,
     8099              /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_IE,
     8100              /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_IE,
     8101              /*xcpt?    */ false, false },
     8102          { { /*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) } },
     8103            { /*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) } },
     8104            { /* =>      */ { FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1) } },
     8105              /*mxcsr:in */ X86_MXCSR_FZ | X86_MXCSR_XCPT_MASK,
     8106              /*128:out  */ X86_MXCSR_FZ | X86_MXCSR_XCPT_MASK | X86_MXCSR_IE,
     8107              /*256:out  */ X86_MXCSR_FZ | X86_MXCSR_XCPT_MASK | X86_MXCSR_IE,
     8108              /*xcpt?    */ false, false },
     8109          { { /*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)  } },
     8110            { /*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) } },
     8111            { /* =>      */ { FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1)  } },
     8112              /*mxcsr:in */ X86_MXCSR_FZ,
     8113              /*128:out  */ X86_MXCSR_FZ | X86_MXCSR_IE,
     8114              /*256:out  */ X86_MXCSR_FZ | X86_MXCSR_IE,
     8115              /*xcpt?    */ true, true },
     8116          { { /*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) } },
     8117            { /*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) } },
     8118            { /* =>      */ { FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1) } },
     8119              /*mxcsr:in */ X86_MXCSR_FZ | X86_MXCSR_RC_ZERO,
     8120              /*128:out  */ X86_MXCSR_FZ | X86_MXCSR_RC_ZERO | X86_MXCSR_IE,
     8121              /*256:out  */ X86_MXCSR_FZ | X86_MXCSR_RC_ZERO | X86_MXCSR_IE,
     8122              /*xcpt?    */ true, true },
     8123          { { /*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)  } },
     8124            { /*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) } },
     8125            { /* =>      */ { FP32_QNAN(0), FP32_QNAN(0), FP32_QNAN(0), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(0), FP32_QNAN(1)  } },
     8126              /*mxcsr:in */ X86_MXCSR_XCPT_MASK,
     8127              /*128:out  */ X86_MXCSR_XCPT_MASK,
     8128              /*256:out  */ X86_MXCSR_XCPT_MASK,
     8129              /*xcpt?    */ false, false },
     8130          { { /*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)  } },
     8131            { /*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) } },
     8132            { /* =>      */ { FP32_QNAN(0), FP32_QNAN(0), FP32_QNAN(0), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(1), FP32_QNAN(0), FP32_QNAN(1)  } },
     8133              /*mxcsr:in */ X86_MXCSR_DAZ,
     8134              /*128:out  */ X86_MXCSR_DAZ,
     8135              /*256:out  */ X86_MXCSR_DAZ,
     8136              /*xcpt?    */ false, false },
     8137    /*
     8138     * Overflow, Precision.
     8139     */
     8140#ifdef TODO_X86_MXCSR_PE /** @todo THIS FAILS ON IEM: X86_MXCSR_PE not set in 256:out */
     8141 /*--|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)        } },
     8142            { /*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) } },
     8143            { /* =>      */ { 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) } },
     8144              /*mxcsr:in */ 0,
     8145              /*128:out  */ 0,
     8146              /*256:out  */ X86_MXCSR_UE | X86_MXCSR_PE,
     8147              /*xcpt?    */ false, true },
     8148#endif /* TODO_X86_MXCSR_PE */
     8149 /*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) } },
     8150            { /*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)        } },
     8151            { /* =>      */ { 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)        } },
     8152              /*mxcsr:in */ X86_MXCSR_XCPT_MASK,
     8153              /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_OE | X86_MXCSR_PE,
     8154              /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_OE | X86_MXCSR_PE | X86_MXCSR_UE,
     8155              /*xcpt?    */ false, false },
     8156#ifdef TODO_X86_MXCSR_PE /** @todo THIS FAILS ON IEM: X86_MXCSR_PE not set in 256:out */
     8157 /*--|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) } },
     8158            { /*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)        } },
     8159            { /* =>      */ { 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)        } },
     8160              /*mxcsr:in */ 0,
     8161              /*128:out  */ X86_MXCSR_OE,
     8162              /*256:out  */ X86_MXCSR_OE | X86_MXCSR_PE | X86_MXCSR_UE,
     8163              /*xcpt?    */ true, true },
     8164#endif /* TODO_X86_MXCSR_PE */
     8165 /*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) } },
     8166            { /*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)        } },
     8167            { /* =>      */ { 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)        } },
     8168              /*mxcsr:in */ X86_MXCSR_OM,
     8169              /*128:out  */ X86_MXCSR_OM | X86_MXCSR_OE | X86_MXCSR_PE,
     8170              /*256:out  */ X86_MXCSR_OM | X86_MXCSR_OE | X86_MXCSR_PE | X86_MXCSR_UE,
     8171              /*xcpt?    */ true, true },
     8172          { { /*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) } },
     8173            { /*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) } },
     8174            { /* =>      */ { 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) } },
     8175              /*mxcsr:in */ X86_MXCSR_OM | X86_MXCSR_PM | X86_MXCSR_UM | X86_MXCSR_RC_ZERO,
     8176              /*128:out  */ X86_MXCSR_OM | X86_MXCSR_PM | X86_MXCSR_UM | X86_MXCSR_RC_ZERO | X86_MXCSR_OE | X86_MXCSR_PE | X86_MXCSR_UE,
     8177              /*256:out  */ X86_MXCSR_OM | X86_MXCSR_PM | X86_MXCSR_UM | X86_MXCSR_RC_ZERO | X86_MXCSR_OE | X86_MXCSR_PE | X86_MXCSR_UE,
     8178              /*xcpt?    */ false, false },
     8179          { { /*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) } },
     8180            { /*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)      } },
     8181            { /* =>      */ { FP32_INF(0),      FP32_0(1),        FP32_1(0),       FP32_INF(0),      FP32_INF(1),      FP32_0(1),        FP32_0(0),        FP32_INF(1)      } },
     8182              /*mxcsr:in */ X86_MXCSR_OM | X86_MXCSR_UM | X86_MXCSR_PM,
     8183              /*128:out  */ X86_MXCSR_OM | X86_MXCSR_UM | X86_MXCSR_PM,
     8184              /*256:out  */ X86_MXCSR_OM | X86_MXCSR_UM | X86_MXCSR_PM,
     8185              /*xcpt?    */ false, false },
     8186          { { /*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) } },
     8187            { /*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)      } },
     8188            { /* =>      */ { FP32_1(0),        FP32_0(1),        FP32_0(0),       FP32_1(0),        FP32_1(1),        FP32_0(1),        FP32_0(0),        FP32_INF(1)      } },
     8189              /*mxcsr:in */ X86_MXCSR_OM | X86_MXCSR_UM | X86_MXCSR_PM | X86_MXCSR_FZ | X86_MXCSR_RC_DOWN,
     8190              /*128:out  */ X86_MXCSR_OM | X86_MXCSR_UM | X86_MXCSR_PM | X86_MXCSR_FZ | X86_MXCSR_RC_DOWN,
     8191              /*256:out  */ X86_MXCSR_OM | X86_MXCSR_UM | X86_MXCSR_PM | X86_MXCSR_FZ | X86_MXCSR_RC_DOWN,
     8192              /*xcpt?    */ false, false },
     8193          { { /*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) } },
     8194            { /*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)        } },
     8195            { /* =>      */ { FP32_0(1),        FP32_1(0),        FP32_INF(1),      FP32_1(1), FP32_2(1), FP32_INF(1),      FP32_1(0),        FP32_0(1)        } },
     8196              /*mxcsr:in */ X86_MXCSR_OM | X86_MXCSR_UM | X86_MXCSR_PM | X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_DOWN,
     8197              /*128:out  */ X86_MXCSR_OM | X86_MXCSR_UM | X86_MXCSR_PM | X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_DOWN,
     8198              /*256:out  */ X86_MXCSR_OM | X86_MXCSR_UM | X86_MXCSR_PM | X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_DOWN,
     8199              /*xcpt?    */ false, false },
     8200          { { /*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) } },
     8201            { /*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)      } },
     8202            { /* =>      */ { 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)      } },
     8203              /*mxcsr:in */ X86_MXCSR_DAZ | X86_MXCSR_FZ,
     8204              /*128:out  */ X86_MXCSR_DAZ | X86_MXCSR_FZ,
     8205              /*256:out  */ X86_MXCSR_DAZ | X86_MXCSR_FZ,
     8206              /*xcpt?    */ false, false },
     8207          { { /*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) } },
     8208            { /*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)      } },
     8209            { /* =>      */ { 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)      } },
     8210              /*mxcsr:in */ X86_MXCSR_OM | X86_MXCSR_PM | X86_MXCSR_DAZ | X86_MXCSR_FZ,
     8211              /*128:out  */ X86_MXCSR_OM | X86_MXCSR_PM | X86_MXCSR_DAZ | X86_MXCSR_FZ,
     8212              /*256:out  */ X86_MXCSR_OM | X86_MXCSR_PM | X86_MXCSR_DAZ | X86_MXCSR_FZ,
     8213              /*xcpt?    */ false, false },
     8214    /** @todo More Overflow/Precision. */
     8215    /*
     8216     * Normals.
     8217     */
     8218 /*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) } },
     8219            { /*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) } },
     8220            { /* =>      */ { 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)       } },
     8221              /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_DOWN,
     8222              /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_DOWN,
     8223              /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_DOWN,
     8224              /*xcpt?    */ false, false },
     8225          { { /*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*/ } },
     8226            { /*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*/ } },
     8227            { /* =>      */ { 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*/ } },
     8228              /*mxcsr:in */ X86_MXCSR_XCPT_MASK,
     8229              /*128:out  */ X86_MXCSR_XCPT_MASK,
     8230              /*256:out  */ X86_MXCSR_XCPT_MASK,
     8231              /*xcpt?    */ false, false },
     8232          { { /*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) } },
     8233            { /*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)                 } },
     8234            { /* =>      */ { 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)                 } },
     8235              /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_ZERO,
     8236              /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_ZERO,
     8237              /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_ZERO,
     8238              /*xcpt?    */ false, false },
     8239          { { /*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)        } },
     8240            { /*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) } },
     8241            { /* =>      */ { 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) } },
     8242              /*mxcsr:in */ 0,
     8243              /*128:out  */ 0,
     8244              /*256:out  */ 0,
     8245              /*xcpt?    */ false, false },
     8246    /** @todo More Normals. */
     8247   /*
     8248    * Denormals.
     8249    */
     8250 /*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)          } },
     8251            { /*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) } },
     8252            { /* =>      */ { FP32_0(0),          FP32_0(1),          FP32_0(0),          FP32_0(1),          FP32_INF(0),        FP32_INF(1),        FP32_INF(1),        FP32_INF(0)          } },
     8253              /*mxcsr:in */ 0,
     8254              /*128:out  */ X86_MXCSR_DE,
     8255              /*256:out  */ X86_MXCSR_DE | X86_MXCSR_ZE,
     8256              /*xcpt?    */ true, true },
     8257          { { /*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)          } },
     8258            { /*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) } },
     8259            { /* =>      */ { FP32_0(0),          FP32_0(1),          FP32_0(0),          FP32_0(1),          FP32_INF(0),        FP32_INF(1),        FP32_INF(1),        FP32_INF(0)        } },
     8260              /*mxcsr:in */ X86_MXCSR_XCPT_MASK,
     8261              /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DE,
     8262              /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DE | X86_MXCSR_ZE,
     8263              /*xcpt?    */ false, false },
     8264          { { /*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)          } },
     8265            { /*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) } },
     8266            { /* =>      */ { 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) } },
     8267              /*mxcsr:in */ X86_MXCSR_XCPT_MASK,
     8268              /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DE,
     8269              /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DE,
     8270              /*xcpt?    */ false, false },
     8271          { { /*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)          } },
     8272            { /*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) } },
     8273            { /* =>      */ { FP32_QNAN(1),       FP32_QNAN(1),       FP32_QNAN(1),       FP32_QNAN(1),       FP32_QNAN(1),       FP32_QNAN(1),       FP32_QNAN(1),       FP32_QNAN(1)       } },
     8274              /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ,
     8275              /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_IE,
     8276              /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_IE,
     8277              /*xcpt?    */ false, false },
     8278          { { /*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)          } },
     8279            { /*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) } },
     8280            { /* =>      */ { FP32_QNAN(1),       FP32_QNAN(1),       FP32_QNAN(1),       FP32_QNAN(1),       FP32_0(0),          FP32_0(1),          FP32_0(1),          FP32_0(0)          } },
     8281              /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ,
     8282              /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_IE,
     8283              /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_IE,
     8284              /*xcpt?    */ false, false },
     8285          { { /*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)          } },
     8286            { /*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) } },
     8287            { /* =>      */ { FP32_0(0),          FP32_0(1),          FP32_0(0),          FP32_0(1),          FP32_QNAN(1),       FP32_QNAN(1),       FP32_QNAN(1),       FP32_QNAN(1)       } },
     8288              /*mxcsr:in */ 0,
     8289              /*128:out  */ X86_MXCSR_DE,
     8290              /*256:out  */ X86_MXCSR_DE | X86_MXCSR_ZE,
     8291              /*xcpt?    */ true, true },
     8292          { { /*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)          } },
     8293            { /*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) } },
     8294            { /* =>      */ { FP32_0(0),          FP32_0(1),          FP32_0(0),          FP32_0(1),          FP32_INF(0),        FP32_INF(1),        FP32_INF(1),        FP32_INF(0)        } },
     8295              /*mxcsr:in */ X86_MXCSR_XCPT_MASK,
     8296              /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DE,
     8297              /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DE | X86_MXCSR_ZE,
     8298              /*xcpt?    */ false, false },
     8299          { { /*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)          } },
     8300            { /* =>      */ { 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) } },
     8301            { /*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) } },
     8302              /*mxcsr:in */ X86_MXCSR_XCPT_MASK,
     8303              /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DE,
     8304              /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DE,
     8305              /*xcpt?    */ false, false },
     8306          { { /*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)          } },
     8307            { /*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) } },
     8308            { /* =>      */ { FP32_QNAN(1),       FP32_QNAN(1),       FP32_QNAN(1),       FP32_QNAN(1),       FP32_QNAN(1),       FP32_QNAN(1),       FP32_QNAN(1),       FP32_QNAN(1)       } },
     8309              /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ,
     8310              /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_IE,
     8311              /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_IE,
     8312              /*xcpt?    */ false, false },
     8313          { { /*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) } },
     8314            { /*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)          } },
     8315            { /* =>      */ { FP32_0(0),          FP32_0(1),          FP32_0(1),          FP32_0(0),          FP32_QNAN(1),       FP32_QNAN(1),       FP32_QNAN(1),       FP32_QNAN(1)       } },
     8316              /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ,
     8317              /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ,
     8318              /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_IE,
     8319              /*xcpt?    */ false, false },
     8320          { { /*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) } },
     8321            { /*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) } },
     8322            { /* =>      */ { FP32_QNAN(1),       FP32_QNAN(1),       FP32_QNAN(1),       FP32_QNAN(1),       FP32_QNAN(1),       FP32_QNAN(1),       FP32_QNAN(1),       FP32_QNAN(1)       } },
     8323              /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_RC_UP,
     8324              /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_RC_UP | X86_MXCSR_IE,
     8325              /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_RC_UP | X86_MXCSR_IE,
     8326              /*xcpt?    */ false, false },
     8327          { { /*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) } },
     8328            { /*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) } },
     8329            { /* =>      */ { FP32_QNAN(1),       FP32_QNAN(1),       FP32_QNAN(1),       FP32_QNAN(1),       FP32_QNAN(1),       FP32_QNAN(1),       FP32_QNAN(1),       FP32_QNAN(1)       } },
     8330              /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_RC_DOWN,
     8331              /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_RC_DOWN | X86_MXCSR_IE,
     8332              /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_RC_DOWN | X86_MXCSR_IE,
     8333              /*xcpt?    */ false, false },
     8334          { { /*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) } },
     8335            { /*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) } },
     8336            { /* =>      */ { FP32_QNAN(1),       FP32_QNAN(1),       FP32_QNAN(1),       FP32_QNAN(1),       FP32_QNAN(1),       FP32_QNAN(1),       FP32_QNAN(1),       FP32_QNAN(1)       } },
     8337              /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_RC_ZERO,
     8338              /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_RC_ZERO | X86_MXCSR_IE,
     8339              /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_RC_ZERO | X86_MXCSR_IE,
     8340              /*xcpt?    */ false, false },
     8341          { { /*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) } },
     8342            { /*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) } },
     8343            { /* =>      */ { FP32_QNAN(1),       FP32_QNAN(1),       FP32_QNAN(1),       FP32_QNAN(1),       FP32_QNAN(1),       FP32_QNAN(1),       FP32_QNAN(1),       FP32_QNAN(1)       } },
     8344              /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_FZ,
     8345              /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_IE,
     8346              /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_IE,
     8347              /*xcpt?    */ false, false },
     8348    /** @todo More Denormals. */
     8349    /*
     8350     * Invalids.
     8351     */
     8352 /*40|42*/ FP32_TABLE_D1_PS_INVALIDS
     8353    /** @todo Underflow, Precision; Rounding; FZ etc. */
     8354    };
     8355
     8356#define PASS_s_aValues RT_ELEMENTS(s_aValues), (BS3CPUINSTR4_TEST1_VALUES_T *)s_aValues
     8357    static BS3CPUINSTR4_TEST1_T const s_aTests16[] =
     8358    {
     8359        { bs3CpuInstr4_divps_XMM1_XMM2_icebp_c16,  255, RM_REG, T_SSE, 1, 1, 2,   PASS_s_aValues },
     8360        { bs3CpuInstr4_divps_XMM1_FSxBX_icebp_c16, 255, RM_MEM, T_SSE, 1, 1, 255, PASS_s_aValues },
     8361
     8362        { bs3CpuInstr4_vdivps_XMM1_XMM2_XMM3_icebp_c16,  255, RM_REG, T_AVX_128, 1, 2, 3,   PASS_s_aValues },
     8363        { bs3CpuInstr4_vdivps_XMM1_XMM2_FSxBX_icebp_c16, 255, RM_MEM, T_AVX_128, 1, 2, 255, PASS_s_aValues },
     8364
     8365        { bs3CpuInstr4_vdivps_YMM1_YMM2_YMM3_icebp_c16,  255, RM_REG, T_AVX_256, 1, 2, 3,   PASS_s_aValues },
     8366        { bs3CpuInstr4_vdivps_YMM1_YMM2_FSxBX_icebp_c16, 255, RM_MEM, T_AVX_256, 1, 2, 255, PASS_s_aValues },
     8367    };
     8368    static BS3CPUINSTR4_TEST1_T const s_aTests32[] =
     8369    {
     8370        { bs3CpuInstr4_divps_XMM1_XMM2_icebp_c32,  255, RM_REG, T_SSE, 1, 1, 2,   PASS_s_aValues },
     8371        { bs3CpuInstr4_divps_XMM1_FSxBX_icebp_c32, 255, RM_MEM, T_SSE, 1, 1, 255, PASS_s_aValues },
     8372
     8373        { bs3CpuInstr4_vdivps_XMM1_XMM2_XMM3_icebp_c32,  255, RM_REG, T_AVX_128, 1, 2, 3,   PASS_s_aValues },
     8374        { bs3CpuInstr4_vdivps_XMM1_XMM2_FSxBX_icebp_c32, 255, RM_MEM, T_AVX_128, 1, 2, 255, PASS_s_aValues },
     8375
     8376        { bs3CpuInstr4_vdivps_YMM1_YMM2_YMM3_icebp_c32,  255, RM_REG, T_AVX_256, 1, 2, 3,   PASS_s_aValues },
     8377        { bs3CpuInstr4_vdivps_YMM1_YMM2_FSxBX_icebp_c32, 255, RM_MEM, T_AVX_256, 1, 2, 255, PASS_s_aValues },
     8378    };
     8379    static BS3CPUINSTR4_TEST1_T const s_aTests64[] =
     8380    {
     8381        { bs3CpuInstr4_divps_XMM1_XMM2_icebp_c64,  255, RM_REG, T_SSE, 1, 1, 2,   PASS_s_aValues },
     8382        { bs3CpuInstr4_divps_XMM1_FSxBX_icebp_c64, 255, RM_MEM, T_SSE, 1, 1, 255, PASS_s_aValues },
     8383
     8384        { bs3CpuInstr4_vdivps_XMM1_XMM2_XMM3_icebp_c64,  255, RM_REG, T_AVX_128, 1, 2, 3,   PASS_s_aValues },
     8385        { bs3CpuInstr4_vdivps_XMM1_XMM2_FSxBX_icebp_c64, 255, RM_MEM, T_AVX_128, 1, 2, 255, PASS_s_aValues },
     8386
     8387        { bs3CpuInstr4_vdivps_YMM1_YMM2_YMM3_icebp_c64,  255, RM_REG, T_AVX_256, 1, 2, 3,   PASS_s_aValues },
     8388        { bs3CpuInstr4_vdivps_YMM1_YMM2_FSxBX_icebp_c64, 255, RM_MEM, T_AVX_256, 1, 2, 255, PASS_s_aValues },
     8389
     8390        { bs3CpuInstr4_divps_XMM8_XMM9_icebp_c64,  255, RM_REG, T_SSE, 8, 8, 9,   PASS_s_aValues },
     8391        { bs3CpuInstr4_divps_XMM8_FSxBX_icebp_c64, 255, RM_MEM, T_SSE, 8, 8, 255, PASS_s_aValues },
     8392
     8393        { bs3CpuInstr4_vdivps_XMM8_XMM9_XMM10_icebp_c64, 255, RM_REG, T_AVX_128, 8, 9, 10,  PASS_s_aValues },
     8394        { bs3CpuInstr4_vdivps_XMM8_XMM9_FSxBX_icebp_c64, 255, RM_MEM, T_AVX_128, 8, 9, 255, PASS_s_aValues },
     8395        { bs3CpuInstr4_vdivps_YMM8_YMM9_YMM10_icebp_c64, 255, RM_REG, T_AVX_256, 8, 9, 10,  PASS_s_aValues },
     8396        { bs3CpuInstr4_vdivps_YMM8_YMM9_FSxBX_icebp_c64, 255, RM_MEM, T_AVX_256, 8, 9, 255, PASS_s_aValues },
     8397    };
     8398#undef PASS_s_aValues
     8399
     8400    static BS3CPUINSTR4_TEST1_MODE_T const s_aTests[3] = BS3CPUINSTR4_TEST1_MODES_INIT(s_aTests16, s_aTests32, s_aTests64);
     8401    unsigned const                         iTest       = BS3CPUINSTR4_TEST_MODES_INDEX(bMode);
     8402    return bs3CpuInstr4_WorkerTestType1(bMode, s_aTests[iTest].paTests, s_aTests[iTest].cTests,
     8403                                        g_aXcptConfig2, RT_ELEMENTS(g_aXcptConfig2));
     8404}
     8405
     8406
     8407/*
    80268408 * [V]ADDSUBPS.
    80278409 */
     
    95329914        { "[v]mulss",       bs3CpuInstr4_v_mulss,    0 },
    95339915        { "[v]mulsd",       bs3CpuInstr4_v_mulsd,    0 },
     9916        { "[v]divps",       bs3CpuInstr4_v_divps,    0 },
    95349917        { "[v]divss",       bs3CpuInstr4_v_divss,    0 },
    95359918        { "[v]divsd",       bs3CpuInstr4_v_divsd,    0 },
Note: See TracChangeset for help on using the changeset viewer.

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