VirtualBox

Changeset 105516 in vbox for trunk


Ignore:
Timestamp:
Jul 26, 2024 9:42:19 AM (6 months ago)
Author:
vboxsync
Message:

ValidationKit/bootsectors: bugref:10658 SIMD FP testcase: [v]mulps (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

    r105514 r105516  
    41884188
    41894189
    4190 #if 0
    41914190/*
    41924191 * [V]MULPS.
     
    42024201            { /*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) } },
    42034202            { /* =>      */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0) } },
    4204               /*mask     */ X86_MXCSR_XCPT_MASK,
    4205               /*daz,fz,rc*/ 0, 0, X86_MXCSR_RC_NEAREST,
    4206               /*flags    */ 0, 0 },
     4203             /*mxcsr:in */ X86_MXCSR_XCPT_MASK,
     4204             /*128:out  */ X86_MXCSR_XCPT_MASK,
     4205             /*256:out  */ X86_MXCSR_XCPT_MASK,
     4206             /*xcpt?    */ false, false },
    42074207         { { /*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) } },
    42084208           { /*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) } },
    42094209           { /* =>      */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0) } },
    4210              /*mask     */ ~X86_MXCSR_XCPT_MASK,
    4211              /*daz,fz,rc*/ 0, 0, X86_MXCSR_RC_NEAREST,
    4212              /*flags    */ 0, 0 },
     4210             /*mxcsr:in */ 0,
     4211             /*128:out  */ 0,
     4212             /*256:out  */ 0,
     4213             /*xcpt?    */ false, false },
    42134214         { { /*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) } },
    42144215           { /*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) } },
    42154216           { /* =>      */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0) } },
    4216              /*mask     */ ~X86_MXCSR_XCPT_MASK,
    4217              /*daz,fz,rc*/ X86_MXCSR_DAZ, X86_MXCSR_FZ, X86_MXCSR_RC_UP,
    4218              /*flags    */ 0, 0 },
     4217             /*mxcsr:in */ X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_UP,
     4218             /*128:out  */ X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_UP,
     4219             /*256:out  */ X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_UP,
     4220             /*xcpt?    */ false, false },
    42194221         { { /*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) } },
    42204222           { /*src1     */ { FP32_0(1), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(1) } },
    42214223           { /* =>      */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0) } },
    4222              /*mask     */ ~X86_MXCSR_XCPT_MASK,
    4223              /*daz,fz,rc*/ X86_MXCSR_DAZ, 0, X86_MXCSR_RC_ZERO,
    4224              /*flags    */ 0, 0 },
     4224             /*mxcsr:in */ X86_MXCSR_DAZ | X86_MXCSR_RC_ZERO,
     4225             /*128:out  */ X86_MXCSR_DAZ | X86_MXCSR_RC_ZERO,
     4226             /*256:out  */ X86_MXCSR_DAZ | X86_MXCSR_RC_ZERO,
     4227             /*xcpt?    */ false, false },
    42254228         { { /*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) } },
    42264229           { /*src1     */ { FP32_0(0), FP32_0(0), FP32_0(1), FP32_0(0), FP32_0(1), FP32_0(0), FP32_0(1), FP32_0(1) } },
    42274230           { /* =>      */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0) } },
    4228              /*mask     */ ~X86_MXCSR_XCPT_MASK,
    4229              /*daz,fz,rc*/ 0, X86_MXCSR_FZ, X86_MXCSR_RC_ZERO,
    4230              /*flags    */ 0, 0 },
     4231             /*mxcsr:in */ X86_MXCSR_FZ | X86_MXCSR_RC_ZERO,
     4232             /*128:out  */ X86_MXCSR_FZ | X86_MXCSR_RC_ZERO,
     4233             /*256:out  */ X86_MXCSR_FZ | X86_MXCSR_RC_ZERO,
     4234             /*xcpt?    */ false, false },
    42314235         { { /*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) } },
    42324236           { /*src1     */ { FP32_0(0), FP32_0(0), FP32_0(1), FP32_0(1), FP32_0(0), FP32_0(1), FP32_0(1), FP32_0(1) } },
    42334237           { /* =>      */ { FP32_0(0), FP32_0(1), FP32_0(1), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(1), FP32_0(0) } },
    4234              /*mask     */ X86_MXCSR_XCPT_MASK,
    4235              /*daz,fz,rc*/ X86_MXCSR_DAZ, X86_MXCSR_FZ, X86_MXCSR_RC_DOWN,
    4236              /*flags    */ 0, 0 },
     4238             /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_RC_ZERO,
     4239             /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_RC_ZERO,
     4240             /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_RC_ZERO,
     4241             /*xcpt?    */ false, false },
    42374242         { { /*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) } },
    42384243           { /*src1     */ { FP32_0(0),       FP32_0(0),       FP32_NORM_V2(1), FP32_0(1),       FP32_0(0), FP32_0(1),       FP32_0(0),       FP32_0(1)       } },
    42394244           { /* =>      */ { FP32_0(0),       FP32_0(1),       FP32_0(1),       FP32_0(0),       FP32_0(0), FP32_0(0),       FP32_0(0),       FP32_0(1)       } },
    4240              /*mask     */ X86_MXCSR_XCPT_MASK,
    4241              /*daz,fz,rc*/ X86_MXCSR_DAZ, X86_MXCSR_FZ, X86_MXCSR_RC_DOWN,
    4242              /*flags    */ 0, 0 },
     4245             /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_DOWN,
     4246             /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_DOWN,
     4247             /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_DOWN,
     4248             /*xcpt?    */ false, false },
    42434249    /*
    42444250     * Infinity.
     
    42474253            { /*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) } },
    42484254            { /* =>      */ { FP32_INF(1), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0) } },
    4249               /*mask     */ ~X86_MXCSR_IM,
    4250               /*daz,fz,rc*/ 0, 0, X86_MXCSR_RC_NEAREST,
    4251               /*flags    */ 0, 0 },
     4255             /*mxcsr:in */ X86_MXCSR_XCPT_MASK & ~X86_MXCSR_IM,
     4256             /*128:out  */ X86_MXCSR_XCPT_MASK & ~X86_MXCSR_IM,
     4257             /*256:out  */ X86_MXCSR_XCPT_MASK & ~X86_MXCSR_IM,
     4258             /*xcpt?    */ false, false },
    42524259          { { /*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) } },
    42534260            { /*src1     */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_INF(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0) } },
    42544261            { /* =>      */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_INF(1), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0) } },
    4255               /*mask     */ X86_MXCSR_XCPT_MASK,
    4256               /*daz,fz,rc*/ 0, 0, X86_MXCSR_RC_NEAREST,
    4257               /*flags    */ 0, 0 },
     4262             /*mxcsr:in */ X86_MXCSR_XCPT_MASK,
     4263             /*128:out  */ X86_MXCSR_XCPT_MASK,
     4264             /*256:out  */ X86_MXCSR_XCPT_MASK,
     4265             /*xcpt?    */ false, false },
    42584266          { { /*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) } },
    42594267            { /*src1     */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_INF(1), FP32_0(1), FP32_0(1), FP32_0(0) } },
    42604268            { /* =>      */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_INF(1), FP32_0(0), FP32_0(0), FP32_0(0) } },
    4261               /*mask     */ X86_MXCSR_XCPT_MASK,
    4262               /*daz,fz,rc*/ 0, X86_MXCSR_FZ, X86_MXCSR_RC_NEAREST,
    4263               /*flags    */ 0, 0 },
     4269             /*mxcsr:in */ X86_MXCSR_FZ | X86_MXCSR_XCPT_MASK,
     4270             /*128:out  */ X86_MXCSR_FZ | X86_MXCSR_XCPT_MASK,
     4271             /*256:out  */ X86_MXCSR_FZ | X86_MXCSR_XCPT_MASK,
     4272             /*xcpt?    */ false, false },
    42644273          { { /*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)  } },
    42654274            { /*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)  } },
    42664275            { /* =>      */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_INF(1) } },
    4267               /*mask     */ ~X86_MXCSR_XCPT_MASK,
    4268               /*daz,fz,rc*/ 0, X86_MXCSR_FZ, X86_MXCSR_RC_NEAREST,
    4269               /*flags    */ 0, 0 },
     4276             /*mxcsr:in */ X86_MXCSR_FZ,
     4277             /*128:out  */ X86_MXCSR_FZ,
     4278             /*256:out  */ X86_MXCSR_FZ,
     4279             /*xcpt?    */ false, false },
    42704280          { { /*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) } },
    42714281            { /*src1     */ { FP32_INF(1), FP32_INF(0), FP32_0(1), FP32_INF(0), FP32_0(0), FP32_INF(0), FP32_INF(0), FP32_INF(1) } },
    42724282            { /* =>      */ { FP32_INF(1), FP32_INF(1), FP32_0(1), FP32_INF(1), FP32_0(1), FP32_INF(1), FP32_INF(1), FP32_INF(1) } },
    4273               /*mask     */ ~X86_MXCSR_XCPT_MASK,
    4274               /*daz,fz,rc*/ 0, X86_MXCSR_FZ, X86_MXCSR_RC_ZERO,
    4275               /*flags    */ 0, 0 },
     4283             /*mxcsr:in */ X86_MXCSR_FZ | X86_MXCSR_RC_ZERO,
     4284             /*128:out  */ X86_MXCSR_FZ | X86_MXCSR_RC_ZERO,
     4285             /*256:out  */ X86_MXCSR_FZ | X86_MXCSR_RC_ZERO,
     4286             /*xcpt?    */ false, false },
     4287#if 0
    42764288    /*
    42774289     * Normals.
     
    44524464              /*flags    */ X86_MXCSR_IE, X86_MXCSR_IE },
    44534465    /** @todo Underflow, Precision; Rounding, FZ etc. */
     4466#endif
    44544467    };
    44554468
     
    45014514
    45024515
     4516#if 0
    45034517/*
    45044518 * [V]MULPD.
     
    52855299        { "[v]subpd",       bs3CpuInstr4_v_subpd,  0 },
    52865300        { "[v]subss",       bs3CpuInstr4_v_subss,  0 },
     5301        { "[v]mulps",       bs3CpuInstr4_v_mulps,  0 },
    52875302# if 0
    5288         { "[v]mulps",       bs3CpuInstr4_v_mulps,  0 },
    52895303        { "[v]mulpd",       bs3CpuInstr4_v_mulpd,  0 },
    52905304        { "[v]mulss",       bs3CpuInstr4_v_mulss,  0 },
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