VirtualBox

Ignore:
Timestamp:
Jul 5, 2022 11:53:19 PM (3 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
152145
Message:

ValKit/bs3-cpu-instr-3: Simple [v]movntdqa, [v]movups and [v]movupd 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

    r95511 r95523  
    921921 %endif
    922922
     923;
     924; [V]MOVNTDQA
     925;
     926EMIT_INSTR_PLUS_ICEBP movntdqa,  XMM1, FSxBX
     927EMIT_INSTR_PLUS_ICEBP vmovntdqa, XMM1, FSxBX
     928EMIT_INSTR_PLUS_ICEBP vmovntdqa, YMM1, FSxBX
     929 %if TMPL_BITS == 64
     930EMIT_INSTR_PLUS_ICEBP movntdqa,  XMM10, FSxBX
     931EMIT_INSTR_PLUS_ICEBP vmovntdqa, XMM11, FSxBX
     932EMIT_INSTR_PLUS_ICEBP vmovntdqa, YMM12, FSxBX
     933 %endif
     934
     935;
     936; [V]MOVUPS - not testing the 2nd register variant.
     937;
     938EMIT_INSTR_PLUS_ICEBP movups,  XMM1, XMM2
     939EMIT_INSTR_PLUS_ICEBP movups,  XMM1, FSxBX
     940EMIT_INSTR_PLUS_ICEBP movups,  FSxBX, XMM1
     941EMIT_INSTR_PLUS_ICEBP vmovups, XMM1, XMM2
     942EMIT_INSTR_PLUS_ICEBP vmovups, XMM1, FSxBX
     943EMIT_INSTR_PLUS_ICEBP vmovups, FSxBX, XMM1
     944EMIT_INSTR_PLUS_ICEBP vmovups, YMM1, YMM2
     945EMIT_INSTR_PLUS_ICEBP vmovups, YMM1, FSxBX
     946EMIT_INSTR_PLUS_ICEBP vmovups, FSxBX, YMM1
     947 %if TMPL_BITS == 64
     948EMIT_INSTR_PLUS_ICEBP movups,  XMM8,  XMM12
     949EMIT_INSTR_PLUS_ICEBP movups,  XMM10, FSxBX
     950EMIT_INSTR_PLUS_ICEBP movups,  FSxBX, XMM10
     951EMIT_INSTR_PLUS_ICEBP vmovups, XMM7,  XMM14
     952EMIT_INSTR_PLUS_ICEBP vmovups, XMM11, FSxBX
     953EMIT_INSTR_PLUS_ICEBP vmovups, FSxBX, XMM11
     954EMIT_INSTR_PLUS_ICEBP vmovups, YMM12, YMM8
     955EMIT_INSTR_PLUS_ICEBP vmovups, YMM12, FSxBX
     956EMIT_INSTR_PLUS_ICEBP vmovups, FSxBX, YMM12
     957 %endif
     958
     959;
     960; [V]MOVUPD - not testing the 2nd register variant.
     961;
     962EMIT_INSTR_PLUS_ICEBP movupd,  XMM1, XMM2
     963EMIT_INSTR_PLUS_ICEBP movupd,  XMM1, FSxBX
     964EMIT_INSTR_PLUS_ICEBP movupd,  FSxBX, XMM1
     965EMIT_INSTR_PLUS_ICEBP vmovupd, XMM1, XMM2
     966EMIT_INSTR_PLUS_ICEBP vmovupd, XMM1, FSxBX
     967EMIT_INSTR_PLUS_ICEBP vmovupd, FSxBX, XMM1
     968EMIT_INSTR_PLUS_ICEBP vmovupd, YMM1, YMM2
     969EMIT_INSTR_PLUS_ICEBP vmovupd, YMM1, FSxBX
     970EMIT_INSTR_PLUS_ICEBP vmovupd, FSxBX, YMM1
     971 %if TMPL_BITS == 64
     972EMIT_INSTR_PLUS_ICEBP movupd,  XMM8,  XMM12
     973EMIT_INSTR_PLUS_ICEBP movupd,  XMM10, FSxBX
     974EMIT_INSTR_PLUS_ICEBP movupd,  FSxBX, XMM10
     975EMIT_INSTR_PLUS_ICEBP vmovupd, XMM7,  XMM14
     976EMIT_INSTR_PLUS_ICEBP vmovupd, XMM11, FSxBX
     977EMIT_INSTR_PLUS_ICEBP vmovupd, FSxBX, XMM11
     978EMIT_INSTR_PLUS_ICEBP vmovupd, YMM12, YMM8
     979EMIT_INSTR_PLUS_ICEBP vmovupd, YMM12, FSxBX
     980EMIT_INSTR_PLUS_ICEBP vmovupd, FSxBX, YMM12
     981 %endif
     982
    923983%endif ; BS3_INSTANTIATING_CMN
    924984
  • trunk/src/VBox/ValidationKit/bootsectors/bs3-cpu-instr-3.c32

    r95511 r95523  
    6464
    6565/** Memory or register rm variant. */
    66 enum { RM_REG, RM_MEM };
     66enum { RM_REG = 0, RM_MEM };
    6767
    6868/**
     
    393393extern FNBS3FAR             bs3CpuInstr3_vpshufb_YMM8_YMM9_FSxBX_icebp_c64;
    394394
    395 /* PSHUFW */
    396 BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_pshufw_MM1_MM2_0FFh_icebp);
    397 BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_pshufw_MM1_FSxBX_0FFh_icebp);
    398 BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_pshufw_MM1_MM2_01Bh_icebp);
    399 BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_pshufw_MM1_FSxBX_01Bh_icebp);
    400 
    401 /* [V]PSHUFHW */
    402 BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_pshufhw_XMM1_XMM2_0FFh_icebp);
    403 BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_pshufhw_XMM1_FSxBX_0FFh_icebp);
    404 BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_pshufhw_XMM1_XMM2_01Bh_icebp);
    405 BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_pshufhw_XMM1_FSxBX_01Bh_icebp);
    406 
    407 BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_vpshufhw_XMM1_XMM2_0FFh_icebp);
    408 BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_vpshufhw_XMM1_FSxBX_0FFh_icebp);
    409 BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_vpshufhw_XMM1_XMM2_01Bh_icebp);
    410 BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_vpshufhw_XMM1_FSxBX_01Bh_icebp);
    411 
    412 BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_vpshufhw_YMM1_YMM2_0FFh_icebp);
    413 BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_vpshufhw_YMM1_FSxBX_0FFh_icebp);
    414 BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_vpshufhw_YMM1_YMM2_01Bh_icebp);
    415 BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_vpshufhw_YMM1_FSxBX_01Bh_icebp);
    416 extern FNBS3FAR             bs3CpuInstr3_vpshufhw_YMM12_YMM7_0FFh_icebp_c64;
    417 extern FNBS3FAR             bs3CpuInstr3_vpshufhw_YMM9_YMM12_01Bh_icebp_c64;
    418 
    419 /* [V]PSHUFLW */
    420 BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_pshuflw_XMM1_XMM2_0FFh_icebp);
    421 BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_pshuflw_XMM1_FSxBX_0FFh_icebp);
    422 BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_pshuflw_XMM1_XMM2_01Bh_icebp);
    423 BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_pshuflw_XMM1_FSxBX_01Bh_icebp);
    424 
    425 BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_vpshuflw_XMM1_XMM2_0FFh_icebp);
    426 BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_vpshuflw_XMM1_FSxBX_0FFh_icebp);
    427 BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_vpshuflw_XMM1_XMM2_01Bh_icebp);
    428 BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_vpshuflw_XMM1_FSxBX_01Bh_icebp);
    429 
    430 BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_vpshuflw_YMM1_YMM2_0FFh_icebp);
    431 BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_vpshuflw_YMM1_FSxBX_0FFh_icebp);
    432 BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_vpshuflw_YMM1_YMM2_01Bh_icebp);
    433 BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_vpshuflw_YMM1_FSxBX_01Bh_icebp);
    434 extern FNBS3FAR             bs3CpuInstr3_vpshuflw_YMM12_YMM7_0FFh_icebp_c64;
    435 extern FNBS3FAR             bs3CpuInstr3_vpshuflw_YMM9_YMM12_01Bh_icebp_c64;
    436 
    437 /* [V]PSHUFD */
    438 BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_pshufd_XMM1_XMM2_0FFh_icebp);
    439 BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_pshufd_XMM1_FSxBX_0FFh_icebp);
    440 BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_pshufd_XMM1_XMM2_01Bh_icebp);
    441 BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_pshufd_XMM1_FSxBX_01Bh_icebp);
    442 
    443 BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_vpshufd_XMM1_XMM2_0FFh_icebp);
    444 BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_vpshufd_XMM1_FSxBX_0FFh_icebp);
    445 BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_vpshufd_XMM1_XMM2_01Bh_icebp);
    446 BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_vpshufd_XMM1_FSxBX_01Bh_icebp);
    447 
    448 BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_vpshufd_YMM1_YMM2_0FFh_icebp);
    449 BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_vpshufd_YMM1_FSxBX_0FFh_icebp);
    450 BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_vpshufd_YMM1_YMM2_01Bh_icebp);
    451 BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_vpshufd_YMM1_FSxBX_01Bh_icebp);
    452 extern FNBS3FAR             bs3CpuInstr3_vpshufd_YMM12_YMM7_0FFh_icebp_c64;
    453 extern FNBS3FAR             bs3CpuInstr3_vpshufd_YMM9_YMM12_01Bh_icebp_c64;
    454 
    455395/* [V]PUNPCKHBW */
    456396BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_punpckhbw_MM1_MM2_icebp);
     
    647587static bool g_afTypeSupports[T_MAX] = { false, false, false, false, false, false, false, false, false };
    648588
    649 /** Exception type #4 test configurations. */
     589/** Exception type \#4 test configurations. */
    650590static const BS3CPUINSTR3_CONFIG_T g_aXcptConfig4[] =
    651591{
     
    671611    { 0, 0,  0,  1,      1,       1,   1,   0,   0,        0,       1,    X86_XCPT_DB, X86_XCPT_DB, X86_XCPT_DB }, /* #12 */
    672612    { 0, 0,  0,  1,      1,       1,   1,   0,   0,        1,       1,    X86_XCPT_AC, X86_XCPT_AC, X86_XCPT_AC }, /* #13 */
     613};
     614
     615/** Exception type \#4 test configurations, for the SSE version of movups. */
     616static const BS3CPUINSTR3_CONFIG_T g_aXcptConfig4Unaligned[] =
     617{
     618/*
     619 *   X87 SSE SSE SSE     AVX      AVX  AVX  MMX  MMX+SSE   MMX+AVX  AMD/SSE   <-- applies to
     620 *                                               +AVX      +AMD/SSE
     621 *   CR0 CR0 CR0 CR4     CR4      XCR0 XCR0 FCW                      MXCSR
     622 *   MP, EM, TS, OSFXSR, OSXSAVE, SSE, AVX, ES+, fAligned, AC/AM,   MM,   bXcptMmx,    bXcptSse,    bXcptAvx */
     623    { 0, 0,  0,  1,      1,       1,   1,   0,   1,        0,       0,    X86_XCPT_DB, X86_XCPT_DB, X86_XCPT_DB }, /* #0 */
     624    { 1, 0,  0,  1,      1,       1,   1,   0,   1,        0,       0,    X86_XCPT_DB, X86_XCPT_DB, X86_XCPT_DB }, /* #1 */
     625    { 0, 1,  0,  1,      1,       1,   1,   0,   1,        0,       0,    X86_XCPT_UD, X86_XCPT_UD, X86_XCPT_DB }, /* #2 */
     626    { 0, 0,  1,  1,      1,       1,   1,   0,   1,        0,       0,    X86_XCPT_NM, X86_XCPT_NM, X86_XCPT_NM }, /* #3 */
     627    { 0, 1,  1,  1,      1,       1,   1,   0,   1,        0,       0,    X86_XCPT_UD, X86_XCPT_UD, X86_XCPT_NM }, /* #4 */
     628    { 0, 0,  0,  0,      1,       1,   1,   0,   1,        0,       0,    X86_XCPT_DB, X86_XCPT_UD, X86_XCPT_DB }, /* #5 */
     629    { 0, 0,  0,  1,      0,       1,   1,   0,   1,        0,       0,    X86_XCPT_DB, X86_XCPT_DB, X86_XCPT_UD }, /* #6 */
     630    { 0, 0,  0,  1,      1,       1,   0,   0,   1,        0,       0,    X86_XCPT_DB, X86_XCPT_DB, X86_XCPT_UD }, /* #7 */
     631    { 0, 0,  0,  1,      1,       0,   0,   0,   1,        0,       0,    X86_XCPT_DB, X86_XCPT_DB, X86_XCPT_UD }, /* #8 */
     632    { 0, 0,  0,  1,      1,       1,   1,   1,   1,        0,       0,    X86_XCPT_MF, X86_XCPT_DB, X86_XCPT_DB }, /* #9 - pending x87 exception */
     633    /* Memory misalignment: */
     634    { 0, 0,  0,  1,      1,       1,   1,   0,   0,        0,       0,    X86_XCPT_DB, X86_XCPT_DB, X86_XCPT_DB }, /* #10 */
     635    { 0, 0,  0,  1,      1,       1,   1,   0,   0,        1,       0,    X86_XCPT_AC, X86_XCPT_DB, X86_XCPT_AC }, /* #11 */
     636    /* AMD only: */
     637    { 0, 0,  0,  1,      1,       1,   1,   0,   0,        0,       1,    X86_XCPT_DB, X86_XCPT_DB, X86_XCPT_DB }, /* #12 */
     638    { 0, 0,  0,  1,      1,       1,   1,   0,   0,        1,       1,    X86_XCPT_AC, X86_XCPT_AC, X86_XCPT_AC }, /* #13 */
     639};
     640
     641/** Exception type \#5 test configurations, strict alignment. */
     642static const BS3CPUINSTR3_CONFIG_T g_aXcptConfig5StrictAligned[] =
     643{
     644/*
     645 *   X87 SSE SSE SSE     AVX      AVX  AVX  MMX  MMX+SSE   MMX+AVX  AMD/SSE   <-- applies to
     646 *                                               +AVX      +AMD/SSE
     647 *   CR0 CR0 CR0 CR4     CR4      XCR0 XCR0 FCW                      MXCSR
     648 *   MP, EM, TS, OSFXSR, OSXSAVE, SSE, AVX, ES+, fAligned, AC/AM,   MM,   bXcptMmx,    bXcptSse,    bXcptAvx */
     649    { 0, 0,  0,  1,      1,       1,   1,   0,   1,        0,       0,    X86_XCPT_DB, X86_XCPT_DB, X86_XCPT_DB }, /* #0 */
     650    { 1, 0,  0,  1,      1,       1,   1,   0,   1,        0,       0,    X86_XCPT_DB, X86_XCPT_DB, X86_XCPT_DB }, /* #1 */
     651    { 0, 1,  0,  1,      1,       1,   1,   0,   1,        0,       0,    X86_XCPT_UD, X86_XCPT_UD, X86_XCPT_DB }, /* #2 */
     652    { 0, 0,  1,  1,      1,       1,   1,   0,   1,        0,       0,    X86_XCPT_NM, X86_XCPT_NM, X86_XCPT_NM }, /* #3 */
     653    { 0, 1,  1,  1,      1,       1,   1,   0,   1,        0,       0,    X86_XCPT_UD, X86_XCPT_UD, X86_XCPT_NM }, /* #4 */
     654    { 0, 0,  0,  0,      1,       1,   1,   0,   1,        0,       0,    X86_XCPT_DB, X86_XCPT_UD, X86_XCPT_DB }, /* #5 */
     655    { 0, 0,  0,  1,      0,       1,   1,   0,   1,        0,       0,    X86_XCPT_DB, X86_XCPT_DB, X86_XCPT_UD }, /* #6 */
     656    { 0, 0,  0,  1,      1,       1,   0,   0,   1,        0,       0,    X86_XCPT_DB, X86_XCPT_DB, X86_XCPT_UD }, /* #7 */
     657    { 0, 0,  0,  1,      1,       0,   0,   0,   1,        0,       0,    X86_XCPT_DB, X86_XCPT_DB, X86_XCPT_UD }, /* #8 */
     658    { 0, 0,  0,  1,      1,       1,   1,   1,   1,        0,       0,    X86_XCPT_MF, X86_XCPT_DB, X86_XCPT_DB }, /* #9 - pending x87 exception */
     659    /* Memory misalignment: */
     660    { 0, 0,  0,  1,      1,       1,   1,   0,   0,        0,       0,    X86_XCPT_DB, X86_XCPT_GP, X86_XCPT_GP }, /* #10 */
     661    { 0, 0,  0,  1,      1,       1,   1,   0,   0,        1,       0,    X86_XCPT_AC, X86_XCPT_GP, X86_XCPT_GP }, /* #11 */
     662    /* AMD only: */
     663    { 0, 0,  0,  1,      1,       1,   1,   0,   0,        0,       1,    X86_XCPT_DB, X86_XCPT_DB, X86_XCPT_GP }, /* #12 */
     664    { 0, 0,  0,  1,      1,       1,   1,   0,   0,        1,       1,    X86_XCPT_AC, X86_XCPT_AC, X86_XCPT_GP }, /* #13 */
    673665};
    674666
     
    10431035                    {
    10441036                        BS3_ASSERT(paTests[iTest].enmRm == RM_MEM);
    1045                         Bs3MemSet(puMemOp, sizeof(*puMemOp), 0xcc);
     1037                        Bs3MemSet(puMemOp, 0xcc, sizeof(*puMemOp));
    10461038                        if (bXcptExpect == X86_XCPT_DB)
    10471039                            uMemOpExpect = paValues[iVal].uDstOut;
     
    34663458                    {
    34673459                        BS3_ASSERT(paTests[iTest].enmRm == RM_MEM);
    3468                         Bs3MemSet(puMemOp, sizeof(*puMemOp), 0xcc);
     3460                        Bs3MemSet(puMemOp, 0xcc, sizeof(*puMemOp));
    34693461                        uMemOpExpect = *puMemOp;
    34703462                        if (bXcptExpect == X86_XCPT_DB)
     
    36723664 */
    36733665static uint8_t bs3CpuInstr3_WorkerTestType3(uint8_t bMode, BS3CPUINSTR3_TEST3_T const BS3_FAR *paTests, unsigned cTests,
    3674                                             PCBS3CPUINSTR3_CONFIG_T paConfigs, unsigned cConfigs)
     3666                                            PCBS3CPUINSTR3_CONFIG_T paConfigs, unsigned cConfigs, uint8_t cbMaxAlign)
    36753667{
    36763668    const char BS3_FAR * const  pszMode = Bs3GetModeName(bMode);
     
    37233715                uint8_t const   cbOperand   = paTests[iTest].enmType < T_128BITS ? 64/8
    37243716                                            : paTests[iTest].enmType < T_256BITS ? 128/8 : 256/8;
    3725                 uint8_t const   cbAlign     = RT_MIN(cbOperand, 16);
     3717                uint8_t const   cbAlign     = RT_MIN(cbOperand, !cbMaxAlign ? 16 : cbMaxAlign);
    37263718                uint8_t         bXcptExpect = !g_afTypeSupports[paTests[iTest].enmType] ? X86_XCPT_UD
    37273719                                            : fMmxInstr ? paConfigs[iCfg].bXcptMmx
     
    37683760                    {
    37693761                        BS3_ASSERT(paTests[iTest].enmRm == RM_MEM);
    3770                         Bs3MemSet(puMemOp, sizeof(*puMemOp), 0xcc);
     3762                        Bs3MemSet(puMemOp, 0xcc, sizeof(*puMemOp));
    37713763                        if (bXcptExpect == X86_XCPT_DB)
    37723764                            uMemOpExpect = paValues[iVal].uDstOut;
     
    38463838                    if (cErrors != Bs3TestSubErrorCount())
    38473839                    {
    3848                         if (paConfigs[iCfg].fAligned)
     3840                        /*if (paConfigs[iCfg].fAligned)
    38493841                            Bs3TestFailedF("ring-%d/cfg#%u/test#%u/value#%u failed (bXcptExpect=%#x)",
    38503842                                           bRing, iCfg, iTest, iVal, bXcptExpect);
    3851                         else
     3843                        else*/
    38523844                            Bs3TestFailedF("ring-%d/cfg#%u/test#%u/value#%u failed (bXcptExpect=%#x, puMemOp=%p, EFLAGS=%#RX32, CR0=%#RX32)",
    38533845                                           bRing, iCfg, iTest, iVal, bXcptExpect, puMemOp, TrapFrame.Ctx.rflags.u32, TrapFrame.Ctx.cr0);
     
    38833875 * PSHUFW
    38843876 */
     3877BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_pshufw_MM1_MM2_0FFh_icebp);
     3878BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_pshufw_MM1_FSxBX_0FFh_icebp);
     3879BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_pshufw_MM1_MM2_01Bh_icebp);
     3880BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_pshufw_MM1_FSxBX_01Bh_icebp);
     3881
    38853882BS3_DECL_FAR(uint8_t) bs3CpuInstr3_pshufw(uint8_t bMode)
    38863883{
     
    39333930    unsigned const                         iTest       = BS3CPUINSTR3_TEST3_MODES_INDEX(bMode);
    39343931    return bs3CpuInstr3_WorkerTestType3(bMode, s_aTests[iTest].paTests, s_aTests[iTest].cTests,
    3935                                         g_aXcptConfig4, RT_ELEMENTS(g_aXcptConfig4));
     3932                                        g_aXcptConfig4, RT_ELEMENTS(g_aXcptConfig4), 0 /*cbMaxAlign*/);
    39363933}
    39373934
    39383935
    39393936/*
    3940  * PSHUFHW
     3937 * [V]PSHUFHW
    39413938 */
     3939BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_pshufhw_XMM1_XMM2_0FFh_icebp);
     3940BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_pshufhw_XMM1_FSxBX_0FFh_icebp);
     3941BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_pshufhw_XMM1_XMM2_01Bh_icebp);
     3942BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_pshufhw_XMM1_FSxBX_01Bh_icebp);
     3943
     3944BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_vpshufhw_XMM1_XMM2_0FFh_icebp);
     3945BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_vpshufhw_XMM1_FSxBX_0FFh_icebp);
     3946BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_vpshufhw_XMM1_XMM2_01Bh_icebp);
     3947BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_vpshufhw_XMM1_FSxBX_01Bh_icebp);
     3948
     3949BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_vpshufhw_YMM1_YMM2_0FFh_icebp);
     3950BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_vpshufhw_YMM1_FSxBX_0FFh_icebp);
     3951BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_vpshufhw_YMM1_YMM2_01Bh_icebp);
     3952BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_vpshufhw_YMM1_FSxBX_01Bh_icebp);
     3953extern FNBS3FAR             bs3CpuInstr3_vpshufhw_YMM12_YMM7_0FFh_icebp_c64;
     3954extern FNBS3FAR             bs3CpuInstr3_vpshufhw_YMM9_YMM12_01Bh_icebp_c64;
     3955
    39423956BS3_DECL_FAR(uint8_t) bs3CpuInstr3_v_pshufhw(uint8_t bMode)
    39433957{
     
    40224036    unsigned const                         iTest       = BS3CPUINSTR3_TEST3_MODES_INDEX(bMode);
    40234037    return bs3CpuInstr3_WorkerTestType3(bMode, s_aTests[iTest].paTests, s_aTests[iTest].cTests,
    4024                                         g_aXcptConfig4, RT_ELEMENTS(g_aXcptConfig4));
     4038                                        g_aXcptConfig4, RT_ELEMENTS(g_aXcptConfig4), 0 /*cbMaxAlign*/);
    40254039}
    40264040
    40274041
    40284042/*
    4029  * PSHUFLW
     4043 * [V]PSHUFLW
    40304044 */
     4045BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_pshuflw_XMM1_XMM2_0FFh_icebp);
     4046BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_pshuflw_XMM1_FSxBX_0FFh_icebp);
     4047BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_pshuflw_XMM1_XMM2_01Bh_icebp);
     4048BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_pshuflw_XMM1_FSxBX_01Bh_icebp);
     4049
     4050BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_vpshuflw_XMM1_XMM2_0FFh_icebp);
     4051BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_vpshuflw_XMM1_FSxBX_0FFh_icebp);
     4052BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_vpshuflw_XMM1_XMM2_01Bh_icebp);
     4053BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_vpshuflw_XMM1_FSxBX_01Bh_icebp);
     4054
     4055BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_vpshuflw_YMM1_YMM2_0FFh_icebp);
     4056BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_vpshuflw_YMM1_FSxBX_0FFh_icebp);
     4057BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_vpshuflw_YMM1_YMM2_01Bh_icebp);
     4058BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_vpshuflw_YMM1_FSxBX_01Bh_icebp);
     4059extern FNBS3FAR             bs3CpuInstr3_vpshuflw_YMM12_YMM7_0FFh_icebp_c64;
     4060extern FNBS3FAR             bs3CpuInstr3_vpshuflw_YMM9_YMM12_01Bh_icebp_c64;
     4061
    40314062BS3_DECL_FAR(uint8_t) bs3CpuInstr3_v_pshuflw(uint8_t bMode)
    40324063{
     
    41114142    unsigned const                         iTest       = BS3CPUINSTR3_TEST3_MODES_INDEX(bMode);
    41124143    return bs3CpuInstr3_WorkerTestType3(bMode, s_aTests[iTest].paTests, s_aTests[iTest].cTests,
    4113                                         g_aXcptConfig4, RT_ELEMENTS(g_aXcptConfig4));
     4144                                        g_aXcptConfig4, RT_ELEMENTS(g_aXcptConfig4), 0 /*cbMaxAlign*/);
    41144145}
    41154146
    41164147
    41174148/*
    4118  * PSHUFHD
     4149 * [V]PSHUFHD
    41194150 */
     4151BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_pshufd_XMM1_XMM2_0FFh_icebp);
     4152BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_pshufd_XMM1_FSxBX_0FFh_icebp);
     4153BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_pshufd_XMM1_XMM2_01Bh_icebp);
     4154BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_pshufd_XMM1_FSxBX_01Bh_icebp);
     4155
     4156BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_vpshufd_XMM1_XMM2_0FFh_icebp);
     4157BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_vpshufd_XMM1_FSxBX_0FFh_icebp);
     4158BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_vpshufd_XMM1_XMM2_01Bh_icebp);
     4159BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_vpshufd_XMM1_FSxBX_01Bh_icebp);
     4160
     4161BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_vpshufd_YMM1_YMM2_0FFh_icebp);
     4162BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_vpshufd_YMM1_FSxBX_0FFh_icebp);
     4163BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_vpshufd_YMM1_YMM2_01Bh_icebp);
     4164BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_vpshufd_YMM1_FSxBX_01Bh_icebp);
     4165extern FNBS3FAR             bs3CpuInstr3_vpshufd_YMM12_YMM7_0FFh_icebp_c64;
     4166extern FNBS3FAR             bs3CpuInstr3_vpshufd_YMM9_YMM12_01Bh_icebp_c64;
     4167
    41204168BS3_DECL_FAR(uint8_t) bs3CpuInstr3_v_pshufd(uint8_t bMode)
    41214169{
     
    42004248    unsigned const                         iTest       = BS3CPUINSTR3_TEST3_MODES_INDEX(bMode);
    42014249    return bs3CpuInstr3_WorkerTestType3(bMode, s_aTests[iTest].paTests, s_aTests[iTest].cTests,
    4202                                         g_aXcptConfig4, RT_ELEMENTS(g_aXcptConfig4));
     4250                                        g_aXcptConfig4, RT_ELEMENTS(g_aXcptConfig4), 0 /*cbMaxAlign*/);
     4251}
     4252
     4253
     4254/*
     4255 * Values shared by the move functions (same input as output).
     4256 */
     4257static BS3CPUINSTR3_TEST3_VALUES_T const g_aMoveValues[] =
     4258{
     4259    {            RTUINT256_INIT_C(0, 0, 0, 0),
     4260        /* => */ RTUINT256_INIT_C(0, 0, 0, 0) },
     4261    {            RTUINT256_INIT_C(0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff),
     4262        /* => */ RTUINT256_INIT_C(0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff) },
     4263    {            RTUINT256_INIT_C(0x9999aaaabbbbcccc, 0xddddeeeeffff2121, 0x1111222233334444, 0x5555666677778888),
     4264        /* => */ RTUINT256_INIT_C(0x9999aaaabbbbcccc, 0xddddeeeeffff2121, 0x1111222233334444, 0x5555666677778888) },
     4265    {            RTUINT256_INIT_C(0x4d09f02a6cdc73d5, 0x3ef417c8666b3fe6, 0xb4212fa8564c9ba2, 0x9c5ce073930996bb),
     4266        /* => */ RTUINT256_INIT_C(0x4d09f02a6cdc73d5, 0x3ef417c8666b3fe6, 0xb4212fa8564c9ba2, 0x9c5ce073930996bb) },
     4267};
     4268
     4269
     4270/*
     4271 * MOVNTDQA - load double qword, aligned, with non-temporal hint.
     4272 */
     4273BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_movntdqa_XMM1_FSxBX_icebp);
     4274extern FNBS3FAR             bs3CpuInstr3_movntdqa_XMM10_FSxBX_icebp_c64;
     4275BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_vmovntdqa_XMM1_FSxBX_icebp);
     4276extern FNBS3FAR             bs3CpuInstr3_vmovntdqa_XMM11_FSxBX_icebp_c64;
     4277BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_vmovntdqa_YMM1_FSxBX_icebp);
     4278extern FNBS3FAR             bs3CpuInstr3_vmovntdqa_YMM12_FSxBX_icebp_c64;
     4279
     4280BS3_DECL_FAR(uint8_t) bs3CpuInstr3_v_movntdqa(uint8_t bMode)
     4281{
     4282    static BS3CPUINSTR3_TEST3_T const s_aTests16[] =
     4283    {
     4284        {  bs3CpuInstr3_movntdqa_XMM1_FSxBX_icebp_c16,   X86_XCPT_GP, RM_MEM, T_SSE4_1,    1, 255, RT_ELEMENTS(g_aMoveValues), g_aMoveValues },
     4285        {  bs3CpuInstr3_vmovntdqa_XMM1_FSxBX_icebp_c16,  X86_XCPT_GP, RM_MEM, T_AVX_128,   1, 255, RT_ELEMENTS(g_aMoveValues), g_aMoveValues },
     4286        {  bs3CpuInstr3_vmovntdqa_YMM1_FSxBX_icebp_c16,  X86_XCPT_GP, RM_MEM, T_AVX2_256,  1, 255, RT_ELEMENTS(g_aMoveValues), g_aMoveValues },
     4287    };
     4288    static BS3CPUINSTR3_TEST3_T const s_aTests32[] =
     4289    {
     4290        {  bs3CpuInstr3_movntdqa_XMM1_FSxBX_icebp_c32,   X86_XCPT_GP, RM_MEM, T_SSE4_1,    1, 255, RT_ELEMENTS(g_aMoveValues), g_aMoveValues },
     4291        {  bs3CpuInstr3_vmovntdqa_XMM1_FSxBX_icebp_c32,  X86_XCPT_GP, RM_MEM, T_AVX_128,   1, 255, RT_ELEMENTS(g_aMoveValues), g_aMoveValues },
     4292        {  bs3CpuInstr3_vmovntdqa_YMM1_FSxBX_icebp_c32,  X86_XCPT_GP, RM_MEM, T_AVX2_256,  1, 255, RT_ELEMENTS(g_aMoveValues), g_aMoveValues },
     4293    };
     4294    static BS3CPUINSTR3_TEST3_T const s_aTests64[] =
     4295    {
     4296        {  bs3CpuInstr3_movntdqa_XMM1_FSxBX_icebp_c64,   X86_XCPT_GP, RM_MEM, T_SSE4_1,    1, 255, RT_ELEMENTS(g_aMoveValues), g_aMoveValues },
     4297        {  bs3CpuInstr3_movntdqa_XMM10_FSxBX_icebp_c64,  X86_XCPT_GP, RM_MEM, T_SSE4_1,   10, 255, RT_ELEMENTS(g_aMoveValues), g_aMoveValues },
     4298        {  bs3CpuInstr3_vmovntdqa_XMM1_FSxBX_icebp_c64,  X86_XCPT_GP, RM_MEM, T_AVX_128,   1, 255, RT_ELEMENTS(g_aMoveValues), g_aMoveValues },
     4299        {  bs3CpuInstr3_vmovntdqa_XMM11_FSxBX_icebp_c64, X86_XCPT_GP, RM_MEM, T_AVX_128,  11, 255, RT_ELEMENTS(g_aMoveValues), g_aMoveValues },
     4300        {  bs3CpuInstr3_vmovntdqa_YMM1_FSxBX_icebp_c64,  X86_XCPT_GP, RM_MEM, T_AVX2_256,  1, 255, RT_ELEMENTS(g_aMoveValues), g_aMoveValues },
     4301        {  bs3CpuInstr3_vmovntdqa_YMM12_FSxBX_icebp_c64, X86_XCPT_GP, RM_MEM, T_AVX2_256, 12, 255, RT_ELEMENTS(g_aMoveValues), g_aMoveValues },
     4302    };
     4303    static BS3CPUINSTR3_TEST3_MODE_T const s_aTests[3] = BS3CPUINSTR3_TEST3_MODES_INIT(s_aTests16, s_aTests32, s_aTests64);
     4304    unsigned const                         iTest       = BS3CPUINSTR3_TEST3_MODES_INDEX(bMode);
     4305    return bs3CpuInstr3_WorkerTestType3(bMode, s_aTests[iTest].paTests, s_aTests[iTest].cTests,
     4306                                        g_aXcptConfig5StrictAligned, RT_ELEMENTS(g_aXcptConfig5StrictAligned), 255 /*cbMaxAlign*/);
     4307}
     4308
     4309
     4310/*
     4311 * MOVUPS - packed single-precision floating point, unaligned.
     4312 *
     4313 * Note! We only cover one of the two register<->register variants here
     4314 *       thanks to the assembler (probably the one with the smaller opcode).
     4315 */
     4316BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_movups_XMM1_XMM2_icebp);
     4317BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_movups_XMM1_FSxBX_icebp);
     4318extern FNBS3FAR             bs3CpuInstr3_movups_XMM8_XMM12_icebp_c64;
     4319extern FNBS3FAR             bs3CpuInstr3_movups_XMM10_FSxBX_icebp_c64;
     4320BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_vmovups_XMM1_XMM2_icebp);
     4321BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_vmovups_XMM1_FSxBX_icebp);
     4322extern FNBS3FAR             bs3CpuInstr3_vmovups_XMM7_XMM14_icebp_c64;
     4323extern FNBS3FAR             bs3CpuInstr3_vmovups_XMM11_FSxBX_icebp_c64;
     4324BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_vmovups_YMM1_YMM2_icebp);
     4325BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_vmovups_YMM1_FSxBX_icebp);
     4326extern FNBS3FAR             bs3CpuInstr3_vmovups_YMM12_YMM8_icebp_c64;
     4327extern FNBS3FAR             bs3CpuInstr3_vmovups_YMM12_FSxBX_icebp_c64;
     4328
     4329BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_movups_FSxBX_XMM1_icebp);
     4330extern FNBS3FAR             bs3CpuInstr3_movups_FSxBX_XMM10_icebp_c64;
     4331BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_vmovups_FSxBX_XMM1_icebp);
     4332extern FNBS3FAR             bs3CpuInstr3_vmovups_FSxBX_XMM11_icebp_c64;
     4333BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_vmovups_FSxBX_YMM1_icebp);
     4334extern FNBS3FAR             bs3CpuInstr3_vmovups_FSxBX_YMM12_icebp_c64;
     4335
     4336BS3_DECL_FAR(uint8_t) bs3CpuInstr3_v_movups(uint8_t bMode)
     4337{
     4338    static BS3CPUINSTR3_TEST3_T const s_aTests16[] =
     4339    {
     4340        {  bs3CpuInstr3_movups_XMM1_XMM2_icebp_c16,    255,         RM_REG, T_SSE,       1,   2, RT_ELEMENTS(g_aMoveValues), g_aMoveValues },
     4341        {  bs3CpuInstr3_movups_XMM1_FSxBX_icebp_c16,   X86_XCPT_DB, RM_MEM, T_SSE,       1, 255, RT_ELEMENTS(g_aMoveValues), g_aMoveValues },
     4342        {  bs3CpuInstr3_movups_FSxBX_XMM1_icebp_c16,   X86_XCPT_DB, RM_MEM, T_SSE,       255, 1, RT_ELEMENTS(g_aMoveValues), g_aMoveValues },
     4343
     4344        {  bs3CpuInstr3_vmovups_XMM1_XMM2_icebp_c16,   255,         RM_REG, T_AVX_128,   1,   2, RT_ELEMENTS(g_aMoveValues), g_aMoveValues },
     4345        {  bs3CpuInstr3_vmovups_XMM1_FSxBX_icebp_c16,  X86_XCPT_DB, RM_MEM, T_AVX_128,   1, 255, RT_ELEMENTS(g_aMoveValues), g_aMoveValues },
     4346        {  bs3CpuInstr3_vmovups_FSxBX_XMM1_icebp_c16,  X86_XCPT_DB, RM_MEM, T_AVX_128,   255, 1, RT_ELEMENTS(g_aMoveValues), g_aMoveValues },
     4347
     4348        {  bs3CpuInstr3_vmovups_YMM1_YMM2_icebp_c16,   255,         RM_REG, T_AVX_256,   1,   2, RT_ELEMENTS(g_aMoveValues), g_aMoveValues },
     4349        {  bs3CpuInstr3_vmovups_YMM1_FSxBX_icebp_c16,  X86_XCPT_DB, RM_MEM, T_AVX_256,   1, 255, RT_ELEMENTS(g_aMoveValues), g_aMoveValues },
     4350        {  bs3CpuInstr3_vmovups_FSxBX_YMM1_icebp_c16,  X86_XCPT_DB, RM_MEM, T_AVX_256,   255, 1, RT_ELEMENTS(g_aMoveValues), g_aMoveValues },
     4351    };
     4352    static BS3CPUINSTR3_TEST3_T const s_aTests32[] =
     4353    {
     4354        {  bs3CpuInstr3_movups_XMM1_XMM2_icebp_c32,    255,         RM_REG, T_SSE,       1,   2, RT_ELEMENTS(g_aMoveValues), g_aMoveValues },
     4355        {  bs3CpuInstr3_movups_XMM1_FSxBX_icebp_c32,   X86_XCPT_DB, RM_MEM, T_SSE,       1, 255, RT_ELEMENTS(g_aMoveValues), g_aMoveValues },
     4356        {  bs3CpuInstr3_movups_FSxBX_XMM1_icebp_c32,   X86_XCPT_DB, RM_MEM, T_SSE,       255, 1, RT_ELEMENTS(g_aMoveValues), g_aMoveValues },
     4357
     4358        {  bs3CpuInstr3_vmovups_XMM1_XMM2_icebp_c32,   255,         RM_REG, T_AVX_128,   1,   2, RT_ELEMENTS(g_aMoveValues), g_aMoveValues },
     4359        {  bs3CpuInstr3_vmovups_XMM1_FSxBX_icebp_c32,  X86_XCPT_DB, RM_MEM, T_AVX_128,   1, 255, RT_ELEMENTS(g_aMoveValues), g_aMoveValues },
     4360        {  bs3CpuInstr3_vmovups_FSxBX_XMM1_icebp_c32,  X86_XCPT_DB, RM_MEM, T_AVX_128,   255, 1, RT_ELEMENTS(g_aMoveValues), g_aMoveValues },
     4361
     4362        {  bs3CpuInstr3_vmovups_YMM1_YMM2_icebp_c32,   255,         RM_REG, T_AVX_256,   1,   2, RT_ELEMENTS(g_aMoveValues), g_aMoveValues },
     4363        {  bs3CpuInstr3_vmovups_YMM1_FSxBX_icebp_c32,  X86_XCPT_DB, RM_MEM, T_AVX_256,   1, 255, RT_ELEMENTS(g_aMoveValues), g_aMoveValues },
     4364        {  bs3CpuInstr3_vmovups_FSxBX_YMM1_icebp_c32,  X86_XCPT_DB, RM_MEM, T_AVX_256,   255, 1, RT_ELEMENTS(g_aMoveValues), g_aMoveValues },
     4365    };
     4366    static BS3CPUINSTR3_TEST3_T const s_aTests64[] =
     4367    {
     4368        {  bs3CpuInstr3_movups_XMM1_XMM2_icebp_c64,    255,         RM_REG, T_SSE,       1,   2, RT_ELEMENTS(g_aMoveValues), g_aMoveValues },
     4369        {  bs3CpuInstr3_movups_XMM8_XMM12_icebp_c64,   255,         RM_REG, T_SSE,       8,  12, RT_ELEMENTS(g_aMoveValues), g_aMoveValues },
     4370        {  bs3CpuInstr3_movups_XMM1_FSxBX_icebp_c64,   X86_XCPT_DB, RM_MEM, T_SSE,       1, 255, RT_ELEMENTS(g_aMoveValues), g_aMoveValues },
     4371        {  bs3CpuInstr3_movups_XMM10_FSxBX_icebp_c64,  X86_XCPT_DB, RM_MEM, T_SSE,      10, 255, RT_ELEMENTS(g_aMoveValues), g_aMoveValues },
     4372        {  bs3CpuInstr3_movups_FSxBX_XMM1_icebp_c64,   X86_XCPT_DB, RM_MEM, T_SSE,     255,   1, RT_ELEMENTS(g_aMoveValues), g_aMoveValues },
     4373        {  bs3CpuInstr3_movups_FSxBX_XMM10_icebp_c64,  X86_XCPT_DB, RM_MEM, T_SSE,     255,  10, RT_ELEMENTS(g_aMoveValues), g_aMoveValues },
     4374
     4375        {  bs3CpuInstr3_vmovups_XMM1_XMM2_icebp_c64,   255,         RM_REG, T_AVX_128,   1,   2, RT_ELEMENTS(g_aMoveValues), g_aMoveValues },
     4376        {  bs3CpuInstr3_vmovups_XMM7_XMM14_icebp_c64,  255,         RM_REG, T_AVX_128,   7,  14, RT_ELEMENTS(g_aMoveValues), g_aMoveValues },
     4377        {  bs3CpuInstr3_vmovups_XMM1_FSxBX_icebp_c64,  X86_XCPT_DB, RM_MEM, T_AVX_128,   1, 255, RT_ELEMENTS(g_aMoveValues), g_aMoveValues },
     4378        {  bs3CpuInstr3_vmovups_XMM11_FSxBX_icebp_c64, X86_XCPT_DB, RM_MEM, T_AVX_128,  11, 255, RT_ELEMENTS(g_aMoveValues), g_aMoveValues },
     4379        {  bs3CpuInstr3_vmovups_FSxBX_XMM1_icebp_c64,  X86_XCPT_DB, RM_MEM, T_AVX_128, 255,   1, RT_ELEMENTS(g_aMoveValues), g_aMoveValues },
     4380        {  bs3CpuInstr3_vmovups_FSxBX_XMM11_icebp_c64, X86_XCPT_DB, RM_MEM, T_AVX_128, 255,  11, RT_ELEMENTS(g_aMoveValues), g_aMoveValues },
     4381
     4382        {  bs3CpuInstr3_vmovups_YMM1_YMM2_icebp_c64,   255,         RM_REG, T_AVX_256,   1,   2, RT_ELEMENTS(g_aMoveValues), g_aMoveValues },
     4383        {  bs3CpuInstr3_vmovups_YMM12_YMM8_icebp_c64,  255,         RM_REG, T_AVX_256,  12,   8, RT_ELEMENTS(g_aMoveValues), g_aMoveValues },
     4384        {  bs3CpuInstr3_vmovups_YMM1_FSxBX_icebp_c64,  X86_XCPT_DB, RM_MEM, T_AVX_256,   1, 255, RT_ELEMENTS(g_aMoveValues), g_aMoveValues },
     4385        {  bs3CpuInstr3_vmovups_YMM12_FSxBX_icebp_c64, X86_XCPT_DB, RM_MEM, T_AVX_256,  12, 255, RT_ELEMENTS(g_aMoveValues), g_aMoveValues },
     4386        {  bs3CpuInstr3_vmovups_FSxBX_YMM1_icebp_c64,  X86_XCPT_DB, RM_MEM, T_AVX_256, 255,   1, RT_ELEMENTS(g_aMoveValues), g_aMoveValues },
     4387        {  bs3CpuInstr3_vmovups_FSxBX_YMM12_icebp_c64, X86_XCPT_DB, RM_MEM, T_AVX_256, 255,  12, RT_ELEMENTS(g_aMoveValues), g_aMoveValues },
     4388    };
     4389    static BS3CPUINSTR3_TEST3_MODE_T const s_aTests[3] = BS3CPUINSTR3_TEST3_MODES_INIT(s_aTests16, s_aTests32, s_aTests64);
     4390    unsigned const                         iTest       = BS3CPUINSTR3_TEST3_MODES_INDEX(bMode);
     4391    return bs3CpuInstr3_WorkerTestType3(bMode, s_aTests[iTest].paTests, s_aTests[iTest].cTests,
     4392                                        g_aXcptConfig4Unaligned, RT_ELEMENTS(g_aXcptConfig4Unaligned), 0 /*cbMaxAlign*/);
     4393}
     4394
     4395
     4396/*
     4397 * MOVUPD - packed double-precision floating point, unaligned.
     4398 *
     4399 * Note! We only cover one of the two register<->register variants here
     4400 *       thanks to the assembler (probably the one with the smaller opcode).
     4401 */
     4402BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_movupd_XMM1_XMM2_icebp);
     4403BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_movupd_XMM1_FSxBX_icebp);
     4404extern FNBS3FAR             bs3CpuInstr3_movupd_XMM8_XMM12_icebp_c64;
     4405extern FNBS3FAR             bs3CpuInstr3_movupd_XMM10_FSxBX_icebp_c64;
     4406BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_vmovupd_XMM1_XMM2_icebp);
     4407BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_vmovupd_XMM1_FSxBX_icebp);
     4408extern FNBS3FAR             bs3CpuInstr3_vmovupd_XMM7_XMM14_icebp_c64;
     4409extern FNBS3FAR             bs3CpuInstr3_vmovupd_XMM11_FSxBX_icebp_c64;
     4410BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_vmovupd_YMM1_YMM2_icebp);
     4411BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_vmovupd_YMM1_FSxBX_icebp);
     4412extern FNBS3FAR             bs3CpuInstr3_vmovupd_YMM12_YMM8_icebp_c64;
     4413extern FNBS3FAR             bs3CpuInstr3_vmovupd_YMM12_FSxBX_icebp_c64;
     4414
     4415BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_movupd_FSxBX_XMM1_icebp);
     4416extern FNBS3FAR             bs3CpuInstr3_movupd_FSxBX_XMM10_icebp_c64;
     4417BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_vmovupd_FSxBX_XMM1_icebp);
     4418extern FNBS3FAR             bs3CpuInstr3_vmovupd_FSxBX_XMM11_icebp_c64;
     4419BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_vmovupd_FSxBX_YMM1_icebp);
     4420extern FNBS3FAR             bs3CpuInstr3_vmovupd_FSxBX_YMM12_icebp_c64;
     4421
     4422BS3_DECL_FAR(uint8_t) bs3CpuInstr3_v_movupd(uint8_t bMode)
     4423{
     4424    static BS3CPUINSTR3_TEST3_T const s_aTests16[] =
     4425    {
     4426        {  bs3CpuInstr3_movupd_XMM1_XMM2_icebp_c16,    255,         RM_REG, T_SSE,       1,   2, RT_ELEMENTS(g_aMoveValues), g_aMoveValues },
     4427        {  bs3CpuInstr3_movupd_XMM1_FSxBX_icebp_c16,   X86_XCPT_DB, RM_MEM, T_SSE,       1, 255, RT_ELEMENTS(g_aMoveValues), g_aMoveValues },
     4428        {  bs3CpuInstr3_movupd_FSxBX_XMM1_icebp_c16,   X86_XCPT_DB, RM_MEM, T_SSE,       255, 1, RT_ELEMENTS(g_aMoveValues), g_aMoveValues },
     4429
     4430        {  bs3CpuInstr3_vmovupd_XMM1_XMM2_icebp_c16,   255,         RM_REG, T_AVX_128,   1,   2, RT_ELEMENTS(g_aMoveValues), g_aMoveValues },
     4431        {  bs3CpuInstr3_vmovupd_XMM1_FSxBX_icebp_c16,  X86_XCPT_DB, RM_MEM, T_AVX_128,   1, 255, RT_ELEMENTS(g_aMoveValues), g_aMoveValues },
     4432        {  bs3CpuInstr3_vmovupd_FSxBX_XMM1_icebp_c16,  X86_XCPT_DB, RM_MEM, T_AVX_128,   255, 1, RT_ELEMENTS(g_aMoveValues), g_aMoveValues },
     4433
     4434        {  bs3CpuInstr3_vmovupd_YMM1_YMM2_icebp_c16,   255,         RM_REG, T_AVX_256,   1,   2, RT_ELEMENTS(g_aMoveValues), g_aMoveValues },
     4435        {  bs3CpuInstr3_vmovupd_YMM1_FSxBX_icebp_c16,  X86_XCPT_DB, RM_MEM, T_AVX_256,   1, 255, RT_ELEMENTS(g_aMoveValues), g_aMoveValues },
     4436        {  bs3CpuInstr3_vmovupd_FSxBX_YMM1_icebp_c16,  X86_XCPT_DB, RM_MEM, T_AVX_256,   255, 1, RT_ELEMENTS(g_aMoveValues), g_aMoveValues },
     4437    };
     4438    static BS3CPUINSTR3_TEST3_T const s_aTests32[] =
     4439    {
     4440        {  bs3CpuInstr3_movupd_XMM1_XMM2_icebp_c32,    255,         RM_REG, T_SSE,       1,   2, RT_ELEMENTS(g_aMoveValues), g_aMoveValues },
     4441        {  bs3CpuInstr3_movupd_XMM1_FSxBX_icebp_c32,   X86_XCPT_DB, RM_MEM, T_SSE,       1, 255, RT_ELEMENTS(g_aMoveValues), g_aMoveValues },
     4442        {  bs3CpuInstr3_movupd_FSxBX_XMM1_icebp_c32,   X86_XCPT_DB, RM_MEM, T_SSE,       255, 1, RT_ELEMENTS(g_aMoveValues), g_aMoveValues },
     4443
     4444        {  bs3CpuInstr3_vmovupd_XMM1_XMM2_icebp_c32,   255,         RM_REG, T_AVX_128,   1,   2, RT_ELEMENTS(g_aMoveValues), g_aMoveValues },
     4445        {  bs3CpuInstr3_vmovupd_XMM1_FSxBX_icebp_c32,  X86_XCPT_DB, RM_MEM, T_AVX_128,   1, 255, RT_ELEMENTS(g_aMoveValues), g_aMoveValues },
     4446        {  bs3CpuInstr3_vmovupd_FSxBX_XMM1_icebp_c32,  X86_XCPT_DB, RM_MEM, T_AVX_128,   255, 1, RT_ELEMENTS(g_aMoveValues), g_aMoveValues },
     4447
     4448        {  bs3CpuInstr3_vmovupd_YMM1_YMM2_icebp_c32,   255,         RM_REG, T_AVX_256,   1,   2, RT_ELEMENTS(g_aMoveValues), g_aMoveValues },
     4449        {  bs3CpuInstr3_vmovupd_YMM1_FSxBX_icebp_c32,  X86_XCPT_DB, RM_MEM, T_AVX_256,   1, 255, RT_ELEMENTS(g_aMoveValues), g_aMoveValues },
     4450        {  bs3CpuInstr3_vmovupd_FSxBX_YMM1_icebp_c32,  X86_XCPT_DB, RM_MEM, T_AVX_256,   255, 1, RT_ELEMENTS(g_aMoveValues), g_aMoveValues },
     4451    };
     4452    static BS3CPUINSTR3_TEST3_T const s_aTests64[] =
     4453    {
     4454        {  bs3CpuInstr3_movupd_XMM1_XMM2_icebp_c64,    255,         RM_REG, T_SSE,       1,   2, RT_ELEMENTS(g_aMoveValues), g_aMoveValues },
     4455        {  bs3CpuInstr3_movupd_XMM8_XMM12_icebp_c64,   255,         RM_REG, T_SSE,       8,  12, RT_ELEMENTS(g_aMoveValues), g_aMoveValues },
     4456        {  bs3CpuInstr3_movupd_XMM1_FSxBX_icebp_c64,   X86_XCPT_DB, RM_MEM, T_SSE,       1, 255, RT_ELEMENTS(g_aMoveValues), g_aMoveValues },
     4457        {  bs3CpuInstr3_movupd_XMM10_FSxBX_icebp_c64,  X86_XCPT_DB, RM_MEM, T_SSE,      10, 255, RT_ELEMENTS(g_aMoveValues), g_aMoveValues },
     4458        {  bs3CpuInstr3_movupd_FSxBX_XMM1_icebp_c64,   X86_XCPT_DB, RM_MEM, T_SSE,     255,   1, RT_ELEMENTS(g_aMoveValues), g_aMoveValues },
     4459        {  bs3CpuInstr3_movupd_FSxBX_XMM10_icebp_c64,  X86_XCPT_DB, RM_MEM, T_SSE,     255,  10, RT_ELEMENTS(g_aMoveValues), g_aMoveValues },
     4460
     4461        {  bs3CpuInstr3_vmovupd_XMM1_XMM2_icebp_c64,   255,         RM_REG, T_AVX_128,   1,   2, RT_ELEMENTS(g_aMoveValues), g_aMoveValues },
     4462        {  bs3CpuInstr3_vmovupd_XMM7_XMM14_icebp_c64,  255,         RM_REG, T_AVX_128,   7,  14, RT_ELEMENTS(g_aMoveValues), g_aMoveValues },
     4463        {  bs3CpuInstr3_vmovupd_XMM1_FSxBX_icebp_c64,  X86_XCPT_DB, RM_MEM, T_AVX_128,   1, 255, RT_ELEMENTS(g_aMoveValues), g_aMoveValues },
     4464        {  bs3CpuInstr3_vmovupd_XMM11_FSxBX_icebp_c64, X86_XCPT_DB, RM_MEM, T_AVX_128,  11, 255, RT_ELEMENTS(g_aMoveValues), g_aMoveValues },
     4465        {  bs3CpuInstr3_vmovupd_FSxBX_XMM1_icebp_c64,  X86_XCPT_DB, RM_MEM, T_AVX_128, 255,   1, RT_ELEMENTS(g_aMoveValues), g_aMoveValues },
     4466        {  bs3CpuInstr3_vmovupd_FSxBX_XMM11_icebp_c64, X86_XCPT_DB, RM_MEM, T_AVX_128, 255,  11, RT_ELEMENTS(g_aMoveValues), g_aMoveValues },
     4467
     4468        {  bs3CpuInstr3_vmovupd_YMM1_YMM2_icebp_c64,   255,         RM_REG, T_AVX_256,   1,   2, RT_ELEMENTS(g_aMoveValues), g_aMoveValues },
     4469        {  bs3CpuInstr3_vmovupd_YMM12_YMM8_icebp_c64,  255,         RM_REG, T_AVX_256,  12,   8, RT_ELEMENTS(g_aMoveValues), g_aMoveValues },
     4470        {  bs3CpuInstr3_vmovupd_YMM1_FSxBX_icebp_c64,  X86_XCPT_DB, RM_MEM, T_AVX_256,   1, 255, RT_ELEMENTS(g_aMoveValues), g_aMoveValues },
     4471        {  bs3CpuInstr3_vmovupd_YMM12_FSxBX_icebp_c64, X86_XCPT_DB, RM_MEM, T_AVX_256,  12, 255, RT_ELEMENTS(g_aMoveValues), g_aMoveValues },
     4472        {  bs3CpuInstr3_vmovupd_FSxBX_YMM1_icebp_c64,  X86_XCPT_DB, RM_MEM, T_AVX_256, 255,   1, RT_ELEMENTS(g_aMoveValues), g_aMoveValues },
     4473        {  bs3CpuInstr3_vmovupd_FSxBX_YMM12_icebp_c64, X86_XCPT_DB, RM_MEM, T_AVX_256, 255,  12, RT_ELEMENTS(g_aMoveValues), g_aMoveValues },
     4474    };
     4475    static BS3CPUINSTR3_TEST3_MODE_T const s_aTests[3] = BS3CPUINSTR3_TEST3_MODES_INIT(s_aTests16, s_aTests32, s_aTests64);
     4476    unsigned const                         iTest       = BS3CPUINSTR3_TEST3_MODES_INDEX(bMode);
     4477    return bs3CpuInstr3_WorkerTestType3(bMode, s_aTests[iTest].paTests, s_aTests[iTest].cTests,
     4478                                        g_aXcptConfig4Unaligned, RT_ELEMENTS(g_aXcptConfig4Unaligned), 0 /*cbMaxAlign*/);
    42034479}
    42044480
     
    42534529        { "[v]punpcklqdq",                                  bs3CpuInstr3_v_punpcklqdq, 0 },
    42544530#endif
    4255 #if 1
     4531#if 0
    42564532        { "[v]packsswb",                                    bs3CpuInstr3_v_packsswb, 0 },
    42574533        { "[v]packssdw",                                    bs3CpuInstr3_v_packssdw, 0 },
     
    42594535        { "[v]packusdw",                                    bs3CpuInstr3_v_packusdw, 0 },
    42604536#endif
     4537#if 1
     4538        { "[v]movntdqa",                                    bs3CpuInstr3_v_movntdqa, 0 },
     4539        { "[v]movups",                                      bs3CpuInstr3_v_movups, 0 },
     4540        { "[v]movupd",                                      bs3CpuInstr3_v_movupd, 0 },
     4541#endif
    42614542    };
    42624543    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