VirtualBox

Ignore:
Timestamp:
Aug 7, 2022 7:23:02 PM (3 years ago)
Author:
vboxsync
Message:

ValidationKit/bs3-cpu-instr-3: Add simple [v]pmuldq instructions testcase, 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

    r96095 r96100  
    21482148
    21492149;
    2150 ; [V]PSADDBW
     2150; [V]PSADBW
    21512151;
    21522152EMIT_INSTR_PLUS_ICEBP   psadbw,  MM1, MM2
     
    21672167 %endif
    21682168
     2169;
     2170; [V]PMULDQ
     2171;
     2172EMIT_INSTR_PLUS_ICEBP   pmuldq,  XMM1, XMM2
     2173EMIT_INSTR_PLUS_ICEBP   pmuldq,  XMM1, FSxBX
     2174EMIT_INSTR_PLUS_ICEBP   vpmuldq, XMM1, XMM2, XMM3
     2175EMIT_INSTR_PLUS_ICEBP   vpmuldq, XMM1, XMM2, FSxBX
     2176EMIT_INSTR_PLUS_ICEBP   vpmuldq, YMM1, YMM2, YMM3
     2177EMIT_INSTR_PLUS_ICEBP   vpmuldq, YMM1, YMM2, FSxBX
     2178 %if TMPL_BITS == 64
     2179EMIT_INSTR_PLUS_ICEBP   pmuldq,  XMM8, XMM9
     2180EMIT_INSTR_PLUS_ICEBP   pmuldq,  XMM8, FSxBX
     2181EMIT_INSTR_PLUS_ICEBP   vpmuldq, XMM8, XMM9, XMM10
     2182EMIT_INSTR_PLUS_ICEBP   vpmuldq, XMM8, XMM9, FSxBX
     2183EMIT_INSTR_PLUS_ICEBP   vpmuldq, YMM8, YMM9, YMM10
     2184EMIT_INSTR_PLUS_ICEBP   vpmuldq, YMM8, YMM9, FSxBX
     2185 %endif
     2186
    21692187
    21702188%endif ; BS3_INSTANTIATING_CMN
  • trunk/src/VBox/ValidationKit/bootsectors/bs3-cpu-instr-3.c32

    r96095 r96100  
    60426042        {  bs3CpuInstr3_vpsadbw_YMM8_YMM9_YMM10_icebp_c64, 255,         RM_REG, T_AVX2_256,  8, 9,  10, RT_ELEMENTS(s_aValues),  s_aValues },
    60436043        {  bs3CpuInstr3_vpsadbw_YMM8_YMM9_FSxBX_icebp_c64, X86_XCPT_DB, RM_MEM, T_AVX2_256,  8, 9, 255, RT_ELEMENTS(s_aValues),  s_aValues },
     6044    };
     6045    static BS3CPUINSTR3_TEST1_MODE_T const s_aTests[3] = BS3CPUINSTR3_TEST1_MODES_INIT(s_aTests16, s_aTests32, s_aTests64);
     6046    unsigned const                         iTest       = BS3CPUINSTR3_TEST_MODES_INDEX(bMode);
     6047    return bs3CpuInstr3_WorkerTestType1(bMode, s_aTests[iTest].paTests, s_aTests[iTest].cTests,
     6048                                        g_aXcptConfig4, RT_ELEMENTS(g_aXcptConfig4));
     6049}
     6050
     6051
     6052/*
     6053 * [V]PMULDQ  - Multiply packed signed double word integers.
     6054 */
     6055BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_pmuldq_XMM1_XMM2_icebp);
     6056BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_pmuldq_XMM1_FSxBX_icebp);
     6057extern FNBS3FAR             bs3CpuInstr3_pmuldq_XMM8_XMM9_icebp_c64;
     6058extern FNBS3FAR             bs3CpuInstr3_pmuldq_XMM8_FSxBX_icebp_c64;
     6059BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_vpmuldq_XMM1_XMM2_XMM3_icebp);
     6060BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_vpmuldq_XMM1_XMM2_FSxBX_icebp);
     6061extern FNBS3FAR             bs3CpuInstr3_vpmuldq_XMM8_XMM9_XMM10_icebp_c64;
     6062extern FNBS3FAR             bs3CpuInstr3_vpmuldq_XMM8_XMM9_FSxBX_icebp_c64;
     6063BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_vpmuldq_YMM1_YMM2_YMM3_icebp);
     6064BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_vpmuldq_YMM1_YMM2_FSxBX_icebp);
     6065extern FNBS3FAR             bs3CpuInstr3_vpmuldq_YMM8_YMM9_YMM10_icebp_c64;
     6066extern FNBS3FAR             bs3CpuInstr3_vpmuldq_YMM8_YMM9_FSxBX_icebp_c64;
     6067
     6068BS3_DECL_FAR(uint8_t) bs3CpuInstr3_v_pmuldq(uint8_t bMode)
     6069{
     6070    static BS3CPUINSTR3_TEST1_VALUES_T const s_aValues[] =
     6071    {
     6072        {   /*src2*/ RTUINT256_INIT_C(0, 0, 0, 0),
     6073            /*src1*/ RTUINT256_INIT_C(0, 0, 0, 0),
     6074            /* => */ RTUINT256_INIT_C(0, 0, 0, 0) },
     6075        {   /*src2*/ RTUINT256_INIT_C(0xf1f2f3f4f5f6f7f8, 0xe1e2e3e4e5e6e7e8, 0xd1d2d3d4d5d6d7d8, 0xc1c2c3c4c5c6c7c8),
     6076            /*src1*/ RTUINT256_INIT_C(0xb1b2b3b4b5b6b7b8, 0xa1a2a3a4a5a6a7a8, 0x9192939495969798, 0x8182838485868788),
     6077            /* => */ RTUINT256_INIT_C(0x02e97bbaf7148240, 0x0935ee3369408840, 0x118666b3e1709040, 0x1bdae53c5fa49a40) },
     6078        {   /*src2*/ RTUINT256_INIT_C(0x4d09f02a6cdc73d5, 0x3ef417c8666b3fe6, 0xb4212fa8564c9ba2, 0x9c5ce073930996bb),
     6079            /*src1*/ RTUINT256_INIT_C(0x1eddddac09633294, 0xf95c8eec40725633, 0x8800e95bbf9962c3, 0x43d3cda0238499fd),
     6080            /* => */ RTUINT256_INIT_C(0x03fdeed546719124, 0x19c88e386340fed2, 0xea4a418ff1c09066, 0xf0e1df0254fbb9cf) },
     6081    };
     6082
     6083    static BS3CPUINSTR3_TEST1_T const s_aTests16[] =
     6084    {
     6085        {  bs3CpuInstr3_pmuldq_XMM1_XMM2_icebp_c16,        255,         RM_REG, T_SSE4_1,    1, 1,   2, RT_ELEMENTS(s_aValues),  s_aValues },
     6086        {  bs3CpuInstr3_pmuldq_XMM1_FSxBX_icebp_c16,       255,         RM_MEM, T_SSE4_1,    1, 1, 255, RT_ELEMENTS(s_aValues),  s_aValues },
     6087        {  bs3CpuInstr3_vpmuldq_XMM1_XMM2_XMM3_icebp_c16,  255,         RM_REG, T_AVX_128,   1, 2,   3, RT_ELEMENTS(s_aValues),  s_aValues },
     6088        {  bs3CpuInstr3_vpmuldq_XMM1_XMM2_FSxBX_icebp_c16, X86_XCPT_DB, RM_MEM, T_AVX_128,   1, 2, 255, RT_ELEMENTS(s_aValues),  s_aValues },
     6089        {  bs3CpuInstr3_vpmuldq_YMM1_YMM2_YMM3_icebp_c16,  255,         RM_REG, T_AVX2_256,  1, 2,   3, RT_ELEMENTS(s_aValues),  s_aValues },
     6090        {  bs3CpuInstr3_vpmuldq_YMM1_YMM2_FSxBX_icebp_c16, X86_XCPT_DB, RM_MEM, T_AVX2_256,  1, 2, 255, RT_ELEMENTS(s_aValues),  s_aValues },
     6091    };
     6092    static BS3CPUINSTR3_TEST1_T const s_aTests32[] =
     6093    {
     6094        {  bs3CpuInstr3_pmuldq_XMM1_XMM2_icebp_c32,        255,         RM_REG, T_SSE4_1,    1, 1,   2, RT_ELEMENTS(s_aValues),  s_aValues },
     6095        {  bs3CpuInstr3_pmuldq_XMM1_FSxBX_icebp_c32,       255,         RM_MEM, T_SSE4_1,    1, 1, 255, RT_ELEMENTS(s_aValues),  s_aValues },
     6096        {  bs3CpuInstr3_vpmuldq_XMM1_XMM2_XMM3_icebp_c32,  255,         RM_REG, T_AVX_128,   1, 2,   3, RT_ELEMENTS(s_aValues),  s_aValues },
     6097        {  bs3CpuInstr3_vpmuldq_XMM1_XMM2_FSxBX_icebp_c32, X86_XCPT_DB, RM_MEM, T_AVX_128,   1, 2, 255, RT_ELEMENTS(s_aValues),  s_aValues },
     6098        {  bs3CpuInstr3_vpmuldq_YMM1_YMM2_YMM3_icebp_c32,  255,         RM_REG, T_AVX2_256,  1, 2,   3, RT_ELEMENTS(s_aValues),  s_aValues },
     6099        {  bs3CpuInstr3_vpmuldq_YMM1_YMM2_FSxBX_icebp_c32, X86_XCPT_DB, RM_MEM, T_AVX2_256,  1, 2, 255, RT_ELEMENTS(s_aValues),  s_aValues },
     6100    };
     6101    static BS3CPUINSTR3_TEST1_T const s_aTests64[] =
     6102    {
     6103        {  bs3CpuInstr3_pmuldq_XMM1_XMM2_icebp_c64,        255,         RM_REG, T_SSE4_1,    1, 1,   2, RT_ELEMENTS(s_aValues),  s_aValues },
     6104        {  bs3CpuInstr3_pmuldq_XMM1_FSxBX_icebp_c64,       255,         RM_MEM, T_SSE4_1,    1, 1, 255, RT_ELEMENTS(s_aValues),  s_aValues },
     6105        {  bs3CpuInstr3_pmuldq_XMM8_XMM9_icebp_c64,        255,         RM_REG, T_SSE4_1,    8, 8,   9, RT_ELEMENTS(s_aValues),  s_aValues },
     6106        {  bs3CpuInstr3_pmuldq_XMM8_FSxBX_icebp_c64,       255,         RM_MEM, T_SSE4_1,    8, 8, 255, RT_ELEMENTS(s_aValues),  s_aValues },
     6107        {  bs3CpuInstr3_vpmuldq_XMM1_XMM2_XMM3_icebp_c64,  255,         RM_REG, T_AVX_128,   1, 2,   3, RT_ELEMENTS(s_aValues),  s_aValues },
     6108        {  bs3CpuInstr3_vpmuldq_XMM1_XMM2_FSxBX_icebp_c64, X86_XCPT_DB, RM_MEM, T_AVX_128,   1, 2, 255, RT_ELEMENTS(s_aValues),  s_aValues },
     6109        {  bs3CpuInstr3_vpmuldq_XMM8_XMM9_XMM10_icebp_c64, 255,         RM_REG, T_AVX_128,   8, 9,  10, RT_ELEMENTS(s_aValues),  s_aValues },
     6110        {  bs3CpuInstr3_vpmuldq_XMM8_XMM9_FSxBX_icebp_c64, X86_XCPT_DB, RM_MEM, T_AVX_128,   8, 9, 255, RT_ELEMENTS(s_aValues),  s_aValues },
     6111        {  bs3CpuInstr3_vpmuldq_YMM1_YMM2_YMM3_icebp_c64,  255,         RM_REG, T_AVX2_256,  1, 2,   3, RT_ELEMENTS(s_aValues),  s_aValues },
     6112        {  bs3CpuInstr3_vpmuldq_YMM1_YMM2_FSxBX_icebp_c64, X86_XCPT_DB, RM_MEM, T_AVX2_256,  1, 2, 255, RT_ELEMENTS(s_aValues),  s_aValues },
     6113        {  bs3CpuInstr3_vpmuldq_YMM8_YMM9_YMM10_icebp_c64, 255,         RM_REG, T_AVX2_256,  8, 9,  10, RT_ELEMENTS(s_aValues),  s_aValues },
     6114        {  bs3CpuInstr3_vpmuldq_YMM8_YMM9_FSxBX_icebp_c64, X86_XCPT_DB, RM_MEM, T_AVX2_256,  8, 9, 255, RT_ELEMENTS(s_aValues),  s_aValues },
    60446115    };
    60456116    static BS3CPUINSTR3_TEST1_MODE_T const s_aTests[3] = BS3CPUINSTR3_TEST1_MODES_INIT(s_aTests16, s_aTests32, s_aTests64);
     
    87468817        { "[v]pmaddubsw",                                   bs3CpuInstr3_v_pmaddubsw, 0 },
    87478818#endif
    8748 #if defined(ALL_TESTS)
     8819#if  defined(ALL_TESTS)
    87498820        { "[v]pmulhrsw",                                    bs3CpuInstr3_v_pmulhrsw, 0 },
    87508821        { "[v]psadbw",                                      bs3CpuInstr3_v_psadbw,   0 },
     8822        { "[v]pmuldq",                                      bs3CpuInstr3_v_pmuldq,   0 },
    87518823#endif
    87528824    };
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