VirtualBox

Changeset 105502 in vbox for trunk


Ignore:
Timestamp:
Jul 25, 2024 10:09:58 AM (6 months ago)
Author:
vboxsync
Message:

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

    r105470 r105502  
    39493949              /*256:out  */ X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_DOWN,
    39503950              /*xcpt?    */ false, false },
    3951 #if 0
    39523951    /*
    39533952     * Infinity.
     
    39563955            { /*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) } },
    39573956            { /* =>      */ { FP32_INF(1),  FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0) } },
    3958               /*mask     */ ~X86_MXCSR_IM,
    3959               /*daz,fz,rc*/ 0, 0, X86_MXCSR_RC_NEAREST,
    3960               /*flags    */ 0, 0 },
     3957              /*mxcsr:in */ X86_MXCSR_XCPT_MASK & ~X86_MXCSR_IM,
     3958              /*128:out  */ X86_MXCSR_XCPT_MASK & ~X86_MXCSR_IM,
     3959              /*256:out  */ X86_MXCSR_XCPT_MASK & ~X86_MXCSR_IM,
     3960              /*xcpt?    */ false, false },
    39613961          { { /*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) } },
    39623962            { /*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) } },
    39633963            { /* =>      */ { 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) } },
    3964               /*mask     */ ~X86_MXCSR_IM,
    3965               /*daz,fz,rc*/ 0, 0, X86_MXCSR_RC_NEAREST,
    3966               /*flags    */ X86_MXCSR_IE, X86_MXCSR_IE },
     3964              /*mxcsr:in */ (X86_MXCSR_XCPT_MASK & ~X86_MXCSR_IM),
     3965              /*128:out  */ (X86_MXCSR_XCPT_MASK & ~X86_MXCSR_IM) | X86_MXCSR_IE,
     3966              /*256:out  */ (X86_MXCSR_XCPT_MASK & ~X86_MXCSR_IM) | X86_MXCSR_IE,
     3967              /*xcpt?    */ true, true },
    39673968          { { /*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) } },
    39683969            { /*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) } },
    39693970            { /* =>      */ { 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) } },
    3970               /*mask     */ X86_MXCSR_XCPT_MASK,
    3971               /*daz,fz,rc*/ 0, 0, X86_MXCSR_RC_NEAREST,
    3972               /*flags    */ 0, 0 },
     3971              /*mxcsr:in */ X86_MXCSR_XCPT_MASK,
     3972              /*128:out  */ X86_MXCSR_XCPT_MASK,
     3973              /*256:out  */ X86_MXCSR_XCPT_MASK,
     3974              /*xcpt?    */ false, false },
    39733975          { { /*src2     */ { FP32_INF(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) } },
    39743976            { /*src1     */ { FP32_INF(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) } },
    39753977            { /* =>      */ { FP32_QNAN(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) } },
    3976               /*mask     */ X86_MXCSR_XCPT_MASK,
    3977               /*daz,fz,rc*/ 0, X86_MXCSR_FZ, X86_MXCSR_RC_NEAREST,
    3978               /*flags    */ X86_MXCSR_IE, X86_MXCSR_IE },
     3978              /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_FZ,
     3979              /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_FZ | X86_MXCSR_IE,
     3980              /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_FZ | X86_MXCSR_IE,
     3981              /*xcpt?    */ false, false },
    39793982          { { /*src2     */ { FP32_INF(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) } },
    39803983            { /*src1     */ { FP32_INF(1), 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) } },
    39813984            { /* =>      */ { FP32_INF(1), 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) } },
    3982               /*mask     */ ~X86_MXCSR_XCPT_MASK,
    3983               /*daz,fz,rc*/ 0, X86_MXCSR_FZ, X86_MXCSR_RC_NEAREST,
    3984               /*flags    */ 0, 0 },
     3985              /*mxcsr:in */ X86_MXCSR_FZ,
     3986              /*128:out  */ X86_MXCSR_FZ,
     3987              /*256:out  */ X86_MXCSR_FZ,
     3988              /*xcpt?    */ false, false },
    39853989          { { /*src2     */ { FP32_INF(1), FP32_0(0), FP32_0(0), FP32_RAND_V3(1), FP32_RAND_V2(1), FP32_RAND_V2(1), FP32_RAND_V3(1), FP32_RAND_V6(1) } },
    39863990            { /*src1     */ { FP32_INF(0), FP32_0(1), FP32_0(1), FP32_RAND_V3(1), FP32_RAND_V1(0), FP32_RAND_V0(1), FP32_RAND_V4(1), FP32_RAND_V5(1) } },
    39873991            { /* =>      */ { FP32_INF(0), FP32_0(1), FP32_0(1), FP32_RAND_V3(1), FP32_RAND_V1(0), FP32_RAND_V0(1), FP32_RAND_V4(1), FP32_RAND_V5(1) } },
    3988               /*mask     */ X86_MXCSR_XCPT_MASK,
    3989               /*daz,fz,rc*/ 0, X86_MXCSR_FZ, X86_MXCSR_RC_ZERO,
    3990               /*flags    */ 0, 0 },
     3992              /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_FZ | X86_MXCSR_RC_ZERO,
     3993              /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_FZ | X86_MXCSR_RC_ZERO,
     3994              /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_FZ | X86_MXCSR_RC_ZERO,
     3995              /*xcpt?    */ false, false },
    39913996    /*
    39923997     * Overflow, Precision.
     
    39954000            { /*src1     */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_NORM_MAX(0), FP32_0(0), FP32_NORM_MAX(0), FP32_NORM_MAX(0) } },
    39964001            { /* =>      */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0),        FP32_0(0), FP32_0(0),        FP32_0(0)        } },
    3997               /*mask     */ ~X86_MXCSR_XCPT_MASK,
    3998               /*daz,fz,rc*/ 0, 0, X86_MXCSR_RC_NEAREST,
    3999               /*flags    */ 0, X86_MXCSR_PE },
     4002              /*mxcsr:in */ 0,
     4003              /*128:out  */ 0,
     4004              /*256:out  */ X86_MXCSR_PE,
     4005              /*xcpt?    */ false, true },
    40004006          { { /*src2     */ { FP32_NORM_MAX(0), FP32_NORM_MAX(0), FP32_0(0), FP32_0(0), FP32_NORM_MAX(0), FP32_NORM_MAX(1), FP32_0(0), FP32_NORM_MAX(0) } },
    40014007            { /*src1     */ { FP32_NORM_MAX(1), FP32_NORM_MAX(1), FP32_0(0), FP32_0(0), FP32_NORM_MAX(1), FP32_NORM_MAX(0), FP32_0(0), FP32_NORM_MAX(0) } },
    40024008            { /* =>      */ { FP32_NORM_MAX(1), FP32_NORM_MAX(1), FP32_0(0), FP32_0(0), FP32_NORM_MAX(1), FP32_NORM_MAX(0), FP32_0(0), FP32_0(0)        } },
    4003               /*mask     */ X86_MXCSR_OM | X86_MXCSR_PM,
    4004               /*daz,fz,rc*/ 0, 0, X86_MXCSR_RC_ZERO,
    4005               /*flags    */ X86_MXCSR_OE | X86_MXCSR_PE, X86_MXCSR_OE | X86_MXCSR_PE },
     4009              /*mxcsr:in */ X86_MXCSR_OM | X86_MXCSR_PM | X86_MXCSR_RC_ZERO,
     4010              /*128:out  */ X86_MXCSR_OM | X86_MXCSR_PM | X86_MXCSR_RC_ZERO | X86_MXCSR_OE | X86_MXCSR_PE,
     4011              /*256:out  */ X86_MXCSR_OM | X86_MXCSR_PM | X86_MXCSR_RC_ZERO | X86_MXCSR_OE | X86_MXCSR_PE,
     4012              /*xcpt?    */ false, false },
    40064013          { { /*src2     */ { FP32_NORM_MAX(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_NORM_MAX(0) } },
    40074014            { /*src1     */ { FP32_NORM_MAX(1), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_NORM_MAX(1) } },
    40084015            { /* =>      */ { FP32_INF(1),      FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_INF(1)      } },
    4009               /*mask     */ X86_MXCSR_OM | X86_MXCSR_PM,
    4010               /*daz,fz,rc*/ X86_MXCSR_DAZ, X86_MXCSR_FZ, X86_MXCSR_RC_NEAREST,
    4011               /*flags    */ X86_MXCSR_OE | X86_MXCSR_PE, X86_MXCSR_OE | X86_MXCSR_PE },
     4016              /*mxcsr:in */ X86_MXCSR_OM | X86_MXCSR_PM,
     4017              /*128:out  */ X86_MXCSR_OM | X86_MXCSR_PM | X86_MXCSR_OE | X86_MXCSR_PE,
     4018              /*256:out  */ X86_MXCSR_OM | X86_MXCSR_PM | X86_MXCSR_OE | X86_MXCSR_PE,
     4019              /*xcpt?    */ false, false },
    40124020          { { /*src2     */ { FP32_NORM_MAX(0), FP32_NORM_MIN(1), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0) } },
    40134021            { /*src1     */ { FP32_NORM_MAX(1), FP32_NORM_MAX(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0) } },
    40144022            { /* =>      */ { FP32_INF(1),      FP32_NORM_MAX(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0) } },
    4015               /*mask     */ X86_MXCSR_OM | X86_MXCSR_PM,
    4016               /*daz,fz,rc*/ X86_MXCSR_DAZ, X86_MXCSR_FZ, X86_MXCSR_RC_NEAREST,
    4017               /*flags    */ X86_MXCSR_OE | X86_MXCSR_PE, X86_MXCSR_OE | X86_MXCSR_PE },
     4023              /*mxcsr:in */ X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_OM | X86_MXCSR_PM,
     4024              /*128:out  */ X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_OM | X86_MXCSR_PM | X86_MXCSR_OE | X86_MXCSR_PE,
     4025              /*256:out  */ X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_OM | X86_MXCSR_PM | X86_MXCSR_OE | X86_MXCSR_PE,
     4026              /*xcpt?    */ false, false },
    40184027          { { /*src2     */ { FP32_NORM_MIN(1), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0) } },
    40194028            { /*src1     */ { FP32_NORM_MAX(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0) } },
    40204029            { /* =>      */ { FP32_NORM_MAX(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0) } },
    4021               /*mask     */ X86_MXCSR_OM | X86_MXCSR_PM,
    4022               /*daz,fz,rc*/ X86_MXCSR_DAZ, X86_MXCSR_FZ, X86_MXCSR_RC_ZERO,
    4023               /*flags    */ X86_MXCSR_PE, X86_MXCSR_PE },
     4030              /*mxcsr:in */ X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_ZERO | X86_MXCSR_OM | X86_MXCSR_PM,
     4031              /*128:out  */ X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_ZERO | X86_MXCSR_OM | X86_MXCSR_PM | X86_MXCSR_PE,
     4032              /*256:out  */ X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_ZERO | X86_MXCSR_OM | X86_MXCSR_PM | X86_MXCSR_OE | X86_MXCSR_PE,
     4033              /*xcpt?    */ false, false },
    40244034          { { /*src2     */ { FP32_NORM_MAX(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0) } },
    40254035            { /*src1     */ { FP32_NORM_MAX(1), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0) } },
    40264036            { /* =>      */ { FP32_NORM_MAX(1), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0) } },
    4027               /*mask     */ X86_MXCSR_XCPT_MASK,
    4028               /*daz,fz,rc*/ 0, 0, X86_MXCSR_RC_ZERO,
    4029               /*flags    */ X86_MXCSR_OE | X86_MXCSR_PE, X86_MXCSR_OE | X86_MXCSR_PE },
     4037              /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_ZERO,
     4038              /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_ZERO | X86_MXCSR_OE | X86_MXCSR_PE,
     4039              /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_ZERO | X86_MXCSR_OE | X86_MXCSR_PE,
     4040              /*xcpt?    */ false, false },
    40304041          { { /*src2     */ { FP32_NORM_MIN(1), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0) } },
    40314042            { /*src1     */ { FP32_NORM_MAX(1), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0) } },
    40324043            { /* =>      */ { FP32_0(0),       FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0) } },
    4033               /*mask     */ ~(X86_MXCSR_OM | X86_MXCSR_PM),
    4034               /*daz,fz,rc*/ 0, 0, X86_MXCSR_RC_ZERO,
    4035               /*flags    */ X86_MXCSR_PE, X86_MXCSR_PE },
     4044              /*mxcsr:in */ X86_MXCSR_RC_ZERO,
     4045              /*128:out  */ X86_MXCSR_RC_ZERO | X86_MXCSR_PE,
     4046              /*256:out  */ X86_MXCSR_RC_ZERO | X86_MXCSR_PE,
     4047              /*xcpt?    */ true, true },
    40364048          { { /*src2     */ { FP32_NORM_SAFE_INT_MIN(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0) } },
    40374049            { /*src1     */ { FP32_NORM_SAFE_INT_MAX(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0) } },
    40384050            { /* =>      */ { FP32_0(0),                 FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0) } },
    4039               /*mask     */ ~X86_MXCSR_XCPT_MASK,
    4040               /*daz,fz,rc*/ 0, 0, X86_MXCSR_RC_ZERO,
    4041               /*flags    */ X86_MXCSR_PE, X86_MXCSR_PE },
     4051              /*mxcsr:in */ X86_MXCSR_RC_ZERO,
     4052              /*128:out  */ X86_MXCSR_RC_ZERO | X86_MXCSR_PE,
     4053              /*256:out  */ X86_MXCSR_RC_ZERO | X86_MXCSR_PE,
     4054              /*xcpt?    */ true, true },
    40424055          { { /*src2     */ { FP32_NORM_SAFE_INT_MIN(1), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0) } },
    40434056            { /*src1     */ { FP32_NORM_SAFE_INT_MAX(1), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0) } },
    40444057            { /* =>      */ { FP32_0(1),                 FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0) } },
    4045               /*mask     */ ~X86_MXCSR_XCPT_MASK,
    4046               /*daz,fz,rc*/ 0, 0, X86_MXCSR_RC_ZERO,
    4047               /*flags    */ X86_MXCSR_PE, X86_MXCSR_PE },
     4058              /*mxcsr:in */ X86_MXCSR_RC_ZERO,
     4059              /*128:out  */ X86_MXCSR_RC_ZERO | X86_MXCSR_PE,
     4060              /*256:out  */ X86_MXCSR_RC_ZERO | X86_MXCSR_PE,
     4061              /*xcpt?    */ true, true },
     4062#if 0
    40484063    /*
    40494064     * Normals.
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