VirtualBox

Changeset 106769 in vbox


Ignore:
Timestamp:
Oct 29, 2024 12:57:26 PM (5 months ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
165657
Message:

ValidationKit/bootsectors: Implement SISD FP testcases for cvtss2si; bugref:10658; jiraref:VBP-1206

  • ValKit bs3-cpu-instr-4 test setup: add more integer & unused-row macros
  • ValKit bs3-cpu-instr-4 test worker: remove debug code I didn't mean to commit...
File:
1 edited

Legend:

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

    r106736 r106769  
    279279#define FP32_ROW_UNUSED                     FP32_1(0),       FP32_RAND_x7_V0
    280280#define FP32_x6_UNUSED                      FP32_RAND_x6_V7
     281#define FP32_x7_UNUSED                      FP32_RAND_x7_V7
    281282
    282283
     
    285286 * of instructions which convert between types.
    286287 */
     288#define INT32_INDEFINITE_C 0x80000000UL
     289#define INT64_INDEFINITE_C 0x8000000000000000ULL
     290
    287291#define FP32_INT_SIGN_PART(a_uInt32) ((((uint32_t)(a_uInt32)) >> 31) & 1)
    288292#define FP32_INT_EXPN_PART(a_uInt32) ((((uint32_t)(a_uInt32)) >> 23) & 0xFF)
     
    292296#define FP32_INT64(a_uInt64) FP32_INT((a_uInt64) & 0xFFFFFFFF), FP32_INT((a_uInt64) >> 32)
    293297#define FP32_INT64_C(a_uInt64) FP32_INT64(UINT64_C(a_uInt64))
     298#define FP32_INT_INDEFINITE FP32_INT(INT32_INDEFINITE_C)
     299#define FP32_INT64_INDEFINITE FP32_INT64(INT64_INDEFINITE_C)
    294300
    295301#define FP64_INT_SIGN_PART(a_uInt64) ((((uint64_t)(a_uInt64)) >> 63) & 1)
     
    300306#define FP64_INT32(a_uInt32_1, a_uInt32_2) FP64_INT(((uint64_t)(a_uInt32_1)) | (((uint64_t)(a_uInt32_2)) << 32))
    301307#define FP64_INT32_C(a_uInt32_1, a_uInt32_2) FP64_INT32(UINT32_C(a_uInt32_1), UINT32_C(a_uInt32_2))
     308#define FP64_INT_INDEFINITE FP64_INT(INT64_INDEFINITE_C)
     309#define FP64_INT32_INDEFINITE(a_uInt32_2) FP64_INT32(INT32_INDEFINITE_C, a_uInt32_2)
    302310
    303311/*
     
    444452#define FP64_RAND_x3_V3                     FP64_NORM_V1(0),    FP64_INF(1),        FP64_NORM_V0(1)
    445453#define FP64_ROW_UNUSED                     FP64_1(0),          FP64_RAND_x3_V0
     454#define FP64_x3_UNUSED                      FP64_RAND_x3_V1
    446455
    447456
     
    28532862        {
    28542863            Bs3MemSet(puMemOpAlias, 0xcc, cbMemOp);
    2855 //Bs3TestPrintf("memory operand (Dst); set %d bytes of dst to 0xCC\n", cbMemOp);
    28562864            if (fNonFpOK)
    28572865                MemOpExpect.ymm = pValues->uDstOut.ymm;
    28582866            else
    28592867                Bs3MemSet(&MemOpExpect, 0xcc, sizeof(MemOpExpect));
    2860 //Bs3TestPrintf("success expected; set %d bytes of expect to YMM value\n", sizeof(MemOpExpect));
    28612868        }
    28622869
     
    28702877        {
    28712878            Bs3MemCpy(puMemOpAlias, &pValues->uSrc1, cbMemOp);
    2872 //Bs3TestPrintf("memory operand (Src1); set %d bytes of src1 & expected to specified value\n", cbMemOp);
    28732879            if (pTest->iRegDst >= FSxDI)
    28742880                BS3_ASSERT(fSseInstr);
     
    28832889            BS3_ASSERT(pTest->iRegDst < FSxDI && pTest->iRegSrc1 < FSxDI);
    28842890            Bs3MemCpy(puMemOpAlias, &pValues->uSrc2, cbMemOp);
    2885 //Bs3TestPrintf("memory operand (Src2); set %d bytes of src2 & expected to specified value\n", cbMemOp);
    28862891            MemOpExpect.ymm = pValues->uSrc2.ymm;
    28872892        }
     
    29162921        cErrors = Bs3TestSubErrorCount();
    29172922        if (fNonFpOK && !fFpXcptExpected && pTest->iRegDst < FSxDI)
    2918 {
    2919 //Bs3TestPrintf("after successful execution\n");
    29202923            Bs3ExtCtxSetReg(&pSetRegCtx, pTest->iRegDst, (void*)&pValues->uDstOut);
    2921 }
    29222924#if     defined(DEBUG_aeichner) /** @todo Necessary kludge on a i7-1068NG7. */
    29232925        if (   pExtCtx->enmMethod == BS3EXTCTXMETHOD_XSAVE
     
    1646716469    /* 1*/{ { /* unused  */ { FP32_ROW_UNUSED } },
    1646816470            { /* src xmm */ { FP32_INF(1),         FP32_INF(0),         FP32_RAND_x6_V1 } },
    16469             { /* =>   mm */ { FP32_INT(INT32_MIN), FP32_INT(INT32_MIN), FP32_x6_UNUSED  } },
     16471            { /* =>   mm */ { FP32_INT_INDEFINITE, FP32_INT_INDEFINITE, FP32_x6_UNUSED  } },
    1647016472              /*mxcsr:in */ 0,
    1647116473              /*128:out  */ X86_MXCSR_IE,
     
    1654116543    /*11*/{ { /* unused  */ { FP32_ROW_UNUSED } },
    1654216544            { /* src xmm */ { FP32_NORM_MAX(0),    FP32_NORM_MAX(1),    FP32_RAND_x6_V2 } },
    16543             { /* =>   mm */ { FP32_INT(INT32_MIN), FP32_INT(INT32_MIN), FP32_x6_UNUSED  } },
     16545            { /* =>   mm */ { FP32_INT_INDEFINITE, FP32_INT_INDEFINITE, FP32_x6_UNUSED  } },
    1654416546              /*mxcsr:in */ 0,
    1654516547              /*128:out  */ X86_MXCSR_IE,
     
    1655016552    /*12*/{ { /* unused  */ { FP32_ROW_UNUSED } },
    1655116553            { /* src xmm */ { FP32_QNAN(0),        FP32_QNAN(1),        FP32_RAND_x6_V2 } },
    16552             { /* =>   mm */ { FP32_INT(INT32_MIN), FP32_INT(INT32_MIN), FP32_x6_UNUSED  } },
     16554            { /* =>   mm */ { FP32_INT_INDEFINITE, FP32_INT_INDEFINITE, FP32_x6_UNUSED  } },
    1655316555              /*mxcsr:in */ 0,
    1655416556              /*128:out  */ X86_MXCSR_IE,
     
    1655616558          { { /* unused  */ { FP32_ROW_UNUSED } },
    1655716559            { /* src xmm */ { FP32_SNAN(1),        FP32_SNAN(0),        FP32_RAND_x6_V2 } },
    16558             { /* =>   mm */ { FP32_INT(INT32_MIN), FP32_INT(INT32_MIN), FP32_x6_UNUSED  } },
     16560            { /* =>   mm */ { FP32_INT_INDEFINITE, FP32_INT_INDEFINITE, FP32_x6_UNUSED  } },
    1655916561              /*mxcsr:in */ 0,
    1656016562              /*128:out  */ X86_MXCSR_IE,
     
    1660816610    /* 1*/{ { /* unused  */ { FP32_ROW_UNUSED } },
    1660916611            { /* src xmm */ { FP32_INF(1),         FP32_INF(0),         FP32_RAND_x6_V1 } },
    16610             { /* =>   mm */ { FP32_INT(INT32_MIN), FP32_INT(INT32_MIN), FP32_x6_UNUSED  } },
     16612            { /* =>   mm */ { FP32_INT_INDEFINITE, FP32_INT_INDEFINITE, FP32_x6_UNUSED  } },
    1661116613              /*mxcsr:in */ 0,
    1661216614              /*128:out  */ X86_MXCSR_IE,
     
    1668216684    /*11*/{ { /* unused  */ { FP32_ROW_UNUSED } },
    1668316685            { /* src xmm */ { FP32_NORM_MAX(0),    FP32_NORM_MAX(1),    FP32_RAND_x6_V2 } },
    16684             { /* =>   mm */ { FP32_INT(INT32_MIN), FP32_INT(INT32_MIN), FP32_x6_UNUSED  } },
     16686            { /* =>   mm */ { FP32_INT_INDEFINITE, FP32_INT_INDEFINITE, FP32_x6_UNUSED  } },
    1668516687              /*mxcsr:in */ 0,
    1668616688              /*128:out  */ X86_MXCSR_IE,
     
    1669116693    /*12*/{ { /* unused  */ { FP32_ROW_UNUSED } },
    1669216694            { /* src xmm */ { FP32_QNAN(0),        FP32_QNAN(1),        FP32_RAND_x6_V2 } },
    16693             { /* =>   mm */ { FP32_INT(INT32_MIN), FP32_INT(INT32_MIN), FP32_x6_UNUSED  } },
     16695            { /* =>   mm */ { FP32_INT_INDEFINITE, FP32_INT_INDEFINITE, FP32_x6_UNUSED  } },
    1669416696              /*mxcsr:in */ 0,
    1669516697              /*128:out  */ X86_MXCSR_IE,
     
    1669716699          { { /* unused  */ { FP32_ROW_UNUSED } },
    1669816700            { /* src xmm */ { FP32_SNAN(1),        FP32_SNAN(0),        FP32_RAND_x6_V2 } },
    16699             { /* =>   mm */ { FP32_INT(INT32_MIN), FP32_INT(INT32_MIN), FP32_x6_UNUSED  } },
     16701            { /* =>   mm */ { FP32_INT_INDEFINITE, FP32_INT_INDEFINITE, FP32_x6_UNUSED  } },
    1670016702              /*mxcsr:in */ 0,
    1670116703              /*128:out  */ X86_MXCSR_IE,
     
    1689016892              /*128:out  */ X86_MXCSR_XCPT_MASK | X86_MXCSR_PE,
    1689116893              /*256:out  */ -1 },
    16892 
    1689316894          { { /* src r64 */ { FP32_INT64_C(8526495043095935640), FP32_RAND_x6_V4 } },
    1689416895                                          /*0x76543210FEDCBA98*/
     
    1701617017        { bs3CpuInstr4_vcvtsi2ss_XMM8_XMM8_R8_icebp_c64,      255,         RM_REG, T_AVX_128, XMM8, XMM8, R8,    PASS_s_aValues64 },
    1701717018        { bs3CpuInstr4_vcvtsi2ss_XMM8_XMM8_FSxBX_Q_icebp_c64, X86_XCPT_AC, RM_MEM, T_AVX_128, XMM8, XMM8, FSxBX, PASS_s_aValues64 },
     17019    };
     17020
     17021    static BS3CPUINSTR4_TEST1_MODE_T const s_aTests[3] = BS3CPUINSTR4_TEST1_MODES_INIT(s_aTests16, s_aTests32, s_aTests64);
     17022    unsigned const                         iTest       = BS3CPUINSTR4_TEST_MODES_INDEX(bMode);
     17023    return bs3CpuInstr4_WorkerTestType1(bMode, s_aTests[iTest].paTests, s_aTests[iTest].cTests,
     17024                                        g_aXcptConfig5, RT_ELEMENTS(g_aXcptConfig5));
     17025}
     17026
     17027
     17028/*
     17029 * CVTSS2SI.
     17030 */
     17031BS3_DECL_FAR(uint8_t) bs3CpuInstr4_cvtss2si(uint8_t bMode)
     17032{
     17033    static BS3CPUINSTR4_TEST1_VALUES_PS_T const s_aValues32[] =
     17034    {
     17035    /*
     17036     * Zero.
     17037     */
     17038    /* 0*/{ { /* clr r64 */ { FP32_INT64_C(0), FP32_x6_UNUSED  } },
     17039            { /* src xmm */ { FP32_0(0),       FP32_RAND_x7_V1 } },
     17040            { /* =>  r32 */ { FP32_INT_C(0),   FP32_x7_UNUSED  } },
     17041              /*mxcsr:in */ 0,
     17042              /*128:out  */ 0,
     17043              /*256:out  */ -1 },
     17044          { { /* clr r64 */ { FP32_INT64_C(0), FP32_x6_UNUSED  } },
     17045            { /* src xmm */ { FP32_0(1),       FP32_RAND_x7_V1 } },
     17046            { /* =>  r32 */ { FP32_INT_C(0),   FP32_x7_UNUSED  } },
     17047              /*mxcsr:in */ 0,
     17048              /*128:out  */ 0,
     17049              /*256:out  */ -1 },
     17050    /*
     17051     * Infinity.
     17052     */
     17053    /* 2*/{ { /* clr r64 */ { FP32_INT64_C(0),     FP32_x6_UNUSED  } },
     17054            { /* src xmm */ { FP32_INF(1),         FP32_RAND_x7_V1 } },
     17055            { /* =>  r32 */ { FP32_INT_INDEFINITE, FP32_x7_UNUSED  } },
     17056              /*mxcsr:in */ 0,
     17057              /*128:out  */ X86_MXCSR_IE,
     17058              /*256:out  */ -1 },
     17059          { { /* clr r64 */ { FP32_INT64_C(0),     FP32_x6_UNUSED  } },
     17060            { /* src xmm */ { FP32_INF(0),         FP32_RAND_x7_V1 } },
     17061            { /* =>  r32 */ { FP32_INT_INDEFINITE, FP32_x7_UNUSED  } },
     17062              /*mxcsr:in */ 0,
     17063              /*128:out  */ X86_MXCSR_IE,
     17064              /*256:out  */ -1 },
     17065    /*
     17066     * Normals & Precision.
     17067     */
     17068    /* 4*/{ { /* clr r64 */ { FP32_INT64_C(0),         FP32_x6_UNUSED  } },
     17069            { /* src xmm */ { FP32_V(0,0x712000,0x8f), FP32_RAND_x7_V0 } },
     17070            { /* =>  r32 */ { FP32_INT_C(123456),      FP32_x7_UNUSED  } },
     17071              /*mxcsr:in */ 0,
     17072              /*128:out  */ 0,
     17073              /*256:out  */ -1 },
     17074          { { /* clr r64 */ { FP32_INT64_C(0),         FP32_x6_UNUSED  } },
     17075            { /* src xmm */ { FP32_V(1,0x712000,0x8f), FP32_RAND_x7_V0 } },
     17076            { /* =>  r32 */ { FP32_INT_C(-123456),     FP32_x7_UNUSED  } },
     17077              /*mxcsr:in */ 0,
     17078              /*128:out  */ 0,
     17079              /*256:out  */ -1 },
     17080          { { /* clr r64 */ { FP32_INT64_C(0),                     FP32_x6_UNUSED  } },
     17081            { /* src xmm */ { FP32_V(0,0x71200d,0x8f)/*123456.1*/, FP32_RAND_x7_V2 } },
     17082            { /* =>  r32 */ { FP32_INT_C(123456),                  FP32_x7_UNUSED  } },
     17083              /*mxcsr:in */ 0,
     17084              /*128:out  */ X86_MXCSR_PE,
     17085              /*256:out  */ -1 },
     17086          { { /* clr r64 */ { FP32_INT64_C(0),         FP32_x6_UNUSED               } },
     17087            { /* src xmm */ { FP32_V(1,0x71200d,0x8f)/*-123456.1*/, FP32_RAND_x7_V2 } },
     17088            { /* =>  r32 */ { FP32_INT_C(-123456),     FP32_x7_UNUSED               } },
     17089              /*mxcsr:in */ 0,
     17090              /*128:out  */ X86_MXCSR_PE,
     17091              /*256:out  */ -1 },
     17092          { { /* clr r64 */ { FP32_INT64_C(0),         FP32_x6_UNUSED              } },
     17093            { /* src xmm */ { FP32_V(0,0x71200d,0x8f)/*123456.1*/, FP32_RAND_x7_V2 } },
     17094            { /* =>  r32 */ { FP32_INT_C(123456),      FP32_x7_UNUSED              } },
     17095              /*mxcsr:in */ X86_MXCSR_RC_DOWN,
     17096              /*128:out  */ X86_MXCSR_RC_DOWN | X86_MXCSR_PE,
     17097              /*256:out  */ -1 },
     17098          { { /* clr r64 */ { FP32_INT64_C(0),         FP32_x6_UNUSED               } },
     17099            { /* src xmm */ { FP32_V(1,0x71200d,0x8f)/*-123456.1*/, FP32_RAND_x7_V2 } },
     17100            { /* =>  r32 */ { FP32_INT_C(-123457),     FP32_x7_UNUSED               } },
     17101              /*mxcsr:in */ X86_MXCSR_RC_DOWN,
     17102              /*128:out  */ X86_MXCSR_RC_DOWN | X86_MXCSR_PE,
     17103              /*256:out  */ -1 },
     17104          { { /* clr r64 */ { FP32_INT64_C(0),         FP32_x6_UNUSED               } },
     17105            { /* src xmm */ { FP32_V(0,0x71200d,0x8f)/*123456.1*/, FP32_RAND_x7_V2 } },
     17106            { /* =>  r32 */ { FP32_INT_C(123457),      FP32_x7_UNUSED               } },
     17107              /*mxcsr:in */ X86_MXCSR_RC_UP,
     17108              /*128:out  */ X86_MXCSR_RC_UP | X86_MXCSR_PE,
     17109              /*256:out  */ -1 },
     17110          { { /* clr r64 */ { FP32_INT64_C(0),         FP32_x6_UNUSED               } },
     17111            { /* src xmm */ { FP32_V(1,0x71200d,0x8f)/*-123456.1*/, FP32_RAND_x7_V2 } },
     17112            { /* =>  r32 */ { FP32_INT_C(-123456),     FP32_x7_UNUSED               } },
     17113              /*mxcsr:in */ X86_MXCSR_RC_UP,
     17114              /*128:out  */ X86_MXCSR_RC_UP | X86_MXCSR_PE,
     17115              /*256:out  */ -1 },
     17116          { { /* clr r64 */ { FP32_INT64_C(0),         FP32_x6_UNUSED              } },
     17117            { /* src xmm */ { FP32_V(0,0x71200d,0x8f)/*123456.1*/, FP32_RAND_x7_V2 } },
     17118            { /* =>  r32 */ { FP32_INT_C(123456),      FP32_x7_UNUSED              } },
     17119              /*mxcsr:in */ X86_MXCSR_RC_ZERO,
     17120              /*128:out  */ X86_MXCSR_RC_ZERO | X86_MXCSR_PE,
     17121              /*256:out  */ -1 },
     17122          { { /* clr r64 */ { FP32_INT64_C(0),         FP32_x6_UNUSED               } },
     17123            { /* src xmm */ { FP32_V(1,0x71200d,0x8f)/*-123456.1*/, FP32_RAND_x7_V2 } },
     17124            { /* =>  r32 */ { FP32_INT_C(-123456),     FP32_x7_UNUSED               } },
     17125              /*mxcsr:in */ X86_MXCSR_RC_ZERO,
     17126              /*128:out  */ X86_MXCSR_RC_ZERO | X86_MXCSR_PE,
     17127              /*256:out  */ -1 },
     17128          { { /* clr r64 */ { FP32_INT64_C(0),         FP32_x6_UNUSED          } },
     17129            { /* src xmm */ { FP32_V(1,0x766666,0x7e)/*-0.9*/, FP32_RAND_x7_V2 } },
     17130            { /* =>  r32 */ { FP32_INT_C(-1),          FP32_x7_UNUSED          } },
     17131              /*mxcsr:in */ X86_MXCSR_FZ,
     17132              /*128:out  */ X86_MXCSR_PE | X86_MXCSR_FZ,
     17133              /*256:out  */ -1 },
     17134          { { /* clr r64 */ { FP32_INT64_C(0),         FP32_x6_UNUSED         } },
     17135            { /* src xmm */ { FP32_V(0,0x766666,0x7e)/*0.9*/, FP32_RAND_x7_V2 } },
     17136            { /* =>  r32 */ { FP32_INT_C(1),           FP32_x7_UNUSED         } },
     17137              /*mxcsr:in */ X86_MXCSR_FZ,
     17138              /*128:out  */ X86_MXCSR_PE | X86_MXCSR_FZ,
     17139              /*256:out  */ -1 },
     17140          { { /* clr r64 */ { FP32_INT64_C(0),           FP32_x6_UNUSED  } },
     17141            { /* src xmm */ { FP32_NORM_SAFE_INT_MAX(1), FP32_RAND_x7_V2 } },
     17142            { /* =>  r32 */ { FP32_INT_C(-16777215),     FP32_x7_UNUSED  } },
     17143              /*mxcsr:in */ 0,
     17144              /*128:out  */ 0,
     17145              /*256:out  */ -1 },
     17146          { { /* clr r64 */ { FP32_INT64_C(0),           FP32_x6_UNUSED  } },
     17147            { /* src xmm */ { FP32_NORM_SAFE_INT_MAX(0), FP32_RAND_x7_V2 } },
     17148            { /* =>  r32 */ { FP32_INT_C(16777215),      FP32_x7_UNUSED  } },
     17149              /*mxcsr:in */ 0,
     17150              /*128:out  */ 0,
     17151              /*256:out  */ -1 },
     17152    /*
     17153     * Denormals.
     17154     */
     17155    /*18*/{ { /* clr r64 */ { FP32_INT64_C(0),    FP32_x6_UNUSED  } },
     17156            { /* src xmm */ { FP32_DENORM_MAX(0), FP32_RAND_x7_V2 } },
     17157            { /* =>  r32 */ { FP32_INT_C(0),      FP32_x7_UNUSED  } },
     17158              /*mxcsr:in */ 0,
     17159              /*128:out  */ X86_MXCSR_PE,
     17160              /*256:out  */ -1 },
     17161          { { /* clr r64 */ { FP32_INT64_C(0),    FP32_x6_UNUSED  } },
     17162            { /* src xmm */ { FP32_DENORM_MIN(1), FP32_RAND_x7_V2 } },
     17163            { /* =>  r32 */ { FP32_INT_C(0),      FP32_x7_UNUSED  } },
     17164              /*mxcsr:in */ X86_MXCSR_DAZ,
     17165              /*128:out  */ X86_MXCSR_DAZ,
     17166              /*256:out  */ -1 },
     17167    /*
     17168     * Overflow (Underflow not possible).
     17169     */
     17170    /*20*/{ { /* clr r64 */ { FP32_INT64_C(0),     FP32_x6_UNUSED  } },
     17171            { /* src xmm */ { FP32_NORM_MAX(0),    FP32_RAND_x7_V2 } },
     17172            { /* =>  r32 */ { FP32_INT_INDEFINITE, FP32_x7_UNUSED  } },
     17173              /*mxcsr:in */ 0,
     17174              /*128:out  */ X86_MXCSR_IE,
     17175              /*256:out  */ -1 },
     17176          { { /* clr r64 */ { FP32_INT64_C(0),     FP32_x6_UNUSED  } },
     17177            { /* src xmm */ { FP32_NORM_MAX(1),    FP32_RAND_x7_V2 } },
     17178            { /* =>  r32 */ { FP32_INT_INDEFINITE, FP32_x7_UNUSED  } },
     17179              /*mxcsr:in */ 0,
     17180              /*128:out  */ X86_MXCSR_IE,
     17181              /*256:out  */ -1 },
     17182    /*
     17183     * Invalids.
     17184     */
     17185    /*22*/{ { /* clr r64 */ { FP32_INT64_C(0),     FP32_x6_UNUSED  } },
     17186            { /* src xmm */ { FP32_QNAN(0),        FP32_RAND_x7_V2 } },
     17187            { /* =>  r32 */ { FP32_INT_INDEFINITE, FP32_x7_UNUSED  } },
     17188              /*mxcsr:in */ 0,
     17189              /*128:out  */ X86_MXCSR_IE,
     17190              /*256:out  */ -1 },
     17191          { { /* clr r64 */ { FP32_INT64_C(0),     FP32_x6_UNUSED  } },
     17192            { /* src xmm */ { FP32_SNAN(1),        FP32_RAND_x7_V2 } },
     17193            { /* =>  r32 */ { FP32_INT_INDEFINITE, FP32_x7_UNUSED  } },
     17194              /*mxcsr:in */ 0,
     17195              /*128:out  */ X86_MXCSR_IE,
     17196              /*256:out  */ -1 },
     17197    };
     17198    static BS3CPUINSTR4_TEST1_VALUES_PS_T const s_aValues64[] =
     17199    {
     17200    /*
     17201     * Zero.
     17202     */
     17203    /* 0*/{ { /* unused  */ { FP32_ROW_UNUSED } },
     17204            { /* src xmm */ { FP32_0(0),       FP32_RAND_x7_V1 } },
     17205            { /* =>  r64 */ { FP32_INT64_C(0), FP32_x6_UNUSED  } },
     17206              /*mxcsr:in */ 0,
     17207              /*128:out  */ 0,
     17208              /*256:out  */ -1 },
     17209          { { /* unused  */ { FP32_ROW_UNUSED } },
     17210            { /* src xmm */ { FP32_0(1),       FP32_RAND_x7_V1 } },
     17211            { /* =>  r64 */ { FP32_INT64_C(0), FP32_x6_UNUSED  } },
     17212              /*mxcsr:in */ 0,
     17213              /*128:out  */ 0,
     17214              /*256:out  */ -1 },
     17215    /*
     17216     * Infinity.
     17217     */
     17218    /* 2*/{ { /* unused  */ { FP32_ROW_UNUSED } },
     17219            { /* src xmm */ { FP32_INF(1),           FP32_RAND_x7_V1 } },
     17220            { /* =>  r64 */ { FP32_INT64_INDEFINITE, FP32_x6_UNUSED  } },
     17221              /*mxcsr:in */ 0,
     17222              /*128:out  */ X86_MXCSR_IE,
     17223              /*256:out  */ -1 },
     17224          { { /* unused  */ { FP32_ROW_UNUSED } },
     17225            { /* src xmm */ { FP32_INF(0),           FP32_RAND_x7_V1 } },
     17226            { /* =>  r64 */ { FP32_INT64_INDEFINITE, FP32_x6_UNUSED  } },
     17227              /*mxcsr:in */ 0,
     17228              /*128:out  */ X86_MXCSR_IE,
     17229              /*256:out  */ -1 },
     17230    /*
     17231     * Normals & Precision.
     17232     */
     17233    /* 4*/{ { /* unused  */ { FP32_ROW_UNUSED } },
     17234            { /* src xmm */ { FP32_V(0, 0x712000,0x8f), FP32_RAND_x7_V0 } },
     17235            { /* =>  r64 */ { FP32_INT64_C(123456),     FP32_x6_UNUSED  } },
     17236              /*mxcsr:in */ 0,
     17237              /*128:out  */ 0,
     17238              /*256:out  */ -1 },
     17239          { { /* unused  */ { FP32_ROW_UNUSED } },
     17240            { /* src xmm */ { FP32_V(1, 0x712000,0x8f), FP32_RAND_x7_V0 } },
     17241            { /* =>  r64 */ { FP32_INT64_C(-123456),    FP32_x6_UNUSED  } },
     17242              /*mxcsr:in */ 0,
     17243              /*128:out  */ 0,
     17244              /*256:out  */ -1 },
     17245          { { /* unused  */ { FP32_ROW_UNUSED } },
     17246            { /* src xmm */ { FP32_V(0, 0x71200d,0x8f)/*123456.1*/, FP32_RAND_x7_V2 } },
     17247            { /* =>  r64 */ { FP32_INT64_C(123456),                 FP32_x6_UNUSED  } },
     17248              /*mxcsr:in */ 0,
     17249              /*128:out  */ X86_MXCSR_PE,
     17250              /*256:out  */ -1 },
     17251          { { /* unused  */ { FP32_ROW_UNUSED } },
     17252            { /* src xmm */ { FP32_V(1, 0x71200d,0x8f)/*-123456.1*/, FP32_RAND_x7_V2 } },
     17253            { /* =>  r64 */ { FP32_INT64_C(-123456),                 FP32_x6_UNUSED  } },
     17254              /*mxcsr:in */ 0,
     17255              /*128:out  */ X86_MXCSR_PE,
     17256              /*256:out  */ -1 },
     17257          { { /* unused  */ { FP32_ROW_UNUSED } },
     17258            { /* src xmm */ { FP32_V(0, 0x71200d,0x8f)/*123456.1*/, FP32_RAND_x7_V2 } },
     17259            { /* =>  r64 */ { FP32_INT64_C(123456),                 FP32_x6_UNUSED  } },
     17260              /*mxcsr:in */ X86_MXCSR_RC_DOWN,
     17261              /*128:out  */ X86_MXCSR_RC_DOWN | X86_MXCSR_PE,
     17262              /*256:out  */ -1 },
     17263          { { /* unused  */ { FP32_ROW_UNUSED } },
     17264            { /* src xmm */ { FP32_V(1, 0x71200d,0x8f)/*-123456.1*/, FP32_RAND_x7_V2 } },
     17265            { /* =>  r64 */ { FP32_INT64_C(-123457),                 FP32_x6_UNUSED  } },
     17266              /*mxcsr:in */ X86_MXCSR_RC_DOWN,
     17267              /*128:out  */ X86_MXCSR_RC_DOWN | X86_MXCSR_PE,
     17268              /*256:out  */ -1 },
     17269          { { /* unused  */ { FP32_ROW_UNUSED } },
     17270            { /* src xmm */ { FP32_V(0, 0x71200d,0x8f)/*123456.1*/, FP32_RAND_x7_V2 } },
     17271            { /* =>  r64 */ { FP32_INT64_C(123457),                 FP32_x6_UNUSED  } },
     17272              /*mxcsr:in */ X86_MXCSR_RC_UP,
     17273              /*128:out  */ X86_MXCSR_RC_UP | X86_MXCSR_PE,
     17274              /*256:out  */ -1 },
     17275          { { /* unused  */ { FP32_ROW_UNUSED } },
     17276            { /* src xmm */ { FP32_V(1, 0x71200d,0x8f)/*-123456.1*/, FP32_RAND_x7_V2 } },
     17277            { /* =>  r64 */ { FP32_INT64_C(-123456),                 FP32_x6_UNUSED  } },
     17278              /*mxcsr:in */ X86_MXCSR_RC_UP,
     17279              /*128:out  */ X86_MXCSR_RC_UP | X86_MXCSR_PE,
     17280              /*256:out  */ -1 },
     17281          { { /* unused  */ { FP32_ROW_UNUSED } },
     17282            { /* src xmm */ { FP32_V(0, 0x71200d,0x8f)/*123456.1*/, FP32_RAND_x7_V2 } },
     17283            { /* =>  r64 */ { FP32_INT64_C(123456),                 FP32_x6_UNUSED  } },
     17284              /*mxcsr:in */ X86_MXCSR_RC_ZERO,
     17285              /*128:out  */ X86_MXCSR_RC_ZERO | X86_MXCSR_PE,
     17286              /*256:out  */ -1 },
     17287          { { /* unused  */ { FP32_ROW_UNUSED } },
     17288            { /* src xmm */ { FP32_V(1, 0x71200d,0x8f)/*-123456.1*/, FP32_RAND_x7_V2 } },
     17289            { /* =>  r64 */ { FP32_INT64_C(-123456),                 FP32_x6_UNUSED  } },
     17290              /*mxcsr:in */ X86_MXCSR_RC_ZERO,
     17291              /*128:out  */ X86_MXCSR_RC_ZERO | X86_MXCSR_PE,
     17292              /*256:out  */ -1 },
     17293          { { /* unused  */ { FP32_ROW_UNUSED } },
     17294            { /* src xmm */ { FP32_V(1, 0x766666,0x7e)/*-0.9*/, FP32_RAND_x7_V2 } },
     17295            { /* =>  r64 */ { FP32_INT64_C(-1),                 FP32_x6_UNUSED  } },
     17296              /*mxcsr:in */ X86_MXCSR_FZ,
     17297              /*128:out  */ X86_MXCSR_PE | X86_MXCSR_FZ,
     17298              /*256:out  */ -1 },
     17299          { { /* unused  */ { FP32_ROW_UNUSED } },
     17300            { /* src xmm */ { FP32_V(0, 0x766666,0x7e)/*0.9*/, FP32_RAND_x7_V2 } },
     17301            { /* =>  r64 */ { FP32_INT64_C(1),                 FP32_x6_UNUSED  } },
     17302              /*mxcsr:in */ X86_MXCSR_FZ,
     17303              /*128:out  */ X86_MXCSR_PE | X86_MXCSR_FZ,
     17304              /*256:out  */ -1 },
     17305          { { /* unused  */ { FP32_ROW_UNUSED } },
     17306            { /* src xmm */ { FP32_NORM_SAFE_INT_MAX(1),   FP32_RAND_x7_V2 } },
     17307            { /* =>  r64 */ { FP32_INT64_C(-16777215),     FP32_x6_UNUSED  } },
     17308              /*mxcsr:in */ 0,
     17309              /*128:out  */ 0,
     17310              /*256:out  */ -1 },
     17311          { { /* unused  */ { FP32_ROW_UNUSED } },
     17312            { /* src xmm */ { FP32_NORM_SAFE_INT_MAX(0),   FP32_RAND_x7_V2 } },
     17313            { /* =>  r64 */ { FP32_INT64_C(16777215),      FP32_x6_UNUSED  } },
     17314              /*mxcsr:in */ 0,
     17315              /*128:out  */ 0,
     17316              /*256:out  */ -1 },
     17317    /*
     17318     * Denormals.
     17319     */
     17320    /*18*/{ { /* unused  */ { FP32_ROW_UNUSED } },
     17321            { /* src xmm */ { FP32_DENORM_MAX(0),   FP32_RAND_x7_V2 } },
     17322            { /* =>  r64 */ { FP32_INT64_C(0),      FP32_x6_UNUSED  } },
     17323              /*mxcsr:in */ 0,
     17324              /*128:out  */ X86_MXCSR_PE,
     17325              /*256:out  */ -1 },
     17326          { { /* unused  */ { FP32_ROW_UNUSED } },
     17327            { /* src xmm */ { FP32_DENORM_MIN(1),   FP32_RAND_x7_V2 } },
     17328            { /* =>  r64 */ { FP32_INT64_C(0),      FP32_x6_UNUSED  } },
     17329              /*mxcsr:in */ X86_MXCSR_DAZ,
     17330              /*128:out  */ X86_MXCSR_DAZ,
     17331              /*256:out  */ -1 },
     17332    /*
     17333     * Overflow (Underflow not possible).
     17334     */
     17335    /*20*/{ { /* unused  */ { FP32_ROW_UNUSED } },
     17336            { /* src xmm */ { FP32_NORM_MAX(0),      FP32_RAND_x7_V2 } },
     17337            { /* =>  r64 */ { FP32_INT64_INDEFINITE, FP32_x6_UNUSED  } },
     17338              /*mxcsr:in */ 0,
     17339              /*128:out  */ X86_MXCSR_IE,
     17340              /*256:out  */ -1 },
     17341          { { /* unused  */ { FP32_ROW_UNUSED } },
     17342            { /* src xmm */ { FP32_NORM_MAX(1),      FP32_RAND_x7_V2 } },
     17343            { /* =>  r64 */ { FP32_INT64_INDEFINITE, FP32_x6_UNUSED  } },
     17344              /*mxcsr:in */ 0,
     17345              /*128:out  */ X86_MXCSR_IE,
     17346              /*256:out  */ -1 },
     17347    /*
     17348     * Invalids.
     17349     */
     17350    /*22*/{ { /* unused  */ { FP32_ROW_UNUSED } },
     17351            { /* src xmm */ { FP32_QNAN(0),          FP32_RAND_x7_V2 } },
     17352            { /* =>  r64 */ { FP32_INT64_INDEFINITE, FP32_x6_UNUSED  } },
     17353              /*mxcsr:in */ 0,
     17354              /*128:out  */ X86_MXCSR_IE,
     17355              /*256:out  */ -1 },
     17356          { { /* unused  */ { FP32_ROW_UNUSED } },
     17357            { /* src xmm */ { FP32_SNAN(1),          FP32_RAND_x7_V2 } },
     17358            { /* =>  r64 */ { FP32_INT64_INDEFINITE, FP32_x6_UNUSED  } },
     17359              /*mxcsr:in */ 0,
     17360              /*128:out  */ X86_MXCSR_IE,
     17361              /*256:out  */ -1 },
     17362    };
     17363
     17364    static BS3CPUINSTR4_TEST1_T const s_aTests16[] =
     17365    {
     17366        { bs3CpuInstr4_cvtss2si_EAX_XMM1_icebp_c16,   255,         RM_REG, T_SSE,     EAX, XMM1,  NOREG, PASS_s_aValues32 },
     17367        { bs3CpuInstr4_cvtss2si_EAX_FSxBX_icebp_c16,  255,         RM_MEM, T_SSE,     EAX, FSxBX, NOREG, PASS_s_aValues32 },
     17368
     17369        { bs3CpuInstr4_vcvtss2si_EAX_XMM1_icebp_c16,  255,         RM_REG, T_AVX_128, EAX, XMM1,  NOREG, PASS_s_aValues32 },
     17370        { bs3CpuInstr4_vcvtss2si_EAX_FSxBX_icebp_c16, 255,         RM_MEM, T_AVX_128, EAX, FSxBX, NOREG, PASS_s_aValues32 },
     17371
     17372        { bs3CpuInstr4_vcvtss2si_RAX_XMM1_icebp_c16,  BS3_XCPT_UD, RM_REG, T_AVX_128, RAX, XMM1,  NOREG, PASS_s_aValues64 },
     17373        { bs3CpuInstr4_vcvtss2si_RAX_FSxBX_icebp_c16, BS3_XCPT_UD, RM_MEM, T_AVX_128, RAX, FSxBX, NOREG, PASS_s_aValues64 },
     17374    };
     17375
     17376    static BS3CPUINSTR4_TEST1_T const s_aTests32[] =
     17377    {
     17378        { bs3CpuInstr4_cvtss2si_EAX_XMM1_icebp_c32,   255,         RM_REG, T_SSE,     EAX, XMM1,  NOREG, PASS_s_aValues32 },
     17379        { bs3CpuInstr4_cvtss2si_EAX_FSxBX_icebp_c32,  255,         RM_MEM, T_SSE,     EAX, FSxBX, NOREG, PASS_s_aValues32 },
     17380
     17381        { bs3CpuInstr4_vcvtss2si_EAX_XMM1_icebp_c32,  255,         RM_REG, T_AVX_128, EAX, XMM1,  NOREG, PASS_s_aValues32 },
     17382        { bs3CpuInstr4_vcvtss2si_EAX_FSxBX_icebp_c32, 255,         RM_MEM, T_AVX_128, EAX, FSxBX, NOREG, PASS_s_aValues32 },
     17383
     17384        { bs3CpuInstr4_vcvtss2si_RAX_XMM1_icebp_c32,  BS3_XCPT_UD, RM_REG, T_AVX_128, RAX, XMM1,  NOREG, PASS_s_aValues64 },
     17385        { bs3CpuInstr4_vcvtss2si_RAX_FSxBX_icebp_c32, BS3_XCPT_UD, RM_MEM, T_AVX_128, RAX, FSxBX, NOREG, PASS_s_aValues64 },
     17386    };
     17387    static BS3CPUINSTR4_TEST1_T const s_aTests64[] =
     17388    {
     17389        { bs3CpuInstr4_cvtss2si_EAX_XMM1_icebp_c64,   255,         RM_REG, T_SSE,     EAX, XMM1,  RAX,   PASS_s_aValues32 },
     17390        { bs3CpuInstr4_cvtss2si_EAX_FSxBX_icebp_c64,  255,         RM_MEM, T_SSE,     EAX, FSxBX, RAX,   PASS_s_aValues32 },
     17391
     17392        { bs3CpuInstr4_cvtss2si_R8D_XMM8_icebp_c64,   255,         RM_REG, T_SSE,     R8D, XMM8,  R8,    PASS_s_aValues32 },
     17393        { bs3CpuInstr4_cvtss2si_R8D_FSxBX_icebp_c64,  255,         RM_MEM, T_SSE,     R8D, FSxBX, R8,    PASS_s_aValues32 },
     17394
     17395        { bs3CpuInstr4_vcvtss2si_EAX_XMM1_icebp_c64,  255,         RM_REG, T_AVX_128, EAX, XMM1,  RAX,   PASS_s_aValues32 },
     17396        { bs3CpuInstr4_vcvtss2si_EAX_FSxBX_icebp_c64, 255,         RM_MEM, T_AVX_128, EAX, FSxBX, RAX,   PASS_s_aValues32 },
     17397
     17398        { bs3CpuInstr4_vcvtss2si_R8D_XMM8_icebp_c64,  255,         RM_REG, T_AVX_128, R8D, XMM8,  R8,    PASS_s_aValues32 },
     17399        { bs3CpuInstr4_vcvtss2si_R8D_FSxBX_icebp_c64, 255,         RM_MEM, T_AVX_128, R8D, FSxBX, R8,    PASS_s_aValues32 },
     17400
     17401        { bs3CpuInstr4_cvtss2si_RAX_XMM1_icebp_c64,   255,         RM_REG, T_SSE,     RAX, XMM1,  NOREG, PASS_s_aValues64 },
     17402        { bs3CpuInstr4_cvtss2si_RAX_FSxBX_icebp_c64,  255,         RM_MEM, T_SSE,     RAX, FSxBX, NOREG, PASS_s_aValues64 },
     17403
     17404        { bs3CpuInstr4_cvtss2si_R8_XMM8_icebp_c64,    255,         RM_REG, T_SSE,     R8,  XMM8,  NOREG, PASS_s_aValues64 },
     17405        { bs3CpuInstr4_cvtss2si_R8_FSxBX_icebp_c64,   255,         RM_MEM, T_SSE,     R8,  FSxBX, NOREG, PASS_s_aValues64 },
     17406
     17407        { bs3CpuInstr4_vcvtss2si_RAX_XMM1_icebp_c64,  255,         RM_REG, T_AVX_128, RAX, XMM1,  NOREG, PASS_s_aValues64 },
     17408        { bs3CpuInstr4_vcvtss2si_RAX_FSxBX_icebp_c64, 255,         RM_MEM, T_AVX_128, RAX, FSxBX, NOREG, PASS_s_aValues64 },
     17409
     17410        { bs3CpuInstr4_vcvtss2si_R8_XMM8_icebp_c64,   255,         RM_REG, T_AVX_128, R8,  XMM8,  NOREG, PASS_s_aValues64 },
     17411        { bs3CpuInstr4_vcvtss2si_R8_FSxBX_icebp_c64,  255,         RM_MEM, T_AVX_128, R8,  FSxBX, NOREG, PASS_s_aValues64 },
    1701817412    };
    1701917413
     
    1708617480        { "cvttps2pi",      bs3CpuInstr4_cvttps2pi,  0 },
    1708717481        { "cvtsi2ss",       bs3CpuInstr4_cvtsi2ss,   0 },
     17482        { "cvtss2si",       bs3CpuInstr4_cvtss2si,   0 },
    1708817483#endif
    1708917484    };
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