VirtualBox

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


Ignore:
Timestamp:
Mar 6, 2024 7:17:34 AM (12 months ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
162064
Message:

ValidationKit/bootsectors: Implement testcases for [v]pmaddwd instructions, 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

    r103695 r103697  
    26552655EMIT_INSTR_PLUS_ICEBP_C64   vpermilpd, YMM8, FSxBX, 091h
    26562656
     2657;
     2658; [V]PMADDUBSW
     2659;
     2660EMIT_INSTR_PLUS_ICEBP_MMX      pmaddwd
     2661EMIT_INSTR_PLUS_ICEBP_XMM      pmaddwd
     2662EMIT_INSTR_PLUS_ICEBP_XMM_123  vpmaddwd
     2663EMIT_INSTR_PLUS_ICEBP_YMM_123  vpmaddwd
     2664EMIT_INSTR_PLUS_ICEBP_XMM_89   pmaddwd
     2665EMIT_INSTR_PLUS_ICEBP_XMM_890  vpmaddwd
     2666EMIT_INSTR_PLUS_ICEBP_YMM_890  vpmaddwd
     2667
    26572668%endif ; BS3_INSTANTIATING_CMN
    26582669
  • trunk/src/VBox/ValidationKit/bootsectors/bs3-cpu-instr-3.c32

    r103694 r103697  
    1252712527
    1252812528
    12529 
     12529/*
     12530 * [V]PMADDWD  - Multiply and add packed signed word integers.
     12531 */
     12532BS3_DECL_FAR(uint8_t) bs3CpuInstr3_v_pmaddwd(uint8_t bMode)
     12533{
     12534    static BS3CPUINSTR3_TEST1_VALUES_T const s_aValues64W[] =
     12535    {
     12536        {   /*src2*/ RTUINT256_INIT_C(0, 0, 0, 0),
     12537            /*src1*/ RTUINT256_INIT_C(0, 0, 0, 0),
     12538            /* => */ RTUINT256_INIT_C(0, 0, 0, 0) },
     12539        {   /*src2*/ RTUINT256_INIT_C(0xf1f2f3f4f5f6f7f8, 0xe1e2e3e4e5e6e7e8, 0xd1d2d3d4d5d6d7d8, 0xc1c2c3c4c5c6c7c8),
     12540            /*src1*/ RTUINT256_INIT_C(0xb1b2b3b4b5b6b7b8, 0xa1a2a3a4a5a6a7a8, 0x9192939495969798, 0x8182838485868788),
     12541            /* => */ RTUINT256_INIT_C(                 1,                  2,                  3, 0x3c0b6394364ffde4) },
     12542        {   /*src2*/ RTUINT256_INIT_C(0x4d09f02a6cdc73d5, 0x3ef417c8666b3fe6, 0xb4212fa8564c9ba2, 0x9c5ce073930996bb),
     12543            /*src1*/ RTUINT256_INIT_C(0x1eddddac09633294, 0xf95c8eec40725633, 0x8800e95bbf9962c3, 0x43d3cda0238499fd),
     12544            /* => */ RTUINT256_INIT_C(                 5,                  6,                  7, 0xebcf52b41ad4c573) },
     12545    };
     12546    static BS3CPUINSTR3_TEST1_VALUES_T const s_aValues128W[] =
     12547    {
     12548        {   /*src2*/ RTUINT256_INIT_C(0, 0, 0, 0),
     12549            /*src1*/ RTUINT256_INIT_C(0, 0, 0, 0),
     12550            /* => */ RTUINT256_INIT_C(0, 0, 0, 0) },
     12551        {   /*src2*/ RTUINT256_INIT_C(0xf1f2f3f4f5f6f7f8, 0xe1e2e3e4e5e6e7e8, 0xd1d2d3d4d5d6d7d8, 0xc1c2c3c4c5c6c7c8),
     12552            /*src1*/ RTUINT256_INIT_C(0xb1b2b3b4b5b6b7b8, 0xa1a2a3a4a5a6a7a8, 0x9192939495969798, 0x8182838485868788),
     12553            /* => */ RTUINT256_INIT_C(                 9,                 10, 0x26a0ce5421e769a4, 0x3c0b6394364ffde4) },
     12554        {   /*src2*/ RTUINT256_INIT_C(0x4d09f02a6cdc73d5, 0x3ef417c8666b3fe6, 0xb4212fa8564c9ba2, 0x9c5ce073930996bb),
     12555            /*src1*/ RTUINT256_INIT_C(0x1eddddac09633294, 0xf95c8eec40725633, 0x8800e95bbf9962c3, 0x43d3cda0238499fd),
     12556            /* => */ RTUINT256_INIT_C(                13,                 14, 0x1f5960b8c391d7d2, 0xebcf52b41ad4c573) },
     12557    };
     12558    static BS3CPUINSTR3_TEST1_VALUES_T const s_aValues256W[] =
     12559    {
     12560        {   /*src2*/ RTUINT256_INIT_C(0, 0, 0, 0),
     12561            /*src1*/ RTUINT256_INIT_C(0, 0, 0, 0),
     12562            /* => */ RTUINT256_INIT_C(0, 0, 0, 0) },
     12563        {   /*src2*/ RTUINT256_INIT_C(0xf1f2f3f4f5f6f7f8, 0xe1e2e3e4e5e6e7e8, 0xd1d2d3d4d5d6d7d8, 0xc1c2c3c4c5c6c7c8),
     12564            /*src1*/ RTUINT256_INIT_C(0xb1b2b3b4b5b6b7b8, 0xa1a2a3a4a5a6a7a8, 0x9192939495969798, 0x8182838485868788),
     12565            /* => */ RTUINT256_INIT_C(0x07e3afd4052e4d24, 0x153e3d141186d964, 0x26a0ce5421e769a4, 0x3c0b6394364ffde4) },
     12566        {   /*src2*/ RTUINT256_INIT_C(0x4d09f02a6cdc73d5, 0x3ef417c880008000, 0xb4212fa8564c9ba2, 0x9c5ce073930996bb),
     12567            /*src1*/ RTUINT256_INIT_C(0x1eddddac09633294, 0xf95c8eec80008000, 0x8800e95bbf9962c3, 0x43d3cda0238499fd),
     12568            /* => */ RTUINT256_INIT_C(0x0b692cfd1ae06638, 0xf3dcd01080000000, 0x1f5960b8c391d7d2, 0xebcf52b41ad4c573) },
     12569    };
     12570
     12571    static BS3CPUINSTR3_TEST1_T const s_aTests16[] =
     12572    {
     12573        {  bs3CpuInstr3_pmaddwd_MM1_MM2_icebp_c16,          255,         RM_REG, T_MMX,       1, 1,   2, RT_ELEMENTS(s_aValues64W),   s_aValues64W  },
     12574        {  bs3CpuInstr3_pmaddwd_MM1_FSxBX_icebp_c16,        255,         RM_MEM, T_MMX,       1, 1, 255, RT_ELEMENTS(s_aValues64W),   s_aValues64W  },
     12575        {  bs3CpuInstr3_pmaddwd_XMM1_XMM2_icebp_c16,        255,         RM_REG, T_SSE2,      1, 1,   2, RT_ELEMENTS(s_aValues128W),  s_aValues128W },
     12576        {  bs3CpuInstr3_pmaddwd_XMM1_FSxBX_icebp_c16,       255,         RM_MEM, T_SSE2,      1, 1, 255, RT_ELEMENTS(s_aValues128W),  s_aValues128W },
     12577        {  bs3CpuInstr3_vpmaddwd_XMM1_XMM2_XMM3_icebp_c16,  255,         RM_REG, T_AVX_128,   1, 2,   3, RT_ELEMENTS(s_aValues128W),  s_aValues128W },
     12578        {  bs3CpuInstr3_vpmaddwd_XMM1_XMM2_FSxBX_icebp_c16, X86_XCPT_DB, RM_MEM, T_AVX_128,   1, 2, 255, RT_ELEMENTS(s_aValues128W),  s_aValues128W },
     12579        {  bs3CpuInstr3_vpmaddwd_YMM1_YMM2_YMM3_icebp_c16,  255,         RM_REG, T_AVX2_256,  1, 2,   3, RT_ELEMENTS(s_aValues256W),  s_aValues256W },
     12580        {  bs3CpuInstr3_vpmaddwd_YMM1_YMM2_FSxBX_icebp_c16, X86_XCPT_DB, RM_MEM, T_AVX2_256,  1, 2, 255, RT_ELEMENTS(s_aValues256W),  s_aValues256W },
     12581    };
     12582    static BS3CPUINSTR3_TEST1_T const s_aTests32[] =
     12583    {
     12584        {  bs3CpuInstr3_pmaddwd_MM1_MM2_icebp_c32,          255,         RM_REG, T_MMX,       1, 1,   2, RT_ELEMENTS(s_aValues64W),   s_aValues64W },
     12585        {  bs3CpuInstr3_pmaddwd_MM1_FSxBX_icebp_c32,        255,         RM_MEM, T_MMX,       1, 1, 255, RT_ELEMENTS(s_aValues64W),   s_aValues64W },
     12586        {  bs3CpuInstr3_pmaddwd_XMM1_XMM2_icebp_c32,        255,         RM_REG, T_SSE2,      1, 1,   2, RT_ELEMENTS(s_aValues128W),  s_aValues128W },
     12587        {  bs3CpuInstr3_pmaddwd_XMM1_FSxBX_icebp_c32,       255,         RM_MEM, T_SSE2,      1, 1, 255, RT_ELEMENTS(s_aValues128W),  s_aValues128W },
     12588        {  bs3CpuInstr3_vpmaddwd_XMM1_XMM2_XMM3_icebp_c32,  255,         RM_REG, T_AVX_128,   1, 2,   3, RT_ELEMENTS(s_aValues128W),  s_aValues128W },
     12589        {  bs3CpuInstr3_vpmaddwd_XMM1_XMM2_FSxBX_icebp_c32, X86_XCPT_DB, RM_MEM, T_AVX_128,   1, 2, 255, RT_ELEMENTS(s_aValues128W),  s_aValues128W },
     12590        {  bs3CpuInstr3_vpmaddwd_YMM1_YMM2_YMM3_icebp_c32,  255,         RM_REG, T_AVX2_256,  1, 2,   3, RT_ELEMENTS(s_aValues256W),  s_aValues256W },
     12591        {  bs3CpuInstr3_vpmaddwd_YMM1_YMM2_FSxBX_icebp_c32, X86_XCPT_DB, RM_MEM, T_AVX2_256,  1, 2, 255, RT_ELEMENTS(s_aValues256W),  s_aValues256W },
     12592    };
     12593    static BS3CPUINSTR3_TEST1_T const s_aTests64[] =
     12594    {
     12595        {  bs3CpuInstr3_pmaddwd_MM1_MM2_icebp_c64,          255,         RM_REG, T_MMX,       1, 1,   2, RT_ELEMENTS(s_aValues64W),   s_aValues64W },
     12596        {  bs3CpuInstr3_pmaddwd_MM1_FSxBX_icebp_c64,        255,         RM_MEM, T_MMX,       1, 1, 255, RT_ELEMENTS(s_aValues64W),   s_aValues64W },
     12597        {  bs3CpuInstr3_pmaddwd_XMM1_XMM2_icebp_c64,        255,         RM_REG, T_SSE2,      1, 1,   2, RT_ELEMENTS(s_aValues128W),  s_aValues128W },
     12598        {  bs3CpuInstr3_pmaddwd_XMM1_FSxBX_icebp_c64,       255,         RM_MEM, T_SSE2,      1, 1, 255, RT_ELEMENTS(s_aValues128W),  s_aValues128W },
     12599        {  bs3CpuInstr3_pmaddwd_XMM8_XMM9_icebp_c64,        255,         RM_REG, T_SSE2,      8, 8,   9, RT_ELEMENTS(s_aValues128W),  s_aValues128W },
     12600        {  bs3CpuInstr3_pmaddwd_XMM8_FSxBX_icebp_c64,       255,         RM_MEM, T_SSE2,      8, 8, 255, RT_ELEMENTS(s_aValues128W),  s_aValues128W },
     12601        {  bs3CpuInstr3_vpmaddwd_XMM1_XMM2_XMM3_icebp_c64,  255,         RM_REG, T_AVX_128,   1, 2,   3, RT_ELEMENTS(s_aValues128W),  s_aValues128W },
     12602        {  bs3CpuInstr3_vpmaddwd_XMM1_XMM2_FSxBX_icebp_c64, X86_XCPT_DB, RM_MEM, T_AVX_128,   1, 2, 255, RT_ELEMENTS(s_aValues128W),  s_aValues128W },
     12603        {  bs3CpuInstr3_vpmaddwd_XMM8_XMM9_XMM10_icebp_c64, 255,         RM_REG, T_AVX_128,   8, 9,  10, RT_ELEMENTS(s_aValues128W),  s_aValues128W },
     12604        {  bs3CpuInstr3_vpmaddwd_XMM8_XMM9_FSxBX_icebp_c64, X86_XCPT_DB, RM_MEM, T_AVX_128,   8, 9, 255, RT_ELEMENTS(s_aValues128W),  s_aValues128W },
     12605        {  bs3CpuInstr3_vpmaddwd_YMM1_YMM2_YMM3_icebp_c64,  255,         RM_REG, T_AVX2_256,  1, 2,   3, RT_ELEMENTS(s_aValues256W),  s_aValues256W },
     12606        {  bs3CpuInstr3_vpmaddwd_YMM1_YMM2_FSxBX_icebp_c64, X86_XCPT_DB, RM_MEM, T_AVX2_256,  1, 2, 255, RT_ELEMENTS(s_aValues256W),  s_aValues256W },
     12607        {  bs3CpuInstr3_vpmaddwd_YMM8_YMM9_YMM10_icebp_c64, 255,         RM_REG, T_AVX2_256,  8, 9,  10, RT_ELEMENTS(s_aValues256W),  s_aValues256W },
     12608        {  bs3CpuInstr3_vpmaddwd_YMM8_YMM9_FSxBX_icebp_c64, X86_XCPT_DB, RM_MEM, T_AVX2_256,  8, 9, 255, RT_ELEMENTS(s_aValues256W),  s_aValues256W },
     12609    };
     12610    static BS3CPUINSTR3_TEST1_MODE_T const s_aTests[3] = BS3CPUINSTR3_TEST1_MODES_INIT(s_aTests16, s_aTests32, s_aTests64);
     12611    unsigned const                         iTest       = BS3CPUINSTR3_TEST_MODES_INDEX(bMode);
     12612    return bs3CpuInstr3_WorkerTestType1(bMode, s_aTests[iTest].paTests, s_aTests[iTest].cTests,
     12613                                        g_aXcptConfig4, RT_ELEMENTS(g_aXcptConfig4));
     12614}
    1253012615
    1253112616/**
     
    1271212797        { "vpermilpd",                                      bs3CpuInstr3_vpermilpd, 0 },
    1271312798#endif
     12799#if defined (ALL_TESTS)
     12800        { "[v]pmaddwd",                                     bs3CpuInstr3_v_pmaddwd, 0 },
     12801#endif
    1271412802    };
    1271512803    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