VirtualBox

Changeset 105514 in vbox for trunk


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

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

    r105502 r105514  
    40604060              /*256:out  */ X86_MXCSR_RC_ZERO | X86_MXCSR_PE,
    40614061              /*xcpt?    */ true, true },
    4062 #if 0
    40634062    /*
    40644063     * Normals.
    40654064     */
    4066     /*18*/{ { /*src2     */ { FP32_V(0, 0x600000, 0x7f)/*1.75*/, 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) } },
     4065    /*21*/{ { /*src2     */ { FP32_V(0, 0x600000, 0x7f)/*1.75*/, 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) } },
    40674066            { /*src1     */ { FP32_V(0, 0,        0x7d)/*0.25*/, FP32_RAND_V4(1), FP32_RAND_V3(1), FP32_RAND_V2(0), FP32_RAND_V0(1), FP32_RAND_V4(1), FP32_RAND_V0(0), FP32_RAND_V5(1) } },
    40684067            { /* =>      */ { FP32_V(1, 0x400000, 0x7f)/*1.50*/, FP32_RAND_V4(1), FP32_RAND_V3(1), FP32_RAND_V2(0), FP32_RAND_V0(1), FP32_RAND_V4(1), FP32_RAND_V0(0), FP32_RAND_V5(1) } },
    4069               /*mask     */ X86_MXCSR_XCPT_MASK,
    4070               /*daz,fz,rc*/ X86_MXCSR_DAZ, X86_MXCSR_FZ, X86_MXCSR_RC_DOWN,
    4071               /*flags    */ 0, 0 },
     4068              /*mxcsr:in */ X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_DOWN,
     4069              /*128:out  */ X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_DOWN,
     4070              /*256:out  */ X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_DOWN,
     4071              /*xcpt?    */ false, false },
    40724072          { { /*src2     */ { FP32_NORM_MAX(1), FP32_RAND_V5(1), FP32_RAND_V5(0), FP32_RAND_V4(1), FP32_RAND_V4(0), FP32_RAND_V3(0), FP32_RAND_V3(1), FP32_RAND_V2(1) } },
    40734073            { /*src1     */ { FP32_NORM_MAX(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) } },
    4074             { /* =>      */ { FP32_0(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) } },
    4075               /*mask     */ X86_MXCSR_XCPT_MASK,
    4076               /*daz,fz,rc*/ X86_MXCSR_DAZ, X86_MXCSR_FZ, X86_MXCSR_RC_DOWN,
    4077               /*flags    */ 0, 0 },
     4074            { /* =>      */ { FP32_0(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) } },
     4075              /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_UP,
     4076              /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_UP,
     4077              /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_UP,
     4078              /*xcpt?    */ false, false },
    40784079          { { /*src2     */ { FP32_V(0, 0x5ca5b8, 0x93)/*1807543*/, 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) } },
    40794080            { /*src1     */ { FP32_V(0, 0x669050, 0x93)/*1888778*/, 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) } },
    40804081            { /* =>      */ { FP32_V(0, 0x1ea980, 0x8f)/*  81235*/, 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) } },
    4081               /*mask     */ X86_MXCSR_XCPT_MASK,
    4082               /*daz,fz,rc*/ 0, 0, X86_MXCSR_RC_NEAREST,
    4083               /*flags    */ 0, 0 },
     4082              /*mxcsr:in */ X86_MXCSR_XCPT_MASK,
     4083              /*128:out  */ X86_MXCSR_XCPT_MASK,
     4084              /*256:out  */ X86_MXCSR_XCPT_MASK,
     4085              /*xcpt?    */ false, false },
    40844086          { { /*src2     */ { FP32_V(0, 0x2514d6, 0x93)/*1352346.75*/, 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) } },
    40854087            { /*src1     */ { FP32_V(0, 0x253468, 0x93)/*1353357.00*/, 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) } },
    40864088            { /* =>      */ { FP32_V(0, 0x7c9000, 0x88)/*   1010.25*/, 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) } },
    4087               /*mask     */ X86_MXCSR_XCPT_MASK,
    4088               /*daz,fz,rc*/ 0, 0, X86_MXCSR_RC_NEAREST,
    4089               /*flags    */ 0, 0 },
     4089              /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_ZERO,
     4090              /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_ZERO,
     4091              /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_ZERO,
     4092              /*xcpt?    */ false, false },
    40904093          { { /*src2     */ { FP32_V(0, 0x712060, 0x92)/*  987654*/, FP32_RAND_V1(0), FP32_RAND_V2(0), FP32_RAND_V5(1), FP32_RAND_V7(1), FP32_RAND_V0(0), FP32_RAND_V6(1), FP32_RAND_V3(1) } },
    40914094            { /*src1     */ { FP32_V(0, 0x74429f, 0x97)/*32015678*/, FP32_RAND_V2(0), FP32_RAND_V6(1), FP32_RAND_V5(0), FP32_RAND_V4(1), FP32_RAND_V7(1), FP32_RAND_V3(1), FP32_RAND_V2(0) } },
    40924095            { /* =>      */ { FP32_V(0, 0x6cb99c, 0x97)/*31028024*/, FP32_RAND_V2(0), FP32_RAND_V6(1), FP32_RAND_V5(0), FP32_RAND_V4(1), FP32_RAND_V7(1), FP32_RAND_V3(1), FP32_RAND_V2(0) } },
    4093               /*mask     */ ~X86_MXCSR_XCPT_MASK,
    4094               /*daz,fz,rc*/ 0, 0, X86_MXCSR_RC_NEAREST,
    4095               /*flags    */ 0, 0 },
     4096              /*mxcsr:in */ 0,
     4097              /*128:out  */ 0,
     4098              /*256:out  */ 0,
     4099              /*xcpt?    */ false, false },
    40964100          { { /*src2     */ { FP32_1(0),                                                FP32_RAND_V1(0), FP32_RAND_V2(0), FP32_RAND_V5(1), FP32_RAND_V7(1), FP32_RAND_V0(0), FP32_RAND_V6(1), FP32_RAND_V3(1) } },
    40974101            { /*src1     */ { FP32_NORM_SAFE_INT_MAX(0),                                FP32_RAND_V2(0), FP32_RAND_V6(1), FP32_RAND_V5(0), FP32_RAND_V4(1), FP32_RAND_V7(1), FP32_RAND_V3(1), FP32_RAND_V2(0) } },
    40984102            { /* =>      */ { FP32_V(0, FP32_FRAC_NORM_MAX - 1, FP32_EXP_SAFE_INT_MAX), FP32_RAND_V2(0), FP32_RAND_V6(1), FP32_RAND_V5(0), FP32_RAND_V4(1), FP32_RAND_V7(1), FP32_RAND_V3(1), FP32_RAND_V2(0) } },
    4099               /*mask     */ X86_MXCSR_XCPT_MASK,
    4100               /*daz,fz,rc*/ X86_MXCSR_DAZ, X86_MXCSR_FZ, X86_MXCSR_RC_ZERO,
    4101               /*flags    */ 0, 0 },
     4103              /*mxcsr:in */ X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_ZERO,
     4104              /*128:out  */ X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_ZERO,
     4105              /*256:out  */ X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_ZERO,
     4106              /*xcpt?    */ false, false },
    41024107          { { /*src2     */ { FP32_1(0),                                                FP32_RAND_V1(0), FP32_RAND_V2(0), FP32_RAND_V5(1), FP32_RAND_V7(1), FP32_RAND_V0(0), FP32_RAND_V6(1), FP32_RAND_V3(1) } },
    41034108            { /*src1     */ { FP32_NORM_SAFE_INT_MAX(0),                                FP32_RAND_V2(0), FP32_RAND_V6(1), FP32_RAND_V5(0), FP32_RAND_V4(1), FP32_RAND_V7(1), FP32_RAND_V3(1), FP32_RAND_V2(0) } },
    41044109            { /* =>      */ { FP32_V(0, FP32_FRAC_NORM_MAX - 1, FP32_EXP_SAFE_INT_MAX), FP32_RAND_V2(0), FP32_RAND_V6(1), FP32_RAND_V5(0), FP32_RAND_V4(1), FP32_RAND_V7(1), FP32_RAND_V3(1), FP32_RAND_V2(0) } },
    4105               /*mask     */ X86_MXCSR_XCPT_MASK,
    4106               /*daz,fz,rc*/ X86_MXCSR_DAZ, X86_MXCSR_FZ, X86_MXCSR_RC_ZERO,
    4107               /*flags    */ 0, 0 },
     4110              /*mxcsr:in */ X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_ZERO,
     4111              /*128:out  */ X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_ZERO,
     4112              /*256:out  */ X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_ZERO,
     4113              /*xcpt?    */ false, false },
    41084114          { { /*src2     */ { FP32_V(1, 0x600000, 0x7e)/*      -0.875*/, FP32_RAND_V1(0), FP32_RAND_V2(0), FP32_RAND_V5(1), FP32_RAND_V7(1), FP32_RAND_V0(0), FP32_RAND_V6(1), FP32_RAND_V3(1) } },
    41094115            { /*src1     */ { FP32_V(0, 0x769b50, 0x92)/* 1010101.000*/, FP32_RAND_V2(0), FP32_RAND_V6(1), FP32_RAND_V5(0), FP32_RAND_V4(1), FP32_RAND_V7(1), FP32_RAND_V3(1), FP32_RAND_V2(0) } },
    41104116            { /* =>      */ { FP32_V(0, 0x769b5e, 0x92)/* 1010101.875*/, FP32_RAND_V2(0), FP32_RAND_V6(1), FP32_RAND_V5(0), FP32_RAND_V4(1), FP32_RAND_V7(1), FP32_RAND_V3(1), FP32_RAND_V2(0) } },
    4111               /*mask     */ X86_MXCSR_XCPT_MASK,
    4112               /*daz,fz,rc*/ X86_MXCSR_DAZ, X86_MXCSR_FZ, X86_MXCSR_RC_ZERO,
    4113               /*flags    */ 0, 0 },
     4117              /*mxcsr:in */ X86_MXCSR_XCPT_MASK,
     4118              /*128:out  */ X86_MXCSR_XCPT_MASK,
     4119              /*256:out  */ X86_MXCSR_XCPT_MASK,
     4120              /*xcpt?    */ false, false },
    41144121          { { /*src2     */ { FP32_NORM_SAFE_INT_MIN(0), FP32_RAND_V3(0), FP32_RAND_V4(0), FP32_RAND_V0(1), FP32_RAND_V1(1), FP32_RAND_V2(0), FP32_RAND_V7(1), FP32_RAND_V6(1) } },
    41154122            { /*src1     */ { FP32_NORM_SAFE_INT_MIN(0), FP32_RAND_V3(1), FP32_RAND_V1(0), FP32_RAND_V0(0), FP32_RAND_V4(1), FP32_RAND_V3(0), FP32_RAND_V5(0), FP32_RAND_V7(1) } },
    41164123            { /* =>      */ { FP32_0(0),                 FP32_RAND_V3(1), FP32_RAND_V1(0), FP32_RAND_V0(0), FP32_RAND_V4(1), FP32_RAND_V3(0), FP32_RAND_V5(0), FP32_RAND_V7(1) } },
    4117               /*mask     */ ~X86_MXCSR_XCPT_MASK,
    4118               /*daz,fz,rc*/ X86_MXCSR_DAZ, X86_MXCSR_FZ, X86_MXCSR_RC_ZERO,
    4119               /*flags    */ 0, 0 },
     4124              /*mxcsr:in */ X86_MXCSR_DAZ | X86_MXCSR_FZ,
     4125              /*128:out  */ X86_MXCSR_DAZ | X86_MXCSR_FZ,
     4126              /*256:out  */ X86_MXCSR_DAZ | X86_MXCSR_FZ,
     4127              /*xcpt?    */ false, false },
    41204128    /*
    41214129     * Denormals.
     
    41244132            { /*src1     */ { FP32_0(0),          FP32_RAND_V5(1), FP32_RAND_V3(1), FP32_RAND_V2(1), FP32_RAND_V7(1), FP32_RAND_V6(0), FP32_RAND_V3(1), FP32_RAND_V0(0) } },
    41254133            { /* =>      */ { FP32_0(0),          FP32_RAND_V5(1), FP32_RAND_V3(1), FP32_RAND_V2(1), FP32_RAND_V7(1), FP32_RAND_V6(0), FP32_RAND_V3(1), FP32_RAND_V0(0) } },
    4126               /*mask     */ ~X86_MXCSR_XCPT_MASK,
    4127               /*daz,fz,rc*/ 0, 0, X86_MXCSR_RC_NEAREST,
    4128               /*flags    */ X86_MXCSR_DE, X86_MXCSR_DE },
     4134              /*mxcsr:in */ 0,
     4135              /*128:out  */ X86_MXCSR_DE,
     4136              /*256:out  */ X86_MXCSR_DE,
     4137              /*xcpt?    */ true, true },
    41294138          { { /*src2     */ { FP32_0(0),          FP32_RAND_V1(0), FP32_RAND_V2(0), FP32_RAND_V3(1), FP32_RAND_V1(1), FP32_RAND_V2(0), FP32_RAND_V7(1), FP32_RAND_V6(1) } },
    41304139            { /*src1     */ { FP32_DENORM_MAX(0), FP32_RAND_V1(1), FP32_RAND_V2(0), FP32_RAND_V3(0), FP32_RAND_V4(1), FP32_RAND_V3(0), FP32_RAND_V5(0), FP32_RAND_V7(1) } },
    41314140            { /* =>      */ { FP32_0(0),          FP32_RAND_V1(1), FP32_RAND_V2(0), FP32_RAND_V3(0), FP32_RAND_V4(1), FP32_RAND_V3(0), FP32_RAND_V5(0), FP32_RAND_V7(1) } },
    4132               /*mask     */ X86_MXCSR_XCPT_MASK,
    4133               /*daz,fz,rc*/ X86_MXCSR_DAZ, 0, X86_MXCSR_RC_NEAREST,
    4134               /*flags    */ 0, 0 },
     4141              /*mxcsr:in */ X86_MXCSR_DAZ | X86_MXCSR_XCPT_MASK,
     4142              /*128:out  */ X86_MXCSR_DAZ | X86_MXCSR_XCPT_MASK,
     4143              /*256:out  */ X86_MXCSR_DAZ | X86_MXCSR_XCPT_MASK,
     4144              /*xcpt?    */ false, false },
    41354145          { { /*src2     */ { FP32_DENORM_MIN(0), FP32_RAND_V3(0), FP32_RAND_V2(1), FP32_RAND_V0(1), FP32_RAND_V3(0), FP32_RAND_V2(0), FP32_RAND_V0(1), FP32_RAND_V7(0) } },
    41364146            { /*src1     */ { FP32_DENORM_MAX(0), FP32_RAND_V3(1), FP32_RAND_V3(1), FP32_RAND_V1(1), FP32_RAND_V2(1), FP32_RAND_V3(1), FP32_RAND_V4(0), FP32_RAND_V6(1) } },
    41374147            { /* =>      */ { FP32_0(0),          FP32_RAND_V3(1), FP32_RAND_V3(1), FP32_RAND_V1(1), FP32_RAND_V2(1), FP32_RAND_V3(1), FP32_RAND_V4(0), FP32_RAND_V6(1) } },
    4138               /*mask     */ X86_MXCSR_XCPT_MASK,
    4139               /*daz,fz,rc*/ X86_MXCSR_DAZ, X86_MXCSR_FZ, X86_MXCSR_RC_UP,
    4140               /*flags    */ 0, 0 },
     4148              /*mxcsr:in */ X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_UP,
     4149              /*128:out  */ X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_UP,
     4150              /*256:out  */ X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_UP,
     4151              /*xcpt?    */ false, false },
    41414152          /** @todo More denormals; Underflow, Precision; Rounding, FZ etc. */
    4142 #endif
    41434153    };
    41444154
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