VirtualBox

Ignore:
Timestamp:
Sep 24, 2024 2:00:45 AM (5 months ago)
Author:
vboxsync
Message:

ValidationKit/bootsectors: Implement SIMD FP testcases (except invalids) for [v]sqrtps; 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

    r106115 r106132  
    586586EMIT_INSTR_PLUS_ICEBP_C64   vminps, YMM8, YMM9, FSxBX
    587587
     588;
     589;; [v]sqrtps
     590;
     591EMIT_INSTR_PLUS_ICEBP       sqrtps, XMM1, XMM2
     592EMIT_INSTR_PLUS_ICEBP       sqrtps, XMM1, FSxBX
     593EMIT_INSTR_PLUS_ICEBP_C64   sqrtps, XMM8, XMM9
     594EMIT_INSTR_PLUS_ICEBP_C64   sqrtps, XMM8, FSxBX
     595
     596EMIT_INSTR_PLUS_ICEBP       vsqrtps, XMM1, XMM2
     597EMIT_INSTR_PLUS_ICEBP       vsqrtps, XMM1, FSxBX
     598EMIT_INSTR_PLUS_ICEBP_C64   vsqrtps, XMM8, XMM9
     599EMIT_INSTR_PLUS_ICEBP_C64   vsqrtps, XMM8, FSxBX
     600
     601EMIT_INSTR_PLUS_ICEBP       vsqrtps, YMM1, YMM2
     602EMIT_INSTR_PLUS_ICEBP       vsqrtps, YMM1, FSxBX
     603EMIT_INSTR_PLUS_ICEBP_C64   vsqrtps, YMM8, YMM9
     604EMIT_INSTR_PLUS_ICEBP_C64   vsqrtps, YMM8, FSxBX
     605
     606
    588607%endif ; BS3_INSTANTIATING_CMN
    589608
  • trunk/src/VBox/ValidationKit/bootsectors/bs3-cpu-instr-4.c32

    r106115 r106132  
    83658365             /*xcpt?    */ false, false },
    83668366#ifdef TODO_X86_MXCSR_UE /** @todo THIS FAILS ON IEM: X86_MXCSR_UE not set in 256:out */
    8367  /*--/22*/{ { /*src2     */ { FP64_1(0), FP64_1(1), FP64_1(0),          FP64_1(0)          } },
     8367 /*--|22*/{ { /*src2     */ { FP64_1(0), FP64_1(1), FP64_1(0),          FP64_1(0)          } },
    83688368            { /*src1     */ { FP64_0(0), FP64_0(0), FP64_DENORM_MIN(0), FP64_DENORM_MAX(0) } },
    83698369            { /* =>      */ { FP64_0(0), FP64_0(1), FP64_DENORM_MIN(0), FP64_DENORM_MAX(0) } },
     
    83738373             /*xcpt?    */ false, true },
    83748374#endif /* TODO_X86_MXCSR_UE */
    8375  /*22/23*/{ { /*src2     */ { FP64_1(0),          FP64_1(0),          FP64_DENORM_MIN(0), FP64_DENORM_MAX(0) } },
     8375 /*22|23*/{ { /*src2     */ { FP64_1(0),          FP64_1(0),          FP64_DENORM_MIN(0), FP64_DENORM_MAX(0) } },
    83768376            { /*src1     */ { FP64_DENORM_MAX(0), FP64_DENORM_MIN(0), FP64_0(0),          FP64_1(1)          } },
    83778377            { /* =>      */ { FP64_0(0),          FP64_0(0),          FP64_QNAN(1),       FP64_INF(1)        } },
     
    1190911909
    1191011910
     11911/*
     11912 * [V]SQRTPS.
     11913 */
     11914BS3_DECL_FAR(uint8_t) bs3CpuInstr4_v_sqrtps(uint8_t bMode)
     11915{
     11916#define FP32_x8_UNUSED FP32_1(0), FP32_1(0), FP32_1(0), FP32_1(0), FP32_1(0), FP32_1(0), FP32_1(0), FP32_1(0)
     11917    static BS3CPUINSTR4_TEST1_VALUES_PS_T const s_aValues[] =
     11918    {
     11919    /*
     11920     * Zero.
     11921     */
     11922    /* 0*/{ { /*src1     */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(1), FP32_0(1), FP32_0(1), FP32_0(1) } },
     11923            { /*unused   */ { FP32_x8_UNUSED } },
     11924            { /* =>      */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(1), FP32_0(1), FP32_0(1), FP32_0(1) } },
     11925              /*mxcsr:in */ X86_MXCSR_XCPT_MASK,
     11926              /*128:out  */ X86_MXCSR_XCPT_MASK,
     11927              /*256:out  */ X86_MXCSR_XCPT_MASK,
     11928              /*xcpt?    */ false, false },
     11929          { { /*src1     */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(1), FP32_0(1), FP32_0(1), FP32_0(1) } },
     11930            { /*unused   */ { FP32_x8_UNUSED } },
     11931            { /* =>      */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(1), FP32_0(1), FP32_0(1), FP32_0(1) } },
     11932              /*mxcsr:in */ 0,
     11933              /*128:out  */ 0,
     11934              /*256:out  */ 0,
     11935              /*xcpt?    */ false, false },
     11936          { { /*src1     */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(1), FP32_0(1), FP32_0(1), FP32_0(1) } },
     11937            { /*unused   */ { FP32_x8_UNUSED } },
     11938            { /* =>      */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(1), FP32_0(1), FP32_0(1), FP32_0(1) } },
     11939              /*mxcsr:in */ X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_UP,
     11940              /*128:out  */ X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_UP,
     11941              /*256:out  */ X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_UP,
     11942              /*xcpt?    */ false, false },
     11943          { { /*src1     */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(1), FP32_0(1), FP32_0(1), FP32_0(1) } },
     11944            { /*unused   */ { FP32_x8_UNUSED } },
     11945            { /* =>      */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(1), FP32_0(1), FP32_0(1), FP32_0(1) } },
     11946              /*mxcsr:in */ X86_MXCSR_RC_ZERO,
     11947              /*128:out  */ X86_MXCSR_RC_ZERO,
     11948              /*256:out  */ X86_MXCSR_RC_ZERO,
     11949              /*xcpt?    */ false, false },
     11950          { { /*src1     */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(1), FP32_0(1), FP32_0(1), FP32_0(1) } },
     11951            { /*unused   */ { FP32_x8_UNUSED } },
     11952            { /* =>      */ { FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_0(1), FP32_0(1), FP32_0(1), FP32_0(1) } },
     11953              /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_DOWN,
     11954              /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_DOWN,
     11955              /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_DOWN,
     11956              /*xcpt?    */ false, false },
     11957    /*
     11958     * Infinity.
     11959     */
     11960    /* 5*/{ { /*src1     */ { FP32_INF(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_INF(1),  FP32_0(0), FP32_0(0), FP32_0(0) } },
     11961            { /*unused   */ { FP32_x8_UNUSED } },
     11962            { /* =>      */ { FP32_INF(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_QNAN(1), FP32_0(0), FP32_0(0), FP32_0(0) } },
     11963              /*mxcsr:in */ 0,
     11964              /*128:out  */ 0,
     11965              /*256:out  */ X86_MXCSR_IE,
     11966              /*xcpt?    */ false, true },
     11967          { { /*src1     */ { FP32_INF(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_INF(1),  FP32_0(0), FP32_0(0), FP32_0(0) } },
     11968            { /*unused   */ { FP32_x8_UNUSED } },
     11969            { /* =>      */ { FP32_INF(0), FP32_0(0), FP32_0(0), FP32_0(0), FP32_QNAN(1), FP32_0(0), FP32_0(0), FP32_0(0) } },
     11970              /*mxcsr:in */ X86_MXCSR_XCPT_MASK,
     11971              /*128:out  */ X86_MXCSR_XCPT_MASK,
     11972              /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_IE,
     11973              /*xcpt?    */ false, false },
     11974    /*
     11975     * Precision (Overflow, Underflow not possible).
     11976     */
     11977    /* 7*/{ { /*src1     */ { FP32_0(0), FP32_1(0), FP32_1(0), FP32_0(1), FP32_1(0), FP32_0(0), FP32_1(0), FP32_2(0)                            } },
     11978            { /*unused   */ { FP32_x8_UNUSED } },
     11979            { /* =>      */ { FP32_0(0), FP32_1(0), FP32_1(0), FP32_0(1), FP32_1(0), FP32_0(0), FP32_1(0), FP32_V(0, 0x3504f3, 0x7f)/*sqrt(2)*/ } },
     11980              /*mxcsr:in */ 0,
     11981              /*128:out  */ 0,
     11982              /*256:out  */ X86_MXCSR_PE,
     11983              /*xcpt?    */ false, true },
     11984          { { /*src1     */ { FP32_0(0), FP32_1(0), FP32_1(0), FP32_0(1), FP32_1(0), FP32_0(0), FP32_1(0), FP32_2(0)                            } },
     11985            { /*unused   */ { FP32_x8_UNUSED } },
     11986            { /* =>      */ { FP32_0(0), FP32_1(0), FP32_1(0), FP32_0(1), FP32_1(0), FP32_0(0), FP32_1(0), FP32_V(0, 0x3504f3, 0x7f)/*sqrt(2)*/ } },
     11987              /*mxcsr:in */ X86_MXCSR_PM,
     11988              /*128:out  */ X86_MXCSR_PM,
     11989              /*256:out  */ X86_MXCSR_PM | X86_MXCSR_PE,
     11990              /*xcpt?    */ false, false },
     11991          { { /*src1     */ { FP32_0(0), FP32_1(0), FP32_1(0), FP32_0(1), FP32_1(0), FP32_0(0), FP32_1(0), FP32_2(0)                            } },
     11992            { /*unused   */ { FP32_x8_UNUSED } },
     11993            { /* =>      */ { FP32_0(0), FP32_1(0), FP32_1(0), FP32_0(1), FP32_1(0), FP32_0(0), FP32_1(0), FP32_V(0, 0x3504f3, 0x7f)/*sqrt(2)*/ } },
     11994              /*mxcsr:in */ X86_MXCSR_PM | X86_MXCSR_RC_DOWN,
     11995              /*128:out  */ X86_MXCSR_PM | X86_MXCSR_RC_DOWN,
     11996              /*256:out  */ X86_MXCSR_PM | X86_MXCSR_RC_DOWN | X86_MXCSR_PE,
     11997              /*xcpt?    */ false, false },
     11998          { { /*src1     */ { FP32_0(0), FP32_1(0), FP32_1(0), FP32_0(1), FP32_1(0), FP32_0(0), FP32_1(0), FP32_2(0)                             } },
     11999            { /*unused   */ { FP32_x8_UNUSED } },
     12000            { /* =>      */ { FP32_0(0), FP32_1(0), FP32_1(0), FP32_0(1), FP32_1(0), FP32_0(0), FP32_1(0), FP32_V(0, 0x3504f4, 0x7f)/*sqrt^(2)*/ } },
     12001              /*mxcsr:in */ X86_MXCSR_PM | X86_MXCSR_RC_UP,
     12002              /*128:out  */ X86_MXCSR_PM | X86_MXCSR_RC_UP,
     12003              /*256:out  */ X86_MXCSR_PM | X86_MXCSR_RC_UP | X86_MXCSR_PE,
     12004              /*xcpt?    */ false, false },
     12005          { { /*src1     */ { FP32_0(0), FP32_1(0), FP32_1(0), FP32_0(1), FP32_1(0), FP32_0(0), FP32_1(0), FP32_2(0)                            } },
     12006            { /*unused   */ { FP32_x8_UNUSED } },
     12007            { /* =>      */ { FP32_0(0), FP32_1(0), FP32_1(0), FP32_0(1), FP32_1(0), FP32_0(0), FP32_1(0), FP32_V(0, 0x3504f3, 0x7f)/*sqrt(2)*/ } },
     12008              /*mxcsr:in */ X86_MXCSR_PM | X86_MXCSR_RC_ZERO,
     12009              /*128:out  */ X86_MXCSR_PM | X86_MXCSR_RC_ZERO,
     12010              /*256:out  */ X86_MXCSR_PM | X86_MXCSR_RC_ZERO | X86_MXCSR_PE,
     12011              /*xcpt?    */ false, false },
     12012          { { /*src1     */ { FP32_0(0), FP32_1(0), FP32_1(0), FP32_0(1), FP32_1(0), FP32_0(0), FP32_1(0), FP32_2(0)                            } },
     12013            { /*unused   */ { FP32_x8_UNUSED } },
     12014            { /* =>      */ { FP32_0(0), FP32_1(0), FP32_1(0), FP32_0(1), FP32_1(0), FP32_0(0), FP32_1(0), FP32_V(0, 0x3504f3, 0x7f)/*sqrt(2)*/ } },
     12015              /*mxcsr:in */ X86_MXCSR_PM | X86_MXCSR_FZ | X86_MXCSR_DAZ,
     12016              /*128:out  */ X86_MXCSR_PM | X86_MXCSR_FZ | X86_MXCSR_DAZ,
     12017              /*256:out  */ X86_MXCSR_PM | X86_MXCSR_FZ | X86_MXCSR_DAZ | X86_MXCSR_PE,
     12018              /*xcpt?    */ false, false },
     12019    /*
     12020     * Normals.
     12021     */
     12022    /*13*/{ { /*src1     */ { FP32_NORM_V0(0), FP32_NORM_V1(0), FP32_NORM_V2(0), FP32_NORM_V3(0), FP32_NORM_V4(0), FP32_NORM_V5(0), FP32_NORM_V6(0), FP32_NORM_V7(0) } },
     12023            { /*unused   */ { FP32_x8_UNUSED } },
     12024            { /* =>      */ { FP32_V(0,0x1ccf5c,0x40)/*sqrt(FP32_NORM_V0)*/,
     12025                              FP32_V(0,0x293fdb,0x97)/*sqrt(FP32_NORM_V1)*/,
     12026                              FP32_V(0,0x3455c7,0x7e)/*sqrt(FP32_NORM_V2)*/,
     12027                              FP32_V(0,0x27905f,0xbe)/*sqrt(FP32_NORM_V3)*/,
     12028                              FP32_V(0,0x49278b,0x9d)/*sqrt(FP32_NORM_V4)*/,
     12029                              FP32_V(0,0x009150,0xa8)/*sqrt(FP32_NORM_V5)*/,
     12030                              FP32_V(0,0x561776,0x5d)/*sqrt(FP32_NORM_V6)*/,
     12031                              FP32_V(0,0x3504f3,0x68)/*sqrt(FP32_NORM_V7)*/ } },
     12032              /*mxcsr:in */ X86_MXCSR_XCPT_MASK,
     12033              /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_PE,
     12034              /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_PE,
     12035              /*xcpt?    */ false, false },
     12036          { { /*src1     */ { FP32_V(0,0x44000,0x88)/*529.0*/,
     12037                              FP32_V(0,0x0,0x87)/*256.0*/,
     12038                              FP32_V(0,0x440000,0x7c)/*(7/16)^2*/,
     12039                              FP32_V(0,0x6f4840,0x8c)/*123.75^2*/,
     12040                              FP32_V(0,0x40000,0x88)/*528.0*/,
     12041                              FP32_V(0,0x8000,0x87)/*257.0*/,
     12042                              FP32_V(0,0x43ffff,0x7c)/*(7/16)^2-epsilon*/,
     12043                              FP32_V(0,0x6f4841,0x8c)/*123.75^2+epsilon*/ } },
     12044            { /*unused   */ { FP32_x8_UNUSED } },
     12045            { /* =>      */ { FP32_V(0,0x380000,0x83)/*23.0*/,
     12046                              FP32_V(0,0x0,0x83)/*16.0*/,
     12047                              FP32_V(0,0x600000,0x7d)/*7/16*/,
     12048                              FP32_V(0,0x778000,0x85)/*123.75*/,
     12049                              FP32_V(0,0x37d375,0x83)/*sqrt(528)*/,
     12050                              FP32_V(0,0x3ff0,0x83)/*sqrt(257)*/,
     12051                              FP32_V(0,0x5fffff,0x7d)/*7/16-*/,
     12052                              FP32_V(0,0x778001,0x85)/*123.75+*/ } },
     12053              /*mxcsr:in */ X86_MXCSR_XCPT_MASK,
     12054              /*128:out  */ X86_MXCSR_XCPT_MASK,
     12055              /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_PE,
     12056              /*xcpt?    */ false, false },
     12057          { { /*src1     */ { FP32_V(0,0x44000,0x88)/*529.0*/,
     12058                              FP32_V(0,0x0,0x87)/*256.0*/,
     12059                              FP32_V(0,0x440000,0x7c)/*(7/16)^2*/,
     12060                              FP32_V(0,0x6f4840,0x8c)/*123.75^2*/,
     12061                              FP32_V(0,0x40000,0x88)/*528.0*/,
     12062                              FP32_V(0,0x8000,0x87)/*257.0*/,
     12063                              FP32_V(0,0x43ffff,0x7c)/*(7/16)^2-epsilon*/,
     12064                              FP32_V(0,0x6f4841,0x8c)/*123.75^2+epsilon*/ } },
     12065            { /*unused   */ { FP32_x8_UNUSED } },
     12066            { /* =>      */ { FP32_V(0,0x380000,0x83)/*23.0*/,
     12067                              FP32_V(0,0x0,0x83)/*16.0*/,
     12068                              FP32_V(0,0x600000,0x7d)/*7/16*/,
     12069                              FP32_V(0,0x778000,0x85)/*123.75*/,
     12070                              FP32_V(0,0x37d375,0x83)/*sqrt(528)*/,
     12071                              FP32_V(0,0x3ff0,0x83)/*sqrt(257)*/,
     12072                              FP32_V(0,0x5fffff,0x7d)/*7/16-*/,
     12073                              FP32_V(0,0x778000,0x85)/*123.75[DOWN]*/ } },
     12074              /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_DOWN,
     12075              /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_DOWN,
     12076              /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_PE | X86_MXCSR_RC_DOWN,
     12077              /*xcpt?    */ false, false },
     12078          { { /*src1     */ { FP32_V(0,0x44000,0x88)/*529.0*/,
     12079                              FP32_V(0,0x0,0x87)/*256.0*/,
     12080                              FP32_V(0,0x440000,0x7c)/*(7/16)^2*/,
     12081                              FP32_V(0,0x6f4840,0x8c)/*123.75^2*/,
     12082                              FP32_V(0,0x40000,0x88)/*528.0*/,
     12083                              FP32_V(0,0x8000,0x87)/*257.0*/,
     12084                              FP32_V(0,0x43ffff,0x7c)/*(7/16)^2-epsilon*/,
     12085                              FP32_V(0,0x6f4841,0x8c)/*123.75^2+epsilon*/ } },
     12086            { /*unused   */ { FP32_x8_UNUSED } },
     12087            { /* =>      */ { FP32_V(0,0x380000,0x83)/*23.0*/,
     12088                              FP32_V(0,0x0,0x83)/*16.0*/,
     12089                              FP32_V(0,0x600000,0x7d)/*7/16*/,
     12090                              FP32_V(0,0x778000,0x85)/*123.75*/,
     12091                              FP32_V(0,0x37d376,0x83)/*sqrt(528)[UP]*/,
     12092                              FP32_V(0,0x3ff1,0x83)/*sqrt(257)[UP]*/,
     12093                              FP32_V(0,0x600000,0x7d)/*7/16[UP]*/,
     12094                              FP32_V(0,0x778001,0x85)/*123.75+*/ } },
     12095              /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_UP,
     12096              /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_UP,
     12097              /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_PE | X86_MXCSR_RC_UP,
     12098              /*xcpt?    */ false, false },
     12099          { { /*src1     */ { FP32_V(0,0x44000,0x88)/*529.0*/,
     12100                              FP32_V(0,0x0,0x87)/*256.0*/,
     12101                              FP32_V(0,0x440000,0x7c)/*(7/16)^2*/,
     12102                              FP32_V(0,0x6f4840,0x8c)/*123.75^2*/,
     12103                              FP32_V(0,0x40000,0x88)/*528.0*/,
     12104                              FP32_V(0,0x8000,0x87)/*257.0*/,
     12105                              FP32_V(0,0x43ffff,0x7c)/*(7/16)^2-epsilon*/,
     12106                              FP32_V(0,0x6f4841,0x8c)/*123.75^2+epsilon*/ } },
     12107            { /*unused   */ { FP32_x8_UNUSED } },
     12108            { /* =>      */ { FP32_V(0,0x380000,0x83)/*23.0*/,
     12109                              FP32_V(0,0x0,0x83)/*16.0*/,
     12110                              FP32_V(0,0x600000,0x7d)/*7/16*/,
     12111                              FP32_V(0,0x778000,0x85)/*123.75*/,
     12112                              FP32_V(0,0x37d375,0x83)/*sqrt(528)*/,
     12113                              FP32_V(0,0x3ff0,0x83)/*sqrt(257)*/,
     12114                              FP32_V(0,0x5fffff,0x7d)/*7/16-*/,
     12115                              FP32_V(0,0x778000,0x85)/*123.75[ZERO=DOWN]*/ } },
     12116              /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_ZERO,
     12117              /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_ZERO,
     12118              /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_PE | X86_MXCSR_RC_ZERO,
     12119              /*xcpt?    */ false, false },
     12120          { { /*src1     */ { FP32_NORM_MAX(0),
     12121                              FP32_NORM_MIN(0),
     12122                              FP32_NORM_SAFE_INT_MAX(0),
     12123                              FP32_NORM_SAFE_INT_MIN(0),
     12124                              FP32_NORM_MAX(1),
     12125                              FP32_NORM_MIN(1),
     12126                              FP32_NORM_SAFE_INT_MAX(1),
     12127                              FP32_NORM_SAFE_INT_MIN(1) } },
     12128            { /*unused   */ { FP32_x8_UNUSED } },
     12129            { /* =>      */ { FP32_V(0,0x7fffff,0xbe)/*sqrt(FP32_NORM_MAX)*/,
     12130                              FP32_V(0,0x0,0x40)/*sqrt(FP32_NORM_MIN)*/,
     12131                              FP32_V(0,0x7fffff,0x8a)/*sqrt(FP32_NORM_SAFE_INT_MAX)*/,
     12132                              FP32_V(0,0x0,0x40)/*sqrt(FP32_NORM_SAFE_INT_MIN)*/,
     12133                              FP32_QNAN(1),
     12134                              FP32_QNAN(1),
     12135                              FP32_QNAN(1),
     12136                              FP32_QNAN(1) } },
     12137              /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_FZ,
     12138              /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_PE,
     12139              /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_PE | X86_MXCSR_IE,
     12140              /*xcpt?    */ false, false },
     12141    /** @todo More Normals. */
     12142   /*
     12143    * Denormals.
     12144    */
     12145    /*19*/{ { /*src1     */ { FP32_DENORM_MAX(0),      FP32_DENORM_MAX(0),      FP32_0(0), FP32_0(1), FP32_DENORM_MAX(1), FP32_DENORM_MAX(1), FP32_0(1), FP32_0(0) } },
     12146            { /*unused   */ { FP32_x8_UNUSED } },
     12147            { /* =>      */ { FP32_V(0,0x7fffff,0x3f), FP32_V(0,0x7fffff,0x3f), FP32_0(0), FP32_0(1), FP32_QNAN(1),       FP32_QNAN(1),       FP32_0(1), FP32_0(0) } },
     12148              /*mxcsr:in */ 0,
     12149              /*128:out  */ X86_MXCSR_DE,
     12150              /*256:out  */ X86_MXCSR_DE | X86_MXCSR_IE,
     12151              /*xcpt?    */ true, true },
     12152#ifdef TODO_X86_MXCSR_PE /** @todo THIS FAILS ON IEM: X86_MXCSR_PE not set in 256:out */
     12153 /*--|20*/{ { /*src1     */ { FP32_DENORM_MAX(0),      FP32_DENORM_MAX(0),      FP32_0(0), FP32_0(1), FP32_DENORM_MAX(1), FP32_DENORM_MAX(1), FP32_0(1), FP32_0(0) } },
     12154            { /*unused   */ { FP32_x8_UNUSED } },
     12155            { /* =>      */ { FP32_V(0,0x7fffff,0x3f), FP32_V(0,0x7fffff,0x3f), FP32_0(0), FP32_0(1), FP32_QNAN(1),       FP32_QNAN(1),       FP32_0(1), FP32_0(0) } },
     12156              /*mxcsr:in */ X86_MXCSR_DM,
     12157              /*128:out  */ X86_MXCSR_DM | X86_MXCSR_DE | X86_MXCSR_PE,
     12158              /*256:out  */ X86_MXCSR_DM | X86_MXCSR_DE | X86_MXCSR_IE,
     12159              /*xcpt?    */ true, true },
     12160#endif /* TODO_X86_MXCSR_PE */
     12161 /*20|21*/{ { /*src1     */ { FP32_DENORM_MAX(0),      FP32_DENORM_MAX(0),      FP32_0(0), FP32_0(1), FP32_DENORM_MAX(1), FP32_DENORM_MAX(1), FP32_0(1), FP32_0(0) } },
     12162            { /*unused   */ { FP32_x8_UNUSED } },
     12163            { /* =>      */ { FP32_V(0,0x7fffff,0x3f), FP32_V(0,0x7fffff,0x3f), FP32_0(0), FP32_0(1), FP32_QNAN(1),       FP32_QNAN(1),       FP32_0(1), FP32_0(0) } },
     12164              /*mxcsr:in */ X86_MXCSR_PM,
     12165              /*128:out  */ X86_MXCSR_PM | X86_MXCSR_DE,
     12166              /*256:out  */ X86_MXCSR_PM | X86_MXCSR_DE | X86_MXCSR_IE,
     12167              /*xcpt?    */ true, true },
     12168#ifdef TODO_X86_MXCSR_PE /** @todo THIS FAILS ON IEM: X86_MXCSR_PE unexpectedly set in 256:out */
     12169 /*--|22*/{ { /*src1     */ { FP32_DENORM_MAX(0),      FP32_DENORM_MAX(0),      FP32_0(0), FP32_0(1), FP32_DENORM_MAX(1), FP32_DENORM_MAX(1), FP32_0(1), FP32_0(0) } },
     12170            { /*unused   */ { FP32_x8_UNUSED } },
     12171            { /* =>      */ { FP32_V(0,0x7fffff,0x3f), FP32_V(0,0x7fffff,0x3f), FP32_0(0), FP32_0(1), FP32_QNAN(1),       FP32_QNAN(1),       FP32_0(1), FP32_0(0) } },
     12172              /*mxcsr:in */ X86_MXCSR_DM | X86_MXCSR_PM,
     12173              /*128:out  */ X86_MXCSR_DM | X86_MXCSR_PM | X86_MXCSR_DE | X86_MXCSR_PE,
     12174              /*256:out  */ X86_MXCSR_DM | X86_MXCSR_PM | X86_MXCSR_DE | X86_MXCSR_IE,
     12175              /*xcpt?    */ false, true },
     12176#endif /* TODO_X86_MXCSR_PE */
     12177 /*21|23*/{ { /*src1     */ { FP32_DENORM_MAX(0),      FP32_DENORM_MAX(0),      FP32_0(0), FP32_0(1), FP32_DENORM_MAX(1), FP32_DENORM_MAX(1), FP32_0(1), FP32_0(0) } },
     12178            { /*unused   */ { FP32_x8_UNUSED } },
     12179            { /* =>      */ { FP32_V(0,0x7fffff,0x3f), FP32_V(0,0x7fffff,0x3f), FP32_0(0), FP32_0(1), FP32_QNAN(1),       FP32_QNAN(1),       FP32_0(1), FP32_0(0) } },
     12180              /*mxcsr:in */ X86_MXCSR_XCPT_MASK,
     12181              /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DE | X86_MXCSR_PE,
     12182              /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DE | X86_MXCSR_IE | X86_MXCSR_PE,
     12183              /*xcpt?    */ false, false },
     12184          { { /*src1     */ { FP32_DENORM_MIN(0),      FP32_DENORM_MIN(0),      FP32_0(0), FP32_0(1), FP32_DENORM_MIN(1), FP32_DENORM_MIN(1), FP32_0(1), FP32_0(0) } },
     12185            { /*unused   */ { FP32_x8_UNUSED } },
     12186            { /* =>      */ { FP32_V(0,0x3504f3,0x34), FP32_V(0,0x3504f3,0x34), FP32_0(0), FP32_0(1), FP32_QNAN(1),       FP32_QNAN(1),       FP32_0(1), FP32_0(0) } },
     12187              /*mxcsr:in */ 0,
     12188              /*128:out  */ X86_MXCSR_DE,
     12189              /*256:out  */ X86_MXCSR_DE | X86_MXCSR_IE,
     12190              /*xcpt?    */ true, true },
     12191          { { /*src1     */ { FP32_DENORM_MIN(0),      FP32_DENORM_MIN(0),      FP32_0(0), FP32_0(1), FP32_DENORM_MIN(1), FP32_DENORM_MIN(1), FP32_0(1), FP32_0(0) } },
     12192            { /*unused   */ { FP32_x8_UNUSED } },
     12193            { /* =>      */ { FP32_V(0,0x3504f3,0x34), FP32_V(0,0x3504f3,0x34), FP32_0(0), FP32_0(1), FP32_QNAN(1),       FP32_QNAN(1),       FP32_0(1), FP32_0(0) } },
     12194              /*mxcsr:in */ X86_MXCSR_XCPT_MASK,
     12195              /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DE | X86_MXCSR_PE,
     12196              /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DE | X86_MXCSR_IE | X86_MXCSR_PE,
     12197              /*xcpt?    */ false, false },
     12198          { { /*src1     */ { FP32_DENORM_MIN(0),      FP32_DENORM_MAX(0),      FP32_0(0), FP32_0(1), FP32_DENORM_MIN(1), FP32_DENORM_MAX(1), FP32_0(1), FP32_0(0) } },
     12199            { /*unused   */ { FP32_x8_UNUSED } },
     12200            { /* =>      */ { FP32_V(0,0x3504f3+1,0x34), FP32_V(0,0x7fffff,0x3f), FP32_0(0), FP32_0(1), FP32_QNAN(1),     FP32_QNAN(1),       FP32_0(1), FP32_0(0) } },
     12201              /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_UP,
     12202              /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DE | X86_MXCSR_PE | X86_MXCSR_RC_UP,
     12203              /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DE | X86_MXCSR_IE | X86_MXCSR_PE | X86_MXCSR_RC_UP,
     12204              /*xcpt?    */ false, false },
     12205          { { /*src1     */ { FP32_DENORM_MIN(0),      FP32_DENORM_MAX(0),      FP32_0(0), FP32_0(1), FP32_DENORM_MIN(1), FP32_DENORM_MAX(1), FP32_0(1), FP32_0(0) } },
     12206            { /*unused   */ { FP32_x8_UNUSED } },
     12207            { /* =>      */ { FP32_V(0,0x3504f3,0x34), FP32_V(0,0x7fffff-1,0x3f), FP32_0(0), FP32_0(1), FP32_QNAN(1),     FP32_QNAN(1),       FP32_0(1), FP32_0(0) } },
     12208              /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_DOWN,
     12209              /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DE | X86_MXCSR_PE | X86_MXCSR_RC_DOWN,
     12210              /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DE | X86_MXCSR_IE | X86_MXCSR_PE | X86_MXCSR_RC_DOWN,
     12211              /*xcpt?    */ false, false },
     12212          { { /*src1     */ { FP32_DENORM_MIN(0),      FP32_DENORM_MAX(0),      FP32_0(0), FP32_0(1), FP32_DENORM_MIN(1), FP32_DENORM_MAX(1), FP32_0(1), FP32_0(0) } },
     12213            { /*unused   */ { FP32_x8_UNUSED } },
     12214            { /* =>      */ { FP32_V(0,0x3504f3,0x34), FP32_V(0,0x7fffff-1,0x3f), FP32_0(0), FP32_0(1), FP32_QNAN(1),     FP32_QNAN(1),       FP32_0(1), FP32_0(0) } },
     12215              /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_ZERO,
     12216              /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DE | X86_MXCSR_PE | X86_MXCSR_RC_ZERO,
     12217              /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DE | X86_MXCSR_IE | X86_MXCSR_PE | X86_MXCSR_RC_ZERO,
     12218              /*xcpt?    */ false, false },
     12219          { { /*src1     */ { FP32_DENORM_MIN(0),      FP32_DENORM_MAX(0),      FP32_0(0), FP32_0(1), FP32_DENORM_MIN(1), FP32_DENORM_MAX(1), FP32_0(1), FP32_0(0) } },
     12220            { /*unused   */ { FP32_x8_UNUSED } },
     12221            { /* =>      */ { FP32_V(0,0x3504f3,0x34), FP32_V(0,0x7fffff,0x3f), FP32_0(0), FP32_0(1), FP32_QNAN(1),       FP32_QNAN(1),       FP32_0(1), FP32_0(0) } },
     12222              /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_FZ,
     12223              /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DE | X86_MXCSR_PE | X86_MXCSR_FZ,
     12224              /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DE | X86_MXCSR_IE | X86_MXCSR_PE | X86_MXCSR_FZ,
     12225              /*xcpt?    */ false, false },
     12226          { { /*src1     */ { FP32_DENORM_MIN(0),      FP32_DENORM_MAX(0),      FP32_0(0), FP32_0(1), FP32_DENORM_MIN(1), FP32_DENORM_MAX(1), FP32_0(1), FP32_0(0) } },
     12227            { /*unused   */ { FP32_x8_UNUSED } },
     12228            { /* =>      */ { FP32_0(0),               FP32_0(0),               FP32_0(0), FP32_0(1), FP32_0(1),          FP32_0(1),          FP32_0(1), FP32_0(0) } },
     12229              /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ,
     12230              /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ,
     12231              /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ,
     12232              /*xcpt?    */ false, false },
     12233    /** @todo More Denormals. */
     12234    /*
     12235     * Invalids.
     12236     */
     12237    /** @todo Invalids. */
     12238 /*29|31*/ /* FP32_TABLE_D10_PS_INVALIDS */
     12239    /** @todo Underflow, Precision; Rounding; FZ etc. */
     12240    };
     12241#undef FP32_x8_UNUSED
     12242
     12243#define PASS_s_aValues RT_ELEMENTS(s_aValues), (BS3CPUINSTR4_TEST1_VALUES_T *)s_aValues
     12244    static BS3CPUINSTR4_TEST1_T const s_aTests16[] =
     12245    {
     12246        { bs3CpuInstr4_sqrtps_XMM1_XMM2_icebp_c16,   255, RM_REG, T_SSE,     1, 1, 2,   PASS_s_aValues },
     12247        { bs3CpuInstr4_sqrtps_XMM1_FSxBX_icebp_c16,  255, RM_MEM, T_SSE,     1, 1, 255, PASS_s_aValues },
     12248
     12249        { bs3CpuInstr4_vsqrtps_XMM1_XMM2_icebp_c16,  255, RM_REG, T_AVX_128, 1, 1, 2,   PASS_s_aValues },
     12250        { bs3CpuInstr4_vsqrtps_XMM1_FSxBX_icebp_c16, 255, RM_MEM, T_AVX_128, 1, 1, 255, PASS_s_aValues },
     12251
     12252        { bs3CpuInstr4_vsqrtps_YMM1_YMM2_icebp_c16,  255, RM_REG, T_AVX_256, 1, 1, 2,   PASS_s_aValues },
     12253        { bs3CpuInstr4_vsqrtps_YMM1_FSxBX_icebp_c16, 255, RM_MEM, T_AVX_256, 1, 1, 255, PASS_s_aValues },
     12254    };
     12255    static BS3CPUINSTR4_TEST1_T const s_aTests32[] =
     12256    {
     12257        { bs3CpuInstr4_sqrtps_XMM1_XMM2_icebp_c32,   255, RM_REG, T_SSE,     1, 1, 2,   PASS_s_aValues },
     12258        { bs3CpuInstr4_sqrtps_XMM1_FSxBX_icebp_c32,  255, RM_MEM, T_SSE,     1, 1, 255, PASS_s_aValues },
     12259
     12260        { bs3CpuInstr4_vsqrtps_XMM1_XMM2_icebp_c32,  255, RM_REG, T_AVX_128, 1, 1, 2,   PASS_s_aValues },
     12261        { bs3CpuInstr4_vsqrtps_XMM1_FSxBX_icebp_c32, 255, RM_MEM, T_AVX_128, 1, 1, 255, PASS_s_aValues },
     12262
     12263        { bs3CpuInstr4_vsqrtps_YMM1_YMM2_icebp_c32,  255, RM_REG, T_AVX_256, 1, 1, 2,   PASS_s_aValues },
     12264        { bs3CpuInstr4_vsqrtps_YMM1_FSxBX_icebp_c32, 255, RM_MEM, T_AVX_256, 1, 1, 255, PASS_s_aValues },
     12265    };
     12266    static BS3CPUINSTR4_TEST1_T const s_aTests64[] =
     12267    {
     12268        { bs3CpuInstr4_sqrtps_XMM1_XMM2_icebp_c64,   255, RM_REG, T_SSE,     1, 1, 2,   PASS_s_aValues },
     12269        { bs3CpuInstr4_sqrtps_XMM1_FSxBX_icebp_c64,  255, RM_MEM, T_SSE,     1, 1, 255, PASS_s_aValues },
     12270
     12271        { bs3CpuInstr4_vsqrtps_XMM1_XMM2_icebp_c64,  255, RM_REG, T_AVX_128, 1, 1, 2,   PASS_s_aValues },
     12272        { bs3CpuInstr4_vsqrtps_XMM1_FSxBX_icebp_c64, 255, RM_MEM, T_AVX_128, 1, 1, 255, PASS_s_aValues },
     12273
     12274        { bs3CpuInstr4_vsqrtps_YMM1_YMM2_icebp_c64,  255, RM_REG, T_AVX_256, 1, 1, 2,   PASS_s_aValues },
     12275        { bs3CpuInstr4_vsqrtps_YMM1_FSxBX_icebp_c64, 255, RM_MEM, T_AVX_256, 1, 1, 255, PASS_s_aValues },
     12276
     12277        { bs3CpuInstr4_sqrtps_XMM8_XMM9_icebp_c64,   255, RM_REG, T_SSE,     8, 8, 9,   PASS_s_aValues },
     12278        { bs3CpuInstr4_sqrtps_XMM8_FSxBX_icebp_c64,  255, RM_MEM, T_SSE,     8, 8, 255, PASS_s_aValues },
     12279
     12280        { bs3CpuInstr4_vsqrtps_XMM8_XMM9_icebp_c64,  255, RM_REG, T_AVX_128, 8, 8, 9,   PASS_s_aValues },
     12281        { bs3CpuInstr4_vsqrtps_XMM8_FSxBX_icebp_c64, 255, RM_MEM, T_AVX_128, 8, 8, 255, PASS_s_aValues },
     12282        { bs3CpuInstr4_vsqrtps_YMM8_YMM9_icebp_c64,  255, RM_REG, T_AVX_256, 8, 8, 9,   PASS_s_aValues },
     12283        { bs3CpuInstr4_vsqrtps_YMM8_FSxBX_icebp_c64, 255, RM_MEM, T_AVX_256, 8, 8, 255, PASS_s_aValues },
     12284    };
     12285#undef PASS_s_aValues
     12286
     12287    static BS3CPUINSTR4_TEST1_MODE_T const s_aTests[3] = BS3CPUINSTR4_TEST1_MODES_INIT(s_aTests16, s_aTests32, s_aTests64);
     12288    unsigned const                         iTest       = BS3CPUINSTR4_TEST_MODES_INDEX(bMode);
     12289    return bs3CpuInstr4_WorkerTestType1(bMode, s_aTests[iTest].paTests, s_aTests[iTest].cTests,
     12290                                        g_aXcptConfig2, RT_ELEMENTS(g_aXcptConfig2));
     12291}
     12292
     12293
    1191112294/**
    1191212295 * The 32-bit protected mode main function.
     
    1195512338        { "[v]maxsd",       bs3CpuInstr4_v_maxsd,    0 },
    1195612339        { "[v]minps",       bs3CpuInstr4_v_minps,    0 },
     12340        { "[v]sqrtps",      bs3CpuInstr4_v_sqrtps,   0 },
    1195712341#endif
    1195812342    };
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