Changeset 95523 in vbox for trunk/src/VBox/ValidationKit/bootsectors
- Timestamp:
- Jul 5, 2022 11:53:19 PM (3 years ago)
- svn:sync-xref-src-repo-rev:
- 152145
- 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 921 921 %endif 922 922 923 ; 924 ; [V]MOVNTDQA 925 ; 926 EMIT_INSTR_PLUS_ICEBP movntdqa, XMM1, FSxBX 927 EMIT_INSTR_PLUS_ICEBP vmovntdqa, XMM1, FSxBX 928 EMIT_INSTR_PLUS_ICEBP vmovntdqa, YMM1, FSxBX 929 %if TMPL_BITS == 64 930 EMIT_INSTR_PLUS_ICEBP movntdqa, XMM10, FSxBX 931 EMIT_INSTR_PLUS_ICEBP vmovntdqa, XMM11, FSxBX 932 EMIT_INSTR_PLUS_ICEBP vmovntdqa, YMM12, FSxBX 933 %endif 934 935 ; 936 ; [V]MOVUPS - not testing the 2nd register variant. 937 ; 938 EMIT_INSTR_PLUS_ICEBP movups, XMM1, XMM2 939 EMIT_INSTR_PLUS_ICEBP movups, XMM1, FSxBX 940 EMIT_INSTR_PLUS_ICEBP movups, FSxBX, XMM1 941 EMIT_INSTR_PLUS_ICEBP vmovups, XMM1, XMM2 942 EMIT_INSTR_PLUS_ICEBP vmovups, XMM1, FSxBX 943 EMIT_INSTR_PLUS_ICEBP vmovups, FSxBX, XMM1 944 EMIT_INSTR_PLUS_ICEBP vmovups, YMM1, YMM2 945 EMIT_INSTR_PLUS_ICEBP vmovups, YMM1, FSxBX 946 EMIT_INSTR_PLUS_ICEBP vmovups, FSxBX, YMM1 947 %if TMPL_BITS == 64 948 EMIT_INSTR_PLUS_ICEBP movups, XMM8, XMM12 949 EMIT_INSTR_PLUS_ICEBP movups, XMM10, FSxBX 950 EMIT_INSTR_PLUS_ICEBP movups, FSxBX, XMM10 951 EMIT_INSTR_PLUS_ICEBP vmovups, XMM7, XMM14 952 EMIT_INSTR_PLUS_ICEBP vmovups, XMM11, FSxBX 953 EMIT_INSTR_PLUS_ICEBP vmovups, FSxBX, XMM11 954 EMIT_INSTR_PLUS_ICEBP vmovups, YMM12, YMM8 955 EMIT_INSTR_PLUS_ICEBP vmovups, YMM12, FSxBX 956 EMIT_INSTR_PLUS_ICEBP vmovups, FSxBX, YMM12 957 %endif 958 959 ; 960 ; [V]MOVUPD - not testing the 2nd register variant. 961 ; 962 EMIT_INSTR_PLUS_ICEBP movupd, XMM1, XMM2 963 EMIT_INSTR_PLUS_ICEBP movupd, XMM1, FSxBX 964 EMIT_INSTR_PLUS_ICEBP movupd, FSxBX, XMM1 965 EMIT_INSTR_PLUS_ICEBP vmovupd, XMM1, XMM2 966 EMIT_INSTR_PLUS_ICEBP vmovupd, XMM1, FSxBX 967 EMIT_INSTR_PLUS_ICEBP vmovupd, FSxBX, XMM1 968 EMIT_INSTR_PLUS_ICEBP vmovupd, YMM1, YMM2 969 EMIT_INSTR_PLUS_ICEBP vmovupd, YMM1, FSxBX 970 EMIT_INSTR_PLUS_ICEBP vmovupd, FSxBX, YMM1 971 %if TMPL_BITS == 64 972 EMIT_INSTR_PLUS_ICEBP movupd, XMM8, XMM12 973 EMIT_INSTR_PLUS_ICEBP movupd, XMM10, FSxBX 974 EMIT_INSTR_PLUS_ICEBP movupd, FSxBX, XMM10 975 EMIT_INSTR_PLUS_ICEBP vmovupd, XMM7, XMM14 976 EMIT_INSTR_PLUS_ICEBP vmovupd, XMM11, FSxBX 977 EMIT_INSTR_PLUS_ICEBP vmovupd, FSxBX, XMM11 978 EMIT_INSTR_PLUS_ICEBP vmovupd, YMM12, YMM8 979 EMIT_INSTR_PLUS_ICEBP vmovupd, YMM12, FSxBX 980 EMIT_INSTR_PLUS_ICEBP vmovupd, FSxBX, YMM12 981 %endif 982 923 983 %endif ; BS3_INSTANTIATING_CMN 924 984 -
trunk/src/VBox/ValidationKit/bootsectors/bs3-cpu-instr-3.c32
r95511 r95523 64 64 65 65 /** Memory or register rm variant. */ 66 enum { RM_REG , RM_MEM };66 enum { RM_REG = 0, RM_MEM }; 67 67 68 68 /** … … 393 393 extern FNBS3FAR bs3CpuInstr3_vpshufb_YMM8_YMM9_FSxBX_icebp_c64; 394 394 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 455 395 /* [V]PUNPCKHBW */ 456 396 BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_punpckhbw_MM1_MM2_icebp); … … 647 587 static bool g_afTypeSupports[T_MAX] = { false, false, false, false, false, false, false, false, false }; 648 588 649 /** Exception type #4 test configurations. */589 /** Exception type \#4 test configurations. */ 650 590 static const BS3CPUINSTR3_CONFIG_T g_aXcptConfig4[] = 651 591 { … … 671 611 { 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, X86_XCPT_DB, X86_XCPT_DB, X86_XCPT_DB }, /* #12 */ 672 612 { 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. */ 616 static 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. */ 642 static 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 */ 673 665 }; 674 666 … … 1043 1035 { 1044 1036 BS3_ASSERT(paTests[iTest].enmRm == RM_MEM); 1045 Bs3MemSet(puMemOp, sizeof(*puMemOp), 0xcc);1037 Bs3MemSet(puMemOp, 0xcc, sizeof(*puMemOp)); 1046 1038 if (bXcptExpect == X86_XCPT_DB) 1047 1039 uMemOpExpect = paValues[iVal].uDstOut; … … 3466 3458 { 3467 3459 BS3_ASSERT(paTests[iTest].enmRm == RM_MEM); 3468 Bs3MemSet(puMemOp, sizeof(*puMemOp), 0xcc);3460 Bs3MemSet(puMemOp, 0xcc, sizeof(*puMemOp)); 3469 3461 uMemOpExpect = *puMemOp; 3470 3462 if (bXcptExpect == X86_XCPT_DB) … … 3672 3664 */ 3673 3665 static 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) 3675 3667 { 3676 3668 const char BS3_FAR * const pszMode = Bs3GetModeName(bMode); … … 3723 3715 uint8_t const cbOperand = paTests[iTest].enmType < T_128BITS ? 64/8 3724 3716 : 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); 3726 3718 uint8_t bXcptExpect = !g_afTypeSupports[paTests[iTest].enmType] ? X86_XCPT_UD 3727 3719 : fMmxInstr ? paConfigs[iCfg].bXcptMmx … … 3768 3760 { 3769 3761 BS3_ASSERT(paTests[iTest].enmRm == RM_MEM); 3770 Bs3MemSet(puMemOp, sizeof(*puMemOp), 0xcc);3762 Bs3MemSet(puMemOp, 0xcc, sizeof(*puMemOp)); 3771 3763 if (bXcptExpect == X86_XCPT_DB) 3772 3764 uMemOpExpect = paValues[iVal].uDstOut; … … 3846 3838 if (cErrors != Bs3TestSubErrorCount()) 3847 3839 { 3848 if (paConfigs[iCfg].fAligned)3840 /*if (paConfigs[iCfg].fAligned) 3849 3841 Bs3TestFailedF("ring-%d/cfg#%u/test#%u/value#%u failed (bXcptExpect=%#x)", 3850 3842 bRing, iCfg, iTest, iVal, bXcptExpect); 3851 else 3843 else*/ 3852 3844 Bs3TestFailedF("ring-%d/cfg#%u/test#%u/value#%u failed (bXcptExpect=%#x, puMemOp=%p, EFLAGS=%#RX32, CR0=%#RX32)", 3853 3845 bRing, iCfg, iTest, iVal, bXcptExpect, puMemOp, TrapFrame.Ctx.rflags.u32, TrapFrame.Ctx.cr0); … … 3883 3875 * PSHUFW 3884 3876 */ 3877 BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_pshufw_MM1_MM2_0FFh_icebp); 3878 BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_pshufw_MM1_FSxBX_0FFh_icebp); 3879 BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_pshufw_MM1_MM2_01Bh_icebp); 3880 BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_pshufw_MM1_FSxBX_01Bh_icebp); 3881 3885 3882 BS3_DECL_FAR(uint8_t) bs3CpuInstr3_pshufw(uint8_t bMode) 3886 3883 { … … 3933 3930 unsigned const iTest = BS3CPUINSTR3_TEST3_MODES_INDEX(bMode); 3934 3931 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*/); 3936 3933 } 3937 3934 3938 3935 3939 3936 /* 3940 * PSHUFHW3937 * [V]PSHUFHW 3941 3938 */ 3939 BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_pshufhw_XMM1_XMM2_0FFh_icebp); 3940 BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_pshufhw_XMM1_FSxBX_0FFh_icebp); 3941 BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_pshufhw_XMM1_XMM2_01Bh_icebp); 3942 BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_pshufhw_XMM1_FSxBX_01Bh_icebp); 3943 3944 BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_vpshufhw_XMM1_XMM2_0FFh_icebp); 3945 BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_vpshufhw_XMM1_FSxBX_0FFh_icebp); 3946 BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_vpshufhw_XMM1_XMM2_01Bh_icebp); 3947 BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_vpshufhw_XMM1_FSxBX_01Bh_icebp); 3948 3949 BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_vpshufhw_YMM1_YMM2_0FFh_icebp); 3950 BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_vpshufhw_YMM1_FSxBX_0FFh_icebp); 3951 BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_vpshufhw_YMM1_YMM2_01Bh_icebp); 3952 BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_vpshufhw_YMM1_FSxBX_01Bh_icebp); 3953 extern FNBS3FAR bs3CpuInstr3_vpshufhw_YMM12_YMM7_0FFh_icebp_c64; 3954 extern FNBS3FAR bs3CpuInstr3_vpshufhw_YMM9_YMM12_01Bh_icebp_c64; 3955 3942 3956 BS3_DECL_FAR(uint8_t) bs3CpuInstr3_v_pshufhw(uint8_t bMode) 3943 3957 { … … 4022 4036 unsigned const iTest = BS3CPUINSTR3_TEST3_MODES_INDEX(bMode); 4023 4037 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*/); 4025 4039 } 4026 4040 4027 4041 4028 4042 /* 4029 * PSHUFLW4043 * [V]PSHUFLW 4030 4044 */ 4045 BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_pshuflw_XMM1_XMM2_0FFh_icebp); 4046 BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_pshuflw_XMM1_FSxBX_0FFh_icebp); 4047 BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_pshuflw_XMM1_XMM2_01Bh_icebp); 4048 BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_pshuflw_XMM1_FSxBX_01Bh_icebp); 4049 4050 BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_vpshuflw_XMM1_XMM2_0FFh_icebp); 4051 BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_vpshuflw_XMM1_FSxBX_0FFh_icebp); 4052 BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_vpshuflw_XMM1_XMM2_01Bh_icebp); 4053 BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_vpshuflw_XMM1_FSxBX_01Bh_icebp); 4054 4055 BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_vpshuflw_YMM1_YMM2_0FFh_icebp); 4056 BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_vpshuflw_YMM1_FSxBX_0FFh_icebp); 4057 BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_vpshuflw_YMM1_YMM2_01Bh_icebp); 4058 BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_vpshuflw_YMM1_FSxBX_01Bh_icebp); 4059 extern FNBS3FAR bs3CpuInstr3_vpshuflw_YMM12_YMM7_0FFh_icebp_c64; 4060 extern FNBS3FAR bs3CpuInstr3_vpshuflw_YMM9_YMM12_01Bh_icebp_c64; 4061 4031 4062 BS3_DECL_FAR(uint8_t) bs3CpuInstr3_v_pshuflw(uint8_t bMode) 4032 4063 { … … 4111 4142 unsigned const iTest = BS3CPUINSTR3_TEST3_MODES_INDEX(bMode); 4112 4143 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*/); 4114 4145 } 4115 4146 4116 4147 4117 4148 /* 4118 * PSHUFHD4149 * [V]PSHUFHD 4119 4150 */ 4151 BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_pshufd_XMM1_XMM2_0FFh_icebp); 4152 BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_pshufd_XMM1_FSxBX_0FFh_icebp); 4153 BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_pshufd_XMM1_XMM2_01Bh_icebp); 4154 BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_pshufd_XMM1_FSxBX_01Bh_icebp); 4155 4156 BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_vpshufd_XMM1_XMM2_0FFh_icebp); 4157 BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_vpshufd_XMM1_FSxBX_0FFh_icebp); 4158 BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_vpshufd_XMM1_XMM2_01Bh_icebp); 4159 BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_vpshufd_XMM1_FSxBX_01Bh_icebp); 4160 4161 BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_vpshufd_YMM1_YMM2_0FFh_icebp); 4162 BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_vpshufd_YMM1_FSxBX_0FFh_icebp); 4163 BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_vpshufd_YMM1_YMM2_01Bh_icebp); 4164 BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_vpshufd_YMM1_FSxBX_01Bh_icebp); 4165 extern FNBS3FAR bs3CpuInstr3_vpshufd_YMM12_YMM7_0FFh_icebp_c64; 4166 extern FNBS3FAR bs3CpuInstr3_vpshufd_YMM9_YMM12_01Bh_icebp_c64; 4167 4120 4168 BS3_DECL_FAR(uint8_t) bs3CpuInstr3_v_pshufd(uint8_t bMode) 4121 4169 { … … 4200 4248 unsigned const iTest = BS3CPUINSTR3_TEST3_MODES_INDEX(bMode); 4201 4249 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 */ 4257 static 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 */ 4273 BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_movntdqa_XMM1_FSxBX_icebp); 4274 extern FNBS3FAR bs3CpuInstr3_movntdqa_XMM10_FSxBX_icebp_c64; 4275 BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_vmovntdqa_XMM1_FSxBX_icebp); 4276 extern FNBS3FAR bs3CpuInstr3_vmovntdqa_XMM11_FSxBX_icebp_c64; 4277 BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_vmovntdqa_YMM1_FSxBX_icebp); 4278 extern FNBS3FAR bs3CpuInstr3_vmovntdqa_YMM12_FSxBX_icebp_c64; 4279 4280 BS3_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 */ 4316 BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_movups_XMM1_XMM2_icebp); 4317 BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_movups_XMM1_FSxBX_icebp); 4318 extern FNBS3FAR bs3CpuInstr3_movups_XMM8_XMM12_icebp_c64; 4319 extern FNBS3FAR bs3CpuInstr3_movups_XMM10_FSxBX_icebp_c64; 4320 BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_vmovups_XMM1_XMM2_icebp); 4321 BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_vmovups_XMM1_FSxBX_icebp); 4322 extern FNBS3FAR bs3CpuInstr3_vmovups_XMM7_XMM14_icebp_c64; 4323 extern FNBS3FAR bs3CpuInstr3_vmovups_XMM11_FSxBX_icebp_c64; 4324 BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_vmovups_YMM1_YMM2_icebp); 4325 BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_vmovups_YMM1_FSxBX_icebp); 4326 extern FNBS3FAR bs3CpuInstr3_vmovups_YMM12_YMM8_icebp_c64; 4327 extern FNBS3FAR bs3CpuInstr3_vmovups_YMM12_FSxBX_icebp_c64; 4328 4329 BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_movups_FSxBX_XMM1_icebp); 4330 extern FNBS3FAR bs3CpuInstr3_movups_FSxBX_XMM10_icebp_c64; 4331 BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_vmovups_FSxBX_XMM1_icebp); 4332 extern FNBS3FAR bs3CpuInstr3_vmovups_FSxBX_XMM11_icebp_c64; 4333 BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_vmovups_FSxBX_YMM1_icebp); 4334 extern FNBS3FAR bs3CpuInstr3_vmovups_FSxBX_YMM12_icebp_c64; 4335 4336 BS3_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 */ 4402 BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_movupd_XMM1_XMM2_icebp); 4403 BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_movupd_XMM1_FSxBX_icebp); 4404 extern FNBS3FAR bs3CpuInstr3_movupd_XMM8_XMM12_icebp_c64; 4405 extern FNBS3FAR bs3CpuInstr3_movupd_XMM10_FSxBX_icebp_c64; 4406 BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_vmovupd_XMM1_XMM2_icebp); 4407 BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_vmovupd_XMM1_FSxBX_icebp); 4408 extern FNBS3FAR bs3CpuInstr3_vmovupd_XMM7_XMM14_icebp_c64; 4409 extern FNBS3FAR bs3CpuInstr3_vmovupd_XMM11_FSxBX_icebp_c64; 4410 BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_vmovupd_YMM1_YMM2_icebp); 4411 BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_vmovupd_YMM1_FSxBX_icebp); 4412 extern FNBS3FAR bs3CpuInstr3_vmovupd_YMM12_YMM8_icebp_c64; 4413 extern FNBS3FAR bs3CpuInstr3_vmovupd_YMM12_FSxBX_icebp_c64; 4414 4415 BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_movupd_FSxBX_XMM1_icebp); 4416 extern FNBS3FAR bs3CpuInstr3_movupd_FSxBX_XMM10_icebp_c64; 4417 BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_vmovupd_FSxBX_XMM1_icebp); 4418 extern FNBS3FAR bs3CpuInstr3_vmovupd_FSxBX_XMM11_icebp_c64; 4419 BS3_FNBS3FAR_PROTOTYPES_CMN(bs3CpuInstr3_vmovupd_FSxBX_YMM1_icebp); 4420 extern FNBS3FAR bs3CpuInstr3_vmovupd_FSxBX_YMM12_icebp_c64; 4421 4422 BS3_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*/); 4203 4479 } 4204 4480 … … 4253 4529 { "[v]punpcklqdq", bs3CpuInstr3_v_punpcklqdq, 0 }, 4254 4530 #endif 4255 #if 14531 #if 0 4256 4532 { "[v]packsswb", bs3CpuInstr3_v_packsswb, 0 }, 4257 4533 { "[v]packssdw", bs3CpuInstr3_v_packssdw, 0 }, … … 4259 4535 { "[v]packusdw", bs3CpuInstr3_v_packusdw, 0 }, 4260 4536 #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 4261 4542 }; 4262 4543 Bs3TestInit("bs3-cpu-instr-3");
Note:
See TracChangeset
for help on using the changeset viewer.