VirtualBox

Changeset 104723 in vbox for trunk/src/VBox


Ignore:
Timestamp:
May 18, 2024 5:00:34 AM (7 months ago)
Author:
vboxsync
Message:

ValidationKit/bootsectors: Implement testcases for vmaskmovp[sd], vpmaskmov[dq] 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

    r104440 r104723  
    32203220%undef EMIT_FS_PREFIX
    32213221
     3222;
     3223; VMASKMOVPS
     3224;
     3225EMIT_INSTR_PLUS_ICEBP           vmaskmovps,  XMM0,  XMM1, FSxBX
     3226EMIT_INSTR_PLUS_ICEBP_C64       vmaskmovps,  XMM8,  XMM9, FSxBX
     3227
     3228EMIT_INSTR_PLUS_ICEBP           vmaskmovps,  YMM0,  YMM1, FSxBX
     3229EMIT_INSTR_PLUS_ICEBP_C64       vmaskmovps,  YMM8,  YMM9, FSxBX
     3230
     3231EMIT_INSTR_PLUS_ICEBP           vmaskmovps,  FSxBX, XMM0, XMM1
     3232EMIT_INSTR_PLUS_ICEBP_C64       vmaskmovps,  FSxBX, XMM8, XMM9
     3233
     3234EMIT_INSTR_PLUS_ICEBP           vmaskmovps,  FSxBX, YMM0, YMM1
     3235EMIT_INSTR_PLUS_ICEBP_C64       vmaskmovps,  FSxBX, YMM8, YMM9
     3236
     3237;
     3238; VMASKMOVPD
     3239;
     3240EMIT_INSTR_PLUS_ICEBP           vmaskmovpd,  XMM0,  XMM1, FSxBX
     3241EMIT_INSTR_PLUS_ICEBP_C64       vmaskmovpd,  XMM8,  XMM9, FSxBX
     3242
     3243EMIT_INSTR_PLUS_ICEBP           vmaskmovpd,  YMM0,  YMM1, FSxBX
     3244EMIT_INSTR_PLUS_ICEBP_C64       vmaskmovpd,  YMM8,  YMM9, FSxBX
     3245
     3246EMIT_INSTR_PLUS_ICEBP           vmaskmovpd,  FSxBX, XMM0, XMM1
     3247EMIT_INSTR_PLUS_ICEBP_C64       vmaskmovpd,  FSxBX, XMM8, XMM9
     3248
     3249EMIT_INSTR_PLUS_ICEBP           vmaskmovpd,  FSxBX, YMM0, YMM1
     3250EMIT_INSTR_PLUS_ICEBP_C64       vmaskmovpd,  FSxBX, YMM8, YMM9
     3251
     3252;
     3253; VPMASKMOVD
     3254;
     3255EMIT_INSTR_PLUS_ICEBP           vpmaskmovd,  XMM0,  XMM1, FSxBX
     3256EMIT_INSTR_PLUS_ICEBP_C64       vpmaskmovd,  XMM8,  XMM9, FSxBX
     3257
     3258EMIT_INSTR_PLUS_ICEBP           vpmaskmovd,  YMM0,  YMM1, FSxBX
     3259EMIT_INSTR_PLUS_ICEBP_C64       vpmaskmovd,  YMM8,  YMM9, FSxBX
     3260
     3261EMIT_INSTR_PLUS_ICEBP           vpmaskmovd,  FSxBX, XMM0, XMM1
     3262EMIT_INSTR_PLUS_ICEBP_C64       vpmaskmovd,  FSxBX, XMM8, XMM9
     3263
     3264EMIT_INSTR_PLUS_ICEBP           vpmaskmovd,  FSxBX, YMM0, YMM1
     3265EMIT_INSTR_PLUS_ICEBP_C64       vpmaskmovd,  FSxBX, YMM8, YMM9
     3266
     3267;
     3268; VPMASKMOVQ
     3269;
     3270EMIT_INSTR_PLUS_ICEBP           vpmaskmovq,  XMM0,  XMM1, FSxBX
     3271EMIT_INSTR_PLUS_ICEBP_C64       vpmaskmovq,  XMM8,  XMM9, FSxBX
     3272
     3273EMIT_INSTR_PLUS_ICEBP           vpmaskmovq,  YMM0,  YMM1, FSxBX
     3274EMIT_INSTR_PLUS_ICEBP_C64       vpmaskmovq,  YMM8,  YMM9, FSxBX
     3275
     3276EMIT_INSTR_PLUS_ICEBP           vpmaskmovq,  FSxBX, XMM0, XMM1
     3277EMIT_INSTR_PLUS_ICEBP_C64       vpmaskmovq,  FSxBX, XMM8, XMM9
     3278
     3279EMIT_INSTR_PLUS_ICEBP           vpmaskmovq,  FSxBX, YMM0, YMM1
     3280EMIT_INSTR_PLUS_ICEBP_C64       vpmaskmovq,  FSxBX, YMM8, YMM9
     3281
    32223282%endif ; BS3_INSTANTIATING_CMN
    32233283
  • trunk/src/VBox/ValidationKit/bootsectors/bs3-cpu-instr-3.c32

    r104721 r104723  
    1328113281 * Test type #5 - three source MM/XMM/YMM operands.
    1328213282 *
    13283  * Probably only used by the [P]BLEND and SHA256RNDS2 instructions.
     13283 * Used by [P]BLENDV, SHA256RNDS2, V[P]MASKMOV instructions.
    1328413284 */
    1328513285
     
    1389013890    return bs3CpuInstr3_WorkerTestType5(bMode, s_aTests[iTest].paTests, s_aTests[iTest].cTests,
    1389113891                                        g_aXcptConfig4, RT_ELEMENTS(g_aXcptConfig4));
     13892}
     13893
     13894
     13895/*
     13896 * VMASKMOVP[SD], VPMASKMOV[DQ] - move selected dwords / qwords
     13897 */
     13898BS3_DECL_FAR(uint8_t) bs3CpuInstr3_vmaskmovps_d_vpmaskmovd_q(uint8_t bMode)
     13899{
     13900    static BS3CPUINSTR3_TEST5_VALUES_T const s_aValues_LD_dw_128[] =
     13901    {
     13902        {   // Copy all
     13903            /*src */ RTUINT256_INIT_C(0x0100010001000100, 0x0200020002000200, 0x0300030003000300, 0x0400040004000400),    //  SRC (before instruction)  uSrc3 (in worker)
     13904            /*mask*/ RTUINT256_INIT_C(0xb1b2b3b4b5b6b7b8, 0xa1a2a3a4a5a6a7a8, 0x9192939495969798, 0xfedcba9889abcdef),    //  MSK (before instruction)  uSrc2 (in worker)
     13905            /*init*/ RTUINT256_INIT_C(0xaaaaaaaaaaaaaaaa, 0xaaaaaaaaaaaaaaaa, 0xaaaaaaaaaaaaaaaa, 0xaaaaaaaaaaaaaaaa),    //  INIT DST value (before)   uSrc1 (in worker)
     13906            /* => */ RTUINT256_INIT_C(0x0100010001000100, 0x0200020002000200, 0x0300030003000300, 0x0400040004000400),    //  DST (after instruction)   uDstO (in worker)
     13907            /*flgs*/ 0 },
     13908        {   // Copy only beginning of buffer
     13909            /*src */ RTUINT256_INIT_C(0x0100010001000100, 0x0200020002000200, 0x0300030003000300, 0x0400040004000400),
     13910            /*mask*/ RTUINT256_INIT_C(0x01b2b3b415b6b7b8, 0x21a2a3a435a6a7a8, 0x4192939455969798, 0x6edcba9889abcdef),
     13911            /*init*/ RTUINT256_INIT_C(0xaaaaaaaaaaaaaaaa, 0xaaaaaaaaaaaaaaaa, 0xaaaaaaaaaaaaaaaa, 0xaaaaaaaaaaaaaaaa),
     13912            /* => */ RTUINT256_INIT_C(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000004000400),
     13913            /*flgs*/ 0 },
     13914        {   // Copy only end of buffer
     13915            /*src */ RTUINT256_INIT_C(0x0100010001000100, 0x0200020002000200, 0x0300030003000300, 0x0400040004000400),
     13916            /*mask*/ RTUINT256_INIT_C(0x01b2b3b415b6b7b8, 0x21a2a3a435a6a7a8, 0x9192939455969798, 0x6edcba9879abcdef),
     13917            /*init*/ RTUINT256_INIT_C(0xaaaaaaaaaaaaaaaa, 0xaaaaaaaaaaaaaaaa, 0xaaaaaaaaaaaaaaaa, 0xaaaaaaaaaaaaaaaa),
     13918            /* => */ RTUINT256_INIT_C(0x0000000000000000, 0x0000000000000000, 0x0300030000000000, 0x0000000000000000),
     13919            /*flgs*/ 0 },
     13920        {   // Copy none: loads all-0s (memory not accessed)
     13921            /*src */ RTUINT256_INIT_C(0x0100010001000100, 0x0200020002000200, 0x0300030003000300, 0x0400040004000400),
     13922            /*mask*/ RTUINT256_INIT_C(0x01b2b3b415b6b7b8, 0x21a2a3a435a6a7a8, 0x4192939455969798, 0x6edcba9879abcdef),
     13923            /*init*/ RTUINT256_INIT_C(0xaaaaaaaaaaaaaaaa, 0xaaaaaaaaaaaaaaaa, 0xaaaaaaaaaaaaaaaa, 0xaaaaaaaaaaaaaaaa),
     13924            /* => */ RTUINT256_INIT_C(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000),
     13925            /*flgs*/ BS3_TEST_F_NO_PF },
     13926    };
     13927    static BS3CPUINSTR3_TEST5_VALUES_T const s_aValues_ST_dw_128[] =
     13928    {
     13929        {   // Copy all
     13930            /*src */ RTUINT256_INIT_C(0x0100010001000100, 0x0200020002000200, 0x0300030003000300, 0x0400040004000400),
     13931            /*mask*/ RTUINT256_INIT_C(0xb1b2b3b4b5b6b7b8, 0xa1a2a3a4a5a6a7a8, 0x9192939495969798, 0xfedcba9889abcdef),
     13932            /*init*/ RTUINT256_INIT_C(0xaaaaaaaaaaaaaaaa, 0xaaaaaaaaaaaaaaaa, 0xaaaaaaaaaaaaaaaa, 0xaaaaaaaaaaaaaaaa),
     13933            /* => */ RTUINT256_INIT_C(0x0100010001000100, 0x0200020002000200, 0x0300030003000300, 0x0400040004000400),
     13934            /*flgs*/ 0 },
     13935        {   // Copy only beginning of buffer
     13936            /*src */ RTUINT256_INIT_C(0x0100010001000100, 0x0200020002000200, 0x0300030003000300, 0x0400040004000400),
     13937            /*mask*/ RTUINT256_INIT_C(0x01b2b3b415b6b7b8, 0x21a2a3a435a6a7a8, 0x4192939455969798, 0x6edcba9889abcdef),
     13938            /*init*/ RTUINT256_INIT_C(0xaaaaaaaaaaaaaaaa, 0xaaaaaaaaaaaaaaaa, 0xaaaaaaaaaaaaaaaa, 0xaaaaaaaaaaaaaaaa),
     13939            /* => */ RTUINT256_INIT_C(0xaaaaaaaaaaaaaaaa, 0xaaaaaaaaaaaaaaaa, 0xaaaaaaaaaaaaaaaa, 0xaaaaaaaa04000400),
     13940            /*flgs*/ 0 },
     13941        {   // Copy only end of buffer -- are these erroring because no copy happens on xmm?  that must be it
     13942            /*src */ RTUINT256_INIT_C(0x0100010001000100, 0x0200020002000200, 0x0300030003000300, 0x0400040004000400),
     13943            /*mask*/ RTUINT256_INIT_C(0x01b2b3b415b6b7b8, 0x21a2a3a435a6a7a8, 0x9192939455969798, 0x6edcba9879abcdef),
     13944            /*init*/ RTUINT256_INIT_C(0xaaaaaaaaaaaaaaaa, 0xaaaaaaaaaaaaaaaa, 0xaaaaaaaaaaaaaaaa, 0xaaaaaaaaaaaaaaaa),
     13945            /* => */ RTUINT256_INIT_C(0xaaaaaaaaaaaaaaaa, 0xaaaaaaaaaaaaaaaa, 0x03000300aaaaaaaa, 0xaaaaaaaaaaaaaaaa),
     13946            /*flgs*/ 0 },
     13947        {   // Copy none: stores nothing (memory not overwritten or even accessed)
     13948            /*src */ RTUINT256_INIT_C(0x0100010001000100, 0x0200020002000200, 0x0300030003000300, 0x0400040004000400),
     13949            /*mask*/ RTUINT256_INIT_C(0x01b2b3b415b6b7b8, 0x21a2a3a435a6a7a8, 0x4192939455969798, 0x6edcba9879abcdef),
     13950            /*init*/ RTUINT256_INIT_C(0xaaaaaaaaaaaaaaaa, 0xaaaaaaaaaaaaaaaa, 0xaaaaaaaaaaaaaaaa, 0xaaaaaaaaaaaaaaaa),
     13951            /* => */ RTUINT256_INIT_C(0xaaaaaaaaaaaaaaaa, 0xaaaaaaaaaaaaaaaa, 0xaaaaaaaaaaaaaaaa, 0xaaaaaaaaaaaaaaaa),
     13952            /*flgs*/ BS3_TEST_F_NO_PF },
     13953    };
     13954    static BS3CPUINSTR3_TEST5_VALUES_T const s_aValues_LD_dw_256[] =
     13955    {
     13956        {   // Copy all
     13957            /*src */ RTUINT256_INIT_C(0x0100010001000100, 0x0200020002000200, 0x0300030003000300, 0x0400040004000400),
     13958            /*mask*/ RTUINT256_INIT_C(0xb1b2b3b4b5b6b7b8, 0xa1a2a3a4a5a6a7a8, 0x9192939495969798, 0xfedcba9889abcdef),
     13959            /*init*/ RTUINT256_INIT_C(0xaaaaaaaaaaaaaaaa, 0xaaaaaaaaaaaaaaaa, 0xaaaaaaaaaaaaaaaa, 0xaaaaaaaaaaaaaaaa),
     13960            /* => */ RTUINT256_INIT_C(0x0100010001000100, 0x0200020002000200, 0x0300030003000300, 0x0400040004000400),
     13961            /*flgs*/ 0 },
     13962        {   // Copy only beginning of buffer
     13963            /*src */ RTUINT256_INIT_C(0x0100010001000100, 0x0200020002000200, 0x0300030003000300, 0x0400040004000400),
     13964            /*mask*/ RTUINT256_INIT_C(0x01b2b3b415b6b7b8, 0x21a2a3a435a6a7a8, 0x4192939455969798, 0x6edcba9889abcdef),
     13965            /*init*/ RTUINT256_INIT_C(0xaaaaaaaaaaaaaaaa, 0xaaaaaaaaaaaaaaaa, 0xaaaaaaaaaaaaaaaa, 0xaaaaaaaaaaaaaaaa),
     13966            /* => */ RTUINT256_INIT_C(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000004000400),
     13967            /*flgs*/ 0 },
     13968        {   // Copy only end of buffer
     13969            /*src */ RTUINT256_INIT_C(0x0100010001000100, 0x0200020002000200, 0x0300030003000300, 0x0400040004000400),
     13970            /*mask*/ RTUINT256_INIT_C(0xb1b2b3b415b6b7b8, 0x21a2a3a435a6a7a8, 0x4192939455969798, 0x6edcba9879abcdef),
     13971            /*init*/ RTUINT256_INIT_C(0xaaaaaaaaaaaaaaaa, 0xaaaaaaaaaaaaaaaa, 0xaaaaaaaaaaaaaaaa, 0xaaaaaaaaaaaaaaaa),
     13972            /* => */ RTUINT256_INIT_C(0x0100010000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000),
     13973            /*flgs*/ 0 },
     13974        {   // Copy none: loads all-0s (memory not accessed)
     13975            /*src */ RTUINT256_INIT_C(0x0100010001000100, 0x0200020002000200, 0x0300030003000300, 0x0400040004000400),
     13976            /*mask*/ RTUINT256_INIT_C(0x01b2b3b415b6b7b8, 0x21a2a3a435a6a7a8, 0x4192939455969798, 0x6edcba9879abcdef),
     13977            /*init*/ RTUINT256_INIT_C(0xaaaaaaaaaaaaaaaa, 0xaaaaaaaaaaaaaaaa, 0xaaaaaaaaaaaaaaaa, 0xaaaaaaaaaaaaaaaa),
     13978            /* => */ RTUINT256_INIT_C(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000),
     13979            /*flgs*/ BS3_TEST_F_NO_PF },
     13980    };
     13981    static BS3CPUINSTR3_TEST5_VALUES_T const s_aValues_ST_dw_256[] =
     13982    {
     13983        {   // Copy all
     13984            /*src */ RTUINT256_INIT_C(0x0100010001000100, 0x0200020002000200, 0x0300030003000300, 0x0400040004000400),
     13985            /*mask*/ RTUINT256_INIT_C(0xb1b2b3b4b5b6b7b8, 0xa1a2a3a4a5a6a7a8, 0x9192939495969798, 0xfedcba9889abcdef),
     13986            /*init*/ RTUINT256_INIT_C(0xaaaaaaaaaaaaaaaa, 0xaaaaaaaaaaaaaaaa, 0xaaaaaaaaaaaaaaaa, 0xaaaaaaaaaaaaaaaa),
     13987            /* => */ RTUINT256_INIT_C(0x0100010001000100, 0x0200020002000200, 0x0300030003000300, 0x0400040004000400),
     13988            /*flgs*/ 0 },
     13989        {   // Copy only beginning of buffer
     13990            /*src */ RTUINT256_INIT_C(0x0100010001000100, 0x0200020002000200, 0x0300030003000300, 0x0400040004000400),
     13991            /*mask*/ RTUINT256_INIT_C(0x01b2b3b415b6b7b8, 0x21a2a3a435a6a7a8, 0x4192939455969798, 0x6edcba9889abcdef),
     13992            /*init*/ RTUINT256_INIT_C(0xaaaaaaaaaaaaaaaa, 0xaaaaaaaaaaaaaaaa, 0xaaaaaaaaaaaaaaaa, 0xaaaaaaaaaaaaaaaa),
     13993            /* => */ RTUINT256_INIT_C(0xaaaaaaaaaaaaaaaa, 0xaaaaaaaaaaaaaaaa, 0xaaaaaaaaaaaaaaaa, 0xaaaaaaaa04000400),
     13994            /*flgs*/ 0 },
     13995        {   // Copy only end of buffer
     13996            /*src */ RTUINT256_INIT_C(0x0100010001000100, 0x0200020002000200, 0x0300030003000300, 0x0400040004000400),
     13997            /*mask*/ RTUINT256_INIT_C(0xb1b2b3b415b6b7b8, 0x21a2a3a435a6a7a8, 0x4192939455969798, 0x6edcba9879abcdef),
     13998            /*init*/ RTUINT256_INIT_C(0xaaaaaaaaaaaaaaaa, 0xaaaaaaaaaaaaaaaa, 0xaaaaaaaaaaaaaaaa, 0xaaaaaaaaaaaaaaaa),
     13999            /* => */ RTUINT256_INIT_C(0x01000100aaaaaaaa, 0xaaaaaaaaaaaaaaaa, 0xaaaaaaaaaaaaaaaa, 0xaaaaaaaaaaaaaaaa),
     14000            /*flgs*/ 0 },
     14001        {   // Copy none: stores nothing (memory not overwritten or even accessed)
     14002            /*src */ RTUINT256_INIT_C(0x0100010001000100, 0x0200020002000200, 0x0300030003000300, 0x0400040004000400),
     14003            /*mask*/ RTUINT256_INIT_C(0x01b2b3b415b6b7b8, 0x21a2a3a435a6a7a8, 0x4192939455969798, 0x6edcba9879abcdef),
     14004            /*init*/ RTUINT256_INIT_C(0xaaaaaaaaaaaaaaaa, 0xaaaaaaaaaaaaaaaa, 0xaaaaaaaaaaaaaaaa, 0xaaaaaaaaaaaaaaaa),
     14005            /* => */ RTUINT256_INIT_C(0xaaaaaaaaaaaaaaaa, 0xaaaaaaaaaaaaaaaa, 0xaaaaaaaaaaaaaaaa, 0xaaaaaaaaaaaaaaaa),
     14006            /*flgs*/ BS3_TEST_F_NO_PF },
     14007    };
     14008    static BS3CPUINSTR3_TEST5_VALUES_T const s_aValues_LD_qw_all[] =
     14009    {
     14010        {   // Copy all
     14011            /*src */ RTUINT256_INIT_C(0x0100010001000100, 0x0200020002000200, 0x0300030003000300, 0x0400040004000400),
     14012            /*mask*/ RTUINT256_INIT_C(0xb1b2b3b4b5b6b7b8, 0xa1a2a3a4a5a6a7a8, 0x9192939495969798, 0xfedcba9889abcdef),
     14013            /*init*/ RTUINT256_INIT_C(0xaaaaaaaaaaaaaaaa, 0xaaaaaaaaaaaaaaaa, 0xaaaaaaaaaaaaaaaa, 0xaaaaaaaaaaaaaaaa),
     14014            /* => */ RTUINT256_INIT_C(0x0100010001000100, 0x0200020002000200, 0x0300030003000300, 0x0400040004000400),
     14015            /*flgs*/ 0 },
     14016        {   // Copy some
     14017            /*src */ RTUINT256_INIT_C(0x0100010001000100, 0x0200020002000200, 0x0300030003000300, 0x0400040004000400),
     14018            /*mask*/ RTUINT256_INIT_C(0x01b2b3b4b5b6b7b8, 0xa1a2a3a435a6a7a8, 0x4192939495969798, 0xfedcba9889abcdef),
     14019            /*init*/ RTUINT256_INIT_C(0xaaaaaaaaaaaaaaaa, 0xaaaaaaaaaaaaaaaa, 0xaaaaaaaaaaaaaaaa, 0xaaaaaaaaaaaaaaaa),
     14020            /* => */ RTUINT256_INIT_C(0x0000000000000000, 0x0200020002000200, 0x0000000000000000, 0x0400040004000400),
     14021            /*flgs*/ 0 },
     14022        {   // Copy none: loads all-0s (memory not accessed)
     14023            /*src */ RTUINT256_INIT_C(0x0100010001000100, 0x0200020002000200, 0x0300030003000300, 0x0400040004000400),
     14024            /*mask*/ RTUINT256_INIT_C(0x01b2b3b415b6b7b8, 0x21a2a3a435a6a7a8, 0x4192939455969798, 0x6edcba9879abcdef),
     14025            /*init*/ RTUINT256_INIT_C(0xaaaaaaaaaaaaaaaa, 0xaaaaaaaaaaaaaaaa, 0xaaaaaaaaaaaaaaaa, 0xaaaaaaaaaaaaaaaa),
     14026            /* => */ RTUINT256_INIT_C(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000),
     14027            /*flgs*/ BS3_TEST_F_NO_PF },
     14028    };
     14029    static BS3CPUINSTR3_TEST5_VALUES_T const s_aValues_ST_qw_all[] =
     14030    {
     14031        {   // Copy all
     14032            /*src */ RTUINT256_INIT_C(0x0100010001000100, 0x0200020002000200, 0x0300030003000300, 0x0400040004000400),
     14033            /*mask*/ RTUINT256_INIT_C(0xb1b2b3b4b5b6b7b8, 0xa1a2a3a4a5a6a7a8, 0x9192939495969798, 0xfedcba9889abcdef),
     14034            /*init*/ RTUINT256_INIT_C(0xaaaaaaaaaaaaaaaa, 0xaaaaaaaaaaaaaaaa, 0xaaaaaaaaaaaaaaaa, 0xaaaaaaaaaaaaaaaa),
     14035            /* => */ RTUINT256_INIT_C(0x0100010001000100, 0x0200020002000200, 0x0300030003000300, 0x0400040004000400),
     14036            /*flgs*/ 0 },
     14037        {   // Copy some
     14038            /*src */ RTUINT256_INIT_C(0x0100010001000100, 0x0200020002000200, 0x0300030003000300, 0x0400040004000400),
     14039            /*mask*/ RTUINT256_INIT_C(0x01b2b3b4b5b6b7b8, 0xa1a2a3a435a6a7a8, 0x4192939495969798, 0xfedcba9889abcdef),
     14040            /*init*/ RTUINT256_INIT_C(0xaaaaaaaaaaaaaaaa, 0xaaaaaaaaaaaaaaaa, 0xaaaaaaaaaaaaaaaa, 0xaaaaaaaaaaaaaaaa),
     14041            /* => */ RTUINT256_INIT_C(0xaaaaaaaaaaaaaaaa, 0x0200020002000200, 0xaaaaaaaaaaaaaaaa, 0x0400040004000400),
     14042            /*flgs*/ 0 },
     14043        {   // Copy none: stores nothing (memory not overwritten or even accessed)
     14044            /*src */ RTUINT256_INIT_C(0x0100010001000100, 0x0200020002000200, 0x0300030003000300, 0x0400040004000400),
     14045            /*mask*/ RTUINT256_INIT_C(0x01b2b3b415b6b7b8, 0x21a2a3a435a6a7a8, 0x4192939455969798, 0x6edcba9879abcdef),
     14046            /*init*/ RTUINT256_INIT_C(0xaaaaaaaaaaaaaaaa, 0xaaaaaaaaaaaaaaaa, 0xaaaaaaaaaaaaaaaa, 0xaaaaaaaaaaaaaaaa),
     14047            /* => */ RTUINT256_INIT_C(0xaaaaaaaaaaaaaaaa, 0xaaaaaaaaaaaaaaaa, 0xaaaaaaaaaaaaaaaa, 0xaaaaaaaaaaaaaaaa),
     14048            /*flgs*/ BS3_TEST_F_NO_PF },
     14049    };
     14050
     14051    static BS3CPUINSTR3_TEST5_T const s_aTests16[] =
     14052    { //                                                                                        =>  src1 src2 src3
     14053      //                                                                                       DEST INIT MASK SOURCE
     14054        {  bs3CpuInstr3_vmaskmovps_XMM0_XMM1_FSxBX_icebp_c16, X86_XCPT_DB, RM_RANGE, T_AVX_128,  0,   0,   1, 255, RT_ELEMENTS(s_aValues_LD_dw_128), s_aValues_LD_dw_128 },
     14055        {  bs3CpuInstr3_vmaskmovps_YMM0_YMM1_FSxBX_icebp_c16, X86_XCPT_DB, RM_RANGE, T_AVX_256,  0,   0,   1, 255, RT_ELEMENTS(s_aValues_LD_dw_256), s_aValues_LD_dw_256 },
     14056        {  bs3CpuInstr3_vmaskmovps_FSxBX_XMM0_XMM1_icebp_c16, X86_XCPT_DB, RM_RANGE, T_AVX_128,  255, 255, 0,   1, RT_ELEMENTS(s_aValues_ST_dw_128), s_aValues_ST_dw_128 },
     14057        {  bs3CpuInstr3_vmaskmovps_FSxBX_YMM0_YMM1_icebp_c16, X86_XCPT_DB, RM_RANGE, T_AVX_256,  255, 255, 0,   1, RT_ELEMENTS(s_aValues_ST_dw_256), s_aValues_ST_dw_256 },
     14058
     14059        {  bs3CpuInstr3_vmaskmovpd_XMM0_XMM1_FSxBX_icebp_c16, X86_XCPT_DB, RM_RANGE, T_AVX_128,  0,   0,   1, 255, RT_ELEMENTS(s_aValues_LD_qw_all), s_aValues_LD_qw_all },
     14060        {  bs3CpuInstr3_vmaskmovpd_YMM0_YMM1_FSxBX_icebp_c16, X86_XCPT_DB, RM_RANGE, T_AVX_256,  0,   0,   1, 255, RT_ELEMENTS(s_aValues_LD_qw_all), s_aValues_LD_qw_all },
     14061        {  bs3CpuInstr3_vmaskmovpd_FSxBX_XMM0_XMM1_icebp_c16, X86_XCPT_DB, RM_RANGE, T_AVX_128,  255, 255, 0,   1, RT_ELEMENTS(s_aValues_ST_qw_all), s_aValues_ST_qw_all },
     14062        {  bs3CpuInstr3_vmaskmovpd_FSxBX_YMM0_YMM1_icebp_c16, X86_XCPT_DB, RM_RANGE, T_AVX_256,  255, 255, 0,   1, RT_ELEMENTS(s_aValues_ST_qw_all), s_aValues_ST_qw_all },
     14063
     14064        {  bs3CpuInstr3_vpmaskmovd_XMM0_XMM1_FSxBX_icebp_c16, X86_XCPT_DB, RM_RANGE, T_AVX2_128, 0,   0,   1, 255, RT_ELEMENTS(s_aValues_LD_dw_128), s_aValues_LD_dw_128 },
     14065        {  bs3CpuInstr3_vpmaskmovd_YMM0_YMM1_FSxBX_icebp_c16, X86_XCPT_DB, RM_RANGE, T_AVX2_256, 0,   0,   1, 255, RT_ELEMENTS(s_aValues_LD_dw_256), s_aValues_LD_dw_256 },
     14066        {  bs3CpuInstr3_vpmaskmovd_FSxBX_XMM0_XMM1_icebp_c16, X86_XCPT_DB, RM_RANGE, T_AVX2_128, 255, 255, 0,   1, RT_ELEMENTS(s_aValues_ST_dw_128), s_aValues_ST_dw_128 },
     14067        {  bs3CpuInstr3_vpmaskmovd_FSxBX_YMM0_YMM1_icebp_c16, X86_XCPT_DB, RM_RANGE, T_AVX2_256, 255, 255, 0,   1, RT_ELEMENTS(s_aValues_ST_dw_256), s_aValues_ST_dw_256 },
     14068
     14069        {  bs3CpuInstr3_vpmaskmovq_XMM0_XMM1_FSxBX_icebp_c16, X86_XCPT_DB, RM_RANGE, T_AVX2_128, 0,   0,   1, 255, RT_ELEMENTS(s_aValues_LD_qw_all), s_aValues_LD_qw_all },
     14070        {  bs3CpuInstr3_vpmaskmovq_YMM0_YMM1_FSxBX_icebp_c16, X86_XCPT_DB, RM_RANGE, T_AVX2_256, 0,   0,   1, 255, RT_ELEMENTS(s_aValues_LD_qw_all), s_aValues_LD_qw_all },
     14071        {  bs3CpuInstr3_vpmaskmovq_FSxBX_XMM0_XMM1_icebp_c16, X86_XCPT_DB, RM_RANGE, T_AVX2_128, 255, 255, 0,   1, RT_ELEMENTS(s_aValues_ST_qw_all), s_aValues_ST_qw_all },
     14072        {  bs3CpuInstr3_vpmaskmovq_FSxBX_YMM0_YMM1_icebp_c16, X86_XCPT_DB, RM_RANGE, T_AVX2_256, 255, 255, 0,   1, RT_ELEMENTS(s_aValues_ST_qw_all), s_aValues_ST_qw_all },
     14073    };
     14074    static BS3CPUINSTR3_TEST5_T const s_aTests32[] =
     14075    {
     14076        {  bs3CpuInstr3_vmaskmovps_XMM0_XMM1_FSxBX_icebp_c32, X86_XCPT_DB, RM_RANGE, T_AVX_128,  0,   0,   1, 255, RT_ELEMENTS(s_aValues_LD_dw_128), s_aValues_LD_dw_128 },
     14077        {  bs3CpuInstr3_vmaskmovps_YMM0_YMM1_FSxBX_icebp_c32, X86_XCPT_DB, RM_RANGE, T_AVX_256,  0,   0,   1, 255, RT_ELEMENTS(s_aValues_LD_dw_256), s_aValues_LD_dw_256 },
     14078        {  bs3CpuInstr3_vmaskmovps_FSxBX_XMM0_XMM1_icebp_c32, X86_XCPT_DB, RM_RANGE, T_AVX_128,  255, 255, 0,   1, RT_ELEMENTS(s_aValues_ST_dw_128), s_aValues_ST_dw_128 },
     14079        {  bs3CpuInstr3_vmaskmovps_FSxBX_YMM0_YMM1_icebp_c32, X86_XCPT_DB, RM_RANGE, T_AVX_256,  255, 255, 0,   1, RT_ELEMENTS(s_aValues_ST_dw_256), s_aValues_ST_dw_256 },
     14080
     14081        {  bs3CpuInstr3_vmaskmovpd_XMM0_XMM1_FSxBX_icebp_c32, X86_XCPT_DB, RM_RANGE, T_AVX_128,  0,   0,   1, 255, RT_ELEMENTS(s_aValues_LD_qw_all), s_aValues_LD_qw_all },
     14082        {  bs3CpuInstr3_vmaskmovpd_YMM0_YMM1_FSxBX_icebp_c32, X86_XCPT_DB, RM_RANGE, T_AVX_256,  0,   0,   1, 255, RT_ELEMENTS(s_aValues_LD_qw_all), s_aValues_LD_qw_all },
     14083        {  bs3CpuInstr3_vmaskmovpd_FSxBX_XMM0_XMM1_icebp_c32, X86_XCPT_DB, RM_RANGE, T_AVX_128,  255, 255, 0,   1, RT_ELEMENTS(s_aValues_ST_qw_all), s_aValues_ST_qw_all },
     14084        {  bs3CpuInstr3_vmaskmovpd_FSxBX_YMM0_YMM1_icebp_c32, X86_XCPT_DB, RM_RANGE, T_AVX_256,  255, 255, 0,   1, RT_ELEMENTS(s_aValues_ST_qw_all), s_aValues_ST_qw_all },
     14085
     14086        {  bs3CpuInstr3_vpmaskmovd_XMM0_XMM1_FSxBX_icebp_c32, X86_XCPT_DB, RM_RANGE, T_AVX2_128, 0,   0,   1, 255, RT_ELEMENTS(s_aValues_LD_dw_128), s_aValues_LD_dw_128 },
     14087        {  bs3CpuInstr3_vpmaskmovd_YMM0_YMM1_FSxBX_icebp_c32, X86_XCPT_DB, RM_RANGE, T_AVX2_256, 0,   0,   1, 255, RT_ELEMENTS(s_aValues_LD_dw_256), s_aValues_LD_dw_256 },
     14088        {  bs3CpuInstr3_vpmaskmovd_FSxBX_XMM0_XMM1_icebp_c32, X86_XCPT_DB, RM_RANGE, T_AVX2_128, 255, 255, 0,   1, RT_ELEMENTS(s_aValues_ST_dw_128), s_aValues_ST_dw_128 },
     14089        {  bs3CpuInstr3_vpmaskmovd_FSxBX_YMM0_YMM1_icebp_c32, X86_XCPT_DB, RM_RANGE, T_AVX2_256, 255, 255, 0,   1, RT_ELEMENTS(s_aValues_ST_dw_256), s_aValues_ST_dw_256 },
     14090
     14091        {  bs3CpuInstr3_vpmaskmovq_XMM0_XMM1_FSxBX_icebp_c32, X86_XCPT_DB, RM_RANGE, T_AVX2_128, 0,   0,   1, 255, RT_ELEMENTS(s_aValues_LD_qw_all), s_aValues_LD_qw_all },
     14092        {  bs3CpuInstr3_vpmaskmovq_YMM0_YMM1_FSxBX_icebp_c32, X86_XCPT_DB, RM_RANGE, T_AVX2_256, 0,   0,   1, 255, RT_ELEMENTS(s_aValues_LD_qw_all), s_aValues_LD_qw_all },
     14093        {  bs3CpuInstr3_vpmaskmovq_FSxBX_XMM0_XMM1_icebp_c32, X86_XCPT_DB, RM_RANGE, T_AVX2_128, 255, 255, 0,   1, RT_ELEMENTS(s_aValues_ST_qw_all), s_aValues_ST_qw_all },
     14094        {  bs3CpuInstr3_vpmaskmovq_FSxBX_YMM0_YMM1_icebp_c32, X86_XCPT_DB, RM_RANGE, T_AVX2_256, 255, 255, 0,   1, RT_ELEMENTS(s_aValues_ST_qw_all), s_aValues_ST_qw_all },
     14095    };
     14096    static BS3CPUINSTR3_TEST5_T const s_aTests64[] =
     14097    {
     14098        {  bs3CpuInstr3_vmaskmovps_XMM0_XMM1_FSxBX_icebp_c64, X86_XCPT_DB, RM_RANGE, T_AVX_128,  0,   0,   1, 255, RT_ELEMENTS(s_aValues_LD_dw_128), s_aValues_LD_dw_128 },
     14099        {  bs3CpuInstr3_vmaskmovps_YMM0_YMM1_FSxBX_icebp_c64, X86_XCPT_DB, RM_RANGE, T_AVX_256,  0,   0,   1, 255, RT_ELEMENTS(s_aValues_LD_dw_256), s_aValues_LD_dw_256 },
     14100        {  bs3CpuInstr3_vmaskmovps_FSxBX_XMM0_XMM1_icebp_c64, X86_XCPT_DB, RM_RANGE, T_AVX_128,  255, 255, 0,   1, RT_ELEMENTS(s_aValues_ST_dw_128), s_aValues_ST_dw_128 },
     14101        {  bs3CpuInstr3_vmaskmovps_FSxBX_YMM0_YMM1_icebp_c64, X86_XCPT_DB, RM_RANGE, T_AVX_256,  255, 255, 0,   1, RT_ELEMENTS(s_aValues_ST_dw_256), s_aValues_ST_dw_256 },
     14102
     14103        {  bs3CpuInstr3_vmaskmovpd_XMM0_XMM1_FSxBX_icebp_c64, X86_XCPT_DB, RM_RANGE, T_AVX_128,  0,   0,   1, 255, RT_ELEMENTS(s_aValues_LD_qw_all), s_aValues_LD_qw_all },
     14104        {  bs3CpuInstr3_vmaskmovpd_YMM0_YMM1_FSxBX_icebp_c64, X86_XCPT_DB, RM_RANGE, T_AVX_256,  0,   0,   1, 255, RT_ELEMENTS(s_aValues_LD_qw_all), s_aValues_LD_qw_all },
     14105        {  bs3CpuInstr3_vmaskmovpd_FSxBX_XMM0_XMM1_icebp_c64, X86_XCPT_DB, RM_RANGE, T_AVX_128,  255, 255, 0,   1, RT_ELEMENTS(s_aValues_ST_qw_all), s_aValues_ST_qw_all },
     14106        {  bs3CpuInstr3_vmaskmovpd_FSxBX_YMM0_YMM1_icebp_c64, X86_XCPT_DB, RM_RANGE, T_AVX_256,  255, 255, 0,   1, RT_ELEMENTS(s_aValues_ST_qw_all), s_aValues_ST_qw_all },
     14107
     14108        {  bs3CpuInstr3_vpmaskmovd_XMM0_XMM1_FSxBX_icebp_c64, X86_XCPT_DB, RM_RANGE, T_AVX2_128, 0,   0,   1, 255, RT_ELEMENTS(s_aValues_LD_dw_128), s_aValues_LD_dw_128 },
     14109        {  bs3CpuInstr3_vpmaskmovd_YMM0_YMM1_FSxBX_icebp_c64, X86_XCPT_DB, RM_RANGE, T_AVX2_256, 0,   0,   1, 255, RT_ELEMENTS(s_aValues_LD_dw_256), s_aValues_LD_dw_256 },
     14110        {  bs3CpuInstr3_vpmaskmovd_FSxBX_XMM0_XMM1_icebp_c64, X86_XCPT_DB, RM_RANGE, T_AVX2_128, 255, 255, 0,   1, RT_ELEMENTS(s_aValues_ST_dw_128), s_aValues_ST_dw_128 },
     14111        {  bs3CpuInstr3_vpmaskmovd_FSxBX_YMM0_YMM1_icebp_c64, X86_XCPT_DB, RM_RANGE, T_AVX2_256, 255, 255, 0,   1, RT_ELEMENTS(s_aValues_ST_dw_256), s_aValues_ST_dw_256 },
     14112
     14113        {  bs3CpuInstr3_vpmaskmovq_XMM0_XMM1_FSxBX_icebp_c64, X86_XCPT_DB, RM_RANGE, T_AVX2_128, 0,   0,   1, 255, RT_ELEMENTS(s_aValues_LD_qw_all), s_aValues_LD_qw_all },
     14114        {  bs3CpuInstr3_vpmaskmovq_YMM0_YMM1_FSxBX_icebp_c64, X86_XCPT_DB, RM_RANGE, T_AVX2_256, 0,   0,   1, 255, RT_ELEMENTS(s_aValues_LD_qw_all), s_aValues_LD_qw_all },
     14115        {  bs3CpuInstr3_vpmaskmovq_FSxBX_XMM0_XMM1_icebp_c64, X86_XCPT_DB, RM_RANGE, T_AVX2_128, 255, 255, 0,   1, RT_ELEMENTS(s_aValues_ST_qw_all), s_aValues_ST_qw_all },
     14116        {  bs3CpuInstr3_vpmaskmovq_FSxBX_YMM0_YMM1_icebp_c64, X86_XCPT_DB, RM_RANGE, T_AVX2_256, 255, 255, 0,   1, RT_ELEMENTS(s_aValues_ST_qw_all), s_aValues_ST_qw_all },
     14117
     14118        {  bs3CpuInstr3_vmaskmovps_XMM8_XMM9_FSxBX_icebp_c64, X86_XCPT_DB, RM_RANGE, T_AVX_128,  8,   8,   9, 255, RT_ELEMENTS(s_aValues_LD_dw_128), s_aValues_LD_dw_128 },
     14119        {  bs3CpuInstr3_vmaskmovps_YMM8_YMM9_FSxBX_icebp_c64, X86_XCPT_DB, RM_RANGE, T_AVX_256,  8,   8,   9, 255, RT_ELEMENTS(s_aValues_LD_dw_256), s_aValues_LD_dw_256 },
     14120        {  bs3CpuInstr3_vmaskmovps_FSxBX_XMM8_XMM9_icebp_c64, X86_XCPT_DB, RM_RANGE, T_AVX_128,  255, 255, 8,   9, RT_ELEMENTS(s_aValues_ST_dw_128), s_aValues_ST_dw_128 },
     14121        {  bs3CpuInstr3_vmaskmovps_FSxBX_YMM8_YMM9_icebp_c64, X86_XCPT_DB, RM_RANGE, T_AVX_256,  255, 255, 8,   9, RT_ELEMENTS(s_aValues_ST_dw_256), s_aValues_ST_dw_256 },
     14122
     14123        {  bs3CpuInstr3_vmaskmovpd_XMM8_XMM9_FSxBX_icebp_c64, X86_XCPT_DB, RM_RANGE, T_AVX_128,  8,   8,   9, 255, RT_ELEMENTS(s_aValues_LD_qw_all), s_aValues_LD_qw_all },
     14124        {  bs3CpuInstr3_vmaskmovpd_YMM8_YMM9_FSxBX_icebp_c64, X86_XCPT_DB, RM_RANGE, T_AVX_256,  8,   8,   9, 255, RT_ELEMENTS(s_aValues_LD_qw_all), s_aValues_LD_qw_all },
     14125        {  bs3CpuInstr3_vmaskmovpd_FSxBX_XMM8_XMM9_icebp_c64, X86_XCPT_DB, RM_RANGE, T_AVX_128,  255, 255, 8,   9, RT_ELEMENTS(s_aValues_ST_qw_all), s_aValues_ST_qw_all },
     14126        {  bs3CpuInstr3_vmaskmovpd_FSxBX_YMM8_YMM9_icebp_c64, X86_XCPT_DB, RM_RANGE, T_AVX_256,  255, 255, 8,   9, RT_ELEMENTS(s_aValues_ST_qw_all), s_aValues_ST_qw_all },
     14127
     14128        {  bs3CpuInstr3_vpmaskmovd_XMM8_XMM9_FSxBX_icebp_c64, X86_XCPT_DB, RM_RANGE, T_AVX2_128, 8,   8,   9, 255, RT_ELEMENTS(s_aValues_LD_dw_128), s_aValues_LD_dw_128 },
     14129        {  bs3CpuInstr3_vpmaskmovd_YMM8_YMM9_FSxBX_icebp_c64, X86_XCPT_DB, RM_RANGE, T_AVX2_256, 8,   8,   9, 255, RT_ELEMENTS(s_aValues_LD_dw_256), s_aValues_LD_dw_256 },
     14130        {  bs3CpuInstr3_vpmaskmovd_FSxBX_XMM8_XMM9_icebp_c64, X86_XCPT_DB, RM_RANGE, T_AVX2_128, 255, 255, 8,   9, RT_ELEMENTS(s_aValues_ST_dw_128), s_aValues_ST_dw_128 },
     14131        {  bs3CpuInstr3_vpmaskmovd_FSxBX_YMM8_YMM9_icebp_c64, X86_XCPT_DB, RM_RANGE, T_AVX2_256, 255, 255, 8,   9, RT_ELEMENTS(s_aValues_ST_dw_256), s_aValues_ST_dw_256 },
     14132
     14133        {  bs3CpuInstr3_vpmaskmovq_XMM8_XMM9_FSxBX_icebp_c64, X86_XCPT_DB, RM_RANGE, T_AVX2_128, 8,   8,   9, 255, RT_ELEMENTS(s_aValues_LD_qw_all), s_aValues_LD_qw_all },
     14134        {  bs3CpuInstr3_vpmaskmovq_YMM8_YMM9_FSxBX_icebp_c64, X86_XCPT_DB, RM_RANGE, T_AVX2_256, 8,   8,   9, 255, RT_ELEMENTS(s_aValues_LD_qw_all), s_aValues_LD_qw_all },
     14135        {  bs3CpuInstr3_vpmaskmovq_FSxBX_XMM8_XMM9_icebp_c64, X86_XCPT_DB, RM_RANGE, T_AVX2_128, 255, 255, 8,   9, RT_ELEMENTS(s_aValues_ST_qw_all), s_aValues_ST_qw_all },
     14136        {  bs3CpuInstr3_vpmaskmovq_FSxBX_YMM8_YMM9_icebp_c64, X86_XCPT_DB, RM_RANGE, T_AVX2_256, 255, 255, 8,   9, RT_ELEMENTS(s_aValues_ST_qw_all), s_aValues_ST_qw_all },
     14137    };
     14138    static BS3CPUINSTR3_TEST5_MODE_T const s_aTests[3] = BS3CPUINSTR3_TEST5_MODES_INIT(s_aTests16, s_aTests32, s_aTests64);
     14139    unsigned const                         iTest       = BS3CPUINSTR3_TEST_MODES_INDEX(bMode);
     14140    return bs3CpuInstr3_WorkerTestType5(bMode, s_aTests[iTest].paTests, s_aTests[iTest].cTests,
     14141                                        g_aXcptConfig5, RT_ELEMENTS(g_aXcptConfig5));
    1389214142}
    1389314143
     
    1468814938#if defined(ALL_TESTS)
    1468914939        { "maskmovq/[v]maskmovdqu",                         bs3CpuInstr3_maskmovq_v_maskmovdqu, 0 },
     14940        { "vmaskmovps/vmaskmovpd/vpmaskmovd/vpmaskmovq",    bs3CpuInstr3_vmaskmovps_d_vpmaskmovd_q, 0 },
    1469014941#endif
    1469114942    };
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