VirtualBox

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


Ignore:
Timestamp:
Oct 1, 2024 1:42:19 AM (5 months ago)
Author:
vboxsync
Message:

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

    r106148 r106183  
    648648EMIT_INSTR_PLUS_ICEBP_C64   vsqrtps, YMM8, FSxBX
    649649
     650;
     651;; [v]sqrtpd
     652;
     653EMIT_INSTR_PLUS_ICEBP       sqrtpd, XMM1, XMM2
     654EMIT_INSTR_PLUS_ICEBP       sqrtpd, XMM1, FSxBX
     655EMIT_INSTR_PLUS_ICEBP_C64   sqrtpd, XMM8, XMM9
     656EMIT_INSTR_PLUS_ICEBP_C64   sqrtpd, XMM8, FSxBX
     657
     658EMIT_INSTR_PLUS_ICEBP       vsqrtpd, XMM1, XMM2
     659EMIT_INSTR_PLUS_ICEBP       vsqrtpd, XMM1, FSxBX
     660EMIT_INSTR_PLUS_ICEBP_C64   vsqrtpd, XMM8, XMM9
     661EMIT_INSTR_PLUS_ICEBP_C64   vsqrtpd, XMM8, FSxBX
     662
     663EMIT_INSTR_PLUS_ICEBP       vsqrtpd, YMM1, YMM2
     664EMIT_INSTR_PLUS_ICEBP       vsqrtpd, YMM1, FSxBX
     665EMIT_INSTR_PLUS_ICEBP_C64   vsqrtpd, YMM8, YMM9
     666EMIT_INSTR_PLUS_ICEBP_C64   vsqrtpd, YMM8, FSxBX
     667
    650668
    651669%endif ; BS3_INSTANTIATING_CMN
  • trunk/src/VBox/ValidationKit/bootsectors/bs3-cpu-instr-4.c32

    r106182 r106183  
    1403914039    /** @todo Invalids. */
    1404014040    /*23*/ /* FP32_TABLE_D10_PS_INVALIDS */
    14041     /** @todo Underflow, Precision; Rounding; FZ etc. */
     14041    /** @todo Underflow; Rounding; FZ etc. */
    1404214042    };
    1404314043
     
    1408314083        { bs3CpuInstr4_vsqrtps_YMM8_YMM9_icebp_c64,  255, RM_REG, T_AVX_256, 8, 8, 9,   PASS_s_aValues },
    1408414084        { bs3CpuInstr4_vsqrtps_YMM8_FSxBX_icebp_c64, 255, RM_MEM, T_AVX_256, 8, 8, 255, PASS_s_aValues },
     14085    };
     14086#undef PASS_s_aValues
     14087
     14088    static BS3CPUINSTR4_TEST1_MODE_T const s_aTests[3] = BS3CPUINSTR4_TEST1_MODES_INIT(s_aTests16, s_aTests32, s_aTests64);
     14089    unsigned const                         iTest       = BS3CPUINSTR4_TEST_MODES_INDEX(bMode);
     14090    return bs3CpuInstr4_WorkerTestType1A(bMode, s_aTests[iTest].paTests, s_aTests[iTest].cTests,
     14091                                        g_aXcptConfig2, RT_ELEMENTS(g_aXcptConfig2));
     14092}
     14093
     14094
     14095/*
     14096 * [V]SQRTPD.
     14097 */
     14098BS3_DECL_FAR(uint8_t) bs3CpuInstr4_v_sqrtpd(uint8_t bMode)
     14099{
     14100    static BS3CPUINSTR4_TEST1_VALUES_PD_T const s_aValues[] =
     14101    {
     14102    /*
     14103     * Zero.
     14104     */
     14105    /* 0*/{ { /*src1     */ { FP64_0(0), FP64_0(0), FP64_0(1), FP64_0(1) } },
     14106            { /*unused   */ { FP64_ROW_UNUSED } },
     14107            { /* =>      */ { FP64_0(0), FP64_0(0), FP64_0(1), FP64_0(1) } },
     14108              /*mxcsr:in */ X86_MXCSR_XCPT_MASK,
     14109              /*128:out  */ X86_MXCSR_XCPT_MASK,
     14110              /*256:out  */ X86_MXCSR_XCPT_MASK,
     14111              /*xcpt?    */ false, false },
     14112          { { /*src1     */ { FP64_0(0), FP64_0(1), FP64_0(0), FP64_0(1) } },
     14113            { /*unused   */ { FP64_ROW_UNUSED } },
     14114            { /* =>      */ { FP64_0(0), FP64_0(1), FP64_0(0), FP64_0(1) } },
     14115              /*mxcsr:in */ X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_UP,
     14116              /*128:out  */ X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_UP,
     14117              /*256:out  */ X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_UP,
     14118              /*xcpt?    */ false, false },
     14119          { { /*src1     */ { FP64_0(1), FP64_0(1), FP64_0(0), FP64_0(0) } },
     14120            { /*unused   */ { FP64_ROW_UNUSED } },
     14121            { /* =>      */ { FP64_0(1), FP64_0(1), FP64_0(0), FP64_0(0) } },
     14122              /*mxcsr:in */ X86_MXCSR_RC_ZERO,
     14123              /*128:out  */ X86_MXCSR_RC_ZERO,
     14124              /*256:out  */ X86_MXCSR_RC_ZERO,
     14125              /*xcpt?    */ false, false },
     14126          { { /*src1     */ { FP64_0(1), FP64_0(0), FP64_0(0), FP64_0(1) } },
     14127            { /*unused   */ { FP64_ROW_UNUSED } },
     14128            { /* =>      */ { FP64_0(1), FP64_0(0), FP64_0(0), FP64_0(1) } },
     14129              /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_DOWN,
     14130              /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_DOWN,
     14131              /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_RC_DOWN,
     14132              /*xcpt?    */ false, false },
     14133    /*
     14134     * Infinity.
     14135     */
     14136    /* 4*/{ { /*src1     */ { FP64_INF(0), FP64_0(0), FP64_INF(1),  FP64_0(0) } },
     14137            { /*unused   */ { FP64_ROW_UNUSED } },
     14138            { /* =>      */ { FP64_INF(0), FP64_0(0), FP64_QNAN(1), FP64_0(0) } },
     14139              /*mxcsr:in */ 0,
     14140              /*128:out  */ 0,
     14141              /*256:out  */ X86_MXCSR_IE,
     14142              /*xcpt?    */ false, true },
     14143    /*
     14144     * Precision (Overflow, Underflow not possible).
     14145     */
     14146    /* 5*/{ { /*src1     */ { FP64_0(0), FP64_1(0), FP64_0(1), FP64_2(0)                                  } },
     14147            { /*unused   */ { FP64_ROW_UNUSED } },
     14148            { /* =>      */ { FP64_0(0), FP64_1(0), FP64_0(1), FP64_V(0,0x6a09e667f3bcd,0x3ff)/*sqrt(2)*/ } },
     14149              /*mxcsr:in */ 0,
     14150              /*128:out  */ 0,
     14151              /*256:out  */ X86_MXCSR_PE,
     14152              /*xcpt?    */ false, true },
     14153          { { /*src1     */ { FP64_0(0), FP64_1(0), FP64_0(1), FP64_2(0)                                   } },
     14154            { /*unused   */ { FP64_ROW_UNUSED } },
     14155            { /* =>      */ { FP64_0(0), FP64_1(0), FP64_0(1), FP64_V(0,0x6a09e667f3bcc,0x3ff)/*sqrt(2)v*/ } },
     14156              /*mxcsr:in */ X86_MXCSR_PM | X86_MXCSR_RC_DOWN,
     14157              /*128:out  */ X86_MXCSR_PM | X86_MXCSR_RC_DOWN,
     14158              /*256:out  */ X86_MXCSR_PM | X86_MXCSR_RC_DOWN | X86_MXCSR_PE,
     14159              /*xcpt?    */ false, false },
     14160          { { /*src1     */ { FP64_0(0), FP64_1(0), FP64_0(1), FP64_2(0)                                  } },
     14161            { /*unused   */ { FP64_ROW_UNUSED } },
     14162            { /* =>      */ { FP64_0(0), FP64_1(0), FP64_0(1), FP64_V(0,0x6a09e667f3bcd,0x3ff)/*sqrt(2)*/ } },
     14163              /*mxcsr:in */ X86_MXCSR_PM | X86_MXCSR_RC_UP,
     14164              /*128:out  */ X86_MXCSR_PM | X86_MXCSR_RC_UP,
     14165              /*256:out  */ X86_MXCSR_PM | X86_MXCSR_RC_UP | X86_MXCSR_PE,
     14166              /*xcpt?    */ false, false },
     14167          { { /*src1     */ { FP64_0(0), FP64_1(0), FP64_0(1), FP64_2(0)                                   } },
     14168            { /*unused   */ { FP64_ROW_UNUSED } },
     14169            { /* =>      */ { FP64_0(0), FP64_1(0), FP64_0(1), FP64_V(0,0x6a09e667f3bcc,0x3ff)/*sqrt(2)v*/ } },
     14170              /*mxcsr:in */ X86_MXCSR_PM | X86_MXCSR_RC_ZERO,
     14171              /*128:out  */ X86_MXCSR_PM | X86_MXCSR_RC_ZERO,
     14172              /*256:out  */ X86_MXCSR_PM | X86_MXCSR_RC_ZERO | X86_MXCSR_PE,
     14173              /*xcpt?    */ false, false },
     14174          { { /*src1     */ { FP64_0(0), FP64_1(0), FP64_0(1), FP64_2(0)                                  } },
     14175            { /*unused   */ { FP64_ROW_UNUSED } },
     14176            { /* =>      */ { FP64_0(0), FP64_1(0), FP64_0(1), FP64_V(0,0x6a09e667f3bcd,0x3ff)/*sqrt(2)*/ } },
     14177              /*mxcsr:in */ X86_MXCSR_PM | X86_MXCSR_FZ | X86_MXCSR_DAZ,
     14178              /*128:out  */ X86_MXCSR_PM | X86_MXCSR_FZ | X86_MXCSR_DAZ,
     14179              /*256:out  */ X86_MXCSR_PM | X86_MXCSR_FZ | X86_MXCSR_DAZ | X86_MXCSR_PE,
     14180              /*xcpt?    */ false, false },
     14181    /*
     14182     * Normals.
     14183     */
     14184    /*10*/{ { /*src1     */ { FP64_NORM_V0(0), FP64_NORM_V1(0), FP64_NORM_V2(0), FP64_NORM_V3(0) } },
     14185            { /*unused   */ { FP64_ROW_UNUSED } },
     14186            { /* =>      */ { FP64_V(0,0x4b4cf5d7baa8f,0x200)/*sqrt(FP64_NORM_V0)*/,
     14187                              FP64_V(0,0x64b5ec5f93a20,0x516)/*sqrt(FP64_NORM_V1)*/,
     14188                              FP64_V(0,0x568cddb7b5f47,0x5fe)/*sqrt(FP64_NORM_V2)*/,
     14189                              FP64_V(0,0x4ebe86dd38102,0x440)/*sqrt(FP64_NORM_V3)*/ } },
     14190              /*mxcsr:in */ X86_MXCSR_XCPT_MASK,
     14191              /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_PE,
     14192              /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_PE,
     14193              /*xcpt?    */ false, false },
     14194          { { /*src1     */ { FP64_V(0,0xf46c4c48b9b90,0x42f)/*23456789^2*/,
     14195                              FP64_V(0,0x153e1f1867880,0x408)/*(12345678/524288)^2*/,
     14196                              FP64_V(0,0xf46c4c48b9ba0,0x42f)/*23456789^2+1*/,
     14197                              FP64_V(0,0x153e1f186787f,0x408)/*(12345678/524288)^2-epsilon*/ } },
     14198            { /*unused   */ { FP64_ROW_UNUSED } },
     14199            { /* =>      */ { FP64_V(0,0x65ec150000000,0x417)/*23456789*/,
     14200                              FP64_V(0,0x78c29c0000000,0x403)/*12345678/524288*/,
     14201                              FP64_V(0,0x65ec150000006,0x417)/*23456789+*/,
     14202                              FP64_V(0,0x78c29bfffffff,0x403)/*12345678/524288-*/ } },
     14203              /*mxcsr:in */ X86_MXCSR_XCPT_MASK,
     14204              /*128:out  */ X86_MXCSR_XCPT_MASK,
     14205              /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_PE,
     14206              /*xcpt?    */ false, false },
     14207          { { /*src1     */ { FP64_V(0,0xf46c4c48b9b90,0x42f)/*23456789^2*/,
     14208                              FP64_V(0,0x153e1f1867880,0x408)/*(12345678/524288)^2*/,
     14209                              FP64_V(0,0xf46c4c48b9ba0,0x42f)/*23456789^2+1*/,
     14210                              FP64_V(0,0x153e1f186787f,0x408)/*(12345678/524288)^2-epsilon*/ } },
     14211            { /*unused   */ { FP64_ROW_UNUSED } },
     14212            { /* =>      */ { FP64_V(0,0x65ec150000000,0x417)/*23456789*/,
     14213                              FP64_V(0,0x78c29c0000000,0x403)/*12345678/524288*/,
     14214                              FP64_V(0,0x65ec150000005,0x417)/*23456789+[DOWN]*/,
     14215                              FP64_V(0,0x78c29bfffffff,0x403)/*12345678/524288-*/ } },
     14216              /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_DOWN,
     14217              /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_DOWN,
     14218              /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_PE | X86_MXCSR_RC_DOWN,
     14219              /*xcpt?    */ false, false },
     14220          { { /*src1     */ { FP64_V(0,0xf46c4c48b9b90,0x42f)/*23456789^2*/,
     14221                              FP64_V(0,0x153e1f1867880,0x408)/*(12345678/524288)^2*/,
     14222                              FP64_V(0,0xf46c4c48b9ba0,0x42f)/*23456789^2+1*/,
     14223                              FP64_V(0,0x153e1f186787f,0x408)/*(12345678/524288)^2-epsilon*/ } },
     14224            { /*unused   */ { FP64_ROW_UNUSED } },
     14225            { /* =>      */ { FP64_V(0,0x65ec150000000,0x417)/*23456789*/,
     14226                              FP64_V(0,0x78c29c0000000,0x403)/*12345678/524288*/,
     14227                              FP64_V(0,0x65ec150000006,0x417)/*23456789+*/,
     14228                              FP64_V(0,0x78c29c0000000,0x403)/*12345678/524288[UP]*/ } },
     14229              /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_UP,
     14230              /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_UP,
     14231              /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_PE | X86_MXCSR_RC_UP,
     14232              /*xcpt?    */ false, false },
     14233          { { /*src1     */ { FP64_V(0,0xf46c4c48b9b90,0x42f)/*23456789^2*/,
     14234                              FP64_V(0,0x153e1f1867880,0x408)/*(12345678/524288)^2*/,
     14235                              FP64_V(0,0xf46c4c48b9ba0,0x42f)/*23456789^2+1*/,
     14236                              FP64_V(0,0x153e1f186787f,0x408)/*(12345678/524288)^2-epsilon*/ } },
     14237            { /*unused   */ { FP64_ROW_UNUSED } },
     14238            { /* =>      */ { FP64_V(0,0x65ec150000000,0x417)/*23456789*/,
     14239                              FP64_V(0,0x78c29c0000000,0x403)/*12345678/524288*/,
     14240                              FP64_V(0,0x65ec150000005,0x417)/*23456789+[ZERO]*/,
     14241                              FP64_V(0,0x78c29bfffffff,0x403)/*12345678/524288-*/ } },
     14242              /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_ZERO,
     14243              /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_ZERO,
     14244              /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_PE | X86_MXCSR_RC_ZERO,
     14245              /*xcpt?    */ false, false },
     14246          { { /*src1     */ { FP64_NORM_MAX(0),
     14247                              FP64_NORM_MIN(0),
     14248                              FP64_NORM_MAX(1),
     14249                              FP64_NORM_MIN(1) } },
     14250            { /*unused   */ { FP64_ROW_UNUSED } },
     14251            { /* =>      */ { FP64_V(0,0xfffffffffffff,0x5fe)/*sqrt(FP64_NORM_MAX)*/,
     14252                              FP64_V(0,0x0,0x200)/*sqrt(FP64_NORM_MIN)*/,
     14253                              FP64_QNAN(1),
     14254                              FP64_QNAN(1) } },
     14255              /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_FZ,
     14256              /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_PE,
     14257              /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ | X86_MXCSR_FZ | X86_MXCSR_PE | X86_MXCSR_IE | BS3_MXCSR_PE_FUZZY /* IEM */,
     14258              /*xcpt?    */ false, false },
     14259    /** @todo More Normals. */
     14260   /*
     14261    * Denormals.
     14262    */
     14263    /*16*/{ { /*src1     */ { FP64_DENORM_MAX(0),              FP64_0(0), FP64_0(1), FP64_DENORM_MAX(1) } },
     14264            { /*unused   */ { FP64_ROW_UNUSED } },
     14265            { /* =>      */ { FP64_V(0,0xfffffffffffff,0x1ff), FP64_0(0), FP64_0(1), FP64_QNAN(1)       } },
     14266              /*mxcsr:in */ 0,
     14267              /*128:out  */ X86_MXCSR_DE | X86_MXCSR_PE,
     14268              /*256:out  */ X86_MXCSR_DE | X86_MXCSR_IE | X86_MXCSR_PE | BS3_MXCSR_PE_FUZZY /* IEM */,
     14269              /*xcpt?    */ true, true },
     14270          { { /*src1     */ { FP64_DENORM_MIN(0),  FP64_0(0), FP64_0(1), FP64_DENORM_MIN(1) } },
     14271            { /*unused   */ { FP64_ROW_UNUSED } },
     14272            { /* =>      */ { FP64_V(0,0x0,0x1e6), FP64_0(0), FP64_0(1), FP64_QNAN(1)       } },
     14273              /*mxcsr:in */ 0,
     14274              /*128:out  */ X86_MXCSR_DE,
     14275              /*256:out  */ X86_MXCSR_DE | X86_MXCSR_IE,
     14276              /*xcpt?    */ true, true },
     14277          { { /*src1     */ { FP64_DENORM_MIN(0),  FP64_DENORM_MAX(0),              FP64_DENORM_MIN(1), FP64_DENORM_MAX(1) } },
     14278            { /*unused   */ { FP64_ROW_UNUSED } },
     14279            { /* =>      */ { FP64_V(0,0x0,0x1e6), FP64_V(0,0xfffffffffffff,0x1ff), FP64_QNAN(1),       FP64_QNAN(1)       } },
     14280              /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_UP,
     14281              /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DE | X86_MXCSR_PE | X86_MXCSR_RC_UP,
     14282              /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DE | X86_MXCSR_IE | X86_MXCSR_PE | X86_MXCSR_RC_UP | BS3_MXCSR_PE_FUZZY /* IEM */,
     14283              /*xcpt?    */ false, false },
     14284          { { /*src1     */ { FP64_DENORM_MIN(0),  FP64_DENORM_MAX(0),              FP64_DENORM_MIN(1), FP64_DENORM_MAX(1) } },
     14285            { /*unused   */ { FP64_ROW_UNUSED } },
     14286            { /* =>      */ { FP64_V(0,0x0,0x1e6), FP64_V(0,0xffffffffffffe,0x1ff), FP64_QNAN(1),       FP64_QNAN(1)       } },
     14287              /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_DOWN,
     14288              /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DE | X86_MXCSR_PE | X86_MXCSR_RC_DOWN,
     14289              /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DE | X86_MXCSR_IE | X86_MXCSR_PE | X86_MXCSR_RC_DOWN | BS3_MXCSR_PE_FUZZY /* IEM */,
     14290              /*xcpt?    */ false, false },
     14291          { { /*src1     */ { FP64_DENORM_MIN(0),  FP64_DENORM_MAX(0),              FP64_DENORM_MIN(1), FP64_DENORM_MAX(1) } },
     14292            { /*unused   */ { FP64_ROW_UNUSED } },
     14293            { /* =>      */ { FP64_V(0,0x0,0x1e6), FP64_V(0,0xffffffffffffe,0x1ff), FP64_QNAN(1),       FP64_QNAN(1)       } },
     14294              /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_RC_ZERO,
     14295              /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DE | X86_MXCSR_PE | X86_MXCSR_RC_ZERO,
     14296              /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DE | X86_MXCSR_IE | X86_MXCSR_PE | X86_MXCSR_RC_ZERO | BS3_MXCSR_PE_FUZZY /* IEM */,
     14297              /*xcpt?    */ false, false },
     14298          { { /*src1     */ { FP64_DENORM_MIN(0),  FP64_DENORM_MAX(0),              FP64_DENORM_MIN(1), FP64_DENORM_MAX(1) } },
     14299            { /*unused   */ { FP64_ROW_UNUSED } },
     14300            { /* =>      */ { FP64_V(0,0x0,0x1e6), FP64_V(0,0xfffffffffffff,0x1ff), FP64_QNAN(1),       FP64_QNAN(1)       } },
     14301              /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_FZ,
     14302              /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DE | X86_MXCSR_PE | X86_MXCSR_FZ,
     14303              /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DE | X86_MXCSR_IE | X86_MXCSR_PE | X86_MXCSR_FZ | BS3_MXCSR_PE_FUZZY /* IEM */,
     14304              /*xcpt?    */ false, false },
     14305          { { /*src1     */ { FP64_DENORM_MIN(0), FP64_DENORM_MAX(0), FP64_DENORM_MIN(1), FP64_DENORM_MAX(1) } },
     14306            { /*unused   */ { FP64_ROW_UNUSED } },
     14307            { /* =>      */ { FP64_0(0),          FP64_0(0),          FP64_0(1),          FP64_0(1),         } },
     14308              /*mxcsr:in */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ,
     14309              /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ,
     14310              /*256:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_DAZ,
     14311              /*xcpt?    */ false, false },
     14312    /** @todo More Denormals. */
     14313    /*
     14314     * Invalids.
     14315     */
     14316    /** @todo Invalids. */
     14317    /*23*/ /* FP64_TABLE_D10_PS_INVALIDS */
     14318    /** @todo Underflow; Rounding; FZ etc. */
     14319    };
     14320
     14321#define PASS_s_aValues RT_ELEMENTS(s_aValues), (BS3CPUINSTR4_TEST1_VALUES_T *)s_aValues
     14322    static BS3CPUINSTR4_TEST1_T const s_aTests16[] =
     14323    {
     14324        { bs3CpuInstr4_sqrtpd_XMM1_XMM2_icebp_c16,   255, RM_REG, T_SSE,     1, 1, 2,   PASS_s_aValues },
     14325        { bs3CpuInstr4_sqrtpd_XMM1_FSxBX_icebp_c16,  255, RM_MEM, T_SSE,     1, 1, 255, PASS_s_aValues },
     14326
     14327        { bs3CpuInstr4_vsqrtpd_XMM1_XMM2_icebp_c16,  255, RM_REG, T_AVX_128, 1, 1, 2,   PASS_s_aValues },
     14328        { bs3CpuInstr4_vsqrtpd_XMM1_FSxBX_icebp_c16, 255, RM_MEM, T_AVX_128, 1, 1, 255, PASS_s_aValues },
     14329
     14330        { bs3CpuInstr4_vsqrtpd_YMM1_YMM2_icebp_c16,  255, RM_REG, T_AVX_256, 1, 1, 2,   PASS_s_aValues },
     14331        { bs3CpuInstr4_vsqrtpd_YMM1_FSxBX_icebp_c16, 255, RM_MEM, T_AVX_256, 1, 1, 255, PASS_s_aValues },
     14332    };
     14333    static BS3CPUINSTR4_TEST1_T const s_aTests32[] =
     14334    {
     14335        { bs3CpuInstr4_sqrtpd_XMM1_XMM2_icebp_c32,   255, RM_REG, T_SSE,     1, 1, 2,   PASS_s_aValues },
     14336        { bs3CpuInstr4_sqrtpd_XMM1_FSxBX_icebp_c32,  255, RM_MEM, T_SSE,     1, 1, 255, PASS_s_aValues },
     14337
     14338        { bs3CpuInstr4_vsqrtpd_XMM1_XMM2_icebp_c32,  255, RM_REG, T_AVX_128, 1, 1, 2,   PASS_s_aValues },
     14339        { bs3CpuInstr4_vsqrtpd_XMM1_FSxBX_icebp_c32, 255, RM_MEM, T_AVX_128, 1, 1, 255, PASS_s_aValues },
     14340
     14341        { bs3CpuInstr4_vsqrtpd_YMM1_YMM2_icebp_c32,  255, RM_REG, T_AVX_256, 1, 1, 2,   PASS_s_aValues },
     14342        { bs3CpuInstr4_vsqrtpd_YMM1_FSxBX_icebp_c32, 255, RM_MEM, T_AVX_256, 1, 1, 255, PASS_s_aValues },
     14343    };
     14344    static BS3CPUINSTR4_TEST1_T const s_aTests64[] =
     14345    {
     14346        { bs3CpuInstr4_sqrtpd_XMM1_XMM2_icebp_c64,   255, RM_REG, T_SSE,     1, 1, 2,   PASS_s_aValues },
     14347        { bs3CpuInstr4_sqrtpd_XMM1_FSxBX_icebp_c64,  255, RM_MEM, T_SSE,     1, 1, 255, PASS_s_aValues },
     14348
     14349        { bs3CpuInstr4_vsqrtpd_XMM1_XMM2_icebp_c64,  255, RM_REG, T_AVX_128, 1, 1, 2,   PASS_s_aValues },
     14350        { bs3CpuInstr4_vsqrtpd_XMM1_FSxBX_icebp_c64, 255, RM_MEM, T_AVX_128, 1, 1, 255, PASS_s_aValues },
     14351
     14352        { bs3CpuInstr4_vsqrtpd_YMM1_YMM2_icebp_c64,  255, RM_REG, T_AVX_256, 1, 1, 2,   PASS_s_aValues },
     14353        { bs3CpuInstr4_vsqrtpd_YMM1_FSxBX_icebp_c64, 255, RM_MEM, T_AVX_256, 1, 1, 255, PASS_s_aValues },
     14354
     14355        { bs3CpuInstr4_sqrtpd_XMM8_XMM9_icebp_c64,   255, RM_REG, T_SSE,     8, 8, 9,   PASS_s_aValues },
     14356        { bs3CpuInstr4_sqrtpd_XMM8_FSxBX_icebp_c64,  255, RM_MEM, T_SSE,     8, 8, 255, PASS_s_aValues },
     14357
     14358        { bs3CpuInstr4_vsqrtpd_XMM8_XMM9_icebp_c64,  255, RM_REG, T_AVX_128, 8, 8, 9,   PASS_s_aValues },
     14359        { bs3CpuInstr4_vsqrtpd_XMM8_FSxBX_icebp_c64, 255, RM_MEM, T_AVX_128, 8, 8, 255, PASS_s_aValues },
     14360        { bs3CpuInstr4_vsqrtpd_YMM8_YMM9_icebp_c64,  255, RM_REG, T_AVX_256, 8, 8, 9,   PASS_s_aValues },
     14361        { bs3CpuInstr4_vsqrtpd_YMM8_FSxBX_icebp_c64, 255, RM_MEM, T_AVX_256, 8, 8, 255, PASS_s_aValues },
    1408514362    };
    1408614363#undef PASS_s_aValues
     
    1414314420        { "[v]minsd",       bs3CpuInstr4_v_minsd,    0 },
    1414414421        { "[v]sqrtps",      bs3CpuInstr4_v_sqrtps,   0 },
     14422        { "[v]sqrtpd",      bs3CpuInstr4_v_sqrtpd,   0 },
    1414514423#endif
    1414614424    };
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