VirtualBox

Ignore:
Timestamp:
Jul 6, 2022 6:10:43 PM (3 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
152156
Message:

ValKit/bs3-cpu-instr-3: Simple [v]movlps tests. bugref:9898

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

Legend:

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

    r95530 r95532  
    10171017 %endif
    10181018
     1019;
     1020; [V]MOVLPS - not testing the 2nd register variant.
     1021;
     1022EMIT_INSTR_PLUS_ICEBP movlps,  XMM1, FSxBX
     1023EMIT_INSTR_PLUS_ICEBP movlps,  FSxBX, XMM1
     1024EMIT_INSTR_PLUS_ICEBP vmovlps, XMM1, XMM2, FSxBX
     1025EMIT_INSTR_PLUS_ICEBP vmovlps, FSxBX, XMM1
     1026 %if TMPL_BITS == 64
     1027EMIT_INSTR_PLUS_ICEBP movlps,  XMM8, FSxBX
     1028EMIT_INSTR_PLUS_ICEBP movlps,  FSxBX, XMM11
     1029EMIT_INSTR_PLUS_ICEBP vmovlps, XMM10, XMM14, FSxBX
     1030EMIT_INSTR_PLUS_ICEBP vmovlps, FSxBX, XMM9
     1031 %endif
     1032
     1033
    10191034%endif ; BS3_INSTANTIATING_CMN
    10201035
  • trunk/src/VBox/ValidationKit/bootsectors/bs3-cpu-instr-3.c32

    r95530 r95532  
    35363536                                        g_aXcptConfig5, RT_ELEMENTS(g_aXcptConfig5));
    35373537}
     3538
     3539
     3540/*
     3541 * [V]MOVLPS - Merge a low qword (two single precision floating-point values)
     3542 *             from memory with the high qword from a register (SSE destination
     3543 *             or VEX 2nd source).
     3544 *             The store variant just stores the lower qword.
     3545 */
     3546BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_movlps_XMM1_FSxBX_icebp);
     3547BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_movlps_FSxBX_XMM1_icebp);
     3548BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_vmovlps_XMM1_XMM2_FSxBX_icebp);
     3549BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_vmovlps_FSxBX_XMM1_icebp);
     3550extern FNBS3FAR             bs3CpuInstr3_movlps_XMM8_FSxBX_icebp_c64;
     3551extern FNBS3FAR             bs3CpuInstr3_movlps_FSxBX_XMM11_icebp_c64;
     3552extern FNBS3FAR             bs3CpuInstr3_vmovlps_XMM10_XMM14_FSxBX_icebp_c64;
     3553extern FNBS3FAR             bs3CpuInstr3_vmovlps_FSxBX_XMM9_icebp_c64;
     3554
     3555BS3_DECL_FAR(uint8_t) bs3CpuInstr3_v_movlps(uint8_t bMode)
     3556{
     3557    static BS3CPUINSTR3_TEST1_VALUES_T const s_aValuesLd[] =
     3558    {
     3559        {   /*src2*/ RTUINT256_INIT_C(0, 0, 0, 0),
     3560            /*src1*/ RTUINT256_INIT_C(0, 0, 0, 0),
     3561            /* => */ RTUINT256_INIT_C(0, 0, 0, 0) },
     3562        {   /*src2*/ RTUINT256_INIT_C(0xf1f2f3f4f5f6f7f8, 0xe1e2e3e4e5e6e7e8, 0xd1d2d3d4d5d6d7d8, 0xc1c2c3c4c5c6c7c8),
     3563            /*src1*/ RTUINT256_INIT_C(0xb1b2b3b4b5b6b7b8, 0xa1a2a3a4a5a6a7a8, 0x9192939495969798, 0x8182838485868788),
     3564            /* => */ RTUINT256_INIT_C(0x0000000000000000, 0x0000000000000000, 0x9192939495969798, 0xc1c2c3c4c5c6c7c8) },
     3565        {   /*src2*/ RTUINT256_INIT_C(0x5555666677778888, 0x1111222233334444, 0x1111222233334444, 0x81828384c5c6c7c8),
     3566            /*src1*/ RTUINT256_INIT_C(0xddddeeeeffff0000, 0x9999aaaabbbbcccc, 0x9999aaaabbbbcccc, 0xddddeeeeffff0000),
     3567            /* => */ RTUINT256_INIT_C(0x0000000000000000, 0x0000000000000000, 0x9999aaaabbbbcccc, 0x81828384c5c6c7c8) },
     3568        {   /*src2*/ RTUINT256_INIT_C(0x4d09f02a6cdc73d5, 0x3ef417c8666b3fe6, 0xb4212fa8564c9ba2, 0x9c5ce073930996bb),
     3569            /*src1*/ RTUINT256_INIT_C(0x1eddddac09633294, 0xf95c8eec40725633, 0x8800e95bbf9962c3, 0x43d3cda0238499fd),
     3570            /* => */ RTUINT256_INIT_C(0x0000000000000000, 0x0000000000000000, 0x8800e95bbf9962c3, 0x9c5ce073930996bb) },
     3571    };
     3572    static BS3CPUINSTR3_TEST1_VALUES_T const s_aValuesSt[] =
     3573    {
     3574        {   /*src2*/ RTUINT256_INIT_C(0, 0, 0, 0),
     3575            /*src1*/ RTUINT256_INIT_C(0, 0, 0, 0),
     3576            /* => */ RTUINT256_INIT_C(0, 0, 0, 0) },
     3577        {   /*src2*/ RTUINT256_INIT_C(0xf1f2f3f4f5f6f7f8, 0xe1e2e3e4e5e6e7e8, 0xd1d2d3d4d5d6d7d8, 0xc1c2c3c4c5c6c7c8),
     3578            /*src1*/ RTUINT256_INIT_C(0xb1b2b3b4b5b6b7b8, 0xa1a2a3a4a5a6a7a8, 0x9192939495969798, 0x8182838485868788),
     3579            /* => */ RTUINT256_INIT_C(0x0000000000000000, 0x0000000000000000, 0x9192939495969798, 0xc1c2c3c4c5c6c7c8) },
     3580        {   /*src2*/ RTUINT256_INIT_C(0x5555666677778888, 0x1111222233334444, 0x1111222233334444, 0x81828384c5c6c7c8),
     3581            /*src1*/ RTUINT256_INIT_C(0xddddeeeeffff0000, 0x9999aaaabbbbcccc, 0x9999aaaabbbbcccc, 0xddddeeeeffff0000),
     3582            /* => */ RTUINT256_INIT_C(0x0000000000000000, 0x0000000000000000, 0x9999aaaabbbbcccc, 0x81828384c5c6c7c8) },
     3583        {   /*src2*/ RTUINT256_INIT_C(0x4d09f02a6cdc73d5, 0x3ef417c8666b3fe6, 0xb4212fa8564c9ba2, 0x9c5ce073930996bb),
     3584            /*src1*/ RTUINT256_INIT_C(0x1eddddac09633294, 0xf95c8eec40725633, 0x8800e95bbf9962c3, 0x43d3cda0238499fd),
     3585            /* => */ RTUINT256_INIT_C(0x0000000000000000, 0x0000000000000000, 0x8800e95bbf9962c3, 0x9c5ce073930996bb) },
     3586    };
     3587
     3588    static BS3CPUINSTR3_TEST1_T const s_aTests16[] =
     3589    {
     3590        {  bs3CpuInstr3_movlps_XMM1_FSxBX_icebp_c16,        X86_XCPT_AC, RM_MEM64, T_SSE,         1,   1, 255, RT_ELEMENTS(s_aValuesLd), s_aValuesLd },
     3591        {  bs3CpuInstr3_movlps_FSxBX_XMM1_icebp_c16,        X86_XCPT_AC, RM_MEM64, T_SSE,       255, 128,   1, RT_ELEMENTS(s_aValuesSt), s_aValuesSt },
     3592
     3593        {  bs3CpuInstr3_vmovlps_XMM1_XMM2_FSxBX_icebp_c16,  X86_XCPT_AC, RM_MEM64, T_AVX_128,     1,   2, 255, RT_ELEMENTS(s_aValuesLd), s_aValuesLd },
     3594        {  bs3CpuInstr3_vmovlps_FSxBX_XMM1_icebp_c16,       X86_XCPT_AC, RM_MEM64, T_AVX_128,   255, 128,   1, RT_ELEMENTS(s_aValuesSt), s_aValuesSt},
     3595    };
     3596    static BS3CPUINSTR3_TEST1_T const s_aTests32[] =
     3597    {
     3598        {  bs3CpuInstr3_movlps_XMM1_FSxBX_icebp_c32,        X86_XCPT_AC, RM_MEM64, T_SSE,         1,   1, 255, RT_ELEMENTS(s_aValuesLd), s_aValuesLd },
     3599        {  bs3CpuInstr3_movlps_FSxBX_XMM1_icebp_c32,        X86_XCPT_AC, RM_MEM64, T_SSE,       255, 128,   1, RT_ELEMENTS(s_aValuesSt), s_aValuesSt },
     3600
     3601        {  bs3CpuInstr3_vmovlps_XMM1_XMM2_FSxBX_icebp_c32,  X86_XCPT_AC, RM_MEM64, T_AVX_128,     1,   2, 255, RT_ELEMENTS(s_aValuesLd), s_aValuesLd },
     3602        {  bs3CpuInstr3_vmovlps_FSxBX_XMM1_icebp_c32,       X86_XCPT_AC, RM_MEM64, T_AVX_128,   255, 128,   1, RT_ELEMENTS(s_aValuesSt), s_aValuesSt},
     3603    };
     3604    static BS3CPUINSTR3_TEST1_T const s_aTests64[] =
     3605    {
     3606        {  bs3CpuInstr3_movlps_XMM1_FSxBX_icebp_c64,        X86_XCPT_AC, RM_MEM64, T_SSE,         1,   1, 255, RT_ELEMENTS(s_aValuesLd), s_aValuesLd },
     3607        {  bs3CpuInstr3_movlps_XMM8_FSxBX_icebp_c64,        X86_XCPT_AC, RM_MEM64, T_SSE,         8,   8, 255, RT_ELEMENTS(s_aValuesLd), s_aValuesLd },
     3608        {  bs3CpuInstr3_movlps_FSxBX_XMM1_icebp_c64,        X86_XCPT_AC, RM_MEM64, T_SSE,       255, 128,   1, RT_ELEMENTS(s_aValuesSt), s_aValuesSt },
     3609        {  bs3CpuInstr3_movlps_FSxBX_XMM11_icebp_c64,       X86_XCPT_AC, RM_MEM64, T_SSE,       255, 128,  11, RT_ELEMENTS(s_aValuesSt), s_aValuesSt },
     3610
     3611        {  bs3CpuInstr3_vmovlps_XMM1_XMM2_FSxBX_icebp_c64,  X86_XCPT_AC, RM_MEM64, T_AVX_128,     1,   2, 255, RT_ELEMENTS(s_aValuesLd), s_aValuesLd },
     3612        {  bs3CpuInstr3_vmovlps_XMM10_XMM14_FSxBX_icebp_c64,X86_XCPT_AC, RM_MEM64, T_AVX_128,    10,  14, 255, RT_ELEMENTS(s_aValuesLd), s_aValuesLd },
     3613        {  bs3CpuInstr3_vmovlps_FSxBX_XMM1_icebp_c64,       X86_XCPT_AC, RM_MEM64, T_AVX_128,   255, 128,   1, RT_ELEMENTS(s_aValuesSt), s_aValuesSt},
     3614        {  bs3CpuInstr3_vmovlps_FSxBX_XMM9_icebp_c64,       X86_XCPT_AC, RM_MEM64, T_AVX_128,   255, 128,   9, RT_ELEMENTS(s_aValuesSt), s_aValuesSt},
     3615    };
     3616    static BS3CPUINSTR3_TEST1_MODE_T const s_aTests[3] = BS3CPUINSTR3_TEST1_MODES_INIT(s_aTests16, s_aTests32, s_aTests64);
     3617    unsigned const                         iTest       = BS3CPUINSTR3_TEST_MODES_INDEX(bMode);
     3618    return bs3CpuInstr3_WorkerTestType1(bMode, s_aTests[iTest].paTests, s_aTests[iTest].cTests,
     3619                                        g_aXcptConfig5, RT_ELEMENTS(g_aXcptConfig5));
     3620}
     3621
    35383622
    35393623
     
    47184802    static const BS3TESTMODEBYONEENTRY g_aTests[] =
    47194803    {
    4720 #define ALL_TESTS
     4804//#define ALL_TESTS
    47214805#if defined(ALL_TESTS)
    47224806        { "[v]andps/[v]andpd/[v]pand",                      bs3CpuInstr3_v_andps_andpd_pand, 0 },
     
    47654849        { "[v]movss",                                       bs3CpuInstr3_v_movss, 0 },
    47664850        { "[v]movsd",                                       bs3CpuInstr3_v_movsd, 0 },
     4851        { "[v]movlps",                                      bs3CpuInstr3_v_movlps, 0 },
    47674852#endif
    47684853    };
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