VirtualBox

Changeset 106285 in vbox


Ignore:
Timestamp:
Oct 10, 2024 10:35:00 AM (6 months ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
165086
Message:

ValidationKit/bootsectors: Implement SISD FP testcases (except invalids) for [v]sqrtss; bugref:10658

Note: includes some new oddball uses like sqrtss xmm1, xmm1 and
vsqrtss xmm1, xmm1, xmm1; which aren't compatible with the main table
of test values. So this is the first instruction in bs3-cpu-instr-4 to
use multiple data tables. Other instructions should also test such
same-register uses -- some of which will need extra tables, many won't;
here it's caused by sqrtss's special wacky behavior of merging one
square-rooted value into unmodified values from the other [or 3rd]
operand.

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

Legend:

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

    r106252 r106285  
    696696EMIT_INSTR_PLUS_ICEBP_C64   vsqrtpd, YMM8, YMM9
    697697EMIT_INSTR_PLUS_ICEBP_C64   vsqrtpd, YMM8, FSxBX
     698;
     699;; [v]sqrtss
     700;
     701EMIT_INSTR_PLUS_ICEBP       sqrtss,  XMM1, XMM2
     702EMIT_INSTR_PLUS_ICEBP       sqrtss,  XMM1, FSxBX
     703EMIT_INSTR_PLUS_ICEBP_C64   sqrtss,  XMM8, XMM9
     704EMIT_INSTR_PLUS_ICEBP_C64   sqrtss,  XMM8, FSxBX
     705
     706EMIT_INSTR_PLUS_ICEBP       vsqrtss, XMM1, XMM2, XMM3
     707EMIT_INSTR_PLUS_ICEBP       vsqrtss, XMM1, XMM2, FSxBX
     708EMIT_INSTR_PLUS_ICEBP_C64   vsqrtss, XMM8, XMM9, XMM10
     709EMIT_INSTR_PLUS_ICEBP_C64   vsqrtss, XMM8, XMM9, FSxBX
     710
     711EMIT_INSTR_PLUS_ICEBP       sqrtss,  XMM1, XMM1
     712EMIT_INSTR_PLUS_ICEBP       vsqrtss, XMM1, XMM1, XMM1
     713EMIT_INSTR_PLUS_ICEBP       vsqrtss, XMM1, XMM1, XMM2
     714EMIT_INSTR_PLUS_ICEBP       vsqrtss, XMM1, XMM2, XMM2
     715EMIT_INSTR_PLUS_ICEBP       vsqrtss, XMM1, XMM1, FSxBX
    698716
    699717%endif ; BS3_INSTANTIATING_CMN
  • trunk/src/VBox/ValidationKit/bootsectors/bs3-cpu-instr-4.c32

    r106284 r106285  
    1415914159
    1416014160
     14161/*
     14162 * [V]SQRTSS.
     14163 */
     14164BS3_DECL_FAR(uint8_t) bs3CpuInstr4_v_sqrtss(uint8_t bMode)
     14165{
     14166    static BS3CPUINSTR4_TEST1_VALUES_SS_T const s_aValues[] =
     14167    {
     14168    /*
     14169     * Zero.
     14170     */
     14171    /* 0*/{ { /*src1     */ { FP32_0(0),       FP32_RAND_x7_V7 } },
     14172            { /*src2     */ { FP32_RAND_V2(0), FP32_RAND_x7_V2 } },
     14173            { /* =>      */ { FP32_0(0),       FP32_RAND_x7_V2 } },
     14174              /*mxcsr:in */ 0,
     14175              /*128:out  */ 0,
     14176              /*256:out  */ -1 },
     14177          { { /*src1     */ { FP32_0(1),       FP32_RAND_x7_V0 } },
     14178            { /*src2     */ { FP32_RAND_V3(1), FP32_RAND_x7_V1 } },
     14179            { /* =>      */ { FP32_0(1),       FP32_RAND_x7_V1 } },
     14180              /*mxcsr:in */ 0,
     14181              /*128:out  */ 0,
     14182              /*256:out  */ -1  },
     14183          { { /*src1     */ { FP32_0(1),       FP32_RAND_x7_V2 } },
     14184            { /*src2     */ { FP32_RAND_V5(0), FP32_RAND_x7_V1 } },
     14185            { /* =>      */ { FP32_0(1),       FP32_RAND_x7_V1 } },
     14186              /*mxcsr:in */ X86_MXCSR_RC_ZERO,
     14187              /*128:out  */ X86_MXCSR_RC_ZERO,
     14188              /*256:out  */ -1 },
     14189          { { /*src1     */ { FP32_0(1),       FP32_RAND_x7_V0 } },
     14190            { /*src2     */ { FP32_SNAN(0),    FP32_RAND_x7_V3 } },
     14191            { /* =>      */ { FP32_0(1),       FP32_RAND_x7_V3 } },
     14192              /*mxcsr:in */ X86_MXCSR_RC_UP,
     14193              /*128:out  */ X86_MXCSR_RC_UP,
     14194              /*256:out  */ -1 },
     14195          { { /*src1     */ { FP32_0(1),       FP32_RAND_x7_V0 } },
     14196            { /*src2     */ { FP32_QNAN(1),    FP32_RAND_x7_V3 } },
     14197            { /* =>      */ { FP32_0(1),       FP32_RAND_x7_V3 } },
     14198              /*mxcsr:in */ X86_MXCSR_RC_DOWN,
     14199              /*128:out  */ X86_MXCSR_RC_DOWN,
     14200              /*256:out  */ -1 },
     14201          { { /*src1     */ { FP32_0(0),       FP32_RAND_x7_V0 } },
     14202            { /*src2     */ { FP32_RAND_V0(1), FP32_RAND_x7_V3 } },
     14203            { /* =>      */ { FP32_0(0),       FP32_RAND_x7_V3 } },
     14204              /*mxcsr:in */ X86_MXCSR_DAZ | X86_MXCSR_FZ,
     14205              /*128:out  */ X86_MXCSR_DAZ | X86_MXCSR_FZ,
     14206              /*256:out  */ -1 },
     14207    /*
     14208     * Infinity.
     14209     */
     14210    /* 6*/{ { /*src1     */ { FP32_INF(0),     FP32_RAND_x7_V1 } },
     14211            { /*src2     */ { FP32_RAND_V2(0), FP32_RAND_x7_V0 } },
     14212            { /* =>      */ { FP32_INF(0),     FP32_RAND_x7_V0 } },
     14213              /*mxcsr:in */ 0,
     14214              /*128:out  */ 0,
     14215              /*256:out  */ -1 },
     14216          { { /*src1     */ { FP32_INF(0),     FP32_RAND_x7_V3 } },
     14217            { /*src2     */ { FP32_2(1),       FP32_RAND_x7_V1 } },
     14218            { /* =>      */ { FP32_INF(0),     FP32_RAND_x7_V1 } },
     14219              /*mxcsr:in */ X86_MXCSR_RC_ZERO,
     14220              /*128:out  */ X86_MXCSR_RC_ZERO,
     14221              /*256:out  */ -1 },
     14222          { { /*src1     */ { FP32_INF(0),     FP32_RAND_x7_V5 } },
     14223            { /*src2     */ { FP32_RAND_V2(0), FP32_RAND_x7_V3 } },
     14224            { /* =>      */ { FP32_INF(0),     FP32_RAND_x7_V3 } },
     14225              /*mxcsr:in */ X86_MXCSR_FZ | X86_MXCSR_RC_DOWN,
     14226              /*128:out  */ X86_MXCSR_FZ | X86_MXCSR_RC_DOWN,
     14227              /*256:out  */ -1 },
     14228          { { /*src1     */ { FP32_INF(0),     FP32_RAND_x7_V6 } },
     14229            { /*src2     */ { FP32_SNAN(0),    FP32_RAND_x7_V0 } },
     14230            { /* =>      */ { FP32_INF(0),     FP32_RAND_x7_V0 } },
     14231              /*mxcsr:in */ X86_MXCSR_DAZ | X86_MXCSR_RC_UP,
     14232              /*128:out  */ X86_MXCSR_DAZ | X86_MXCSR_RC_UP,
     14233              /*256:out  */ -1 },
     14234          { { /*src1     */ { FP32_INF(1),     FP32_RAND_x7_V6 } },
     14235            { /*src2     */ { FP32_RAND_V2(0), FP32_RAND_x7_V2 } },
     14236            { /* =>      */ { FP32_QNAN(1),    FP32_RAND_x7_V2 } },
     14237              /*mxcsr:in */ 0,
     14238              /*128:out  */ X86_MXCSR_IE,
     14239              /*256:out  */ -1 },
     14240          { { /*src1     */ { FP32_INF(1),     FP32_RAND_x7_V5 } },
     14241            { /*src2     */ { FP32_RAND_V2(0), FP32_RAND_x7_V1 } },
     14242            { /* =>      */ { FP32_QNAN(1),    FP32_RAND_x7_V1 } },
     14243              /*mxcsr:in */ X86_MXCSR_RC_ZERO,
     14244              /*128:out  */ X86_MXCSR_IE | X86_MXCSR_RC_ZERO,
     14245              /*256:out  */ -1 },
     14246          { { /*src1     */ { FP32_INF(1),     FP32_RAND_x7_V6 } },
     14247            { /*src2     */ { FP32_QNAN(0),    FP32_RAND_x7_V2 } },
     14248            { /* =>      */ { FP32_QNAN(1),    FP32_RAND_x7_V2 } },
     14249              /*mxcsr:in */ X86_MXCSR_FZ | X86_MXCSR_RC_DOWN,
     14250              /*128:out  */ X86_MXCSR_IE | X86_MXCSR_FZ | X86_MXCSR_RC_DOWN,
     14251              /*256:out  */ -1 },
     14252          { { /*src1     */ { FP32_INF(1),     FP32_RAND_x7_V3 } },
     14253            { /*src2     */ { FP32_RAND_V4(0), FP32_RAND_x7_V1 } },
     14254            { /* =>      */ { FP32_QNAN(1),    FP32_RAND_x7_V1 } },
     14255              /*mxcsr:in */ X86_MXCSR_DAZ | X86_MXCSR_RC_UP,
     14256              /*128:out  */ X86_MXCSR_IE | X86_MXCSR_DAZ | X86_MXCSR_RC_UP,
     14257              /*256:out  */ -1 },
     14258    /*
     14259     * Normals & Precision (Overflow, Underflow not possible).
     14260     */
     14261    /*14*/{ { /*src1     */ { FP32_NORM_V0(0),                               FP32_RAND_x7_V3 } },
     14262            { /*src2     */ { FP32_NORM_V4(0),                               FP32_RAND_x7_V0 } },
     14263            { /* =>      */ { FP32_V(0,0x1ccf5c,0x40)/*sqrt(FP32_NORM_V0)*/, FP32_RAND_x7_V0 } },
     14264              /*mxcsr:in */ 0,
     14265              /*128:out  */ X86_MXCSR_PE,
     14266              /*256:out  */ -1 },
     14267          { { /*src1     */ { FP32_NORM_V2(0),                               FP32_RAND_x7_V6 } },
     14268            { /*src2     */ { FP32_1(1),                                     FP32_RAND_x7_V3 } },
     14269            { /* =>      */ { FP32_V(0,0x3455c7,0x7e)/*sqrt(FP32_NORM_V2)*/, FP32_RAND_x7_V3 } },
     14270              /*mxcsr:in */ X86_MXCSR_FZ,
     14271              /*128:out  */ X86_MXCSR_PE | X86_MXCSR_FZ,
     14272              /*256:out  */ -1 },
     14273          { { /*src1     */ { FP32_NORM_V3(0),                               FP32_0_x7(0)    } },
     14274            { /*src2     */ { FP32_NORM_SAFE_INT_MIN(0),                     FP32_RAND_x7_V1 } },
     14275            { /* =>      */ { FP32_V(0,0x27905f,0xbe)/*sqrt(FP32_NORM_V3)*/, FP32_RAND_x7_V1 } },
     14276              /*mxcsr:in */ X86_MXCSR_DAZ,
     14277              /*128:out  */ X86_MXCSR_DAZ | X86_MXCSR_PE,
     14278              /*256:out  */ -1 },
     14279          { { /*src1     */ { FP32_NORM_MAX(0),                               FP32_RAND_x7_V4 } },
     14280            { /*src2     */ { FP32_NORM_MAX(1),                               FP32_RAND_x7_V2 } },
     14281            { /* =>      */ { FP32_V(0,0x7fffff,0xbe)/*sqrt(FP32_NORM_MAX)*/, FP32_RAND_x7_V2 } },
     14282              /*mxcsr:in */ X86_MXCSR_FZ | X86_MXCSR_DAZ,
     14283              /*128:out  */ X86_MXCSR_FZ | X86_MXCSR_DAZ | X86_MXCSR_PE,
     14284              /*256:out  */ -1 },
     14285          { { /*src1     */ { FP32_NORM_MIN(0),                          FP32_RAND_x7_V7 } },
     14286            { /*src2     */ { FP32_INF(1),                               FP32_RAND_x7_V6 } },
     14287            { /* =>      */ { FP32_V(0,0x0,0x40)/*sqrt(FP32_NORM_MIN)*/, FP32_RAND_x7_V6 } },
     14288              /*mxcsr:in */ 0,
     14289              /*128:out  */ 0,
     14290              /*256:out  */ -1 },
     14291          { { /*src1     */ { FP32_NORM_SAFE_INT_MAX(0),                               FP32_RAND_x7_V2 } },
     14292            { /*src2     */ { FP32_RAND_V1(1),                                         FP32_RAND_x7_V5 } },
     14293            { /* =>      */ { FP32_V(0,0x7fffff,0x8a)/*sqrt(FP32_NORM_SAFE_INT_MAX)*/, FP32_RAND_x7_V5 } },
     14294              /*mxcsr:in */ 0,
     14295              /*128:out  */ X86_MXCSR_PE,
     14296              /*256:out  */ -1 },
     14297          { { /*src1     */ { FP32_NORM_SAFE_INT_MIN(0),                          FP32_RAND_x7_V5 } },
     14298            { /*src2     */ { FP32_RAND_V0(0),                                    FP32_RAND_x7_V7 } },
     14299            { /* =>      */ { FP32_V(0,0x0,0x40)/*sqrt(FP32_NORM_SAFE_INT_MIN)*/, FP32_RAND_x7_V7 } },
     14300              /*mxcsr:in */ 0,
     14301              /*128:out  */ 0,
     14302              /*256:out  */ -1 },
     14303          { { /*src1     */ { FP32_V(0,0x0,0x87)/*256.0*/, FP32_RAND_x7_V0 } },
     14304            { /*src2     */ { FP32_2(0),                   FP32_RAND_x7_V4 } },
     14305            { /* =>      */ { FP32_V(0,0x0,0x83)/*16.0*/,  FP32_RAND_x7_V4 } },
     14306              /*mxcsr:in */ X86_MXCSR_RC_ZERO,
     14307              /*128:out  */ X86_MXCSR_RC_ZERO,
     14308              /*256:out  */ -1 },
     14309          { { /*src1     */ { FP32_V(0,0x0,0x87)/*256.0*/, FP32_RAND_x7_V3 } },
     14310            { /*src2     */ { FP32_DENORM_V3(0),           FP32_RAND_x7_V4 } },
     14311            { /* =>      */ { FP32_V(0,0x0,0x83)/*16.0*/,  FP32_RAND_x7_V4 } },
     14312              /*mxcsr:in */ X86_MXCSR_RC_UP,
     14313              /*128:out  */ X86_MXCSR_RC_UP,
     14314              /*256:out  */ -1 },
     14315          { { /*src1     */ { FP32_V(0,0x40000,0x88)/*528.0*/,      FP32_RAND_x7_V6 } },
     14316            { /*src2     */ { FP32_NORM_SAFE_INT_MAX(1),            FP32_RAND_x7_V7 } },
     14317            { /* =>      */ { FP32_V(0,0x37d375,0x83)/*sqrt(528)*/, FP32_RAND_x7_V7 } },
     14318              /*mxcsr:in */ 0,
     14319              /*128:out  */ X86_MXCSR_PE,
     14320              /*256:out  */ -1 },
     14321          { { /*src1     */ { FP32_V(0,0x40000,0x88)/*528.0*/,          FP32_RAND_x7_V1 } },
     14322            { /*src2     */ { FP32_NORM_V7(0),                          FP32_RAND_x7_V5 } },
     14323            { /* =>      */ { FP32_V(0,0x37d376,0x83)/*sqrt(528)[UP]*/, FP32_RAND_x7_V5 } },
     14324              /*mxcsr:in */ X86_MXCSR_RC_UP,
     14325              /*128:out  */ X86_MXCSR_PE | X86_MXCSR_RC_UP,
     14326              /*256:out  */ -1 },
     14327          { { /*src1     */ { FP32_V(0,0x43ffff,0x7c)/*(7/16)^2-epsilon*/, FP32_RAND_x7_V4 } },
     14328            { /*src2     */ { FP32_0(0),                                   FP32_RAND_x7_V6 } },
     14329            { /* =>      */ { FP32_V(0,0x5fffff,0x7d)/*7/16-*/,            FP32_RAND_x7_V6 } },
     14330              /*mxcsr:in */ X86_MXCSR_RC_DOWN,
     14331              /*128:out  */ X86_MXCSR_PE | X86_MXCSR_RC_DOWN,
     14332              /*256:out  */ -1 },
     14333          { { /*src1     */ { FP32_V(0,0x43ffff,0x7c)/*(7/16)^2-epsilon*/, FP32_RAND_x7_V7 } },
     14334            { /*src2     */ { FP32_SNAN_V0(1),                             FP32_RAND_x7_V2 } },
     14335            { /* =>      */ { FP32_V(0,0x600000,0x7d)/*7/16[UP]*/,         FP32_RAND_x7_V2 } },
     14336              /*mxcsr:in */ X86_MXCSR_RC_UP,
     14337              /*128:out  */ X86_MXCSR_PE | X86_MXCSR_RC_UP,
     14338              /*256:out  */ -1 },
     14339          { { /*src1     */ { FP32_V(0,0x440000,0x7c)/*(7/16)^2*/, FP32_RAND_x7_V2 } },
     14340            { /*src2     */ { FP32_DENORM_MIN(1),                  FP32_RAND_x7_V1 } },
     14341            { /* =>      */ { FP32_V(0,0x600000,0x7d)/*7/16*/,     FP32_RAND_x7_V1 } },
     14342              /*mxcsr:in */ 0,
     14343              /*128:out  */ 0,
     14344              /*256:out  */ -1 },
     14345          { { /*src1     */ { FP32_V(0,0x44000,0x88)/*529.0*/, FP32_RAND_x7_V5 } },
     14346            { /*src2     */ { FP32_RAND_V7(0),                 FP32_RAND_x7_V3 } },
     14347            { /* =>      */ { FP32_V(0,0x380000,0x83)/*23.0*/, FP32_RAND_x7_V3 } },
     14348              /*mxcsr:in */ 0,
     14349              /*128:out  */ 0,
     14350              /*256:out  */ -1 },
     14351          { { /*src1     */ { FP32_V(0,0x6f4840,0x8c)/*123.75^2*/, FP32_0_x7(1)    } },
     14352            { /*src2     */ { FP32_SNAN_V4(1),                     FP32_RAND_x7_V0 } },
     14353            { /* =>      */ { FP32_V(0,0x778000,0x85)/*123.75*/,   FP32_RAND_x7_V0 } },
     14354              /*mxcsr:in */ 0,
     14355              /*128:out  */ 0,
     14356              /*256:out  */ -1 },
     14357          { { /*src1     */ { FP32_V(0,0x6f4841,0x8c)/*123.75^2+epsilon*/,  FP32_RAND_x7_V3 } },
     14358            { /*src2     */ { FP32_QNAN_V2(0),                              FP32_RAND_x7_V0 } },
     14359            { /* =>      */ { FP32_V(0,0x778000,0x85)/*123.75[ZERO=DOWN]*/, FP32_RAND_x7_V0 } },
     14360              /*mxcsr:in */ X86_MXCSR_RC_DOWN,
     14361              /*128:out  */ X86_MXCSR_PE | X86_MXCSR_RC_DOWN,
     14362              /*256:out  */ -1 },
     14363          { { /*src1     */ { FP32_V(0,0x6f4841,0x8c)/*123.75^2+epsilon*/, FP32_RAND_x7_V6 } },
     14364            { /*src2     */ { FP32_QNAN_V6(1),                             FP32_RAND_x7_V3 } },
     14365            { /* =>      */ { FP32_V(0,0x778001,0x85)/*123.75+*/,          FP32_RAND_x7_V3 } },
     14366              /*mxcsr:in */ 0,
     14367              /*128:out  */ X86_MXCSR_PE,
     14368              /*256:out  */ -1 },
     14369          { { /*src1     */ { FP32_V(0,0x8000,0x87)/*257.0*/,     FP32_RAND_x7_V1 } },
     14370            { /*src2     */ { FP32_DENORM_V5(1),                  FP32_0_x7(0)    } },
     14371            { /* =>      */ { FP32_V(0,0x3ff0,0x83)/*sqrt(257)*/, FP32_0_x7(0)    } },
     14372              /*mxcsr:in */ X86_MXCSR_DAZ | X86_MXCSR_RC_NEAREST,
     14373              /*128:out  */ X86_MXCSR_PE | X86_MXCSR_DAZ | X86_MXCSR_RC_NEAREST,
     14374              /*256:out  */ -1 },
     14375          { { /*src1     */ { FP32_V(0,0x8000,0x87)/*257.0*/,         FP32_RAND_x7_V4 } },
     14376            { /*src2     */ { FP32_NORM_V0(0),                        FP32_RAND_x7_V2 } },
     14377            { /* =>      */ { FP32_V(0,0x3ff1,0x83)/*sqrt(257)[UP]*/, FP32_RAND_x7_V2 } },
     14378              /*mxcsr:in */ X86_MXCSR_RC_UP,
     14379              /*128:out  */ X86_MXCSR_PE | X86_MXCSR_RC_UP,
     14380              /*256:out  */ -1 },
     14381          { { /*src1     */ { FP32_V(1,0x8000,0x87)/*-257.0*/, FP32_RAND_x7_V3 } },
     14382            { /*src2     */ { FP32_NORM_V3(0),                 FP32_RAND_x7_V6 } },
     14383            { /* =>      */ { FP32_QNAN(1),                    FP32_RAND_x7_V6 } },
     14384              /*mxcsr:in */ 0,
     14385              /*128:out  */ X86_MXCSR_IE,
     14386              /*256:out  */ -1 },
     14387    /*
     14388     * Denormals.
     14389     */
     14390    /*35*/{ { /*src1     */ { FP32_DENORM_MAX(0),      FP32_RAND_x7_V1 } },
     14391            { /*src2     */ { FP32_NORM_V5(0),         FP32_RAND_x7_V2 } },
     14392            { /* =>      */ { FP32_V(0,0x7fffff,0x3f), FP32_RAND_x7_V2 } },
     14393              /*mxcsr:in */ 0,
     14394              /*128:out  */ X86_MXCSR_DE | X86_MXCSR_PE,
     14395              /*256:out  */ -1 },
     14396          { { /*src1     */ { FP32_DENORM_MAX(0),      FP32_RAND_x7_V2 } },
     14397            { /*src2     */ { FP32_DENORM_MIN(1),      FP32_RAND_x7_V3 } },
     14398            { /* =>      */ { FP32_V(0,0x7ffffe,0x3f), FP32_RAND_x7_V3 } },
     14399              /*mxcsr:in */ X86_MXCSR_RC_DOWN,
     14400              /*128:out  */ X86_MXCSR_DE | X86_MXCSR_PE | X86_MXCSR_RC_DOWN,
     14401              /*256:out  */ -1 },
     14402          { { /*src1     */ { FP32_DENORM_MIN(0),      FP32_RAND_x7_V3 } },
     14403            { /*src2     */ { FP32_RAND_V1(0),         FP32_RAND_x7_V7 } },
     14404            { /* =>      */ { FP32_V(0,0x3504f3,0x34), FP32_RAND_x7_V7 } },
     14405              /*mxcsr:in */ X86_MXCSR_FZ,
     14406              /*128:out  */ X86_MXCSR_DE | X86_MXCSR_PE | X86_MXCSR_FZ,
     14407              /*256:out  */ -1 },
     14408          { { /*src1     */ { FP32_DENORM_MIN(0),      FP32_RAND_x7_V6 } },
     14409            { /*src2     */ { FP32_NORM_V6(1),         FP32_RAND_x7_V5 } },
     14410            { /* =>      */ { FP32_V(0,0x3504f4,0x34), FP32_RAND_x7_V5 } },
     14411              /*mxcsr:in */ X86_MXCSR_RC_UP,
     14412              /*128:out  */ X86_MXCSR_DE | X86_MXCSR_PE | X86_MXCSR_RC_UP,
     14413              /*256:out  */ -1 },
     14414          { { /*src1     */ { FP32_DENORM_V1(0),       FP32_RAND_x7_V2 } },
     14415            { /*src2     */ { FP32_NORM_V1(0),         FP32_0_x7(1)    } },
     14416            { /* =>      */ { FP32_V(0,0x6f887c,0x3f), FP32_0_x7(1)    } },
     14417              /*mxcsr:in */ 0,
     14418              /*128:out  */ X86_MXCSR_DE | X86_MXCSR_PE,
     14419              /*256:out  */ -1 },
     14420          { { /*src1     */ { FP32_DENORM_V4(0),       FP32_0_x7(0)    } },
     14421            { /*src2     */ { FP32_RAND_V4(1),         FP32_RAND_x7_V4 } },
     14422            { /* =>      */ { FP32_V(0,0x393731,0x3e), FP32_RAND_x7_V4 } },
     14423              /*mxcsr:in */ X86_MXCSR_FZ,
     14424              /*128:out  */ X86_MXCSR_DE | X86_MXCSR_PE | X86_MXCSR_FZ,
     14425              /*256:out  */ -1 },
     14426          { { /*src1     */ { FP32_DENORM_V5(0),       FP32_RAND_x7_V7 } },
     14427            { /*src2     */ { FP32_SNAN_V7(1),         FP32_RAND_x7_V0 } },
     14428            { /* =>      */ { FP32_V(0,0x34ff4b,0x3a), FP32_RAND_x7_V0 } },
     14429              /*mxcsr:in */ 0,
     14430              /*128:out  */ X86_MXCSR_DE | X86_MXCSR_PE,
     14431              /*256:out  */ -1 },
     14432          { { /*src1     */ { FP32_DENORM_V2(0),       FP32_RAND_x7_V5 } },
     14433            { /*src2     */ { FP32_NORM_V3(0),         FP32_RAND_x7_V7 } },
     14434            { /* =>      */ { FP32_0(0),               FP32_RAND_x7_V7 } },
     14435              /*mxcsr:in */ X86_MXCSR_DAZ,
     14436              /*128:out  */ X86_MXCSR_DAZ,
     14437              /*256:out  */ -1 },
     14438          { { /*src1     */ { FP32_DENORM_V3(1),       FP32_RAND_x7_V4 } },
     14439            { /*src2     */ { FP32_QNAN_V4(0),         FP32_RAND_x7_V3 } },
     14440            { /* =>      */ { FP32_0(1),               FP32_RAND_x7_V3 } },
     14441              /*mxcsr:in */ X86_MXCSR_FZ | X86_MXCSR_DAZ,
     14442              /*128:out  */ X86_MXCSR_FZ | X86_MXCSR_DAZ,
     14443              /*256:out  */ -1 },
     14444    /** @todo Invalids. */
     14445    /*44*/ /* FP64_TABLE_D10_SS_INVALIDS */
     14446    };
     14447#define PASS_s_aValues RT_ELEMENTS(s_aValues), (BS3CPUINSTR4_TEST1_VALUES_T *)s_aValues
     14448
     14449    /* Sanity-check subset for 'same register' instruction variants */
     14450    static BS3CPUINSTR4_TEST1_VALUES_SS_T const s_aValuesSR[] =
     14451    {
     14452    /*
     14453     * Zero.
     14454     */
     14455    /* 0*/{ { /*src1     */ { FP32_0(0), FP32_RAND_x7_V7 } },
     14456            { /*src2     */ { FP32_0(0), FP32_RAND_x7_V7 } },
     14457            { /* =>      */ { FP32_0(0), FP32_RAND_x7_V7 } },
     14458              /*mxcsr:in */ 0,
     14459              /*128:out  */ 0,
     14460              /*256:out  */ -1 },
     14461          { { /*src1     */ { FP32_0(1), FP32_RAND_x7_V0 } },
     14462            { /*src2     */ { FP32_0(1), FP32_RAND_x7_V0 } },
     14463            { /* =>      */ { FP32_0(1), FP32_RAND_x7_V0 } },
     14464              /*mxcsr:in */ 0,
     14465              /*128:out  */ 0,
     14466              /*256:out  */ -1  },
     14467    /*
     14468     * Infinity.
     14469     */
     14470    /* 2*/{ { /*src1     */ { FP32_INF(0), FP32_RAND_x7_V1 } },
     14471            { /*src2     */ { FP32_INF(0), FP32_RAND_x7_V1 } },
     14472            { /* =>      */ { FP32_INF(0), FP32_RAND_x7_V1 } },
     14473              /*mxcsr:in */ 0,
     14474              /*128:out  */ 0,
     14475              /*256:out  */ -1 },
     14476          { { /*src1     */ { FP32_INF(1),  FP32_RAND_x7_V6 } },
     14477            { /*src2     */ { FP32_INF(1),  FP32_RAND_x7_V6 } },
     14478            { /* =>      */ { FP32_QNAN(1), FP32_RAND_x7_V6 } },
     14479              /*mxcsr:in */ 0,
     14480              /*128:out  */ X86_MXCSR_IE,
     14481              /*256:out  */ -1 },
     14482    /*
     14483     * Normals & Precision (Overflow, Underflow not possible).
     14484     */
     14485    /* 4*/{ { /*src1     */ { FP32_NORM_V0(0),                               FP32_RAND_x7_V3 } },
     14486            { /*src2     */ { FP32_NORM_V0(0),                               FP32_RAND_x7_V3 } },
     14487            { /* =>      */ { FP32_V(0,0x1ccf5c,0x40)/*sqrt(FP32_NORM_V0)*/, FP32_RAND_x7_V3 } },
     14488              /*mxcsr:in */ 0,
     14489              /*128:out  */ X86_MXCSR_PE,
     14490              /*256:out  */ -1 },
     14491          { { /*src1     */ { FP32_NORM_MIN(0),                          FP32_RAND_x7_V7 } },
     14492            { /*src2     */ { FP32_NORM_MIN(0),                          FP32_RAND_x7_V7 } },
     14493            { /* =>      */ { FP32_V(0,0x0,0x40)/*sqrt(FP32_NORM_MIN)*/, FP32_RAND_x7_V7 } },
     14494              /*mxcsr:in */ 0,
     14495              /*128:out  */ 0,
     14496              /*256:out  */ -1 },
     14497          { { /*src1     */ { FP32_V(0,0x43ffff,0x7c)/*(7/16)^2-epsilon*/, FP32_RAND_x7_V4 } },
     14498            { /*src2     */ { FP32_V(0,0x43ffff,0x7c)/*(7/16)^2-epsilon*/, FP32_RAND_x7_V4 } },
     14499            { /* =>      */ { FP32_V(0,0x5fffff,0x7d)/*7/16-*/,            FP32_RAND_x7_V4 } },
     14500              /*mxcsr:in */ X86_MXCSR_RC_DOWN,
     14501              /*128:out  */ X86_MXCSR_PE | X86_MXCSR_RC_DOWN,
     14502              /*256:out  */ -1 },
     14503          { { /*src1     */ { FP32_V(0,0x43ffff,0x7c)/*(7/16)^2-epsilon*/, FP32_RAND_x7_V2 } },
     14504            { /*src2     */ { FP32_V(0,0x43ffff,0x7c)/*(7/16)^2-epsilon*/, FP32_RAND_x7_V2 } },
     14505            { /* =>      */ { FP32_V(0,0x600000,0x7d)/*7/16[UP]*/,         FP32_RAND_x7_V2 } },
     14506              /*mxcsr:in */ X86_MXCSR_RC_UP,
     14507              /*128:out  */ X86_MXCSR_PE | X86_MXCSR_RC_UP,
     14508              /*256:out  */ -1 },
     14509    /*
     14510     * Denormals.
     14511     */
     14512    /* 8*/{ { /*src1     */ { FP32_DENORM_MAX(0),      FP32_RAND_x7_V1 } },
     14513            { /*src2     */ { FP32_DENORM_MAX(0),      FP32_RAND_x7_V1 } },
     14514            { /* =>      */ { FP32_V(0,0x7fffff,0x3f), FP32_RAND_x7_V1 } },
     14515              /*mxcsr:in */ 0,
     14516              /*128:out  */ X86_MXCSR_DE | X86_MXCSR_PE,
     14517              /*256:out  */ -1 },
     14518          { { /*src1     */ { FP32_DENORM_MIN(0),      FP32_RAND_x7_V3 } },
     14519            { /*src2     */ { FP32_DENORM_MIN(1),      FP32_RAND_x7_V3 } },
     14520            { /* =>      */ { FP32_V(0,0x3504f3,0x34), FP32_RAND_x7_V3 } },
     14521              /*mxcsr:in */ X86_MXCSR_FZ,
     14522              /*128:out  */ X86_MXCSR_DE | X86_MXCSR_PE | X86_MXCSR_FZ,
     14523              /*256:out  */ -1 },
     14524          { { /*src1     */ { FP32_DENORM_V3(1),       FP32_RAND_x7_V4 } },
     14525            { /*src2     */ { FP32_DENORM_V3(1),       FP32_RAND_x7_V4 } },
     14526            { /* =>      */ { FP32_0(1),               FP32_RAND_x7_V4 } },
     14527              /*mxcsr:in */ X86_MXCSR_FZ | X86_MXCSR_DAZ,
     14528              /*128:out  */ X86_MXCSR_FZ | X86_MXCSR_DAZ,
     14529              /*256:out  */ -1 },
     14530    /** @todo Invalids. */
     14531    /*11*/ /* FP64_TABLE_D10_SS_INVALIDS // or excerpt? */
     14532    };
     14533#define PASS_s_aValuesSR RT_ELEMENTS(s_aValuesSR), (BS3CPUINSTR4_TEST1_VALUES_T *)s_aValuesSR
     14534
     14535    static BS3CPUINSTR4_TEST1_T const s_aTests16[] =
     14536    {
     14537        { bs3CpuInstr4_sqrtss_XMM1_XMM2_icebp_c16,        255,         RM_REG, T_SSE,     1, 1, 2,   PASS_s_aValues   },
     14538        { bs3CpuInstr4_sqrtss_XMM1_FSxBX_icebp_c16,       255,         RM_MEM, T_SSE,     1, 1, 255, PASS_s_aValues   },
     14539
     14540        { bs3CpuInstr4_vsqrtss_XMM1_XMM2_XMM3_icebp_c16,  X86_XCPT_AC, RM_REG, T_AVX_128, 1, 2, 3,   PASS_s_aValues   },
     14541        { bs3CpuInstr4_vsqrtss_XMM1_XMM2_FSxBX_icebp_c16, X86_XCPT_AC, RM_MEM, T_AVX_128, 1, 2, 255, PASS_s_aValues   },
     14542
     14543        { bs3CpuInstr4_sqrtss_XMM1_XMM1_icebp_c16,        255,         RM_REG, T_SSE,     1, 1, 1,   PASS_s_aValuesSR },
     14544        { bs3CpuInstr4_vsqrtss_XMM1_XMM1_XMM1_icebp_c16,  X86_XCPT_AC, RM_REG, T_AVX_128, 1, 1, 1,   PASS_s_aValuesSR },
     14545        { bs3CpuInstr4_vsqrtss_XMM1_XMM1_XMM2_icebp_c16,  X86_XCPT_AC, RM_REG, T_AVX_128, 1, 1, 2,   PASS_s_aValues   },
     14546        { bs3CpuInstr4_vsqrtss_XMM1_XMM2_XMM2_icebp_c16,  X86_XCPT_AC, RM_REG, T_AVX_128, 1, 2, 2,   PASS_s_aValuesSR },
     14547        { bs3CpuInstr4_vsqrtss_XMM1_XMM1_FSxBX_icebp_c16, X86_XCPT_AC, RM_MEM, T_AVX_128, 1, 1, 255, PASS_s_aValues   },
     14548    };
     14549    static BS3CPUINSTR4_TEST1_T const s_aTests32[] =
     14550    {
     14551        { bs3CpuInstr4_sqrtss_XMM1_XMM2_icebp_c32,        255,         RM_REG, T_SSE,     1, 1, 2,   PASS_s_aValues   },
     14552        { bs3CpuInstr4_sqrtss_XMM1_FSxBX_icebp_c32,       255,         RM_MEM, T_SSE,     1, 1, 255, PASS_s_aValues   },
     14553
     14554        { bs3CpuInstr4_vsqrtss_XMM1_XMM2_XMM3_icebp_c32,  X86_XCPT_AC, RM_REG, T_AVX_128, 1, 2, 3,   PASS_s_aValues   },
     14555        { bs3CpuInstr4_vsqrtss_XMM1_XMM2_FSxBX_icebp_c32, X86_XCPT_AC, RM_MEM, T_AVX_128, 1, 2, 255, PASS_s_aValues   },
     14556
     14557        { bs3CpuInstr4_sqrtss_XMM1_XMM1_icebp_c32,        255,         RM_REG, T_SSE,     1, 1, 1,   PASS_s_aValuesSR },
     14558        { bs3CpuInstr4_vsqrtss_XMM1_XMM1_XMM1_icebp_c32,  X86_XCPT_AC, RM_REG, T_AVX_128, 1, 1, 1,   PASS_s_aValuesSR },
     14559        { bs3CpuInstr4_vsqrtss_XMM1_XMM1_XMM2_icebp_c32,  X86_XCPT_AC, RM_REG, T_AVX_128, 1, 1, 2,   PASS_s_aValues   },
     14560        { bs3CpuInstr4_vsqrtss_XMM1_XMM2_XMM2_icebp_c32,  X86_XCPT_AC, RM_REG, T_AVX_128, 1, 2, 2,   PASS_s_aValuesSR },
     14561        { bs3CpuInstr4_vsqrtss_XMM1_XMM1_FSxBX_icebp_c32, X86_XCPT_AC, RM_MEM, T_AVX_128, 1, 1, 255, PASS_s_aValues   },
     14562    };
     14563    static BS3CPUINSTR4_TEST1_T const s_aTests64[] =
     14564    {
     14565        { bs3CpuInstr4_sqrtss_XMM1_XMM2_icebp_c64,        255,         RM_REG, T_SSE,     1, 1, 2,   PASS_s_aValues   },
     14566        { bs3CpuInstr4_sqrtss_XMM1_FSxBX_icebp_c64,       255,         RM_MEM, T_SSE,     1, 1, 255, PASS_s_aValues   },
     14567
     14568        { bs3CpuInstr4_sqrtss_XMM8_XMM9_icebp_c64,        255,         RM_REG, T_SSE,     8, 8, 9,   PASS_s_aValues   },
     14569        { bs3CpuInstr4_sqrtss_XMM8_FSxBX_icebp_c64,       255,         RM_MEM, T_SSE,     8, 8, 255, PASS_s_aValues   },
     14570
     14571        { bs3CpuInstr4_vsqrtss_XMM1_XMM2_XMM3_icebp_c64,  X86_XCPT_AC, RM_REG, T_AVX_128, 1, 2, 3,   PASS_s_aValues   },
     14572        { bs3CpuInstr4_vsqrtss_XMM1_XMM2_FSxBX_icebp_c64, X86_XCPT_AC, RM_MEM, T_AVX_128, 1, 2, 255, PASS_s_aValues   },
     14573
     14574        { bs3CpuInstr4_vsqrtss_XMM8_XMM9_XMM10_icebp_c64, X86_XCPT_AC, RM_REG, T_AVX_128, 8, 9, 10,  PASS_s_aValues   },
     14575        { bs3CpuInstr4_vsqrtss_XMM8_XMM9_FSxBX_icebp_c64, X86_XCPT_AC, RM_MEM, T_AVX_128, 8, 9, 255, PASS_s_aValues   },
     14576
     14577        { bs3CpuInstr4_sqrtss_XMM1_XMM1_icebp_c64,        255,         RM_REG, T_SSE,     1, 1, 1,   PASS_s_aValuesSR },
     14578        { bs3CpuInstr4_vsqrtss_XMM1_XMM1_XMM1_icebp_c64,  X86_XCPT_AC, RM_REG, T_AVX_128, 1, 1, 1,   PASS_s_aValuesSR },
     14579        { bs3CpuInstr4_vsqrtss_XMM1_XMM1_XMM2_icebp_c64,  X86_XCPT_AC, RM_REG, T_AVX_128, 1, 1, 2,   PASS_s_aValues   },
     14580        { bs3CpuInstr4_vsqrtss_XMM1_XMM2_XMM2_icebp_c64,  X86_XCPT_AC, RM_REG, T_AVX_128, 1, 2, 2,   PASS_s_aValuesSR },
     14581        { bs3CpuInstr4_vsqrtss_XMM1_XMM1_FSxBX_icebp_c64, X86_XCPT_AC, RM_MEM, T_AVX_128, 1, 1, 255, PASS_s_aValues   },
     14582    };
     14583#undef PASS_s_aValues
     14584#undef PASS_s_aValuesSR
     14585
     14586    static BS3CPUINSTR4_TEST1_MODE_T const s_aTests[3] = BS3CPUINSTR4_TEST1_MODES_INIT(s_aTests16, s_aTests32, s_aTests64);
     14587    unsigned const                         iTest       = BS3CPUINSTR4_TEST_MODES_INDEX(bMode);
     14588    return bs3CpuInstr4_WorkerTestType1(bMode, s_aTests[iTest].paTests, s_aTests[iTest].cTests,
     14589                                        g_aXcptConfig5, RT_ELEMENTS(g_aXcptConfig5));
     14590}
     14591
     14592
    1416114593/**
    1416214594 * The 32-bit protected mode main function.
     
    1421214644        { "[v]sqrtps",      bs3CpuInstr4_v_sqrtps,   0 },
    1421314645        { "[v]sqrtpd",      bs3CpuInstr4_v_sqrtpd,   0 },
     14646        { "[v]sqrtss",      bs3CpuInstr4_v_sqrtss,   0 },
    1421414647#endif
    1421514648    };
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