VirtualBox

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


Ignore:
Timestamp:
Aug 6, 2024 8:57:29 AM (9 months ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
164278
Message:

ValidationKit/bootsectors: bugref:10658 SIMD FP testcase: [v]mulss (W.I.P) -- Allow setting all MXCSR bits (other than MXCSR.MM bit) prior to testing the instruction and explicitly specifying FP-exception for 128-bit and 256-bit variants.

File:
1 edited

Legend:

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

    r105597 r105599  
    49054905
    49064906
    4907 #if 0
    49084907/*
    49094908 * [V]MULSS.
     
    49194918            { /*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) } },
    49204919            { /* =>      */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0) } },
    4921               /*mask     */ X86_MXCSR_XCPT_MASK,
    4922               /*daz,fz,rc*/ 0, 0, X86_MXCSR_RC_NEAREST,
    4923               /*flags    */ 0, 0 },
     4920             /*mxcsr:in */ X86_MXCSR_XCPT_MASK,
     4921             /*128:out  */ X86_MXCSR_XCPT_MASK,
     4922             /*256:out  */ X86_MXCSR_XCPT_MASK,
     4923             /*xcpt?    */ false, false },
    49244924          { { /*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) } },
    49254925            { /*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) } },
    49264926            { /* =>      */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0) } },
    4927               /*mask     */ ~X86_MXCSR_XCPT_MASK,
    4928               /*daz,fz,rc*/ 0, 0, X86_MXCSR_RC_NEAREST,
    4929               /*flags    */ 0, 0 },
     4927             /*mxcsr:in */ 0,
     4928             /*128:out  */ 0,
     4929             /*256:out  */ 0,
     4930             /*xcpt?    */ false, false },
    49304931          { { /*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) } },
    49314932            { /*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) } },
    49324933            { /* =>      */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0) } },
    4933               /*mask     */ X86_MXCSR_XCPT_MASK,
    4934               /*daz,fz,rc*/ X86_MXCSR_DAZ, X86_MXCSR_FZ, X86_MXCSR_RC_ZERO,
    4935               /*flags    */ 0, 0 },
     4934             /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_ZERO,
     4935             /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_ZERO,
     4936             /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_ZERO,
     4937             /*xcpt?    */ false, false },
    49364938          { { /*src2     */ { FP32_0(0), FP32_NORM_V7(0), FP32_NORM_V6(0), FP32_0(0),       FP32_0(1),       FP32_NORM_V3(0), FP32_0(0),       FP32_0(0)       } },
    49374939            { /*src1     */ { FP32_0(0), FP32_0(1),       FP32_0(1),       FP32_NORM_V2(0), FP32_NORM_V3(1), FP32_0(0),       FP32_NORM_V6(0), FP32_NORM_V2(0) } },
    49384940            { /* =>      */ { FP32_0(0), FP32_0(1),       FP32_0(1),       FP32_NORM_V2(0), FP32_NORM_V3(0), FP32_0(0),       FP32_NORM_V6(0), FP32_NORM_V2(0) } },
    4939               /*mask     */ X86_MXCSR_XCPT_MASK,
    4940               /*daz,fz,rc*/ X86_MXCSR_DAZ, X86_MXCSR_FZ, X86_MXCSR_RC_DOWN,
    4941               /*flags    */ 0, 0 },
     4941             /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_DOWN,
     4942             /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_DOWN,
     4943             /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_DOWN,
     4944             /*xcpt?    */ false, false },
    49424945          { { /*src2     */ { FP32_0(1), FP32_0(0), FP32_RAND_V6(0), FP32_RAND_V5(1), FP32_RAND_V4(1), FP32_RAND_V3(0), FP32_RAND_V2(1), FP32_RAND_V1(1) } },
    49434946            { /*src1     */ { FP32_0(1), FP32_0(0), FP32_RAND_V1(0), FP32_RAND_V2(1), FP32_RAND_V3(0), FP32_RAND_V4(1), FP32_RAND_V5(1), FP32_RAND_V6(0) } },
    49444947            { /* =>      */ { FP32_0(0), FP32_0(0), FP32_RAND_V1(0), FP32_RAND_V2(1), FP32_RAND_V3(0), FP32_RAND_V4(1), FP32_RAND_V5(1), FP32_RAND_V6(0) } },
    4945               /*mask     */ ~X86_MXCSR_XCPT_MASK,
    4946               /*daz,fz,rc*/ X86_MXCSR_DAZ, X86_MXCSR_FZ, X86_MXCSR_RC_UP,
    4947               /*flags    */ 0, 0 },
     4948             /*mxcsr:in */ X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_UP,
     4949             /*128:out  */ X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_UP,
     4950             /*256:out  */ X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_UP,
     4951             /*xcpt?    */ false, false },
    49484952          { { /*src2     */ { FP32_0(1), FP32_RAND_V0(0), FP32_RAND_V1(0), FP32_RAND_V2(1), FP32_RAND_V3(1), FP32_RAND_V4(0), FP32_RAND_V5(1), FP32_RAND_V6(1) } },
    49494953            { /*src1     */ { FP32_0(0), FP32_RAND_V7(1), FP32_RAND_V6(0), FP32_RAND_V5(0), FP32_RAND_V4(1), FP32_RAND_V3(0), FP32_RAND_V2(0), FP32_RAND_V1(1) } },
    49504954            { /* =>      */ { FP32_0(1), FP32_RAND_V7(1), FP32_RAND_V6(0), FP32_RAND_V5(0), FP32_RAND_V4(1), FP32_RAND_V3(0), FP32_RAND_V2(0), FP32_RAND_V1(1) } },
    4951               /*mask     */ ~X86_MXCSR_XCPT_MASK,
    4952               /*daz,fz,rc*/ X86_MXCSR_DAZ, 0, X86_MXCSR_RC_ZERO,
    4953               /*flags    */ 0, 0 },
     4955             /*mxcsr:in */ X86_MXCSR_DAZ | X86_MXCSR_RC_ZERO,
     4956             /*128:out  */ X86_MXCSR_DAZ | X86_MXCSR_RC_ZERO,
     4957             /*256:out  */ X86_MXCSR_DAZ | X86_MXCSR_RC_ZERO,
     4958             /*xcpt?    */ false, false },
    49544959          { { /*src2     */ { FP32_0(0), FP32_RAND_V0(0), FP32_RAND_V1(0), FP32_RAND_V2(1), FP32_RAND_V3(1), FP32_RAND_V4(0), FP32_RAND_V5(1), FP32_RAND_V6(1) } },
    49554960            { /*src1     */ { FP32_0(1), FP32_RAND_V6(1), FP32_RAND_V3(0), FP32_RAND_V0(0), FP32_RAND_V1(1), FP32_RAND_V3(0), FP32_RAND_V0(0), FP32_RAND_V3(1) } },
    49564961            { /* =>      */ { FP32_0(1), FP32_RAND_V6(1), FP32_RAND_V3(0), FP32_RAND_V0(0), FP32_RAND_V1(1), FP32_RAND_V3(0), FP32_RAND_V0(0), FP32_RAND_V3(1) } },
    4957               /*mask     */ X86_MXCSR_XCPT_MASK,
    4958               /*daz,fz,rc*/ X86_MXCSR_DAZ, 0, X86_MXCSR_RC_NEAREST,
    4959               /*flags    */ 0, 0 },
     4962             /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ,
     4963             /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ,
     4964             /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ,
     4965             /*xcpt?    */ false, false },
    49604966          { { /*src2     */ { FP32_0(0), FP32_RAND_V0(0), FP32_RAND_V1(0), FP32_RAND_V2(1), FP32_RAND_V3(1), FP32_RAND_V4(0), FP32_RAND_V5(1), FP32_RAND_V6(1) } },
    49614967            { /*src1     */ { FP32_1(0), FP32_RAND_V6(1), FP32_RAND_V3(0), FP32_RAND_V0(0), FP32_RAND_V1(1), FP32_RAND_V3(0), FP32_RAND_V0(0), FP32_RAND_V3(1) } },
    49624968            { /* =>      */ { FP32_0(0), FP32_RAND_V6(1), FP32_RAND_V3(0), FP32_RAND_V0(0), FP32_RAND_V1(1), FP32_RAND_V3(0), FP32_RAND_V0(0), FP32_RAND_V3(1) } },
    4963               /*mask     */ X86_MXCSR_XCPT_MASK,
    4964               /*daz,fz,rc*/ 0, X86_MXCSR_FZ, X86_MXCSR_RC_DOWN,
    4965               /*flags    */ 0, 0 },
     4969             /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_FZ | X86_MXCSR_RC_DOWN,
     4970             /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_FZ | X86_MXCSR_RC_DOWN,
     4971             /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_FZ | X86_MXCSR_RC_DOWN,
     4972             /*xcpt?    */ false, false },
    49664973    /*
    49674974     * Infinity.
     
    49704977            { /*src1     */ { FP32_1(1),   FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0) } },
    49714978            { /* =>      */ { FP32_INF(1), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0) } },
    4972               /*mask     */ ~X86_MXCSR_IM,
    4973               /*daz,fz,rc*/ 0, 0, X86_MXCSR_RC_NEAREST,
    4974               /*flags    */ 0, 0 },
     4979             /*mxcsr:in */ X86_MXCSR_XCPT_MASK & ~X86_MXCSR_IM,
     4980             /*128:out  */ X86_MXCSR_XCPT_MASK & ~X86_MXCSR_IM,
     4981             /*256:out  */ X86_MXCSR_XCPT_MASK & ~X86_MXCSR_IM,
     4982             /*xcpt?    */ false, false },
    49754983          { { /*src2     */ { FP32_INF(1), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0) } },
    49764984            { /*src1     */ { FP32_1(1),   FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0) } },
    49774985            { /* =>      */ { FP32_INF(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0) } },
    4978               /*mask     */ X86_MXCSR_XCPT_MASK,
    4979               /*daz,fz,rc*/ 0, 0, X86_MXCSR_RC_NEAREST,
    4980               /*flags    */ 0, 0 },
     4986             /*mxcsr:in */ X86_MXCSR_XCPT_MASK,
     4987             /*128:out  */ X86_MXCSR_XCPT_MASK,
     4988             /*256:out  */ X86_MXCSR_XCPT_MASK,
     4989             /*xcpt?    */ false, false },
    49814990          { { /*src2     */ { FP32_INF(0), FP32_RAND_V7(0), FP32_RAND_V6(0), FP32_RAND_V5(1), FP32_RAND_V4(1), FP32_RAND_V3(0), FP32_RAND_V2(1), FP32_RAND_V1(1) } },
    49824991            { /*src1     */ { FP32_INF(0), FP32_RAND_V0(0), FP32_RAND_V1(1), FP32_RAND_V2(1), FP32_RAND_V3(0), FP32_RAND_V4(1), FP32_RAND_V5(1), FP32_RAND_V6(0) } },
    49834992            { /* =>      */ { FP32_INF(0), FP32_RAND_V0(0), FP32_RAND_V1(1), FP32_RAND_V2(1), FP32_RAND_V3(0), FP32_RAND_V4(1), FP32_RAND_V5(1), FP32_RAND_V6(0) } },
    4984               /*mask     */ ~X86_MXCSR_IM,
    4985               /*daz,fz,rc*/ X86_MXCSR_DAZ, X86_MXCSR_FZ, X86_MXCSR_RC_NEAREST,
    4986               /*flags    */ 0, 0 },
     4993             /*mxcsr:in */ (X86_MXCSR_XCPT_MASK & ~X86_MXCSR_IM) | X86_MXCSR_DAZ | X86_MXCSR_FZ,
     4994             /*128:out  */ (X86_MXCSR_XCPT_MASK & ~X86_MXCSR_IM) | X86_MXCSR_DAZ | X86_MXCSR_FZ,
     4995             /*256:out  */ (X86_MXCSR_XCPT_MASK & ~X86_MXCSR_IM) | X86_MXCSR_DAZ | X86_MXCSR_FZ,
     4996             /*xcpt?    */ false, false },
    49874997          { { /*src2     */ { FP32_INF(1), FP32_RAND_V7(1), FP32_RAND_V6(0), FP32_RAND_V5(1), FP32_RAND_V4(0), FP32_RAND_V3(0), FP32_RAND_V2(1), FP32_RAND_V1(1) } },
    49884998            { /*src1     */ { FP32_INF(0), FP32_RAND_V0(1), FP32_RAND_V1(0), FP32_RAND_V2(1), FP32_RAND_V3(0), FP32_RAND_V4(0), FP32_RAND_V5(1), FP32_RAND_V6(0) } },
    49894999            { /* =>      */ { FP32_INF(1), FP32_RAND_V0(1), FP32_RAND_V1(0), FP32_RAND_V2(1), FP32_RAND_V3(0), FP32_RAND_V4(0), FP32_RAND_V5(1), FP32_RAND_V6(0) } },
    4990               /*mask     */ X86_MXCSR_XCPT_MASK,
    4991               /*daz,fz,rc*/ 0, 0, X86_MXCSR_RC_ZERO,
    4992               /*flags    */ 0, 0 },
     5000             /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_ZERO,
     5001             /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_ZERO,
     5002             /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_ZERO,
     5003             /*xcpt?    */ false, false },
    49935004          { { /*src2     */ { FP32_1(0),   FP32_RAND_V0(0), FP32_RAND_V1(0), FP32_RAND_V2(1), FP32_RAND_V3(1), FP32_RAND_V4(0), FP32_RAND_V5(1), FP32_RAND_V6(1) } },
    49945005            { /*src1     */ { FP32_INF(0), FP32_RAND_V6(1), FP32_RAND_V3(0), FP32_RAND_V2(0), FP32_RAND_V0(1), FP32_RAND_V3(0), FP32_RAND_V4(0), FP32_RAND_V2(1) } },
    49955006            { /* =>      */ { FP32_INF(0), FP32_RAND_V6(1), FP32_RAND_V3(0), FP32_RAND_V2(0), FP32_RAND_V0(1), FP32_RAND_V3(0), FP32_RAND_V4(0), FP32_RAND_V2(1) } },
    4996               /*mask     */ X86_MXCSR_XCPT_MASK,
    4997               /*daz,fz,rc*/ 0, X86_MXCSR_FZ, X86_MXCSR_RC_NEAREST,
    4998               /*flags    */ 0, 0 },
     5007             /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_FZ,
     5008             /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_FZ,
     5009             /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_FZ,
     5010             /*xcpt?    */ false, false },
    49995011          { { /*src2     */ { FP32_INF(0), FP32_INF(0), FP32_INF(0), FP32_INF(0), FP32_INF(1), FP32_INF(0), FP32_INF(1), FP32_INF(1) } },
    50005012            { /*src1     */ { FP32_1(1),   FP32_INF(0), FP32_INF(1), FP32_INF(0), FP32_INF(1), FP32_INF(1), FP32_INF(1), FP32_INF(0) } },
    50015013            { /* =>      */ { FP32_INF(1), FP32_INF(0), FP32_INF(1), FP32_INF(0), FP32_INF(0), FP32_INF(1), FP32_INF(0), FP32_INF(1) } },
    5002               /*mask     */ ~X86_MXCSR_XCPT_MASK,
    5003               /*daz,fz,rc*/ 0, X86_MXCSR_FZ, X86_MXCSR_RC_NEAREST,
    5004               /*flags    */ 0, 0 },
     5014             /*mxcsr:in */ X86_MXCSR_FZ,
     5015             /*128:out  */ X86_MXCSR_FZ,
     5016             /*256:out  */ X86_MXCSR_FZ,
     5017             /*xcpt?    */ false, false },
    50055018          { { /*src2     */ { FP32_INF(1), FP32_QNAN(0), FP32_SNAN(0), FP32_RAND_V0(0), FP32_RAND_V1(1), FP32_QNAN(0), FP32_SNAN(0), FP32_RAND_V2(0) } },
    50065019            { /*src1     */ { FP32_INF(0), FP32_QNAN(0), FP32_SNAN(0), FP32_RAND_V0(0), FP32_RAND_V1(1), FP32_QNAN(0), FP32_SNAN(0), FP32_RAND_V2(0) } },
    50075020            { /* =>      */ { FP32_INF(1), FP32_QNAN(0), FP32_SNAN(0), FP32_RAND_V0(0), FP32_RAND_V1(0), FP32_QNAN(0), FP32_SNAN(0), FP32_RAND_V2(0) } },
    5008               /*mask     */ ~X86_MXCSR_XCPT_MASK,
    5009               /*daz,fz,rc*/ X86_MXCSR_DAZ, X86_MXCSR_FZ, X86_MXCSR_RC_ZERO,
    5010               /*flags    */ 0, 0 },
     5021             /*mxcsr:in */ X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_ZERO,
     5022             /*128:out  */ X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_ZERO,
     5023             /*256:out  */ X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_ZERO,
     5024             /*xcpt?    */ false, false },
     5025#if 0
    50115026    /*
    50125027     * Normals.
     
    52805295              /*flags    */ X86_MXCSR_IE, X86_MXCSR_IE },
    52815296    /** @todo Underflow, Precision; Rounding, FZ etc. */
     5297#endif
    52825298    };
    52835299
     
    53155331                                        g_aXcptConfig3, RT_ELEMENTS(g_aXcptConfig3));
    53165332}
    5317 #endif
    53185333
    53195334
     
    53465361        { "[v]mulps",       bs3CpuInstr4_v_mulps,  0 },
    53475362        { "[v]mulpd",       bs3CpuInstr4_v_mulpd,  0 },
    5348 # if 0
    53495363        { "[v]mulss",       bs3CpuInstr4_v_mulss,  0 },
    5350 # endif
    53515364#endif
    53525365    };
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