VirtualBox

Changeset 96110 in vbox


Ignore:
Timestamp:
Aug 8, 2022 11:41:46 AM (3 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
152911
Message:

ValidationKit/bs3-cpu-instr-3: Add simple [v]unpck{l,h}p{s,d} 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

    r96105 r96110  
    22052205 %endif
    22062206
     2207;
     2208; [V]PUNPCKLPS
     2209;
     2210EMIT_INSTR_PLUS_ICEBP   unpcklps,  XMM1, XMM2
     2211EMIT_INSTR_PLUS_ICEBP   unpcklps,  XMM1, FSxBX
     2212EMIT_INSTR_PLUS_ICEBP   vunpcklps, XMM1, XMM2, XMM3
     2213EMIT_INSTR_PLUS_ICEBP   vunpcklps, XMM1, XMM2, FSxBX
     2214EMIT_INSTR_PLUS_ICEBP   vunpcklps, YMM1, YMM2, YMM3
     2215EMIT_INSTR_PLUS_ICEBP   vunpcklps, YMM1, YMM2, FSxBX
     2216 %if TMPL_BITS == 64
     2217EMIT_INSTR_PLUS_ICEBP   unpcklps,  XMM8, XMM9
     2218EMIT_INSTR_PLUS_ICEBP   unpcklps,  XMM8, FSxBX
     2219EMIT_INSTR_PLUS_ICEBP   vunpcklps, XMM8, XMM9, XMM10
     2220EMIT_INSTR_PLUS_ICEBP   vunpcklps, XMM8, XMM9, FSxBX
     2221EMIT_INSTR_PLUS_ICEBP   vunpcklps, YMM8, YMM9, YMM10
     2222EMIT_INSTR_PLUS_ICEBP   vunpcklps, YMM8, YMM9, FSxBX
     2223 %endif
     2224
     2225;
     2226; [V]PUNPCKLPD
     2227;
     2228EMIT_INSTR_PLUS_ICEBP   unpcklpd,  XMM1, XMM2
     2229EMIT_INSTR_PLUS_ICEBP   unpcklpd,  XMM1, FSxBX
     2230EMIT_INSTR_PLUS_ICEBP   vunpcklpd, XMM1, XMM2, XMM3
     2231EMIT_INSTR_PLUS_ICEBP   vunpcklpd, XMM1, XMM2, FSxBX
     2232EMIT_INSTR_PLUS_ICEBP   vunpcklpd, YMM1, YMM2, YMM3
     2233EMIT_INSTR_PLUS_ICEBP   vunpcklpd, YMM1, YMM2, FSxBX
     2234 %if TMPL_BITS == 64
     2235EMIT_INSTR_PLUS_ICEBP   unpcklpd,  XMM8, XMM9
     2236EMIT_INSTR_PLUS_ICEBP   unpcklpd,  XMM8, FSxBX
     2237EMIT_INSTR_PLUS_ICEBP   vunpcklpd, XMM8, XMM9, XMM10
     2238EMIT_INSTR_PLUS_ICEBP   vunpcklpd, XMM8, XMM9, FSxBX
     2239EMIT_INSTR_PLUS_ICEBP   vunpcklpd, YMM8, YMM9, YMM10
     2240EMIT_INSTR_PLUS_ICEBP   vunpcklpd, YMM8, YMM9, FSxBX
     2241 %endif
     2242
     2243;
     2244; [V]PUNPCKHPS
     2245;
     2246EMIT_INSTR_PLUS_ICEBP   unpckhps,  XMM1, XMM2
     2247EMIT_INSTR_PLUS_ICEBP   unpckhps,  XMM1, FSxBX
     2248EMIT_INSTR_PLUS_ICEBP   vunpckhps, XMM1, XMM2, XMM3
     2249EMIT_INSTR_PLUS_ICEBP   vunpckhps, XMM1, XMM2, FSxBX
     2250EMIT_INSTR_PLUS_ICEBP   vunpckhps, YMM1, YMM2, YMM3
     2251EMIT_INSTR_PLUS_ICEBP   vunpckhps, YMM1, YMM2, FSxBX
     2252 %if TMPL_BITS == 64
     2253EMIT_INSTR_PLUS_ICEBP   unpckhps,  XMM8, XMM9
     2254EMIT_INSTR_PLUS_ICEBP   unpckhps,  XMM8, FSxBX
     2255EMIT_INSTR_PLUS_ICEBP   vunpckhps, XMM8, XMM9, XMM10
     2256EMIT_INSTR_PLUS_ICEBP   vunpckhps, XMM8, XMM9, FSxBX
     2257EMIT_INSTR_PLUS_ICEBP   vunpckhps, YMM8, YMM9, YMM10
     2258EMIT_INSTR_PLUS_ICEBP   vunpckhps, YMM8, YMM9, FSxBX
     2259 %endif
     2260
     2261;
     2262; [V]PUNPCKHPD
     2263;
     2264EMIT_INSTR_PLUS_ICEBP   unpckhpd,  XMM1, XMM2
     2265EMIT_INSTR_PLUS_ICEBP   unpckhpd,  XMM1, FSxBX
     2266EMIT_INSTR_PLUS_ICEBP   vunpckhpd, XMM1, XMM2, XMM3
     2267EMIT_INSTR_PLUS_ICEBP   vunpckhpd, XMM1, XMM2, FSxBX
     2268EMIT_INSTR_PLUS_ICEBP   vunpckhpd, YMM1, YMM2, YMM3
     2269EMIT_INSTR_PLUS_ICEBP   vunpckhpd, YMM1, YMM2, FSxBX
     2270 %if TMPL_BITS == 64
     2271EMIT_INSTR_PLUS_ICEBP   unpckhpd,  XMM8, XMM9
     2272EMIT_INSTR_PLUS_ICEBP   unpckhpd,  XMM8, FSxBX
     2273EMIT_INSTR_PLUS_ICEBP   vunpckhpd, XMM8, XMM9, XMM10
     2274EMIT_INSTR_PLUS_ICEBP   vunpckhpd, XMM8, XMM9, FSxBX
     2275EMIT_INSTR_PLUS_ICEBP   vunpckhpd, YMM8, YMM9, YMM10
     2276EMIT_INSTR_PLUS_ICEBP   vunpckhpd, YMM8, YMM9, FSxBX
     2277 %endif
    22072278
    22082279%endif ; BS3_INSTANTIATING_CMN
  • trunk/src/VBox/ValidationKit/bootsectors/bs3-cpu-instr-3.c32

    r96105 r96110  
    61936193        {  bs3CpuInstr3_vpmuludq_YMM8_YMM9_YMM10_icebp_c64, 255,         RM_REG, T_AVX2_256,  8, 9,  10, RT_ELEMENTS(s_aValues),  s_aValues },
    61946194        {  bs3CpuInstr3_vpmuludq_YMM8_YMM9_FSxBX_icebp_c64, X86_XCPT_DB, RM_MEM, T_AVX2_256,  8, 9, 255, RT_ELEMENTS(s_aValues),  s_aValues },
     6195    };
     6196    static BS3CPUINSTR3_TEST1_MODE_T const s_aTests[3] = BS3CPUINSTR3_TEST1_MODES_INIT(s_aTests16, s_aTests32, s_aTests64);
     6197    unsigned const                         iTest       = BS3CPUINSTR3_TEST_MODES_INDEX(bMode);
     6198    return bs3CpuInstr3_WorkerTestType1(bMode, s_aTests[iTest].paTests, s_aTests[iTest].cTests,
     6199                                        g_aXcptConfig4, RT_ELEMENTS(g_aXcptConfig4));
     6200}
     6201
     6202
     6203/*
     6204 * [V]PUNPCKLPS  - Unpack and interleave low packed single precision FP values.
     6205 * [V]PUNPCKLPD  - Unpack and interleave low packed double precision FP values.
     6206 */
     6207BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_unpcklps_XMM1_XMM2_icebp);
     6208BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_unpcklps_XMM1_FSxBX_icebp);
     6209extern FNBS3FAR             bs3CpuInstr3_unpcklps_XMM8_XMM9_icebp_c64;
     6210extern FNBS3FAR             bs3CpuInstr3_unpcklps_XMM8_FSxBX_icebp_c64;
     6211BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_vunpcklps_XMM1_XMM2_XMM3_icebp);
     6212BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_vunpcklps_XMM1_XMM2_FSxBX_icebp);
     6213extern FNBS3FAR             bs3CpuInstr3_vunpcklps_XMM8_XMM9_XMM10_icebp_c64;
     6214extern FNBS3FAR             bs3CpuInstr3_vunpcklps_XMM8_XMM9_FSxBX_icebp_c64;
     6215BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_vunpcklps_YMM1_YMM2_YMM3_icebp);
     6216BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_vunpcklps_YMM1_YMM2_FSxBX_icebp);
     6217extern FNBS3FAR             bs3CpuInstr3_vunpcklps_YMM8_YMM9_YMM10_icebp_c64;
     6218extern FNBS3FAR             bs3CpuInstr3_vunpcklps_YMM8_YMM9_FSxBX_icebp_c64;
     6219
     6220BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_unpcklpd_XMM1_XMM2_icebp);
     6221BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_unpcklpd_XMM1_FSxBX_icebp);
     6222extern FNBS3FAR             bs3CpuInstr3_unpcklpd_XMM8_XMM9_icebp_c64;
     6223extern FNBS3FAR             bs3CpuInstr3_unpcklpd_XMM8_FSxBX_icebp_c64;
     6224BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_vunpcklpd_XMM1_XMM2_XMM3_icebp);
     6225BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_vunpcklpd_XMM1_XMM2_FSxBX_icebp);
     6226extern FNBS3FAR             bs3CpuInstr3_vunpcklpd_XMM8_XMM9_XMM10_icebp_c64;
     6227extern FNBS3FAR             bs3CpuInstr3_vunpcklpd_XMM8_XMM9_FSxBX_icebp_c64;
     6228BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_vunpcklpd_YMM1_YMM2_YMM3_icebp);
     6229BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_vunpcklpd_YMM1_YMM2_FSxBX_icebp);
     6230extern FNBS3FAR             bs3CpuInstr3_vunpcklpd_YMM8_YMM9_YMM10_icebp_c64;
     6231extern FNBS3FAR             bs3CpuInstr3_vunpcklpd_YMM8_YMM9_FSxBX_icebp_c64;
     6232
     6233BS3_DECL_FAR(uint8_t) bs3CpuInstr3_v_punpcklps_punpcklpd(uint8_t bMode)
     6234{
     6235    static BS3CPUINSTR3_TEST1_VALUES_T const s_aValuesS[] =
     6236    {
     6237        {   /*src2*/ RTUINT256_INIT_C(0, 0, 0, 0),
     6238            /*src1*/ RTUINT256_INIT_C(0, 0, 0, 0),
     6239            /* => */ RTUINT256_INIT_C(0, 0, 0, 0) },
     6240        {   /*src2*/ RTUINT256_INIT_C(0xf1f2f3f4f5f6f7f8, 0xe1e2e3e4e5e6e7e8, 0xd1d2d3d4d5d6d7d8, 0xc1c2c3c4c5c6c7c8),
     6241            /*src1*/ RTUINT256_INIT_C(0xb1b2b3b4b5b6b7b8, 0xa1a2a3a4a5a6a7a8, 0x9192939495969798, 0x8182838485868788),
     6242            /* => */ RTUINT256_INIT_C(0xe1e2e3e4a1a2a3a4, 0xe5e6e7e8a5a6a7a8, 0xc1c2c3c481828384, 0xc5c6c7c885868788) },
     6243        {   /*src2*/ RTUINT256_INIT_C(0x4d09f02a6cdc73d5, 0x3ef417c8666b3fe6, 0xb4212fa8564c9ba2, 0x9c5ce073930996bb),
     6244            /*src1*/ RTUINT256_INIT_C(0x1eddddac09633294, 0xf95c8eec40725633, 0x8800e95bbf9962c3, 0x43d3cda0238499fd),
     6245            /* => */ RTUINT256_INIT_C(0x3ef417c8f95c8eec, 0x666b3fe640725633, 0x9c5ce07343d3cda0, 0x930996bb238499fd) },
     6246    };
     6247    static BS3CPUINSTR3_TEST1_VALUES_T const s_aValuesD[] =
     6248    {
     6249        {   /*src2*/ RTUINT256_INIT_C(0, 0, 0, 0),
     6250            /*src1*/ RTUINT256_INIT_C(0, 0, 0, 0),
     6251            /* => */ RTUINT256_INIT_C(0, 0, 0, 0) },
     6252        {   /*src2*/ RTUINT256_INIT_C(0xf1f2f3f4f5f6f7f8, 0xe1e2e3e4e5e6e7e8, 0xd1d2d3d4d5d6d7d8, 0xc1c2c3c4c5c6c7c8),
     6253            /*src1*/ RTUINT256_INIT_C(0xb1b2b3b4b5b6b7b8, 0xa1a2a3a4a5a6a7a8, 0x9192939495969798, 0x8182838485868788),
     6254            /* => */ RTUINT256_INIT_C(0xe1e2e3e4e5e6e7e8, 0xa1a2a3a4a5a6a7a8, 0xc1c2c3c4c5c6c7c8, 0x8182838485868788) },
     6255        {   /*src2*/ RTUINT256_INIT_C(0x4d09f02a6cdc73d5, 0x3ef417c8666b3fe6, 0xb4212fa8564c9ba2, 0x9c5ce073930996bb),
     6256            /*src1*/ RTUINT256_INIT_C(0x1eddddac09633294, 0xf95c8eec40725633, 0x8800e95bbf9962c3, 0x43d3cda0238499fd),
     6257            /* => */ RTUINT256_INIT_C(0x3ef417c8666b3fe6, 0xf95c8eec40725633, 0x9c5ce073930996bb, 0x43d3cda0238499fd) },
     6258    };
     6259
     6260    static BS3CPUINSTR3_TEST1_T const s_aTests16[] =
     6261    {
     6262        {  bs3CpuInstr3_unpcklps_XMM1_XMM2_icebp_c16,        255,         RM_REG, T_SSE,       1, 1,   2, RT_ELEMENTS(s_aValuesS),  s_aValuesS },
     6263        {  bs3CpuInstr3_unpcklps_XMM1_FSxBX_icebp_c16,       255,         RM_MEM, T_SSE,       1, 1, 255, RT_ELEMENTS(s_aValuesS),  s_aValuesS },
     6264        {  bs3CpuInstr3_vunpcklps_XMM1_XMM2_XMM3_icebp_c16,  255,         RM_REG, T_AVX_128,   1, 2,   3, RT_ELEMENTS(s_aValuesS),  s_aValuesS },
     6265        {  bs3CpuInstr3_vunpcklps_XMM1_XMM2_FSxBX_icebp_c16, X86_XCPT_DB, RM_MEM, T_AVX_128,   1, 2, 255, RT_ELEMENTS(s_aValuesS),  s_aValuesS },
     6266        {  bs3CpuInstr3_vunpcklps_YMM1_YMM2_YMM3_icebp_c16,  255,         RM_REG, T_AVX2_256,  1, 2,   3, RT_ELEMENTS(s_aValuesS),  s_aValuesS },
     6267        {  bs3CpuInstr3_vunpcklps_YMM1_YMM2_FSxBX_icebp_c16, X86_XCPT_DB, RM_MEM, T_AVX2_256,  1, 2, 255, RT_ELEMENTS(s_aValuesS),  s_aValuesS },
     6268
     6269        {  bs3CpuInstr3_unpcklpd_XMM1_XMM2_icebp_c16,        255,         RM_REG, T_SSE,       1, 1,   2, RT_ELEMENTS(s_aValuesD),  s_aValuesD },
     6270        {  bs3CpuInstr3_unpcklpd_XMM1_FSxBX_icebp_c16,       255,         RM_MEM, T_SSE,       1, 1, 255, RT_ELEMENTS(s_aValuesD),  s_aValuesD },
     6271        {  bs3CpuInstr3_vunpcklpd_XMM1_XMM2_XMM3_icebp_c16,  255,         RM_REG, T_AVX_128,   1, 2,   3, RT_ELEMENTS(s_aValuesD),  s_aValuesD },
     6272        {  bs3CpuInstr3_vunpcklpd_XMM1_XMM2_FSxBX_icebp_c16, X86_XCPT_DB, RM_MEM, T_AVX_128,   1, 2, 255, RT_ELEMENTS(s_aValuesD),  s_aValuesD },
     6273        {  bs3CpuInstr3_vunpcklpd_YMM1_YMM2_YMM3_icebp_c16,  255,         RM_REG, T_AVX2_256,  1, 2,   3, RT_ELEMENTS(s_aValuesD),  s_aValuesD },
     6274        {  bs3CpuInstr3_vunpcklpd_YMM1_YMM2_FSxBX_icebp_c16, X86_XCPT_DB, RM_MEM, T_AVX2_256,  1, 2, 255, RT_ELEMENTS(s_aValuesD),  s_aValuesD },
     6275    };
     6276    static BS3CPUINSTR3_TEST1_T const s_aTests32[] =
     6277    {
     6278        {  bs3CpuInstr3_unpcklps_XMM1_XMM2_icebp_c32,        255,         RM_REG, T_SSE,       1, 1,   2, RT_ELEMENTS(s_aValuesS),  s_aValuesS },
     6279        {  bs3CpuInstr3_unpcklps_XMM1_FSxBX_icebp_c32,       255,         RM_MEM, T_SSE,       1, 1, 255, RT_ELEMENTS(s_aValuesS),  s_aValuesS },
     6280        {  bs3CpuInstr3_vunpcklps_XMM1_XMM2_XMM3_icebp_c32,  255,         RM_REG, T_AVX_128,   1, 2,   3, RT_ELEMENTS(s_aValuesS),  s_aValuesS },
     6281        {  bs3CpuInstr3_vunpcklps_XMM1_XMM2_FSxBX_icebp_c32, X86_XCPT_DB, RM_MEM, T_AVX_128,   1, 2, 255, RT_ELEMENTS(s_aValuesS),  s_aValuesS },
     6282        {  bs3CpuInstr3_vunpcklps_YMM1_YMM2_YMM3_icebp_c32,  255,         RM_REG, T_AVX2_256,  1, 2,   3, RT_ELEMENTS(s_aValuesS),  s_aValuesS },
     6283        {  bs3CpuInstr3_vunpcklps_YMM1_YMM2_FSxBX_icebp_c32, X86_XCPT_DB, RM_MEM, T_AVX2_256,  1, 2, 255, RT_ELEMENTS(s_aValuesS),  s_aValuesS },
     6284
     6285        {  bs3CpuInstr3_unpcklpd_XMM1_XMM2_icebp_c32,        255,         RM_REG, T_SSE,       1, 1,   2, RT_ELEMENTS(s_aValuesD),  s_aValuesD },
     6286        {  bs3CpuInstr3_unpcklpd_XMM1_FSxBX_icebp_c32,       255,         RM_MEM, T_SSE,       1, 1, 255, RT_ELEMENTS(s_aValuesD),  s_aValuesD },
     6287        {  bs3CpuInstr3_vunpcklpd_XMM1_XMM2_XMM3_icebp_c32,  255,         RM_REG, T_AVX_128,   1, 2,   3, RT_ELEMENTS(s_aValuesD),  s_aValuesD },
     6288        {  bs3CpuInstr3_vunpcklpd_XMM1_XMM2_FSxBX_icebp_c32, X86_XCPT_DB, RM_MEM, T_AVX_128,   1, 2, 255, RT_ELEMENTS(s_aValuesD),  s_aValuesD },
     6289        {  bs3CpuInstr3_vunpcklpd_YMM1_YMM2_YMM3_icebp_c32,  255,         RM_REG, T_AVX2_256,  1, 2,   3, RT_ELEMENTS(s_aValuesD),  s_aValuesD },
     6290        {  bs3CpuInstr3_vunpcklpd_YMM1_YMM2_FSxBX_icebp_c32, X86_XCPT_DB, RM_MEM, T_AVX2_256,  1, 2, 255, RT_ELEMENTS(s_aValuesD),  s_aValuesD },
     6291    };
     6292    static BS3CPUINSTR3_TEST1_T const s_aTests64[] =
     6293    {
     6294        {  bs3CpuInstr3_unpcklps_XMM1_XMM2_icebp_c64,        255,         RM_REG, T_SSE,       1, 1,   2, RT_ELEMENTS(s_aValuesS),  s_aValuesS },
     6295        {  bs3CpuInstr3_unpcklps_XMM1_FSxBX_icebp_c64,       255,         RM_MEM, T_SSE,       1, 1, 255, RT_ELEMENTS(s_aValuesS),  s_aValuesS },
     6296        {  bs3CpuInstr3_unpcklps_XMM8_XMM9_icebp_c64,        255,         RM_REG, T_SSE,       8, 8,   9, RT_ELEMENTS(s_aValuesS),  s_aValuesS },
     6297        {  bs3CpuInstr3_unpcklps_XMM8_FSxBX_icebp_c64,       255,         RM_MEM, T_SSE,       8, 8, 255, RT_ELEMENTS(s_aValuesS),  s_aValuesS },
     6298        {  bs3CpuInstr3_vunpcklps_XMM1_XMM2_XMM3_icebp_c64,  255,         RM_REG, T_AVX_128,   1, 2,   3, RT_ELEMENTS(s_aValuesS),  s_aValuesS },
     6299        {  bs3CpuInstr3_vunpcklps_XMM1_XMM2_FSxBX_icebp_c64, X86_XCPT_DB, RM_MEM, T_AVX_128,   1, 2, 255, RT_ELEMENTS(s_aValuesS),  s_aValuesS },
     6300        {  bs3CpuInstr3_vunpcklps_XMM8_XMM9_XMM10_icebp_c64, 255,         RM_REG, T_AVX_128,   8, 9,  10, RT_ELEMENTS(s_aValuesS),  s_aValuesS },
     6301        {  bs3CpuInstr3_vunpcklps_XMM8_XMM9_FSxBX_icebp_c64, X86_XCPT_DB, RM_MEM, T_AVX_128,   8, 9, 255, RT_ELEMENTS(s_aValuesS),  s_aValuesS },
     6302        {  bs3CpuInstr3_vunpcklps_YMM1_YMM2_YMM3_icebp_c64,  255,         RM_REG, T_AVX2_256,  1, 2,   3, RT_ELEMENTS(s_aValuesS),  s_aValuesS },
     6303        {  bs3CpuInstr3_vunpcklps_YMM1_YMM2_FSxBX_icebp_c64, X86_XCPT_DB, RM_MEM, T_AVX2_256,  1, 2, 255, RT_ELEMENTS(s_aValuesS),  s_aValuesS },
     6304        {  bs3CpuInstr3_vunpcklps_YMM8_YMM9_YMM10_icebp_c64, 255,         RM_REG, T_AVX2_256,  8, 9,  10, RT_ELEMENTS(s_aValuesS),  s_aValuesS },
     6305        {  bs3CpuInstr3_vunpcklps_YMM8_YMM9_FSxBX_icebp_c64, X86_XCPT_DB, RM_MEM, T_AVX2_256,  8, 9, 255, RT_ELEMENTS(s_aValuesS),  s_aValuesS },
     6306
     6307        {  bs3CpuInstr3_unpcklpd_XMM1_XMM2_icebp_c64,        255,         RM_REG, T_SSE,       1, 1,   2, RT_ELEMENTS(s_aValuesD),  s_aValuesD },
     6308        {  bs3CpuInstr3_unpcklpd_XMM1_FSxBX_icebp_c64,       255,         RM_MEM, T_SSE,       1, 1, 255, RT_ELEMENTS(s_aValuesD),  s_aValuesD },
     6309        {  bs3CpuInstr3_unpcklpd_XMM8_XMM9_icebp_c64,        255,         RM_REG, T_SSE,       8, 8,   9, RT_ELEMENTS(s_aValuesD),  s_aValuesD },
     6310        {  bs3CpuInstr3_unpcklpd_XMM8_FSxBX_icebp_c64,       255,         RM_MEM, T_SSE,       8, 8, 255, RT_ELEMENTS(s_aValuesD),  s_aValuesD },
     6311        {  bs3CpuInstr3_vunpcklpd_XMM1_XMM2_XMM3_icebp_c64,  255,         RM_REG, T_AVX_128,   1, 2,   3, RT_ELEMENTS(s_aValuesD),  s_aValuesD },
     6312        {  bs3CpuInstr3_vunpcklpd_XMM1_XMM2_FSxBX_icebp_c64, X86_XCPT_DB, RM_MEM, T_AVX_128,   1, 2, 255, RT_ELEMENTS(s_aValuesD),  s_aValuesD },
     6313        {  bs3CpuInstr3_vunpcklpd_XMM8_XMM9_XMM10_icebp_c64, 255,         RM_REG, T_AVX_128,   8, 9,  10, RT_ELEMENTS(s_aValuesD),  s_aValuesD },
     6314        {  bs3CpuInstr3_vunpcklpd_XMM8_XMM9_FSxBX_icebp_c64, X86_XCPT_DB, RM_MEM, T_AVX_128,   8, 9, 255, RT_ELEMENTS(s_aValuesD),  s_aValuesD },
     6315        {  bs3CpuInstr3_vunpcklpd_YMM1_YMM2_YMM3_icebp_c64,  255,         RM_REG, T_AVX2_256,  1, 2,   3, RT_ELEMENTS(s_aValuesD),  s_aValuesD },
     6316        {  bs3CpuInstr3_vunpcklpd_YMM1_YMM2_FSxBX_icebp_c64, X86_XCPT_DB, RM_MEM, T_AVX2_256,  1, 2, 255, RT_ELEMENTS(s_aValuesD),  s_aValuesD },
     6317        {  bs3CpuInstr3_vunpcklpd_YMM8_YMM9_YMM10_icebp_c64, 255,         RM_REG, T_AVX2_256,  8, 9,  10, RT_ELEMENTS(s_aValuesD),  s_aValuesD },
     6318        {  bs3CpuInstr3_vunpcklpd_YMM8_YMM9_FSxBX_icebp_c64, X86_XCPT_DB, RM_MEM, T_AVX2_256,  8, 9, 255, RT_ELEMENTS(s_aValuesD),  s_aValuesD },
     6319    };
     6320    static BS3CPUINSTR3_TEST1_MODE_T const s_aTests[3] = BS3CPUINSTR3_TEST1_MODES_INIT(s_aTests16, s_aTests32, s_aTests64);
     6321    unsigned const                         iTest       = BS3CPUINSTR3_TEST_MODES_INDEX(bMode);
     6322    return bs3CpuInstr3_WorkerTestType1(bMode, s_aTests[iTest].paTests, s_aTests[iTest].cTests,
     6323                                        g_aXcptConfig4, RT_ELEMENTS(g_aXcptConfig4));
     6324}
     6325
     6326
     6327/*
     6328 * [V]PUNPCKHPS  - Unpack and interleave low packed single precision FP values.
     6329 * [V]PUNPCKHPD  - Unpack and interleave low packed double precision FP values.
     6330 */
     6331BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_unpckhps_XMM1_XMM2_icebp);
     6332BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_unpckhps_XMM1_FSxBX_icebp);
     6333extern FNBS3FAR             bs3CpuInstr3_unpckhps_XMM8_XMM9_icebp_c64;
     6334extern FNBS3FAR             bs3CpuInstr3_unpckhps_XMM8_FSxBX_icebp_c64;
     6335BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_vunpckhps_XMM1_XMM2_XMM3_icebp);
     6336BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_vunpckhps_XMM1_XMM2_FSxBX_icebp);
     6337extern FNBS3FAR             bs3CpuInstr3_vunpckhps_XMM8_XMM9_XMM10_icebp_c64;
     6338extern FNBS3FAR             bs3CpuInstr3_vunpckhps_XMM8_XMM9_FSxBX_icebp_c64;
     6339BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_vunpckhps_YMM1_YMM2_YMM3_icebp);
     6340BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_vunpckhps_YMM1_YMM2_FSxBX_icebp);
     6341extern FNBS3FAR             bs3CpuInstr3_vunpckhps_YMM8_YMM9_YMM10_icebp_c64;
     6342extern FNBS3FAR             bs3CpuInstr3_vunpckhps_YMM8_YMM9_FSxBX_icebp_c64;
     6343
     6344BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_unpckhpd_XMM1_XMM2_icebp);
     6345BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_unpckhpd_XMM1_FSxBX_icebp);
     6346extern FNBS3FAR             bs3CpuInstr3_unpckhpd_XMM8_XMM9_icebp_c64;
     6347extern FNBS3FAR             bs3CpuInstr3_unpckhpd_XMM8_FSxBX_icebp_c64;
     6348BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_vunpckhpd_XMM1_XMM2_XMM3_icebp);
     6349BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_vunpckhpd_XMM1_XMM2_FSxBX_icebp);
     6350extern FNBS3FAR             bs3CpuInstr3_vunpckhpd_XMM8_XMM9_XMM10_icebp_c64;
     6351extern FNBS3FAR             bs3CpuInstr3_vunpckhpd_XMM8_XMM9_FSxBX_icebp_c64;
     6352BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_vunpckhpd_YMM1_YMM2_YMM3_icebp);
     6353BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_vunpckhpd_YMM1_YMM2_FSxBX_icebp);
     6354extern FNBS3FAR             bs3CpuInstr3_vunpckhpd_YMM8_YMM9_YMM10_icebp_c64;
     6355extern FNBS3FAR             bs3CpuInstr3_vunpckhpd_YMM8_YMM9_FSxBX_icebp_c64;
     6356
     6357BS3_DECL_FAR(uint8_t) bs3CpuInstr3_v_punpckhps_punpckhpd(uint8_t bMode)
     6358{
     6359    static BS3CPUINSTR3_TEST1_VALUES_T const s_aValuesS[] =
     6360    {
     6361        {   /*src2*/ RTUINT256_INIT_C(0, 0, 0, 0),
     6362            /*src1*/ RTUINT256_INIT_C(0, 0, 0, 0),
     6363            /* => */ RTUINT256_INIT_C(0, 0, 0, 0) },
     6364        {   /*src2*/ RTUINT256_INIT_C(0xf1f2f3f4f5f6f7f8, 0xe1e2e3e4e5e6e7e8, 0xd1d2d3d4d5d6d7d8, 0xc1c2c3c4c5c6c7c8),
     6365            /*src1*/ RTUINT256_INIT_C(0xb1b2b3b4b5b6b7b8, 0xa1a2a3a4a5a6a7a8, 0x9192939495969798, 0x8182838485868788),
     6366            /* => */ RTUINT256_INIT_C(0xf1f2f3f4b1b2b3b4, 0xf5f6f7f8b5b6b7b8, 0xd1d2d3d491929394, 0xd5d6d7d895969798) },
     6367        {   /*src2*/ RTUINT256_INIT_C(0x4d09f02a6cdc73d5, 0x3ef417c8666b3fe6, 0xb4212fa8564c9ba2, 0x9c5ce073930996bb),
     6368            /*src1*/ RTUINT256_INIT_C(0x1eddddac09633294, 0xf95c8eec40725633, 0x8800e95bbf9962c3, 0x43d3cda0238499fd),
     6369            /* => */ RTUINT256_INIT_C(0x4d09f02a1eddddac, 0x6cdc73d509633294, 0xb4212fa88800e95b, 0x564c9ba2bf9962c3) },
     6370    };
     6371    static BS3CPUINSTR3_TEST1_VALUES_T const s_aValuesD[] =
     6372    {
     6373        {   /*src2*/ RTUINT256_INIT_C(0, 0, 0, 0),
     6374            /*src1*/ RTUINT256_INIT_C(0, 0, 0, 0),
     6375            /* => */ RTUINT256_INIT_C(0, 0, 0, 0) },
     6376        {   /*src2*/ RTUINT256_INIT_C(0xf1f2f3f4f5f6f7f8, 0xe1e2e3e4e5e6e7e8, 0xd1d2d3d4d5d6d7d8, 0xc1c2c3c4c5c6c7c8),
     6377            /*src1*/ RTUINT256_INIT_C(0xb1b2b3b4b5b6b7b8, 0xa1a2a3a4a5a6a7a8, 0x9192939495969798, 0x8182838485868788),
     6378            /* => */ RTUINT256_INIT_C(0xf1f2f3f4f5f6f7f8, 0xb1b2b3b4b5b6b7b8, 0xd1d2d3d4d5d6d7d8, 0x9192939495969798) },
     6379        {   /*src2*/ RTUINT256_INIT_C(0x4d09f02a6cdc73d5, 0x3ef417c8666b3fe6, 0xb4212fa8564c9ba2, 0x9c5ce073930996bb),
     6380            /*src1*/ RTUINT256_INIT_C(0x1eddddac09633294, 0xf95c8eec40725633, 0x8800e95bbf9962c3, 0x43d3cda0238499fd),
     6381            /* => */ RTUINT256_INIT_C(0x4d09f02a6cdc73d5, 0x1eddddac09633294, 0xb4212fa8564c9ba2, 0x8800e95bbf9962c3) },
     6382    };
     6383
     6384    static BS3CPUINSTR3_TEST1_T const s_aTests16[] =
     6385    {
     6386        {  bs3CpuInstr3_unpckhps_XMM1_XMM2_icebp_c16,        255,         RM_REG, T_SSE,       1, 1,   2, RT_ELEMENTS(s_aValuesS),  s_aValuesS },
     6387        {  bs3CpuInstr3_unpckhps_XMM1_FSxBX_icebp_c16,       255,         RM_MEM, T_SSE,       1, 1, 255, RT_ELEMENTS(s_aValuesS),  s_aValuesS },
     6388        {  bs3CpuInstr3_vunpckhps_XMM1_XMM2_XMM3_icebp_c16,  255,         RM_REG, T_AVX_128,   1, 2,   3, RT_ELEMENTS(s_aValuesS),  s_aValuesS },
     6389        {  bs3CpuInstr3_vunpckhps_XMM1_XMM2_FSxBX_icebp_c16, X86_XCPT_DB, RM_MEM, T_AVX_128,   1, 2, 255, RT_ELEMENTS(s_aValuesS),  s_aValuesS },
     6390        {  bs3CpuInstr3_vunpckhps_YMM1_YMM2_YMM3_icebp_c16,  255,         RM_REG, T_AVX2_256,  1, 2,   3, RT_ELEMENTS(s_aValuesS),  s_aValuesS },
     6391        {  bs3CpuInstr3_vunpckhps_YMM1_YMM2_FSxBX_icebp_c16, X86_XCPT_DB, RM_MEM, T_AVX2_256,  1, 2, 255, RT_ELEMENTS(s_aValuesS),  s_aValuesS },
     6392
     6393        {  bs3CpuInstr3_unpckhpd_XMM1_XMM2_icebp_c16,        255,         RM_REG, T_SSE,       1, 1,   2, RT_ELEMENTS(s_aValuesD),  s_aValuesD },
     6394        {  bs3CpuInstr3_unpckhpd_XMM1_FSxBX_icebp_c16,       255,         RM_MEM, T_SSE,       1, 1, 255, RT_ELEMENTS(s_aValuesD),  s_aValuesD },
     6395        {  bs3CpuInstr3_vunpckhpd_XMM1_XMM2_XMM3_icebp_c16,  255,         RM_REG, T_AVX_128,   1, 2,   3, RT_ELEMENTS(s_aValuesD),  s_aValuesD },
     6396        {  bs3CpuInstr3_vunpckhpd_XMM1_XMM2_FSxBX_icebp_c16, X86_XCPT_DB, RM_MEM, T_AVX_128,   1, 2, 255, RT_ELEMENTS(s_aValuesD),  s_aValuesD },
     6397        {  bs3CpuInstr3_vunpckhpd_YMM1_YMM2_YMM3_icebp_c16,  255,         RM_REG, T_AVX2_256,  1, 2,   3, RT_ELEMENTS(s_aValuesD),  s_aValuesD },
     6398        {  bs3CpuInstr3_vunpckhpd_YMM1_YMM2_FSxBX_icebp_c16, X86_XCPT_DB, RM_MEM, T_AVX2_256,  1, 2, 255, RT_ELEMENTS(s_aValuesD),  s_aValuesD },
     6399    };
     6400    static BS3CPUINSTR3_TEST1_T const s_aTests32[] =
     6401    {
     6402        {  bs3CpuInstr3_unpckhps_XMM1_XMM2_icebp_c32,        255,         RM_REG, T_SSE,       1, 1,   2, RT_ELEMENTS(s_aValuesS),  s_aValuesS },
     6403        {  bs3CpuInstr3_unpckhps_XMM1_FSxBX_icebp_c32,       255,         RM_MEM, T_SSE,       1, 1, 255, RT_ELEMENTS(s_aValuesS),  s_aValuesS },
     6404        {  bs3CpuInstr3_vunpckhps_XMM1_XMM2_XMM3_icebp_c32,  255,         RM_REG, T_AVX_128,   1, 2,   3, RT_ELEMENTS(s_aValuesS),  s_aValuesS },
     6405        {  bs3CpuInstr3_vunpckhps_XMM1_XMM2_FSxBX_icebp_c32, X86_XCPT_DB, RM_MEM, T_AVX_128,   1, 2, 255, RT_ELEMENTS(s_aValuesS),  s_aValuesS },
     6406        {  bs3CpuInstr3_vunpckhps_YMM1_YMM2_YMM3_icebp_c32,  255,         RM_REG, T_AVX2_256,  1, 2,   3, RT_ELEMENTS(s_aValuesS),  s_aValuesS },
     6407        {  bs3CpuInstr3_vunpckhps_YMM1_YMM2_FSxBX_icebp_c32, X86_XCPT_DB, RM_MEM, T_AVX2_256,  1, 2, 255, RT_ELEMENTS(s_aValuesS),  s_aValuesS },
     6408
     6409        {  bs3CpuInstr3_unpckhpd_XMM1_XMM2_icebp_c32,        255,         RM_REG, T_SSE,       1, 1,   2, RT_ELEMENTS(s_aValuesD),  s_aValuesD },
     6410        {  bs3CpuInstr3_unpckhpd_XMM1_FSxBX_icebp_c32,       255,         RM_MEM, T_SSE,       1, 1, 255, RT_ELEMENTS(s_aValuesD),  s_aValuesD },
     6411        {  bs3CpuInstr3_vunpckhpd_XMM1_XMM2_XMM3_icebp_c32,  255,         RM_REG, T_AVX_128,   1, 2,   3, RT_ELEMENTS(s_aValuesD),  s_aValuesD },
     6412        {  bs3CpuInstr3_vunpckhpd_XMM1_XMM2_FSxBX_icebp_c32, X86_XCPT_DB, RM_MEM, T_AVX_128,   1, 2, 255, RT_ELEMENTS(s_aValuesD),  s_aValuesD },
     6413        {  bs3CpuInstr3_vunpckhpd_YMM1_YMM2_YMM3_icebp_c32,  255,         RM_REG, T_AVX2_256,  1, 2,   3, RT_ELEMENTS(s_aValuesD),  s_aValuesD },
     6414        {  bs3CpuInstr3_vunpckhpd_YMM1_YMM2_FSxBX_icebp_c32, X86_XCPT_DB, RM_MEM, T_AVX2_256,  1, 2, 255, RT_ELEMENTS(s_aValuesD),  s_aValuesD },
     6415    };
     6416    static BS3CPUINSTR3_TEST1_T const s_aTests64[] =
     6417    {
     6418        {  bs3CpuInstr3_unpckhps_XMM1_XMM2_icebp_c64,        255,         RM_REG, T_SSE,       1, 1,   2, RT_ELEMENTS(s_aValuesS),  s_aValuesS },
     6419        {  bs3CpuInstr3_unpckhps_XMM1_FSxBX_icebp_c64,       255,         RM_MEM, T_SSE,       1, 1, 255, RT_ELEMENTS(s_aValuesS),  s_aValuesS },
     6420        {  bs3CpuInstr3_unpckhps_XMM8_XMM9_icebp_c64,        255,         RM_REG, T_SSE,       8, 8,   9, RT_ELEMENTS(s_aValuesS),  s_aValuesS },
     6421        {  bs3CpuInstr3_unpckhps_XMM8_FSxBX_icebp_c64,       255,         RM_MEM, T_SSE,       8, 8, 255, RT_ELEMENTS(s_aValuesS),  s_aValuesS },
     6422        {  bs3CpuInstr3_vunpckhps_XMM1_XMM2_XMM3_icebp_c64,  255,         RM_REG, T_AVX_128,   1, 2,   3, RT_ELEMENTS(s_aValuesS),  s_aValuesS },
     6423        {  bs3CpuInstr3_vunpckhps_XMM1_XMM2_FSxBX_icebp_c64, X86_XCPT_DB, RM_MEM, T_AVX_128,   1, 2, 255, RT_ELEMENTS(s_aValuesS),  s_aValuesS },
     6424        {  bs3CpuInstr3_vunpckhps_XMM8_XMM9_XMM10_icebp_c64, 255,         RM_REG, T_AVX_128,   8, 9,  10, RT_ELEMENTS(s_aValuesS),  s_aValuesS },
     6425        {  bs3CpuInstr3_vunpckhps_XMM8_XMM9_FSxBX_icebp_c64, X86_XCPT_DB, RM_MEM, T_AVX_128,   8, 9, 255, RT_ELEMENTS(s_aValuesS),  s_aValuesS },
     6426        {  bs3CpuInstr3_vunpckhps_YMM1_YMM2_YMM3_icebp_c64,  255,         RM_REG, T_AVX2_256,  1, 2,   3, RT_ELEMENTS(s_aValuesS),  s_aValuesS },
     6427        {  bs3CpuInstr3_vunpckhps_YMM1_YMM2_FSxBX_icebp_c64, X86_XCPT_DB, RM_MEM, T_AVX2_256,  1, 2, 255, RT_ELEMENTS(s_aValuesS),  s_aValuesS },
     6428        {  bs3CpuInstr3_vunpckhps_YMM8_YMM9_YMM10_icebp_c64, 255,         RM_REG, T_AVX2_256,  8, 9,  10, RT_ELEMENTS(s_aValuesS),  s_aValuesS },
     6429        {  bs3CpuInstr3_vunpckhps_YMM8_YMM9_FSxBX_icebp_c64, X86_XCPT_DB, RM_MEM, T_AVX2_256,  8, 9, 255, RT_ELEMENTS(s_aValuesS),  s_aValuesS },
     6430
     6431        {  bs3CpuInstr3_unpckhpd_XMM1_XMM2_icebp_c64,        255,         RM_REG, T_SSE,       1, 1,   2, RT_ELEMENTS(s_aValuesD),  s_aValuesD },
     6432        {  bs3CpuInstr3_unpckhpd_XMM1_FSxBX_icebp_c64,       255,         RM_MEM, T_SSE,       1, 1, 255, RT_ELEMENTS(s_aValuesD),  s_aValuesD },
     6433        {  bs3CpuInstr3_unpckhpd_XMM8_XMM9_icebp_c64,        255,         RM_REG, T_SSE,       8, 8,   9, RT_ELEMENTS(s_aValuesD),  s_aValuesD },
     6434        {  bs3CpuInstr3_unpckhpd_XMM8_FSxBX_icebp_c64,       255,         RM_MEM, T_SSE,       8, 8, 255, RT_ELEMENTS(s_aValuesD),  s_aValuesD },
     6435        {  bs3CpuInstr3_vunpckhpd_XMM1_XMM2_XMM3_icebp_c64,  255,         RM_REG, T_AVX_128,   1, 2,   3, RT_ELEMENTS(s_aValuesD),  s_aValuesD },
     6436        {  bs3CpuInstr3_vunpckhpd_XMM1_XMM2_FSxBX_icebp_c64, X86_XCPT_DB, RM_MEM, T_AVX_128,   1, 2, 255, RT_ELEMENTS(s_aValuesD),  s_aValuesD },
     6437        {  bs3CpuInstr3_vunpckhpd_XMM8_XMM9_XMM10_icebp_c64, 255,         RM_REG, T_AVX_128,   8, 9,  10, RT_ELEMENTS(s_aValuesD),  s_aValuesD },
     6438        {  bs3CpuInstr3_vunpckhpd_XMM8_XMM9_FSxBX_icebp_c64, X86_XCPT_DB, RM_MEM, T_AVX_128,   8, 9, 255, RT_ELEMENTS(s_aValuesD),  s_aValuesD },
     6439        {  bs3CpuInstr3_vunpckhpd_YMM1_YMM2_YMM3_icebp_c64,  255,         RM_REG, T_AVX2_256,  1, 2,   3, RT_ELEMENTS(s_aValuesD),  s_aValuesD },
     6440        {  bs3CpuInstr3_vunpckhpd_YMM1_YMM2_FSxBX_icebp_c64, X86_XCPT_DB, RM_MEM, T_AVX2_256,  1, 2, 255, RT_ELEMENTS(s_aValuesD),  s_aValuesD },
     6441        {  bs3CpuInstr3_vunpckhpd_YMM8_YMM9_YMM10_icebp_c64, 255,         RM_REG, T_AVX2_256,  8, 9,  10, RT_ELEMENTS(s_aValuesD),  s_aValuesD },
     6442        {  bs3CpuInstr3_vunpckhpd_YMM8_YMM9_FSxBX_icebp_c64, X86_XCPT_DB, RM_MEM, T_AVX2_256,  8, 9, 255, RT_ELEMENTS(s_aValuesD),  s_aValuesD },
    61956443    };
    61966444    static BS3CPUINSTR3_TEST1_MODE_T const s_aTests[3] = BS3CPUINSTR3_TEST1_MODES_INIT(s_aTests16, s_aTests32, s_aTests64);
     
    88089056    {
    88099057#ifndef DEBUG_bird
    8810 # define ALL_TESTS
     9058//# define ALL_TESTS
    88119059#endif
    88129060#if defined(ALL_TESTS)
     
    88979145        { "[v]pmaddubsw",                                   bs3CpuInstr3_v_pmaddubsw, 0 },
    88989146#endif
    8899 #if defined(ALL_TESTS)
    8900         { "[v]pmulhrsw",                                    bs3CpuInstr3_v_pmulhrsw, 0 },
    8901         { "[v]psadbw",                                      bs3CpuInstr3_v_psadbw,   0 },
    8902         { "[v]pmuldq",                                      bs3CpuInstr3_v_pmuldq,   0 },
    8903         { "[v]pmuludq",                                     bs3CpuInstr3_v_pmuludq,  0 },
     9147#if 1 //defined(ALL_TESTS)
     9148        //{ "[v]pmulhrsw",                                    bs3CpuInstr3_v_pmulhrsw, 0 },
     9149        //{ "[v]psadbw",                                      bs3CpuInstr3_v_psadbw,   0 },
     9150        //{ "[v]pmuldq",                                      bs3CpuInstr3_v_pmuldq,   0 },
     9151        //{ "[v]pmuludq",                                     bs3CpuInstr3_v_pmuludq,  0 },
     9152        { "[v]punpcklps/[v]punpcklpd",                      bs3CpuInstr3_v_punpcklps_punpcklpd, 0 },
     9153        { "[v]punpckhps/[v]punpckhpd",                      bs3CpuInstr3_v_punpckhps_punpckhpd, 0 },
    89049154#endif
    89059155    };
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