VirtualBox

Changeset 106043 in vbox


Ignore:
Timestamp:
Sep 13, 2024 9:27:21 AM (7 months ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
164793
Message:

ValidationKit/bootsectors: Implement SISD FP testcases for [v]divsd; 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

    r106017 r106043  
    422422
    423423;
     424;; [v]divsd
     425;
     426EMIT_INSTR_PLUS_ICEBP       divsd, XMM1, XMM2
     427EMIT_INSTR_PLUS_ICEBP       divsd, XMM1, FSxBX
     428EMIT_INSTR_PLUS_ICEBP_C64   divsd, XMM8, XMM9
     429EMIT_INSTR_PLUS_ICEBP_C64   divsd, XMM8, FSxBX
     430
     431EMIT_INSTR_PLUS_ICEBP       vdivsd, XMM1, XMM2, XMM3
     432EMIT_INSTR_PLUS_ICEBP       vdivsd, XMM1, XMM2, FSxBX
     433EMIT_INSTR_PLUS_ICEBP_C64   vdivsd, XMM8, XMM9, XMM10
     434EMIT_INSTR_PLUS_ICEBP_C64   vdivsd, XMM8, XMM9, FSxBX
     435
     436;
    424437;; [v]addsubps
    425438;
  • trunk/src/VBox/ValidationKit/bootsectors/bs3-cpu-instr-4.c32

    r106041 r106043  
    74337433
    74347434/*
     7435 * [V]DIVSD.
     7436 */
     7437BS3_DECL_FAR(uint8_t) bs3CpuInstr4_v_divsd(uint8_t bMode)
     7438{
     7439    static BS3CPUINSTR4_TEST1_VALUES_SD_T const s_aValues[] =
     7440    {
     7441    /*
     7442     * Zero.
     7443     */
     7444    /* 0*/{ { /*src2     */ { FP64_0(0), FP64_0(0), FP64_0(0), FP64_0(0) } },
     7445            { /*src1     */ { FP64_0(0), FP64_0(0), FP64_0(0), FP64_0(0) } },
     7446            { /* =>      */ { FP64_QNAN(1), FP64_0(0), FP64_0(0), FP64_0(0) } },
     7447              /*mxcsr:in */ X86_MXCSR_XCPT_MASK,
     7448              /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_IE,
     7449              /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_IE,
     7450              /*xcpt?    */ false, false },
     7451          { { /*src2     */ { FP64_0(0), FP64_0(0), FP64_0(0), FP64_0(0) } },
     7452            { /*src1     */ { FP64_0(0), FP64_0(0), FP64_0(0), FP64_0(0) } },
     7453            { /* =>      */ { FP64_QNAN(1), FP64_0(0), FP64_0(0), FP64_0(0) } },
     7454              /*mxcsr:in */ 0,
     7455              /*128:out  */ X86_MXCSR_IE,
     7456              /*256:out  */ X86_MXCSR_IE,
     7457              /*xcpt?    */ true, true },
     7458          { { /*src2     */ { FP64_0(0), FP64_0(0), FP64_0(0), FP64_0(0) } },
     7459            { /*src1     */ { FP64_0(0), FP64_0(0), FP64_0(0), FP64_0(0) } },
     7460            { /* =>      */ { FP64_QNAN(1), FP64_0(0), FP64_0(0), FP64_0(0) } },
     7461              /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_ZERO,
     7462              /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_ZERO | X86_MXCSR_IE,
     7463              /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_ZERO | X86_MXCSR_IE,
     7464              /*xcpt?    */ false, false },
     7465          { { /*src2     */ { FP64_0(0), FP64_NORM_V3(0), FP64_NORM_V2(0), FP64_0(0)       } },
     7466            { /*src1     */ { FP64_0(0), FP64_0(1),       FP64_0(1),       FP64_NORM_V1(0) } },
     7467            { /* =>      */ { FP64_QNAN(1), FP64_0(1),       FP64_0(1),       FP64_NORM_V1(0) } },
     7468              /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_DOWN,
     7469              /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_DOWN | X86_MXCSR_IE,
     7470              /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_DOWN | X86_MXCSR_IE,
     7471              /*xcpt?    */ false, false },
     7472          { { /*src2     */ { FP64_0(1), FP64_RAND_V3(0), FP64_RAND_V2(1), FP64_RAND_V1(1) } },
     7473            { /*src1     */ { FP64_0(1), FP64_RAND_V0(1), FP64_RAND_V1(1), FP64_RAND_V2(0) } },
     7474            { /* =>      */ { FP64_QNAN(1), FP64_RAND_V0(1), FP64_RAND_V1(1), FP64_RAND_V2(0) } },
     7475              /*mxcsr:in */ X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_UP,
     7476              /*128:out  */ X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_UP | X86_MXCSR_IE,
     7477              /*256:out  */ X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_UP | X86_MXCSR_IE,
     7478              /*xcpt?    */ true, true },
     7479          { { /*src2     */ { FP64_0(1), FP64_RAND_V0(0), FP64_RAND_V1(0), FP64_RAND_V2(1) } },
     7480            { /*src1     */ { FP64_0(0), FP64_RAND_V2(1), FP64_RAND_V3(0), FP64_RAND_V0(0) } },
     7481            { /* =>      */ { FP64_QNAN(1), FP64_RAND_V2(1), FP64_RAND_V3(0), FP64_RAND_V0(0) } },
     7482              /*mxcsr:in */ X86_MXCSR_DAZ | X86_MXCSR_RC_ZERO,
     7483              /*128:out  */ X86_MXCSR_DAZ | X86_MXCSR_RC_ZERO | X86_MXCSR_IE,
     7484              /*256:out  */ X86_MXCSR_DAZ | X86_MXCSR_RC_ZERO | X86_MXCSR_IE,
     7485              /*xcpt?    */ true, true },
     7486          { { /*src2     */ { FP64_0(0), FP64_RAND_V0(0), FP64_RAND_V1(0), FP64_RAND_V2(1) } },
     7487            { /*src1     */ { FP64_0(1), FP64_RAND_V1(1), FP64_RAND_V2(0), FP64_RAND_V0(0) } },
     7488            { /* =>      */ { FP64_QNAN(1), FP64_RAND_V1(1), FP64_RAND_V2(0), FP64_RAND_V0(0) } },
     7489              /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ,
     7490              /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_IE,
     7491              /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_IE,
     7492              /*xcpt?    */ false, false },
     7493          { { /*src2     */ { FP64_0(0), FP64_RAND_V0(0), FP64_RAND_V1(0), FP64_RAND_V2(1) } },
     7494            { /*src1     */ { FP64_1(0), FP64_RAND_V3(1), FP64_RAND_V2(0), FP64_RAND_V0(0) } },
     7495            { /* =>      */ { FP64_INF(0), FP64_RAND_V3(1), FP64_RAND_V2(0), FP64_RAND_V0(0) } },
     7496              /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_FZ | X86_MXCSR_RC_DOWN,
     7497              /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_FZ | X86_MXCSR_RC_DOWN | X86_FSW_ZE,
     7498              /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_FZ | X86_MXCSR_RC_DOWN | X86_FSW_ZE,
     7499              /*xcpt?    */ false, false },
     7500    /*
     7501     * Infinity.
     7502     */
     7503    /* 8*/{ { /*src2     */ { FP64_INF(0), FP64_0(0), FP64_0(0), FP64_0(0) } },
     7504            { /*src1     */ { FP64_1(1),   FP64_0(0), FP64_0(0), FP64_0(0) } },
     7505            { /* =>      */ { FP64_0(1),   FP64_0(0), FP64_0(0), FP64_0(0) } },
     7506              /*mxcsr:in */ X86_MXCSR_XCPT_MASK & ~X86_MXCSR_IM,
     7507              /*128:out  */ X86_MXCSR_XCPT_MASK & ~X86_MXCSR_IM,
     7508              /*256:out  */ X86_MXCSR_XCPT_MASK & ~X86_MXCSR_IM,
     7509              /*xcpt?    */ false, false },
     7510          { { /*src2     */ { FP64_INF(1), FP64_0(0), FP64_0(0), FP64_0(0) } },
     7511            { /*src1     */ { FP64_1(1),   FP64_0(0), FP64_0(0), FP64_0(0) } },
     7512            { /* =>      */ { FP64_0(0),   FP64_0(0), FP64_0(0), FP64_0(0) } },
     7513              /*mxcsr:in */ X86_MXCSR_XCPT_MASK,
     7514              /*128:out  */ X86_MXCSR_XCPT_MASK,
     7515              /*256:out  */ X86_MXCSR_XCPT_MASK,
     7516              /*xcpt?    */ false, false },
     7517          { { /*src2     */ { FP64_INF(0), FP64_RAND_V1(0), FP64_RAND_V2(0), FP64_RAND_V3(1) } },
     7518            { /*src1     */ { FP64_INF(0), FP64_RAND_V0(0), FP64_RAND_V1(1), FP64_RAND_V2(1) } },
     7519            { /* =>      */ { FP64_INF(0), FP64_RAND_V0(0), FP64_RAND_V1(1), FP64_RAND_V2(1) } },
     7520              /*mxcsr:in */ (X86_MXCSR_XCPT_MASK & ~X86_MXCSR_IM) | X86_MXCSR_DAZ | X86_MXCSR_FZ,
     7521              /*128:out  */ (X86_MXCSR_XCPT_MASK & ~X86_MXCSR_IM) | X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_IE,
     7522              /*256:out  */ (X86_MXCSR_XCPT_MASK & ~X86_MXCSR_IM) | X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_IE,
     7523              /*xcpt?    */ true, true },
     7524          { { /*src2     */ { FP64_INF(1), FP64_RAND_V3(0), FP64_RAND_V2(1), FP64_RAND_V1(1) } },
     7525            { /*src1     */ { FP64_INF(0), FP64_RAND_V0(0), FP64_RAND_V1(1), FP64_RAND_V0(0) } },
     7526            { /* =>      */ { FP64_QNAN(1), FP64_RAND_V0(0), FP64_RAND_V1(1), FP64_RAND_V0(0) } },
     7527              /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_ZERO,
     7528              /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_ZERO | X86_MXCSR_IE,
     7529              /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_ZERO | X86_MXCSR_IE,
     7530              /*xcpt?    */ false, false },
     7531          { { /*src2     */ { FP64_1(0),   FP64_RAND_V3(0), FP64_RAND_V2(1), FP64_RAND_V0(1) } },
     7532            { /*src1     */ { FP64_INF(0), FP64_RAND_V1(0), FP64_RAND_V2(0), FP64_RAND_V3(1) } },
     7533            { /* =>      */ { FP64_INF(0), FP64_RAND_V1(0), FP64_RAND_V2(0), FP64_RAND_V3(1) } },
     7534              /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_FZ,
     7535              /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_FZ,
     7536              /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_FZ,
     7537              /*xcpt?    */ false, false },
     7538          { { /*src2     */ { FP64_INF(0), FP64_INF(0), FP64_INF(1), FP64_INF(1) } },
     7539            { /*src1     */ { FP64_1(1),   FP64_INF(1), FP64_INF(1), FP64_INF(0) } },
     7540            { /* =>      */ { FP64_0(1),   FP64_INF(1), FP64_INF(0), FP64_INF(1) } },
     7541              /*mxcsr:in */ X86_MXCSR_FZ,
     7542              /*128:out  */ X86_MXCSR_FZ,
     7543              /*256:out  */ X86_MXCSR_FZ,
     7544              /*xcpt?    */ false, false },
     7545          { { /*src2     */ { FP64_INF(1), FP64_QNAN(0), FP64_SNAN(0), FP64_RAND_V0(0) } },
     7546            { /*src1     */ { FP64_INF(0), FP64_QNAN(0), FP64_SNAN(0), FP64_RAND_V0(0) } },
     7547            { /* =>      */ { FP64_QNAN(1), FP64_QNAN(0), FP64_SNAN(0), FP64_RAND_V0(0) } },
     7548              /*mxcsr:in */ X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_ZERO,
     7549              /*128:out  */ X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_ZERO | X86_MXCSR_IE,
     7550              /*256:out  */ X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_ZERO | X86_MXCSR_IE,
     7551              /*xcpt?    */ true, true },
     7552    /*
     7553     * Normals.
     7554     */
     7555    /*15*/{ { /*src2     */ { FP64_V(0, 0xe66f500000000, 0x40d)/*31131.828125*/, FP64_RAND_V1(0), FP64_RAND_V2(0), FP64_RAND_V3(1) } },
     7556            { /*src1     */ { FP64_V(0, 0xe66f500000000, 0x40d)/*31131.828125*/, FP64_RAND_V0(0), FP64_RAND_V1(1), FP64_RAND_V2(1) } },
     7557            { /* =>      */ { FP64_1(0),                                         FP64_RAND_V0(0), FP64_RAND_V1(1), FP64_RAND_V2(1) } },
     7558             /*mxcsr:in */ X86_MXCSR_XCPT_MASK,
     7559             /*128:out  */ X86_MXCSR_XCPT_MASK,
     7560             /*256:out  */ X86_MXCSR_XCPT_MASK,
     7561             /*xcpt?    */ false, false },
     7562          { { /*src2     */ { FP64_V(0, 0xaf00000000000, 0x406)/*      215.50*/, FP64_RAND_V2(0), FP64_RAND_V3(0), FP64_RAND_V2(1) } },
     7563            { /*src1     */ { FP64_V(0, 0xfb74e1d800000, 0x41a)/*266053390.75*/, FP64_RAND_V1(0), FP64_RAND_V1(1), FP64_RAND_V0(1) } },
     7564            { /* =>      */ { FP64_V(0, 0x2d69a80000000, 0x413)/*  1234586.50*/, FP64_RAND_V1(0), FP64_RAND_V1(1), FP64_RAND_V0(1) } },
     7565             /*mxcsr:in */ X86_MXCSR_XCPT_MASK,
     7566             /*128:out  */ X86_MXCSR_XCPT_MASK,
     7567             /*256:out  */ X86_MXCSR_XCPT_MASK,
     7568             /*xcpt?    */ false, false },
     7569          { { /*src2     */ { FP64_V(1, 0x107526e749f80, 0x42b)/*-18723145413791.50*/, FP64_RAND_V3(0), FP64_RAND_V1(0), FP64_RAND_V1(1) } },
     7570            { /*src1     */ { FP64_V(0, 0x549270a11c760, 0x42c)/* 46807863534478.75*/, FP64_RAND_V0(0), FP64_RAND_V2(1), FP64_RAND_V2(1) } },
     7571            { /* =>      */ { FP64_V(1, 0x4000000000000, 0x400)/*             -2.50*/, FP64_RAND_V0(0), FP64_RAND_V2(1), FP64_RAND_V2(1) } },
     7572             /*mxcsr:in */ X86_MXCSR_XCPT_MASK,
     7573             /*128:out  */ X86_MXCSR_XCPT_MASK,
     7574             /*256:out  */ X86_MXCSR_XCPT_MASK,
     7575             /*xcpt?    */ false, false },
     7576          { { /*src2     */ { FP64_V(0, 0x6fee0e4bd0000, 0x420)/* 12345678999.62500*/, FP64_RAND_V3(0), FP64_RAND_V2(0), FP64_RAND_V1(1) } },
     7577            { /*src1     */ { FP64_V(0, 0x3c30944926c00, 0x424)/*169753086244.84375*/, FP64_RAND_V2(0), FP64_RAND_V1(1), FP64_RAND_V3(1) } },
     7578            { /* =>      */ { FP64_V(0, 0xb800000000000, 0x402)/*          13.75000*/, FP64_RAND_V2(0), FP64_RAND_V1(1), FP64_RAND_V3(1) } },
     7579             /*mxcsr:in */ X86_MXCSR_XCPT_MASK,
     7580             /*128:out  */ X86_MXCSR_XCPT_MASK,
     7581             /*256:out  */ X86_MXCSR_XCPT_MASK,
     7582             /*xcpt?    */ false, false },
     7583          { { /*src2     */ { FP64_NORM_MAX(1), FP64_RAND_V2(1), FP64_RAND_V2(1), FP64_RAND_V3(1) } },
     7584            { /*src1     */ { FP64_NORM_MAX(0), FP64_RAND_V1(1), FP64_RAND_V0(0), FP64_RAND_V2(0) } },
     7585            { /* =>      */ { FP64_1(1),        FP64_RAND_V1(1), FP64_RAND_V0(0), FP64_RAND_V2(0) } },
     7586             /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_DOWN,
     7587             /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_DOWN,
     7588             /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_DOWN,
     7589             /*xcpt?    */ false, false },
     7590          { { /*src2     */ { FP64_V(0, 0xbcd80e0108cc0, 0x42e)/*244555555308646.00*/, FP64_RAND_V2(0), FP64_RAND_V2(0), FP64_RAND_V1(1) } },
     7591            { /*src1     */ { FP64_V(0, 0x4da20a80c6990, 0x42e)/*183416666481484.50*/, FP64_RAND_V1(1), FP64_RAND_V2(1), FP64_RAND_V3(1) } },
     7592            { /* =>      */ { FP64_V(0, 0x8000000000000, 0x3fe)/*              0.75*/, FP64_RAND_V1(1), FP64_RAND_V2(1), FP64_RAND_V3(1) } },
     7593             /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_DOWN,
     7594             /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_DOWN,
     7595             /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_DOWN,
     7596             /*xcpt?    */ false, false },
     7597          { { /*src2     */ { FP64_V(1, 0x68b83b1ed4000, 0x41e)/*-3025935759.4140625*/, FP64_RAND_V0(0), FP64_RAND_V1(0), FP64_RAND_V2(1) } },
     7598            { /*src1     */ { FP64_V(0, 0x68b83b1ed4000, 0x41f)/* 6051871518.8281250*/, FP64_RAND_V2(0), FP64_RAND_V1(1), FP64_RAND_V3(1) } },
     7599            { /* =>      */ { FP64_V(1, 0,               0x400)/*         -2.0000000*/, FP64_RAND_V2(0), FP64_RAND_V1(1), FP64_RAND_V3(1) } },
     7600             /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_DOWN,
     7601             /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_DOWN,
     7602             /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_DOWN,
     7603             /*xcpt?    */ false, false },
     7604          { { /*src2     */ { FP64_V(0, 0xb88e0395d49b0, 0x42d)/*121098765432102.75*/, FP64_RAND_V3(0), FP64_RAND_V2(0), FP64_RAND_V1(1) } },
     7605            { /*src1     */ { FP64_V(0, 0x4a6a82b05f744, 0x42f)/*363296296296308.25*/, FP64_RAND_V1(1), FP64_RAND_V1(1), FP64_RAND_V3(0) } },
     7606            { /* =>      */ { FP64_V(0, 0x8000000000000, 0x400)/*              3.00*/, FP64_RAND_V1(1), FP64_RAND_V1(1), FP64_RAND_V3(0) } },
     7607             /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_DOWN,
     7608             /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_DOWN,
     7609             /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_DOWN,
     7610             /*xcpt?    */ false, false },
     7611          { { /*src2     */ { FP64_1(0),                 FP64_0(0),                                                FP64_NORM_SAFE_INT_MIN(0), FP64_NORM_MAX(1)          } },
     7612            { /*src1     */ { FP64_NORM_SAFE_INT_MAX(0), FP64_V(0, FP64_FRAC_NORM_MAX - 1, FP64_EXP_SAFE_INT_MAX), FP64_INF(1),               FP64_NORM_SAFE_INT_MIN(1) } },
     7613            { /* =>      */ { FP64_NORM_SAFE_INT_MAX(0), FP64_V(0, FP64_FRAC_NORM_MAX - 1, FP64_EXP_SAFE_INT_MAX), FP64_INF(1),               FP64_NORM_SAFE_INT_MIN(1) } },
     7614             /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_ZERO,
     7615             /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_ZERO,
     7616             /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_ZERO,
     7617             /*xcpt?    */ false, false },
     7618          { { /*src2     */ { FP64_NORM_V0(0), FP64_NORM_V1(1), FP64_NORM_V2(0), FP64_NORM_V3(1) } },
     7619            { /*src1     */ { FP64_NORM_V0(0), FP64_SNAN(0),    FP64_SNAN(1),    FP64_QNAN(0)    } },
     7620            { /* =>      */ { FP64_1(0),       FP64_SNAN(0),    FP64_SNAN(1),    FP64_QNAN(0)    } },
     7621             /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_DOWN,
     7622             /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_DOWN,
     7623             /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_DOWN,
     7624             /*xcpt?    */ false, false },
     7625    /*
     7626     * Denormals.
     7627     */
     7628    /*25*/{ { /* UNMASKED:           0 /  DENORM_MAX = 0       &&_DE */
     7629              /*src2     */ { FP64_DENORM_MAX(0), FP64_0(0),           FP64_DENORM_MIN(0), FP64_0(0)          } },
     7630            { /*src1     */ { FP64_0(0),          FP64_DENORM_MIN(0),  FP64_0(0),          FP64_DENORM_MAX(0) } },
     7631            { /* =>      */ { FP64_0(0),          FP64_DENORM_MIN(0),  FP64_0(0),          FP64_DENORM_MAX(0) } },
     7632             /*mxcsr:in */ 0,
     7633             /*128:out  */ X86_MXCSR_DE,
     7634             /*256:out  */ X86_MXCSR_DE,
     7635             /*xcpt?    */ true, true },
     7636          { { /*   MASKED:           0 /  DENORM_MAX = 0        &_DE */
     7637              /*src2     */ { FP64_DENORM_MAX(0), FP64_0(0),           FP64_DENORM_MIN(0), FP64_0(0)          } },
     7638            { /*src1     */ { FP64_0(0),          FP64_DENORM_MIN(0),  FP64_0(0),          FP64_DENORM_MAX(0) } },
     7639            { /* =>      */ { FP64_0(0),          FP64_DENORM_MIN(0),  FP64_0(0),          FP64_DENORM_MAX(0) } },
     7640             /*mxcsr:in */ X86_MXCSR_XCPT_MASK,
     7641             /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DE,
     7642             /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DE,
     7643             /*xcpt?    */ false, false },
     7644          { { /* UNMASKED:  DENORM_MAX / -0          = -INF    &&_ZE */
     7645              /*src2     */ { FP64_0(1),          FP64_0(0),           FP64_DENORM_MIN(0), FP64_0(0)          } },
     7646            { /*src1     */ { FP64_DENORM_MAX(0), FP64_DENORM_MIN(0),  FP64_0(0),          FP64_DENORM_MAX(0) } },
     7647            { /* =>      */ { FP64_INF(1),        FP64_DENORM_MIN(0),  FP64_0(0),          FP64_DENORM_MAX(0) } },
     7648             /*mxcsr:in */ 0,
     7649             /*128:out  */ X86_MXCSR_ZE,
     7650             /*256:out  */ X86_MXCSR_ZE,
     7651             /*xcpt?    */ true, true },
     7652          { { /*   MASKED: -DENORM_MAX / -0          = INF      &_ZE */
     7653              /*src2     */ { FP64_0(1),          FP64_0(0),           FP64_DENORM_MIN(0), FP64_0(0)          } },
     7654            { /*src1     */ { FP64_DENORM_MAX(1), FP64_DENORM_MIN(0),  FP64_0(0),          FP64_DENORM_MAX(0) } },
     7655            { /* =>      */ { FP64_INF(0),        FP64_DENORM_MIN(0),  FP64_0(0),          FP64_DENORM_MAX(0) } },
     7656             /*mxcsr:in */ X86_MXCSR_XCPT_MASK,
     7657             /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_ZE,
     7658             /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_ZE,
     7659             /*xcpt?    */ false, false },
     7660          { { /*   MASKED: -DENORM_MAX /  DENORM_MIN = (-huge)  &_DE */
     7661              /*src2     */ { FP64_DENORM_MIN(0), FP64_0(0),           FP64_RAND_V2(0), FP64_RAND_V1(1) } },
     7662            { /*src1     */ { FP64_DENORM_MAX(1), FP64_DENORM_MIN(0),  FP64_RAND_V1(1), FP64_RAND_V3(0) } },
     7663            { /* =>      */ { FP64_V(1, 0xffffffffffffe, 0x432)/*-4503599627370495.0*/, FP64_DENORM_MIN(0),  FP64_RAND_V1(1), FP64_RAND_V3(0) } },
     7664             /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_UP,
     7665             /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_UP | X86_MXCSR_DE,
     7666             /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_UP | X86_MXCSR_DE,
     7667             /*xcpt?    */ false, false },
     7668          { { /* UNMASKED: -DENORM_MAX / -DENORM_MIN = (huge)  &&_DE */
     7669              /*src2     */ { FP64_DENORM_MIN(1), FP64_0(0),           FP64_RAND_V2(0), FP64_RAND_V1(1) } },
     7670            { /*src1     */ { FP64_DENORM_MAX(1), FP64_DENORM_MIN(0),  FP64_RAND_V1(1), FP64_RAND_V3(0) } },
     7671            { /* =>      */ { FP64_V(0, 0xffffffffffffe, 0x432)/*4503599627370495.0*/, FP64_DENORM_MIN(0),  FP64_RAND_V1(1), FP64_RAND_V3(0) } },
     7672             /*mxcsr:in */ X86_MXCSR_RC_UP,
     7673             /*128:out  */ X86_MXCSR_RC_UP | X86_MXCSR_DE,
     7674             /*256:out  */ X86_MXCSR_RC_UP | X86_MXCSR_DE,
     7675             /*xcpt?    */ true, true },
     7676          { { /*   MASKED: -DENORM_MIN /  DENORM_MAX = (-tiny)  &_DE,_PE */
     7677              /*src2     */ { FP64_DENORM_MAX(0), FP64_0(0),           FP64_RAND_V2(0), FP64_RAND_V1(1) } },
     7678            { /*src1     */ { FP64_DENORM_MIN(1), FP64_DENORM_MIN(0),  FP64_RAND_V1(1), FP64_RAND_V3(0) } },
     7679            { /* =>      */ { FP64_V(1, 0x0000000000001, 0x3cb)/*-22204460492503135739e-35*/, FP64_DENORM_MIN(0),  FP64_RAND_V1(1), FP64_RAND_V3(0) } },
     7680             /*mxcsr:in */ X86_MXCSR_XCPT_MASK,
     7681             /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DE | X86_MXCSR_PE,
     7682             /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DE | X86_MXCSR_PE,
     7683             /*xcpt?    */ false, false },
     7684          { { /*   MASKED:          -0 /  DENORM_MIN = -0       &_DE */
     7685              /*src2     */ { FP64_DENORM_MIN(0), FP64_0(0),           FP64_RAND_V2(0), FP64_RAND_V1(1) } },
     7686            { /*src1     */ { FP64_0(1), FP64_DENORM_MIN(0),  FP64_RAND_V1(1), FP64_RAND_V3(0) } },
     7687            { /* =>      */ { FP64_0(1), FP64_DENORM_MIN(0),  FP64_RAND_V1(1), FP64_RAND_V3(0) } },
     7688             /*mxcsr:in */ X86_MXCSR_XCPT_MASK,
     7689             /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DE,
     7690             /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DE,
     7691             /*xcpt?    */ false, false },
     7692          { { /*   MASKED:       -0.25 /  DENORM_MAX = (-HUGE)  &_DE &_PE */
     7693              /*src2     */ { FP64_DENORM_MAX(0), FP64_0(0),           FP64_RAND_V2(0), FP64_RAND_V1(1) } },
     7694            { /*src1     */ { FP64_V(1, 0, 0x3fd)/*0.25*/, FP64_DENORM_MIN(0),  FP64_RAND_V1(1), FP64_RAND_V3(0) } },
     7695            { /* =>      */ { FP64_V(1, 1, 0x7fb)/*1.1XYZe307*/, FP64_DENORM_MIN(0),  FP64_RAND_V1(1), FP64_RAND_V3(0) } },
     7696             /*mxcsr:in */ X86_MXCSR_XCPT_MASK,
     7697             /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DE | X86_MXCSR_PE,
     7698             /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DE | X86_MXCSR_PE,
     7699             /*xcpt?    */ false, false },
     7700          { { /*   MASKED:        42.0 /  DENORM_MIN = INF      &_DE &_PE &_OE */
     7701              /*src2     */ { FP64_DENORM_MIN(0), FP64_0(0),           FP64_RAND_V2(0), FP64_RAND_V1(1) } },
     7702            { /*src1     */ { FP64_V(0, 0x5000000000000, 0x404)/*42.0*/, FP64_DENORM_MIN(0),  FP64_RAND_V1(1), FP64_RAND_V3(0) } },
     7703            { /* =>      */ { FP64_INF(0), FP64_DENORM_MIN(0),  FP64_RAND_V1(1), FP64_RAND_V3(0) } },
     7704             /*mxcsr:in */ X86_MXCSR_XCPT_MASK,
     7705             /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DE | X86_MXCSR_PE | X86_MXCSR_OE,
     7706             /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DE | X86_MXCSR_PE | X86_MXCSR_OE,
     7707             /*xcpt?    */ false, false },
     7708          { { /* ~OMASKED:        42.0 /  DENORM_MIN = INF      &_DE &&_OE */
     7709              /*src2     */ { FP64_DENORM_MIN(0), FP64_0(0),           FP64_RAND_V2(0), FP64_RAND_V1(1) } },
     7710            { /*src1     */ { FP64_V(0, 0x5000000000000, 0x404)/*42.0*/, FP64_DENORM_MIN(0),  FP64_RAND_V1(1), FP64_RAND_V3(0) } },
     7711            { /* =>      */ { FP64_INF(0), FP64_DENORM_MIN(0),  FP64_RAND_V1(1), FP64_RAND_V3(0) } },
     7712             /*mxcsr:in */ X86_MXCSR_XCPT_MASK & ~X86_MXCSR_OM,
     7713             /*128:out  */ (X86_MXCSR_XCPT_MASK & ~X86_MXCSR_OM) | X86_MXCSR_DE | X86_MXCSR_OE,
     7714             /*256:out  */ (X86_MXCSR_XCPT_MASK & ~X86_MXCSR_OM) | X86_MXCSR_DE | X86_MXCSR_OE,
     7715             /*xcpt?    */ true, true },
     7716          { { /* DAZ+MASK:        42.0 /  DENORM_MIN = INF      &_ZE */
     7717              /*src2     */ { FP64_DENORM_MIN(0), FP64_0(0),           FP64_RAND_V2(0), FP64_RAND_V1(1) } },
     7718            { /*src1     */ { FP64_V(0, 0x5000000000000, 0x404)/*42.0*/, FP64_DENORM_MIN(0),  FP64_RAND_V1(1), FP64_RAND_V3(0) } },
     7719            { /* =>      */ { FP64_INF(0), FP64_DENORM_MIN(0),  FP64_RAND_V1(1), FP64_RAND_V3(0) } },
     7720             /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ,
     7721             /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_ZE | X86_MXCSR_DAZ,
     7722             /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_ZE | X86_MXCSR_DAZ,
     7723             /*xcpt?    */ false, false },
     7724          { { /*   MASKED:  DENORM_MAX /       -42.0 = -5e-310  &_DE &_PE &_UE */
     7725              /*src2     */ { FP64_V(1, 0x5000000000000, 0x404)/*-42.0*/, FP64_0(0),           FP64_RAND_V2(0), FP64_RAND_V1(1) } },
     7726            { /*src1     */ { FP64_DENORM_MAX(0), FP64_DENORM_MIN(0),  FP64_RAND_V1(1), FP64_RAND_V3(0) } },
     7727            { /* =>      */ { FP64_V(1, 0x618618618618, 0)/*-5.29XYZe-310*/, FP64_DENORM_MIN(0),  FP64_RAND_V1(1), FP64_RAND_V3(0) } },
     7728             /*mxcsr:in */ X86_MXCSR_XCPT_MASK,
     7729             /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DE | X86_MXCSR_PE | X86_MXCSR_UE,
     7730             /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DE | X86_MXCSR_PE | X86_MXCSR_UE,
     7731             /*xcpt?    */ false, false },
     7732#ifdef TODO_X86_MXCSR_PE /** @todo: THIS FAILS ON IEM: X86_MXCSR_PE not set in 128:out */
     7733          { { /* ~UMASKED:  DENORM_MAX /        42.0 = 5e-310   &_DE &_PE &&_UE */
     7734              /*src2     */ { FP64_V(0, 0x5000000000000, 0x404)/*-42.0*/, FP64_0(0),           FP64_RAND_V2(0), FP64_RAND_V1(1) } },
     7735            { /*src1     */ { FP64_DENORM_MAX(0), FP64_DENORM_MIN(0),  FP64_RAND_V1(1), FP64_RAND_V3(0) } },
     7736            { /* =>      */ { FP64_V(0, 0x618618618618, 0)/*-5.29XYZe-310*/, FP64_DENORM_MIN(0),  FP64_RAND_V1(1), FP64_RAND_V3(0) } },
     7737             /*mxcsr:in */ X86_MXCSR_XCPT_MASK & ~X86_MXCSR_UM,
     7738             /*128:out  */ (X86_MXCSR_XCPT_MASK & ~X86_MXCSR_UM) | X86_MXCSR_PE | X86_MXCSR_DE | X86_MXCSR_UE,
     7739             /*256:out  */ (X86_MXCSR_XCPT_MASK & ~X86_MXCSR_UM) | X86_MXCSR_PE | X86_MXCSR_DE | X86_MXCSR_UE,
     7740             /*xcpt?    */ true, true },
     7741#endif /* TODO_X86_MXCSR_PE */
     7742          { { /* DAZ+MASK:  DENORM_MAX /       -42.0 = -0       &- */
     7743              /*src2     */ { FP64_V(1, 0x5000000000000, 0x404)/*-42.0*/, FP64_0(0),           FP64_RAND_V2(0), FP64_RAND_V1(1) } },
     7744            { /*src1     */ { FP64_DENORM_MAX(0), FP64_DENORM_MIN(0),  FP64_RAND_V1(1), FP64_RAND_V3(0) } },
     7745            { /* =>      */ { FP64_0(1), FP64_DENORM_MIN(0),  FP64_RAND_V1(1), FP64_RAND_V3(0) } },
     7746             /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ,
     7747             /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ,
     7748             /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ,
     7749             /*xcpt?    */ false, false },
     7750          { { /* DAZ+FZ+M:  DENORM_MAX /       -42.0 = -0       &- */
     7751              /*src2     */ { FP64_V(1, 0x5000000000000, 0x404)/*-42.0*/, FP64_0(0),           FP64_RAND_V2(0), FP64_RAND_V1(1) } },
     7752            { /*src1     */ { FP64_DENORM_MAX(0), FP64_DENORM_MIN(0),  FP64_RAND_V1(1), FP64_RAND_V3(0) } },
     7753            { /* =>      */ { FP64_0(1), FP64_DENORM_MIN(0),  FP64_RAND_V1(1), FP64_RAND_V3(0) } },
     7754             /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_FZ,
     7755             /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_FZ,
     7756             /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_FZ,
     7757             /*xcpt?    */ false, false },
     7758          /** @todo: how to usefully test FZ, RC_{NEAREST,UP,DOWN,ZERO} ? */
     7759
     7760    /*
     7761     * Invalids.
     7762     */
     7763    /*40*/ BS3CPUINSTR4_SD_INVALIDS
     7764    /** @todo Underflow, Precision; Rounding; FZ etc. */
     7765    };
     7766
     7767#define PASS_s_aValues RT_ELEMENTS(s_aValues), (BS3CPUINSTR4_TEST1_VALUES_T *)s_aValues
     7768    static BS3CPUINSTR4_TEST1_T const s_aTests16[] =
     7769    {
     7770        { bs3CpuInstr4_divsd_XMM1_XMM2_icebp_c16,        255,         RM_REG, T_SSE,     1, 1, 2,   PASS_s_aValues },
     7771        { bs3CpuInstr4_divsd_XMM1_FSxBX_icebp_c16,       255,         RM_MEM, T_SSE,     1, 1, 255, PASS_s_aValues },
     7772
     7773        { bs3CpuInstr4_vdivsd_XMM1_XMM2_XMM3_icebp_c16,  255,         RM_REG, T_AVX_128, 1, 2, 3,   PASS_s_aValues },
     7774        { bs3CpuInstr4_vdivsd_XMM1_XMM2_FSxBX_icebp_c16, X86_XCPT_AC, RM_MEM, T_AVX_128, 1, 2, 255, PASS_s_aValues },
     7775    };
     7776    static BS3CPUINSTR4_TEST1_T const s_aTests32[] =
     7777    {
     7778        { bs3CpuInstr4_divsd_XMM1_XMM2_icebp_c32,        255,         RM_REG, T_SSE,     1, 1, 2,   PASS_s_aValues },
     7779        { bs3CpuInstr4_divsd_XMM1_FSxBX_icebp_c32,       255,         RM_MEM, T_SSE,     1, 1, 255, PASS_s_aValues },
     7780
     7781        { bs3CpuInstr4_vdivsd_XMM1_XMM2_XMM3_icebp_c32,  255,         RM_REG, T_AVX_128, 1, 2, 3,   PASS_s_aValues },
     7782        { bs3CpuInstr4_vdivsd_XMM1_XMM2_FSxBX_icebp_c32, X86_XCPT_AC, RM_MEM, T_AVX_128, 1, 2, 255, PASS_s_aValues },
     7783    };
     7784    static BS3CPUINSTR4_TEST1_T const s_aTests64[] =
     7785    {
     7786        { bs3CpuInstr4_divsd_XMM1_XMM2_icebp_c64,        255,         RM_REG, T_SSE,     1, 1, 2,   PASS_s_aValues },
     7787        { bs3CpuInstr4_divsd_XMM1_FSxBX_icebp_c64,       255,         RM_MEM, T_SSE,     1, 1, 255, PASS_s_aValues },
     7788
     7789        { bs3CpuInstr4_vdivsd_XMM1_XMM2_XMM3_icebp_c64,  255,         RM_REG, T_AVX_128, 1, 2, 3,   PASS_s_aValues },
     7790        { bs3CpuInstr4_vdivsd_XMM1_XMM2_FSxBX_icebp_c64, X86_XCPT_AC, RM_MEM, T_AVX_128, 1, 2, 255, PASS_s_aValues },
     7791
     7792        { bs3CpuInstr4_divsd_XMM8_XMM9_icebp_c64,        255,         RM_REG, T_SSE,     8, 8, 9,   PASS_s_aValues },
     7793        { bs3CpuInstr4_divsd_XMM8_FSxBX_icebp_c64,       X86_XCPT_AC, RM_MEM, T_SSE,     8, 8, 255, PASS_s_aValues },
     7794
     7795        { bs3CpuInstr4_vdivsd_XMM8_XMM9_XMM10_icebp_c64, 255,         RM_REG, T_AVX_128, 8, 9, 10,  PASS_s_aValues },
     7796        { bs3CpuInstr4_vdivsd_XMM8_XMM9_FSxBX_icebp_c64, X86_XCPT_AC, RM_MEM, T_AVX_128, 8, 9, 255, PASS_s_aValues },
     7797    };
     7798#undef PASS_s_aValues
     7799
     7800    static BS3CPUINSTR4_TEST1_MODE_T const s_aTests[3] = BS3CPUINSTR4_TEST1_MODES_INIT(s_aTests16, s_aTests32, s_aTests64);
     7801    unsigned const                         iTest       = BS3CPUINSTR4_TEST_MODES_INDEX(bMode);
     7802    return bs3CpuInstr4_WorkerTestType1(bMode, s_aTests[iTest].paTests, s_aTests[iTest].cTests,
     7803                                        g_aXcptConfig3, RT_ELEMENTS(g_aXcptConfig3));
     7804}
     7805
     7806
     7807/*
    74357808 * [V]ADDSUBPS.
    74367809 */
     
    85078880        { "[v]mulsd",       bs3CpuInstr4_v_mulsd,    0 },
    85088881        { "[v]divss",       bs3CpuInstr4_v_divss,    0 },
     8882        { "[v]divsd",       bs3CpuInstr4_v_divsd,    0 },
    85098883        { "[v]addsubps",    bs3CpuInstr4_v_addsubps, 0 },
    85108884        { "[v]addsubpd",    bs3CpuInstr4_v_addsubpd, 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