VirtualBox

Ignore:
Timestamp:
Jul 6, 2022 7:42:19 PM (3 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
152160
Message:

ValKit/bs3-cpu-instr-3: Simple [v]movsldup & [v]movddup 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

    r95535 r95536  
    10551055 %endif
    10561056
     1057;
     1058; [V]MOVSLDUP
     1059;
     1060EMIT_INSTR_PLUS_ICEBP movsldup,  XMM1, XMM2
     1061EMIT_INSTR_PLUS_ICEBP movsldup,  XMM1, FSxBX
     1062EMIT_INSTR_PLUS_ICEBP vmovsldup, XMM1, XMM2
     1063EMIT_INSTR_PLUS_ICEBP vmovsldup, XMM1, FSxBX
     1064EMIT_INSTR_PLUS_ICEBP vmovsldup, YMM1, YMM2
     1065EMIT_INSTR_PLUS_ICEBP vmovsldup, YMM1, FSxBX
     1066 %if TMPL_BITS == 64
     1067EMIT_INSTR_PLUS_ICEBP movsldup,  XMM8,  XMM12
     1068EMIT_INSTR_PLUS_ICEBP movsldup,  XMM10, FSxBX
     1069EMIT_INSTR_PLUS_ICEBP vmovsldup, XMM7,  XMM14
     1070EMIT_INSTR_PLUS_ICEBP vmovsldup, XMM11, FSxBX
     1071EMIT_INSTR_PLUS_ICEBP vmovsldup, YMM12, YMM8
     1072EMIT_INSTR_PLUS_ICEBP vmovsldup, YMM12, FSxBX
     1073 %endif
     1074
     1075;
     1076; [V]MOVDDUP
     1077;
     1078EMIT_INSTR_PLUS_ICEBP movddup,  XMM1, XMM2
     1079EMIT_INSTR_PLUS_ICEBP movddup,  XMM1, FSxBX
     1080EMIT_INSTR_PLUS_ICEBP vmovddup, XMM1, XMM2
     1081EMIT_INSTR_PLUS_ICEBP vmovddup, XMM1, FSxBX
     1082EMIT_INSTR_PLUS_ICEBP vmovddup, YMM1, YMM2
     1083EMIT_INSTR_PLUS_ICEBP vmovddup, YMM1, FSxBX
     1084 %if TMPL_BITS == 64
     1085EMIT_INSTR_PLUS_ICEBP movddup,  XMM8,  XMM12
     1086EMIT_INSTR_PLUS_ICEBP movddup,  XMM10, FSxBX
     1087EMIT_INSTR_PLUS_ICEBP vmovddup, XMM7,  XMM14
     1088EMIT_INSTR_PLUS_ICEBP vmovddup, XMM11, FSxBX
     1089EMIT_INSTR_PLUS_ICEBP vmovddup, YMM12, YMM8
     1090EMIT_INSTR_PLUS_ICEBP vmovddup, YMM12, FSxBX
     1091 %endif
     1092
     1093
    10571094
    10581095%endif ; BS3_INSTANTIATING_CMN
  • trunk/src/VBox/ValidationKit/bootsectors/bs3-cpu-instr-3.c32

    r95535 r95536  
    48634863
    48644864
     4865/*
     4866 * [V]MOVSLDUP - Duplicate even single precision floating-point values.
     4867 */
     4868BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_movsldup_XMM1_XMM2_icebp);
     4869BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_movsldup_XMM1_FSxBX_icebp);
     4870extern FNBS3FAR             bs3CpuInstr3_movsldup_XMM8_XMM12_icebp_c64;
     4871extern FNBS3FAR             bs3CpuInstr3_movsldup_XMM10_FSxBX_icebp_c64;
     4872BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_vmovsldup_XMM1_XMM2_icebp);
     4873BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_vmovsldup_XMM1_FSxBX_icebp);
     4874extern FNBS3FAR             bs3CpuInstr3_vmovsldup_XMM7_XMM14_icebp_c64;
     4875extern FNBS3FAR             bs3CpuInstr3_vmovsldup_XMM11_FSxBX_icebp_c64;
     4876BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_vmovsldup_YMM1_YMM2_icebp);
     4877BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_vmovsldup_YMM1_FSxBX_icebp);
     4878extern FNBS3FAR             bs3CpuInstr3_vmovsldup_YMM12_YMM8_icebp_c64;
     4879extern FNBS3FAR             bs3CpuInstr3_vmovsldup_YMM12_FSxBX_icebp_c64;
     4880
     4881BS3_DECL_FAR(uint8_t) bs3CpuInstr3_v_movsldup(uint8_t bMode)
     4882{
     4883    static BS3CPUINSTR3_TEST3_VALUES_T const s_aValues[] =
     4884    {
     4885        {            RTUINT256_INIT_C(0, 0, 0, 0),
     4886            /* => */ RTUINT256_INIT_C(0, 0, 0, 0) },
     4887        {            RTUINT256_INIT_C(0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff),
     4888            /* => */ RTUINT256_INIT_C(0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff) },
     4889        {            RTUINT256_INIT_C(0x9999aaaabbbbcccc, 0xddddeeeeffff2121, 0x1111222233334444, 0x5555666677778888),
     4890            /* => */ RTUINT256_INIT_C(0xbbbbccccbbbbcccc, 0xffff2121ffff2121, 0x3333444433334444, 0x7777888877778888) },
     4891        {            RTUINT256_INIT_C(0x4d09f02a6cdc73d5, 0x3ef417c8666b3fe6, 0xb4212fa8564c9ba2, 0x9c5ce073930996bb),
     4892            /* => */ RTUINT256_INIT_C(0x6cdc73d56cdc73d5, 0x666b3fe6666b3fe6, 0x564c9ba2564c9ba2, 0x930996bb930996bb) },
     4893    };
     4894
     4895    static BS3CPUINSTR3_TEST3_T const s_aTests16[] =
     4896    {
     4897        {  bs3CpuInstr3_movsldup_XMM1_XMM2_icebp_c16,    255,         RM_REG, T_SSE3,      1,   2, RT_ELEMENTS(s_aValues), s_aValues },
     4898        {  bs3CpuInstr3_movsldup_XMM1_FSxBX_icebp_c16,   X86_XCPT_DB, RM_MEM, T_SSE3,      1, 255, RT_ELEMENTS(s_aValues), s_aValues },
     4899
     4900        {  bs3CpuInstr3_vmovsldup_XMM1_XMM2_icebp_c16,   255,         RM_REG, T_AVX_128,   1,   2, RT_ELEMENTS(s_aValues), s_aValues },
     4901        {  bs3CpuInstr3_vmovsldup_XMM1_FSxBX_icebp_c16,  X86_XCPT_DB, RM_MEM, T_AVX_128,   1, 255, RT_ELEMENTS(s_aValues), s_aValues },
     4902
     4903        {  bs3CpuInstr3_vmovsldup_YMM1_YMM2_icebp_c16,   255,         RM_REG, T_AVX_256,   1,   2, RT_ELEMENTS(s_aValues), s_aValues },
     4904        {  bs3CpuInstr3_vmovsldup_YMM1_FSxBX_icebp_c16,  X86_XCPT_DB, RM_MEM, T_AVX_256,   1, 255, RT_ELEMENTS(s_aValues), s_aValues },
     4905    };
     4906    static BS3CPUINSTR3_TEST3_T const s_aTests32[] =
     4907    {
     4908        {  bs3CpuInstr3_movsldup_XMM1_XMM2_icebp_c32,    255,         RM_REG, T_SSE3,      1,   2, RT_ELEMENTS(s_aValues), s_aValues },
     4909        {  bs3CpuInstr3_movsldup_XMM1_FSxBX_icebp_c32,   X86_XCPT_DB, RM_MEM, T_SSE3,      1, 255, RT_ELEMENTS(s_aValues), s_aValues },
     4910
     4911        {  bs3CpuInstr3_vmovsldup_XMM1_XMM2_icebp_c32,   255,         RM_REG, T_AVX_128,   1,   2, RT_ELEMENTS(s_aValues), s_aValues },
     4912        {  bs3CpuInstr3_vmovsldup_XMM1_FSxBX_icebp_c32,  X86_XCPT_DB, RM_MEM, T_AVX_128,   1, 255, RT_ELEMENTS(s_aValues), s_aValues },
     4913
     4914        {  bs3CpuInstr3_vmovsldup_YMM1_YMM2_icebp_c32,   255,         RM_REG, T_AVX_256,   1,   2, RT_ELEMENTS(s_aValues), s_aValues },
     4915        {  bs3CpuInstr3_vmovsldup_YMM1_FSxBX_icebp_c32,  X86_XCPT_DB, RM_MEM, T_AVX_256,   1, 255, RT_ELEMENTS(s_aValues), s_aValues },
     4916    };
     4917    static BS3CPUINSTR3_TEST3_T const s_aTests64[] =
     4918    {
     4919        {  bs3CpuInstr3_movsldup_XMM1_XMM2_icebp_c64,    255,         RM_REG, T_SSE3,      1,   2, RT_ELEMENTS(s_aValues), s_aValues },
     4920        {  bs3CpuInstr3_movsldup_XMM8_XMM12_icebp_c64,   255,         RM_REG, T_SSE3,      8,  12, RT_ELEMENTS(s_aValues), s_aValues },
     4921        {  bs3CpuInstr3_movsldup_XMM1_FSxBX_icebp_c64,   X86_XCPT_DB, RM_MEM, T_SSE3,      1, 255, RT_ELEMENTS(s_aValues), s_aValues },
     4922        {  bs3CpuInstr3_movsldup_XMM10_FSxBX_icebp_c64,  X86_XCPT_DB, RM_MEM, T_SSE3,     10, 255, RT_ELEMENTS(s_aValues), s_aValues },
     4923
     4924        {  bs3CpuInstr3_vmovsldup_XMM1_XMM2_icebp_c64,   255,         RM_REG, T_AVX_128,   1,   2, RT_ELEMENTS(s_aValues), s_aValues },
     4925        {  bs3CpuInstr3_vmovsldup_XMM7_XMM14_icebp_c64,  255,         RM_REG, T_AVX_128,   7,  14, RT_ELEMENTS(s_aValues), s_aValues },
     4926        {  bs3CpuInstr3_vmovsldup_XMM1_FSxBX_icebp_c64,  X86_XCPT_DB, RM_MEM, T_AVX_128,   1, 255, RT_ELEMENTS(s_aValues), s_aValues },
     4927        {  bs3CpuInstr3_vmovsldup_XMM11_FSxBX_icebp_c64, X86_XCPT_DB, RM_MEM, T_AVX_128,  11, 255, RT_ELEMENTS(s_aValues), s_aValues },
     4928
     4929        {  bs3CpuInstr3_vmovsldup_YMM1_YMM2_icebp_c64,   255,         RM_REG, T_AVX_256,   1,   2, RT_ELEMENTS(s_aValues), s_aValues },
     4930        {  bs3CpuInstr3_vmovsldup_YMM12_YMM8_icebp_c64,  255,         RM_REG, T_AVX_256,  12,   8, RT_ELEMENTS(s_aValues), s_aValues },
     4931        {  bs3CpuInstr3_vmovsldup_YMM1_FSxBX_icebp_c64,  X86_XCPT_DB, RM_MEM, T_AVX_256,   1, 255, RT_ELEMENTS(s_aValues), s_aValues },
     4932        {  bs3CpuInstr3_vmovsldup_YMM12_FSxBX_icebp_c64, X86_XCPT_DB, RM_MEM, T_AVX_256,  12, 255, RT_ELEMENTS(s_aValues), s_aValues },
     4933    };
     4934    static BS3CPUINSTR3_TEST3_MODE_T const s_aTests[3] = BS3CPUINSTR3_TEST3_MODES_INIT(s_aTests16, s_aTests32, s_aTests64);
     4935    unsigned const                         iTest       = BS3CPUINSTR3_TEST_MODES_INDEX(bMode);
     4936    return bs3CpuInstr3_WorkerTestType3(bMode, s_aTests[iTest].paTests, s_aTests[iTest].cTests,
     4937                                        g_aXcptConfig4, RT_ELEMENTS(g_aXcptConfig4), 0 /*cbMaxAlign*/);
     4938}
     4939
     4940
     4941/*
     4942 * [V]MOVDDUP - Duplicate even single precision floating-point values.
     4943 *
     4944 * Similar to MOVSLDUP, but different exception class and unit size.
     4945 */
     4946BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_movddup_XMM1_XMM2_icebp);
     4947BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_movddup_XMM1_FSxBX_icebp);
     4948extern FNBS3FAR             bs3CpuInstr3_movddup_XMM8_XMM12_icebp_c64;
     4949extern FNBS3FAR             bs3CpuInstr3_movddup_XMM10_FSxBX_icebp_c64;
     4950BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_vmovddup_XMM1_XMM2_icebp);
     4951BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_vmovddup_XMM1_FSxBX_icebp);
     4952extern FNBS3FAR             bs3CpuInstr3_vmovddup_XMM7_XMM14_icebp_c64;
     4953extern FNBS3FAR             bs3CpuInstr3_vmovddup_XMM11_FSxBX_icebp_c64;
     4954BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_vmovddup_YMM1_YMM2_icebp);
     4955BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_vmovddup_YMM1_FSxBX_icebp);
     4956extern FNBS3FAR             bs3CpuInstr3_vmovddup_YMM12_YMM8_icebp_c64;
     4957extern FNBS3FAR             bs3CpuInstr3_vmovddup_YMM12_FSxBX_icebp_c64;
     4958
     4959BS3_DECL_FAR(uint8_t) bs3CpuInstr3_v_movddup(uint8_t bMode)
     4960{
     4961    static BS3CPUINSTR3_TEST3_VALUES_T const s_aValues[] =
     4962    {
     4963        {            RTUINT256_INIT_C(0, 0, 0, 0),
     4964            /* => */ RTUINT256_INIT_C(0, 0, 0, 0) },
     4965        {            RTUINT256_INIT_C(0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff),
     4966            /* => */ RTUINT256_INIT_C(0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff) },
     4967        {            RTUINT256_INIT_C(0x9999aaaabbbbcccc, 0xddddeeeeffff2121, 0x1111222233334444, 0x5555666677778888),
     4968            /* => */ RTUINT256_INIT_C(0xddddeeeeffff2121, 0xddddeeeeffff2121, 0x5555666677778888, 0x5555666677778888) },
     4969        {            RTUINT256_INIT_C(0x4d09f02a6cdc73d5, 0x3ef417c8666b3fe6, 0xb4212fa8564c9ba2, 0x9c5ce073930996bb),
     4970            /* => */ RTUINT256_INIT_C(0x3ef417c8666b3fe6, 0x3ef417c8666b3fe6, 0x9c5ce073930996bb, 0x9c5ce073930996bb) },
     4971    };
     4972
     4973    /* Note! Seems the 256-bit variants doesn't generate \#ACs on a 10980XE. WEIRD! */
     4974    static BS3CPUINSTR3_TEST3_T const s_aTests16[] =
     4975    {
     4976        {  bs3CpuInstr3_movddup_XMM1_XMM2_icebp_c16,    255,         RM_REG, T_SSE3,      1,   2, RT_ELEMENTS(s_aValues), s_aValues },
     4977        {  bs3CpuInstr3_movddup_XMM1_FSxBX_icebp_c16,   X86_XCPT_DB, RM_MEM, T_SSE3,      1, 255, RT_ELEMENTS(s_aValues), s_aValues },
     4978
     4979        {  bs3CpuInstr3_vmovddup_XMM1_XMM2_icebp_c16,   255,         RM_REG, T_AVX_128,   1,   2, RT_ELEMENTS(s_aValues), s_aValues },
     4980        {  bs3CpuInstr3_vmovddup_XMM1_FSxBX_icebp_c16,  X86_XCPT_AC, RM_MEM, T_AVX_128,   1, 255, RT_ELEMENTS(s_aValues), s_aValues },
     4981
     4982        {  bs3CpuInstr3_vmovddup_YMM1_YMM2_icebp_c16,   255,         RM_REG, T_AVX_256,   1,   2, RT_ELEMENTS(s_aValues), s_aValues },
     4983        {  bs3CpuInstr3_vmovddup_YMM1_FSxBX_icebp_c16,  X86_XCPT_DB, RM_MEM, T_AVX_256,   1, 255, RT_ELEMENTS(s_aValues), s_aValues },
     4984    };
     4985    static BS3CPUINSTR3_TEST3_T const s_aTests32[] =
     4986    {
     4987        {  bs3CpuInstr3_movddup_XMM1_XMM2_icebp_c32,    255,         RM_REG, T_SSE3,      1,   2, RT_ELEMENTS(s_aValues), s_aValues },
     4988        {  bs3CpuInstr3_movddup_XMM1_FSxBX_icebp_c32,   X86_XCPT_DB, RM_MEM, T_SSE3,      1, 255, RT_ELEMENTS(s_aValues), s_aValues },
     4989
     4990        {  bs3CpuInstr3_vmovddup_XMM1_XMM2_icebp_c32,   255,         RM_REG, T_AVX_128,   1,   2, RT_ELEMENTS(s_aValues), s_aValues },
     4991        {  bs3CpuInstr3_vmovddup_XMM1_FSxBX_icebp_c32,  X86_XCPT_AC, RM_MEM, T_AVX_128,   1, 255, RT_ELEMENTS(s_aValues), s_aValues },
     4992
     4993        {  bs3CpuInstr3_vmovddup_YMM1_YMM2_icebp_c32,   255,         RM_REG, T_AVX_256,   1,   2, RT_ELEMENTS(s_aValues), s_aValues },
     4994        {  bs3CpuInstr3_vmovddup_YMM1_FSxBX_icebp_c32,  X86_XCPT_DB, RM_MEM, T_AVX_256,   1, 255, RT_ELEMENTS(s_aValues), s_aValues },
     4995    };
     4996    static BS3CPUINSTR3_TEST3_T const s_aTests64[] =
     4997    {
     4998        {  bs3CpuInstr3_movddup_XMM1_XMM2_icebp_c64,    255,         RM_REG, T_SSE3,      1,   2, RT_ELEMENTS(s_aValues), s_aValues },
     4999        {  bs3CpuInstr3_movddup_XMM8_XMM12_icebp_c64,   255,         RM_REG, T_SSE3,      8,  12, RT_ELEMENTS(s_aValues), s_aValues },
     5000        {  bs3CpuInstr3_movddup_XMM1_FSxBX_icebp_c64,   X86_XCPT_DB, RM_MEM, T_SSE3,      1, 255, RT_ELEMENTS(s_aValues), s_aValues },
     5001        {  bs3CpuInstr3_movddup_XMM10_FSxBX_icebp_c64,  X86_XCPT_DB, RM_MEM, T_SSE3,     10, 255, RT_ELEMENTS(s_aValues), s_aValues },
     5002
     5003        {  bs3CpuInstr3_vmovddup_XMM1_XMM2_icebp_c64,   255,         RM_REG, T_AVX_128,   1,   2, RT_ELEMENTS(s_aValues), s_aValues },
     5004        {  bs3CpuInstr3_vmovddup_XMM7_XMM14_icebp_c64,  255,         RM_REG, T_AVX_128,   7,  14, RT_ELEMENTS(s_aValues), s_aValues },
     5005        {  bs3CpuInstr3_vmovddup_XMM1_FSxBX_icebp_c64,  X86_XCPT_AC, RM_MEM, T_AVX_128,   1, 255, RT_ELEMENTS(s_aValues), s_aValues },
     5006        {  bs3CpuInstr3_vmovddup_XMM11_FSxBX_icebp_c64, X86_XCPT_AC, RM_MEM, T_AVX_128,  11, 255, RT_ELEMENTS(s_aValues), s_aValues },
     5007
     5008        {  bs3CpuInstr3_vmovddup_YMM1_YMM2_icebp_c64,   255,         RM_REG, T_AVX_256,   1,   2, RT_ELEMENTS(s_aValues), s_aValues },
     5009        {  bs3CpuInstr3_vmovddup_YMM12_YMM8_icebp_c64,  255,         RM_REG, T_AVX_256,  12,   8, RT_ELEMENTS(s_aValues), s_aValues },
     5010        {  bs3CpuInstr3_vmovddup_YMM1_FSxBX_icebp_c64,  X86_XCPT_DB, RM_MEM, T_AVX_256,   1, 255, RT_ELEMENTS(s_aValues), s_aValues },
     5011        {  bs3CpuInstr3_vmovddup_YMM12_FSxBX_icebp_c64, X86_XCPT_DB, RM_MEM, T_AVX_256,  12, 255, RT_ELEMENTS(s_aValues), s_aValues },
     5012    };
     5013    static BS3CPUINSTR3_TEST3_MODE_T const s_aTests[3] = BS3CPUINSTR3_TEST3_MODES_INIT(s_aTests16, s_aTests32, s_aTests64);
     5014    unsigned const                         iTest       = BS3CPUINSTR3_TEST_MODES_INDEX(bMode);
     5015    return bs3CpuInstr3_WorkerTestType3(bMode, s_aTests[iTest].paTests, s_aTests[iTest].cTests,
     5016                                        g_aXcptConfig5, RT_ELEMENTS(g_aXcptConfig5), 0 /*cbMaxAlign*/);
     5017}
     5018
     5019
    48655020/**
    48665021 * The 32-bit protected mode main function.
     
    48785033    static const BS3TESTMODEBYONEENTRY g_aTests[] =
    48795034    {
    4880 #define ALL_TESTS
     5035//#define ALL_TESTS
    48815036#if defined(ALL_TESTS)
    48825037        { "[v]andps/[v]andpd/[v]pand",                      bs3CpuInstr3_v_andps_andpd_pand, 0 },
     
    49285083        { "[v]movlps/[v]movlpd",                            bs3CpuInstr3_v_movlps_movlpd, 0 },
    49295084#endif
     5085        { "[v]movsldup",                                    bs3CpuInstr3_v_movsldup, 0 },
     5086        { "[v]movddup",                                     bs3CpuInstr3_v_movddup, 0 },
    49305087    };
    49315088    Bs3TestInit("bs3-cpu-instr-3");
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