VirtualBox

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


Ignore:
Timestamp:
Sep 12, 2024 6:43:59 AM (8 months ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
164765
Message:

ValidationKit/bootsectors: Implement SISD FP testcases for [v]divss (derived from [v]mulss); bugref:10658

Location:
trunk/src/VBox/ValidationKit/bootsectors
Files:
2 edited

Legend:

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

    r106013 r106016  
    462462EMIT_INSTR_PLUS_ICEBP_C64   vmaxps, YMM8, YMM9, FSxBX
    463463
     464;
     465;; [v]divss
     466;
     467EMIT_INSTR_PLUS_ICEBP       divss, XMM1, XMM2
     468EMIT_INSTR_PLUS_ICEBP       divss, XMM1, FSxBX
     469EMIT_INSTR_PLUS_ICEBP_C64   divss, XMM8, XMM9
     470EMIT_INSTR_PLUS_ICEBP_C64   divss, XMM8, FSxBX
     471
     472EMIT_INSTR_PLUS_ICEBP       vdivss, XMM1, XMM2, XMM3
     473EMIT_INSTR_PLUS_ICEBP       vdivss, XMM1, XMM2, FSxBX
     474EMIT_INSTR_PLUS_ICEBP_C64   vdivss, XMM8, XMM9, XMM10
     475EMIT_INSTR_PLUS_ICEBP_C64   vdivss, XMM8, XMM9, FSxBX
     476
    464477%endif ; BS3_INSTANTIATING_CMN
    465478
  • trunk/src/VBox/ValidationKit/bootsectors/bs3-cpu-instr-4.c32

    r106014 r106016  
    71237123
    71247124/*
     7125 * [V]DIVSS.
     7126 */
     7127BS3_DECL_FAR(uint8_t) bs3CpuInstr4_v_divss(uint8_t bMode)
     7128{
     7129    static BS3CPUINSTR4_TEST1_VALUES_SS_T const s_aValues[] =
     7130    {
     7131    /*
     7132     * Zero.
     7133     */
     7134    /* 0*/{ { /*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) } },
     7135            { /*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) } },
     7136            { /* =>      */ { FP32_QNAN(1), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0) } },
     7137              /*mxcsr:in */ X86_MXCSR_XCPT_MASK,
     7138              /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_IE,
     7139              /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_IE,
     7140              /*xcpt?    */ false, false },
     7141          { { /*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) } },
     7142            { /*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) } },
     7143            { /* =>      */ { FP32_QNAN(1), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0) } },
     7144              /*mxcsr:in */ 0,
     7145              /*128:out  */ X86_MXCSR_IE,
     7146              /*256:out  */ X86_MXCSR_IE,
     7147              /*xcpt?    */ true, true },
     7148          { { /*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) } },
     7149            { /*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) } },
     7150            { /* =>      */ { FP32_QNAN(1), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0) } },
     7151              /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_ZERO,
     7152              /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_ZERO | X86_MXCSR_IE,
     7153              /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_ZERO | X86_MXCSR_IE,
     7154              /*xcpt?    */ false, false },
     7155          { { /*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)       } },
     7156            { /*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) } },
     7157            { /* =>      */ { FP32_QNAN(1), 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) } },
     7158              /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_DOWN | X86_MXCSR_IE,
     7159              /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_DOWN | X86_MXCSR_IE,
     7160              /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_DOWN,
     7161              /*xcpt?    */ false, false },
     7162          { { /*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) } },
     7163            { /*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) } },
     7164            { /* =>      */ { FP32_QNAN(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) } },
     7165              /*mxcsr:in */ X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_UP,
     7166              /*128:out  */ X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_UP | X86_MXCSR_IE,
     7167              /*256:out  */ X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_UP | X86_MXCSR_IE,
     7168              /*xcpt?    */ true, true },
     7169          { { /*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) } },
     7170            { /*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) } },
     7171            { /* =>      */ { 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) } },
     7172              /*mxcsr:in */ X86_MXCSR_DAZ | X86_MXCSR_RC_ZERO,
     7173              /*128:out  */ X86_MXCSR_DAZ | X86_MXCSR_RC_ZERO | X86_MXCSR_IE,
     7174              /*256:out  */ X86_MXCSR_DAZ | X86_MXCSR_RC_ZERO | X86_MXCSR_IE,
     7175              /*xcpt?    */ true, true },
     7176          { { /*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) } },
     7177            { /*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) } },
     7178            { /* =>      */ { FP32_QNAN(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) } },
     7179              /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ,
     7180              /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_IE,
     7181              /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_IE,
     7182              /*xcpt?    */ false, false },
     7183          { { /*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) } },
     7184            { /*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) } },
     7185            { /* =>      */ { FP32_INF(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) } },
     7186              /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_FZ | X86_MXCSR_RC_DOWN,
     7187              /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_FZ | X86_MXCSR_RC_DOWN | X86_FSW_ZE,
     7188              /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_FZ | X86_MXCSR_RC_DOWN | X86_FSW_ZE,
     7189              /*xcpt?    */ false, false },
     7190    /*
     7191     * Infinity.
     7192     */
     7193    /* 8*/{ { /*src2     */ { FP32_INF(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0) } },
     7194            { /*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) } },
     7195            { /* =>      */ { FP32_0(1),   FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0) } },
     7196              /*mxcsr:in */ X86_MXCSR_XCPT_MASK & ~X86_MXCSR_IM,
     7197              /*128:out  */ X86_MXCSR_XCPT_MASK & ~X86_MXCSR_IM,
     7198              /*256:out  */ X86_MXCSR_XCPT_MASK & ~X86_MXCSR_IM,
     7199              /*xcpt?    */ false, false },
     7200          { { /*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) } },
     7201            { /*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) } },
     7202            { /* =>      */ { FP32_0(0),   FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0) } },
     7203              /*mxcsr:in */ X86_MXCSR_XCPT_MASK,
     7204              /*128:out  */ X86_MXCSR_XCPT_MASK,
     7205              /*256:out  */ X86_MXCSR_XCPT_MASK,
     7206              /*xcpt?    */ false, false },
     7207          { { /*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) } },
     7208            { /*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) } },
     7209            { /* =>      */ { 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) } },
     7210              /*mxcsr:in */ (X86_MXCSR_XCPT_MASK & ~X86_MXCSR_IM) | X86_MXCSR_DAZ | X86_MXCSR_FZ,
     7211              /*128:out  */ (X86_MXCSR_XCPT_MASK & ~X86_MXCSR_IM) | X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_IE,
     7212              /*256:out  */ (X86_MXCSR_XCPT_MASK & ~X86_MXCSR_IM) | X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_IE,
     7213              /*xcpt?    */ true, true },
     7214          { { /*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) } },
     7215            { /*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) } },
     7216            { /* =>      */ { FP32_QNAN(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) } },
     7217              /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_ZERO,
     7218              /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_ZERO | X86_MXCSR_IE,
     7219              /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_ZERO | X86_MXCSR_IE,
     7220              /*xcpt?    */ false, false },
     7221          { { /*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) } },
     7222            { /*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) } },
     7223            { /* =>      */ { 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) } },
     7224              /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_FZ,
     7225              /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_FZ,
     7226              /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_FZ,
     7227              /*xcpt?    */ false, false },
     7228          { { /*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) } },
     7229            { /*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) } },
     7230            { /* =>      */ { FP32_0(1),   FP32_INF(0), FP32_INF(1), FP32_INF(0), FP32_INF(0), FP32_INF(1), FP32_INF(0), FP32_INF(1) } },
     7231              /*mxcsr:in */ X86_MXCSR_FZ,
     7232              /*128:out  */ X86_MXCSR_FZ,
     7233              /*256:out  */ X86_MXCSR_FZ,
     7234              /*xcpt?    */ false, false },
     7235          { { /*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) } },
     7236            { /*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) } },
     7237            { /* =>      */ { FP32_QNAN(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) } },
     7238              /*mxcsr:in */ X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_ZERO,
     7239              /*128:out  */ X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_ZERO | X86_MXCSR_IE,
     7240              /*256:out  */ X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_ZERO | X86_MXCSR_IE,
     7241              /*xcpt?    */ true, true },
     7242    /*
     7243     * Normals.
     7244     */
     7245    /*15*/{ { /*src2     */ { FP32_V(0, 0x600000, 0x7f)/*1.7500*/, 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) } },
     7246            { /*src1     */ { FP32_V(0, 0x600000, 0x7d)/*0.4375*/, 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) } },
     7247            { /* =>      */ { FP32_V(0, 0,        0x7d)/*0.2500*/, 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) } },
     7248              /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_DOWN,
     7249              /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_DOWN,
     7250              /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_DOWN,
     7251              /*xcpt?    */ false, false },
     7252          { { /*src2     */ { FP32_V(0, 0x61e000, 0x89)/*   1807*/, FP32_RAND_V6(0), FP32_RAND_V5(1), FP32_RAND_V4(1), FP32_RAND_V3(0), FP32_RAND_V2(1), FP32_RAND_V1(1) } },
     7253            { /*src1     */ { FP32_V(0, 0x37be78, 0x95)/*6020924*/, FP32_RAND_V1(1), FP32_RAND_V2(1), FP32_RAND_V3(0), FP32_RAND_V4(1), FP32_RAND_V5(1), FP32_RAND_V6(0) } },
     7254            { /* =>      */ { FP32_V(0, 0x504000, 0x8a)/*   3332*/, FP32_RAND_V1(1), FP32_RAND_V2(1), FP32_RAND_V3(0), FP32_RAND_V4(1), FP32_RAND_V5(1), FP32_RAND_V6(0) } },
     7255              /*mxcsr:in */ X86_MXCSR_XCPT_MASK,
     7256              /*128:out  */ X86_MXCSR_XCPT_MASK,
     7257              /*256:out  */ X86_MXCSR_XCPT_MASK,
     7258              /*xcpt?    */ false, false },
     7259          { { /*src2     */ { FP32_NORM_SAFE_INT_MAX(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) } },
     7260            { /*src1     */ { FP32_NORM_SAFE_INT_MAX(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) } },
     7261            { /* =>      */ { FP32_1(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) } },
     7262              /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_ZERO,
     7263              /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_ZERO,
     7264              /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_ZERO,
     7265              /*xcpt?    */ false, false },
     7266          { { /*src2     */ { FP32_V(0, 0x61e000, 0x89)/*   1807*/, 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) } },
     7267            { /*src1     */ { FP32_V(0, 0x37be78, 0x95)/*6020924*/, 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) } },
     7268            { /* =>      */ { FP32_V(0, 0x504000, 0x8a)/*   3332*/, 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) } },
     7269              /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_UP,
     7270              /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_UP,
     7271              /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_UP,
     7272              /*xcpt?    */ false, false },
     7273          { { /*src2     */ { FP32_V(0, 0x4a30b8, 0x8f)/* 103521.4375*/, FP32_RAND_V1(0), FP32_RAND_V2(1), FP32_RAND_V3(1), FP32_RAND_V4(0), FP32_RAND_V5(1), FP32_RAND_V6(1) } },
     7274            { /*src1     */ { FP32_V(0, 0x30eaa1, 0x93)/*1449300.1250*/, FP32_RAND_V3(0), FP32_RAND_V2(0), FP32_RAND_V0(1), FP32_RAND_V3(0), FP32_RAND_V4(0), FP32_RAND_V2(1) } },
     7275            { /* =>      */ { FP32_V(0, 0x600000, 0x82)/*     14.0000*/, FP32_RAND_V3(0), FP32_RAND_V2(0), FP32_RAND_V0(1), FP32_RAND_V3(0), FP32_RAND_V4(0), FP32_RAND_V2(1) } },
     7276              /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_UP,
     7277              /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_UP,
     7278              /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_UP,
     7279              /*xcpt?    */ false, false },
     7280          { { /*src2     */ { FP32_V(0, 0x1a5200, 0x8c)/*     9876.5*/, FP32_RAND_V6(0), FP32_RAND_V0(1), FP32_RAND_V1(1), FP32_RAND_V3(0), FP32_RAND_V5(1), FP32_RAND_V7(1) } },
     7281            { /*src1     */ { FP32_V(1, 0x39f7d1, 0x96)/*-12187601.0*/, FP32_RAND_V6(0), FP32_RAND_V0(0), FP32_RAND_V2(1), FP32_RAND_V3(0), FP32_RAND_V4(0), FP32_RAND_V1(1) } },
     7282            { /* =>      */ { FP32_V(1, 0x1a4000, 0x89)/*    -1234.0*/, FP32_RAND_V6(0), FP32_RAND_V0(0), FP32_RAND_V2(1), FP32_RAND_V3(0), FP32_RAND_V6(0), FP32_RAND_V1(1) } },
     7283              /*mxcsr:in */ 0,
     7284              /*128:out  */ 0,
     7285              /*256:out  */ 0,
     7286              /*xcpt?    */ false, false },
     7287          { { /*src2     */ { FP32_NORM_MAX(0), FP32_NORM_V1(1), FP32_0(0),       FP32_1(0),       FP32_NORM_MIN(0), FP32_NORM_V1(0), FP32_NORM_V2(0), FP32_0(0)       } },
     7288            { /*src1     */ { FP32_NORM_MAX(1), FP32_1(0),       FP32_NORM_V1(1), FP32_NORM_V3(0), FP32_1(0),        FP32_1(0),       FP32_1(0),       FP32_NORM_V3(0) } },
     7289            { /* =>      */ { FP32_1(1),        FP32_1(0),       FP32_NORM_V1(1), FP32_NORM_V3(0), FP32_1(0),        FP32_1(0),       FP32_1(0),       FP32_NORM_V3(0) } },
     7290              /*mxcsr:in */ 0,
     7291              /*128:out  */ 0,
     7292              /*256:out  */ 0,
     7293              /*xcpt?    */ false, false },
     7294          { { /*src2     */ { FP32_V(0, 0x23b6a0, 0x8e)/*41910.625000*/, FP32_QNAN(0), FP32_SNAN(0), FP32_RAND_V0(0), FP32_RAND_V1(1), FP32_QNAN(0), FP32_SNAN(0), FP32_RAND_V2(0) } },
     7295            { /*src1     */ { FP32_V(0, 0x23b6a0, 0x8b)/* 5238.828125*/, FP32_QNAN(0), FP32_SNAN(0), FP32_RAND_V0(0), FP32_RAND_V1(0), FP32_QNAN(0), FP32_SNAN(0), FP32_RAND_V2(0) } },
     7296            { /* =>      */ { FP32_V(0, 0,        0x7c)/*    0.125000*/, FP32_QNAN(0), FP32_SNAN(0), FP32_RAND_V0(0), FP32_RAND_V1(1), FP32_QNAN(0), FP32_SNAN(0), FP32_RAND_V2(0) } },
     7297              /*mxcsr:in */ 0,
     7298              /*128:out  */ 0,
     7299              /*256:out  */ 0,
     7300              /*xcpt?    */ false, false },
     7301          { { /*src2     */ { FP32_NORM_SAFE_INT_MAX(0), FP32_NORM_SAFE_INT_MAX(0), FP32_1(1), FP32_1(1), FP32_1(0),                                                FP32_NORM_SAFE_INT_MAX(0), FP32_1(0), FP32_1(0) } },
     7302            { /*src1     */ { FP32_NORM_SAFE_INT_MAX(0), FP32_1(1),                 FP32_1(0), FP32_1(0), FP32_V(0, FP32_FRAC_NORM_MAX - 1, FP32_EXP_SAFE_INT_MAX), FP32_1(1),                 FP32_1(0), FP32_1(0) } },
     7303            { /* =>      */ { FP32_1(0),                 FP32_1(1),                 FP32_1(0), FP32_1(0), FP32_V(0, FP32_FRAC_NORM_MAX - 1, FP32_EXP_SAFE_INT_MAX), FP32_1(1),                 FP32_1(0), FP32_1(0) } },
     7304              /*mxcsr:in */ X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_DOWN,
     7305              /*128:out  */ X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_DOWN,
     7306              /*256:out  */ X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_DOWN,
     7307              /*xcpt?    */ false, false },
     7308    /** @todo More Normals. */
     7309    /*
     7310     * Denormals.
     7311     */
     7312    /*24*/{ { /*src2     */ { FP32_DENORM_MAX(0), FP32_RAND_V5(0), FP32_1(1),       FP32_RAND_V0(1), FP32_RAND_V5(0), FP32_1(1),       FP32_RAND_V0(1), FP32_RAND_V5(1) } },
     7313            { /*src1     */ { FP32_0(0),          FP32_1(0),       FP32_RAND_V3(1), FP32_1(1),       FP32_1(0),       FP32_RAND_V3(1), FP32_1(1),       FP32_1(1),      } },
     7314            { /* =>      */ { FP32_0(0),          FP32_1(0),       FP32_RAND_V3(1), FP32_1(1),       FP32_1(0),       FP32_RAND_V3(1), FP32_1(1),       FP32_1(1)       } },
     7315              /*mxcsr:in */ 0,
     7316              /*128:out  */ X86_MXCSR_DE,
     7317              /*256:out  */ X86_MXCSR_DE,
     7318              /*xcpt?    */ true, true },
     7319          { { /*src2     */ { FP32_0(0),          FP32_RAND_V5(0), FP32_1(1),       FP32_RAND_V0(1), FP32_RAND_V5(0), FP32_1(1),       FP32_RAND_V0(1), FP32_RAND_V5(1) } },
     7320            { /*src1     */ { FP32_DENORM_MAX(0), FP32_1(0),       FP32_RAND_V3(1), FP32_1(1),       FP32_1(0),       FP32_RAND_V3(1), FP32_1(1),       FP32_1(1),      } },
     7321            { /* =>      */ { FP32_INF(0),        FP32_1(0),       FP32_RAND_V3(1), FP32_1(1),       FP32_1(0),       FP32_RAND_V3(1), FP32_1(1),       FP32_1(1)       } },
     7322              /*mxcsr:in */ 0,
     7323              /*128:out  */ X86_MXCSR_ZE,
     7324              /*256:out  */ X86_MXCSR_ZE,
     7325              /*xcpt?    */ true, true },
     7326          { { /*src2     */ { FP32_DENORM_MAX(0), FP32_RAND_V5(0), FP32_1(1),       FP32_RAND_V0(1), FP32_RAND_V5(0), FP32_1(1),       FP32_RAND_V0(1), FP32_RAND_V5(1) } },
     7327            { /*src1     */ { FP32_0(0),          FP32_1(0),       FP32_RAND_V3(1), FP32_1(1),       FP32_1(0),       FP32_RAND_V3(1), FP32_1(1),       FP32_1(1),      } },
     7328            { /* =>      */ { FP32_0(0),          FP32_1(0),       FP32_RAND_V3(1), FP32_1(1),       FP32_1(0),       FP32_RAND_V3(1), FP32_1(1),       FP32_1(1)       } },
     7329              /*mxcsr:in */ X86_MXCSR_XCPT_MASK,
     7330              /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DE,
     7331              /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DE,
     7332              /*xcpt?    */ false, false },
     7333          { { /*src2     */ { FP32_0(0),          FP32_RAND_V5(0), FP32_1(1),       FP32_RAND_V0(1), FP32_RAND_V5(0), FP32_1(1),       FP32_RAND_V0(1), FP32_RAND_V5(1) } },
     7334            { /*src1     */ { FP32_DENORM_MAX(0), FP32_1(0),       FP32_RAND_V3(1), FP32_1(1),       FP32_1(0),       FP32_RAND_V3(1), FP32_1(1),       FP32_1(1),      } },
     7335            { /* =>      */ { FP32_INF(0),        FP32_1(0),       FP32_RAND_V3(1), FP32_1(1),       FP32_1(0),       FP32_RAND_V3(1), FP32_1(1),       FP32_1(1)       } },
     7336              /*mxcsr:in */ X86_MXCSR_XCPT_MASK,
     7337              /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_ZE,
     7338              /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_ZE,
     7339              /*xcpt?    */ false, false },
     7340          { { /*src2     */ { FP32_0(0),          FP32_DENORM_MIN(0), FP32_RAND_V2(0), FP32_RAND_V3(0), FP32_1(0),       FP32_DENORM_MIN(0), FP32_DENORM_MAX(0), FP32_1(0)          } },
     7341            { /*src1     */ { FP32_DENORM_MIN(1), FP32_1(0),          FP32_1(0),       FP32_1(0),       FP32_RAND_V2(0), FP32_1(0),          FP32_1(0),          FP32_DENORM_MAX(0) } },
     7342            { /* =>      */ { FP32_INF(1),        FP32_1(0),          FP32_1(0),       FP32_1(0),       FP32_RAND_V2(0), FP32_1(0),          FP32_1(0),          FP32_DENORM_MAX(0) } },
     7343              /*mxcsr:in */ X86_MXCSR_XCPT_MASK,
     7344              /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_ZE,
     7345              /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_ZE,
     7346              /*xcpt?    */ false, false },
     7347          { { /*src2     */ { FP32_DENORM_MIN(0), FP32_1(0),       FP32_DENORM_MAX(0), FP32_DENORM_MAX(1), FP32_RAND_V3(0), FP32_RAND_V0(0), FP32_RAND_V0(0),    FP32_DENORM_MAX(0) } },
     7348            { /* =>      */ { FP32_0(0),          FP32_RAND_V4(0), FP32_DENORM_MIN(1), FP32_DENORM_MIN(0), FP32_1(0),       FP32_1(0),       FP32_DENORM_MIN(0), FP32_RAND_V4(0)    } },
     7349            { /*src1     */ { FP32_QNAN(1), FP32_RAND_V4(0), FP32_DENORM_MIN(1), FP32_DENORM_MIN(0), FP32_1(0),       FP32_1(0),       FP32_DENORM_MIN(0), FP32_RAND_V4(0)    } },
     7350              /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_UP,
     7351              /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_UP | X86_MXCSR_IE,
     7352              /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_UP | X86_MXCSR_IE,
     7353              /*xcpt?    */ false, false },
     7354    /** @todo More Denormals. */
     7355    /*
     7356     * Invalids.
     7357     */
     7358    /*30*/ BS3CPUINSTR4_SS_INVALIDS
     7359    /** @todo Underflow; Precision; Rounding, FZ etc. */
     7360    };
     7361
     7362/** @todo Make cdefs.h 'RT_ELEMENTS(arr), arr' macro?  But extra cast, here. */
     7363/** @todo Do this to existing instr-4 tests?  instr-3?  Beyond? */
     7364#define PASS_s_aValues RT_ELEMENTS(s_aValues), (BS3CPUINSTR4_TEST1_VALUES_T *)s_aValues
     7365    static BS3CPUINSTR4_TEST1_T const s_aTests16[] =
     7366    {
     7367        { bs3CpuInstr4_divss_XMM1_XMM2_icebp_c16,        255,         RM_REG, T_SSE,     1, 1, 2,   PASS_s_aValues },
     7368        { bs3CpuInstr4_divss_XMM1_FSxBX_icebp_c16,       255,         RM_MEM, T_SSE,     1, 1, 255, PASS_s_aValues },
     7369
     7370        { bs3CpuInstr4_vdivss_XMM1_XMM2_XMM3_icebp_c16,  255,         RM_REG, T_AVX_128, 1, 2, 3,   PASS_s_aValues },
     7371        { bs3CpuInstr4_vdivss_XMM1_XMM2_FSxBX_icebp_c16, X86_XCPT_AC, RM_MEM, T_AVX_128, 1, 2, 255, PASS_s_aValues },
     7372    };
     7373    static BS3CPUINSTR4_TEST1_T const s_aTests32[] =
     7374    {
     7375        { bs3CpuInstr4_divss_XMM1_XMM2_icebp_c32,        255,         RM_REG, T_SSE,     1, 1, 2,   PASS_s_aValues },
     7376        { bs3CpuInstr4_divss_XMM1_FSxBX_icebp_c32,       255,         RM_MEM, T_SSE,     1, 1, 255, PASS_s_aValues },
     7377
     7378        { bs3CpuInstr4_vdivss_XMM1_XMM2_XMM3_icebp_c32,  255,         RM_REG, T_AVX_128, 1, 2, 3,   PASS_s_aValues },
     7379        { bs3CpuInstr4_vdivss_XMM1_XMM2_FSxBX_icebp_c32, X86_XCPT_AC, RM_MEM, T_AVX_128, 1, 2, 255, PASS_s_aValues },
     7380    };
     7381    static BS3CPUINSTR4_TEST1_T const s_aTests64[] =
     7382    {
     7383        { bs3CpuInstr4_divss_XMM1_XMM2_icebp_c64,        255,         RM_REG, T_SSE,     1, 1, 2,   PASS_s_aValues },
     7384        { bs3CpuInstr4_divss_XMM1_FSxBX_icebp_c64,       255,         RM_MEM, T_SSE,     1, 1, 255, PASS_s_aValues },
     7385
     7386        { bs3CpuInstr4_vdivss_XMM1_XMM2_XMM3_icebp_c64,  255,         RM_REG, T_AVX_128, 1, 2, 3,   PASS_s_aValues },
     7387        { bs3CpuInstr4_vdivss_XMM1_XMM2_FSxBX_icebp_c64, X86_XCPT_AC, RM_MEM, T_AVX_128, 1, 2, 255, PASS_s_aValues },
     7388
     7389        { bs3CpuInstr4_divss_XMM8_XMM9_icebp_c64,        255,         RM_REG, T_SSE,     8, 8, 9,   PASS_s_aValues },
     7390        { bs3CpuInstr4_divss_XMM8_FSxBX_icebp_c64,       X86_XCPT_AC, RM_MEM, T_SSE,     8, 8, 255, PASS_s_aValues },
     7391
     7392        { bs3CpuInstr4_vdivss_XMM8_XMM9_XMM10_icebp_c64, 255,         RM_REG, T_AVX_128, 8, 9, 10,  PASS_s_aValues },
     7393        { bs3CpuInstr4_vdivss_XMM8_XMM9_FSxBX_icebp_c64, X86_XCPT_AC, RM_MEM, T_AVX_128, 8, 9, 255, PASS_s_aValues },
     7394    };
     7395#undef PASS_s_aValues
     7396
     7397    static BS3CPUINSTR4_TEST1_MODE_T const s_aTests[3] = BS3CPUINSTR4_TEST1_MODES_INIT(s_aTests16, s_aTests32, s_aTests64);
     7398    unsigned const                         iTest       = BS3CPUINSTR4_TEST_MODES_INDEX(bMode);
     7399    return bs3CpuInstr4_WorkerTestType1(bMode, s_aTests[iTest].paTests, s_aTests[iTest].cTests,
     7400                                        g_aXcptConfig3, RT_ELEMENTS(g_aXcptConfig3));
     7401}
     7402
     7403
     7404/*
    71257405 * [V]ADDSUBPS.
    71267406 */
     
    81108390        { "[v]mulss",       bs3CpuInstr4_v_mulss,    0 },
    81118391        { "[v]mulsd",       bs3CpuInstr4_v_mulsd,    0 },
     8392        { "[v]divss",       bs3CpuInstr4_v_divss,  0 },
    81128393        { "[v]addsubps",    bs3CpuInstr4_v_addsubps, 0 },
    81138394        { "[v]addsubpd",    bs3CpuInstr4_v_addsubpd, 0 },
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