VirtualBox

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


Ignore:
Timestamp:
Aug 6, 2024 4:38:43 AM (6 months ago)
Author:
vboxsync
Message:

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

    r105516 r105594  
    45144514
    45154515
    4516 #if 0
    45174516/*
    45184517 * [V]MULPD.
     
    45284527            { /*src1     */ { FP64_0(0), FP64_0(0), FP64_0(0), FP64_0(0) } },
    45294528            { /* =>      */ { FP64_0(0), FP64_0(0), FP64_0(0), FP64_0(0) } },
    4530               /*mask     */ X86_MXCSR_XCPT_MASK,
    4531               /*daz,fz,rc*/ 0, 0, X86_MXCSR_RC_NEAREST,
    4532               /*flags    */ 0, 0 },
     4529             /*mxcsr:in */ X86_MXCSR_XCPT_MASK,
     4530             /*128:out  */ X86_MXCSR_XCPT_MASK,
     4531             /*256:out  */ X86_MXCSR_XCPT_MASK,
     4532             /*xcpt?    */ false, false },
    45334533         { { /*src2     */ { FP64_0(0), FP64_0(0), FP64_0(0), FP64_0(0) } },
    45344534           { /*src1     */ { FP64_0(0), FP64_0(0), FP64_0(0), FP64_0(0) } },
    45354535           { /* =>      */ { FP64_0(0), FP64_0(0), FP64_0(0), FP64_0(0) } },
    4536              /*mask     */ ~X86_MXCSR_XCPT_MASK,
    4537              /*daz,fz,rc*/ 0, 0, X86_MXCSR_RC_NEAREST,
    4538              /*flags    */ 0, 0 },
     4536             /*mxcsr:in */ 0,
     4537             /*128:out  */ 0,
     4538             /*256:out  */ 0,
     4539             /*xcpt?    */ false, false },
    45394540         { { /*src2     */ { FP64_0(0), FP64_0(0), FP64_0(0), FP64_0(0) } },
    45404541           { /*src1     */ { FP64_0(0), FP64_0(0), FP64_0(0), FP64_0(0) } },
    45414542           { /* =>      */ { FP64_0(0), FP64_0(0), FP64_0(0), FP64_0(0) } },
    4542              /*mask     */ ~X86_MXCSR_XCPT_MASK,
    4543              /*daz,fz,rc*/ X86_MXCSR_DAZ, X86_MXCSR_FZ, X86_MXCSR_RC_UP,
    4544              /*flags    */ 0, 0 },
     4543             /*mxcsr:in */ X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_UP,
     4544             /*128:out  */ X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_UP,
     4545             /*256:out  */ X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_UP,
     4546             /*xcpt?    */ false, false },
    45454547         { { /*src2     */ { FP64_0(1), FP64_0(0), FP64_0(0), FP64_0(0) } },
    45464548           { /*src1     */ { FP64_0(1), FP64_0(0), FP64_0(0), FP64_0(0) } },
    45474549           { /* =>      */ { FP64_0(0), FP64_0(0), FP64_0(0), FP64_0(0) } },
    4548              /*mask     */ ~X86_MXCSR_XCPT_MASK,
    4549              /*daz,fz,rc*/ X86_MXCSR_DAZ, 0, X86_MXCSR_RC_ZERO,
    4550              /*flags    */ 0, 0 },
     4550             /*mxcsr:in */ X86_MXCSR_DAZ | X86_MXCSR_RC_ZERO,
     4551             /*128:out  */ X86_MXCSR_DAZ | X86_MXCSR_RC_ZERO,
     4552             /*256:out  */ X86_MXCSR_DAZ | X86_MXCSR_RC_ZERO,
     4553             /*xcpt?    */ false, false },
    45514554         { { /*src2     */ { FP64_0(0), FP64_0(0), FP64_0(1), FP64_0(0) } },
    45524555           { /*src1     */ { FP64_0(0), FP64_0(0), FP64_0(1), FP64_0(0) } },
    45534556           { /* =>      */ { FP64_0(0), FP64_0(0), FP64_0(0), FP64_0(0) } },
    4554              /*mask     */ ~X86_MXCSR_XCPT_MASK,
    4555              /*daz,fz,rc*/ 0, X86_MXCSR_FZ, X86_MXCSR_RC_ZERO,
    4556              /*flags    */ 0, 0 },
     4557             /*mxcsr:in */ X86_MXCSR_FZ | X86_MXCSR_RC_DOWN,
     4558             /*128:out  */ X86_MXCSR_FZ | X86_MXCSR_RC_DOWN,
     4559             /*256:out  */ X86_MXCSR_FZ | X86_MXCSR_RC_DOWN,
     4560             /*xcpt?    */ false, false },
    45574561         { { /*src2     */ { FP64_0(0), FP64_0(1), FP64_0(0), FP64_0(1) } },
    45584562           { /*src1     */ { FP64_0(0), FP64_0(0), FP64_0(1), FP64_0(1) } },
    45594563           { /* =>      */ { FP64_0(0), FP64_0(1), FP64_0(1), FP64_0(0) } },
    4560              /*mask     */ X86_MXCSR_XCPT_MASK,
    4561              /*daz,fz,rc*/ X86_MXCSR_DAZ, X86_MXCSR_FZ, X86_MXCSR_RC_DOWN,
    4562              /*flags    */ 0, 0 },
     4564             /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_FZ | X86_MXCSR_RC_DOWN,
     4565             /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_FZ | X86_MXCSR_RC_DOWN,
     4566             /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_FZ | X86_MXCSR_RC_DOWN,
     4567             /*xcpt?    */ false, false },
    45634568         { { /*src2     */ { FP64_NORM_V0(0), FP64_NORM_V1(1), FP64_0(0),       FP64_NORM_V3(1) } },
    45644569           { /*src1     */ { FP64_0(0),       FP64_0(0),       FP64_NORM_V2(1), FP64_0(1)       } },
    45654570           { /* =>      */ { FP64_0(0),       FP64_0(1),       FP64_0(1),       FP64_0(0)       } },
    4566              /*mask     */ X86_MXCSR_XCPT_MASK,
    4567              /*daz,fz,rc*/ X86_MXCSR_DAZ, X86_MXCSR_FZ, X86_MXCSR_RC_DOWN,
    4568              /*flags    */ 0, 0 },
     4571             /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_DOWN,
     4572             /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_DOWN,
     4573             /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_DOWN,
     4574             /*xcpt?    */ false, false },
    45694575    /*
    45704576     * Infinity.
     
    45734579            { /*src1     */ { FP64_INF(1), FP64_0(0), FP64_INF(0), FP64_0(0) } },
    45744580            { /* =>      */ { FP64_INF(1), FP64_0(0), FP64_INF(1), FP64_0(0) } },
    4575               /*mask     */ ~X86_MXCSR_IM,
    4576               /*daz,fz,rc*/ 0, 0, X86_MXCSR_RC_NEAREST,
    4577               /*flags    */ 0, 0 },
     4581             /*mxcsr:in */ X86_MXCSR_XCPT_MASK & ~X86_MXCSR_IM,
     4582             /*128:out  */ X86_MXCSR_XCPT_MASK & ~X86_MXCSR_IM,
     4583             /*256:out  */ X86_MXCSR_XCPT_MASK & ~X86_MXCSR_IM,
     4584             /*xcpt?    */ false, false },
    45784585          { { /*src2     */ { FP64_INF(0), FP64_INF(0), FP64_INF(1), FP64_INF(1) } },
    45794586            { /*src1     */ { FP64_INF(1), FP64_INF(0), FP64_INF(1), FP64_INF(0) } },
    45804587            { /* =>      */ { FP64_INF(1), FP64_INF(0), FP64_INF(0), FP64_INF(1) } },
    4581               /*mask     */ X86_MXCSR_XCPT_MASK,
    4582               /*daz,fz,rc*/ 0, 0, X86_MXCSR_RC_NEAREST,
    4583               /*flags    */ 0, 0 },
     4588             /*mxcsr:in */ X86_MXCSR_XCPT_MASK,
     4589             /*128:out  */ X86_MXCSR_XCPT_MASK,
     4590             /*256:out  */ X86_MXCSR_XCPT_MASK,
     4591             /*xcpt?    */ false, false },
    45844592          { { /*src2     */ { FP64_INF(0), FP64_INF(1), FP64_0(1), FP64_INF(0) } },
    45854593            { /*src1     */ { FP64_INF(1), FP64_INF(0), FP64_0(1), FP64_INF(0) } },
    45864594            { /* =>      */ { FP64_INF(1), FP64_INF(1), FP64_0(0), FP64_INF(0) } },
    4587               /*mask     */ ~X86_MXCSR_XCPT_MASK,
    4588               /*daz,fz,rc*/ 0, X86_MXCSR_FZ, X86_MXCSR_RC_ZERO,
    4589               /*flags    */ 0, 0 },
     4595             /*mxcsr:in */ X86_MXCSR_FZ | X86_MXCSR_RC_ZERO,
     4596             /*128:out  */ X86_MXCSR_FZ | X86_MXCSR_RC_ZERO,
     4597             /*256:out  */ X86_MXCSR_FZ | X86_MXCSR_RC_ZERO,
     4598             /*xcpt?    */ false, false },
    45904599          { { /*src2     */ { FP64_INF(0), FP64_INF(1), FP64_0(1), FP64_INF(0) } },
    45914600            { /*src1     */ { FP64_INF(1), FP64_INF(0), FP64_0(1), FP64_INF(0) } },
    45924601            { /* =>      */ { FP64_INF(1), FP64_INF(1), FP64_0(0), FP64_INF(0) } },
    4593               /*mask     */ X86_MXCSR_XCPT_MASK,
    4594               /*daz,fz,rc*/ X86_MXCSR_DAZ, X86_MXCSR_FZ, X86_MXCSR_RC_ZERO,
    4595               /*flags    */ 0, 0 },
     4602             /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_ZERO,
     4603             /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_ZERO,
     4604             /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_ZERO,
     4605             /*xcpt?    */ false, false },
    45964606          { { /*src2     */ { FP64_INF(0), FP64_INF(0),     FP64_1(0),   FP64_INF(0)     } },
    45974607            { /*src1     */ { FP64_1(0),   FP64_NORM_V0(0), FP64_INF(0), FP64_NORM_V1(0) } },
    45984608            { /* =>      */ { FP64_INF(0), FP64_INF(0),     FP64_INF(0), FP64_INF(0)     } },
    4599               /*mask     */ X86_MXCSR_XCPT_MASK,
    4600               /*daz,fz,rc*/ 0, 0, X86_MXCSR_RC_DOWN,
    4601               /*flags    */ 0, 0 },
     4609             /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_DOWN,
     4610             /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_DOWN,
     4611             /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_DOWN,
     4612             /*xcpt?    */ false, false },
    46024613          { { /*src2     */ { FP64_INF(1), FP64_INF(0),     FP64_NORM_V3(0), FP64_INF(1)     } },
    46034614            { /*src1     */ { FP64_1(1),   FP64_NORM_V3(1), FP64_INF(1),     FP64_NORM_V1(1) } },
    46044615            { /* =>      */ { FP64_INF(0), FP64_INF(1),     FP64_INF(1),     FP64_INF(0)     } },
    4605               /*mask     */ X86_MXCSR_XCPT_MASK,
    4606               /*daz,fz,rc*/ X86_MXCSR_DAZ, X86_MXCSR_FZ, X86_MXCSR_RC_UP,
    4607               /*flags    */ 0, 0 },
     4616             /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_UP,
     4617             /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_UP,
     4618             /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_UP,
     4619             /*xcpt?    */ false, false },
     4620#if 0
    46084621    /*
    46094622     * Normals.
     
    48124825              /*flags    */ X86_MXCSR_IE, X86_MXCSR_IE },
    48134826    /** @todo Underflow, Precision; Rounding, FZ etc. */
     4827#endif
    48144828    };
    48154829
     
    48614875
    48624876
     4877#if 0
    48634878/*
    48644879 * [V]MULSS.
     
    53005315        { "[v]subss",       bs3CpuInstr4_v_subss,  0 },
    53015316        { "[v]mulps",       bs3CpuInstr4_v_mulps,  0 },
     5317        { "[v]mulpd",       bs3CpuInstr4_v_mulpd,  0 },
    53025318# if 0
    5303         { "[v]mulpd",       bs3CpuInstr4_v_mulpd,  0 },
    53045319        { "[v]mulss",       bs3CpuInstr4_v_mulss,  0 },
    53055320# endif
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