VirtualBox

Changeset 106886 in vbox


Ignore:
Timestamp:
Nov 8, 2024 9:56:24 AM (2 months ago)
Author:
vboxsync
Message:

ValidationKit/bootsectors: SSE/AVX testcases for [v]movlhps, vpermps, vpermpd; bugref:9898; jiraref:VBP-1204

Location:
trunk/src/VBox/ValidationKit/bootsectors
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/ValidationKit/bootsectors/bs3-cpu-instr-3-template.mac

    r106864 r106886  
    10201020EMIT_INSTR_PLUS_ICEBP_C64 movhlps,  XMM8, XMM12
    10211021EMIT_INSTR_PLUS_ICEBP_C64 vmovhlps, XMM10, XMM14, XMM12
     1022
     1023;
     1024; [V]MOVLHPS
     1025;
     1026EMIT_INSTR_PLUS_ICEBP     movlhps,  XMM1,  XMM2
     1027EMIT_INSTR_PLUS_ICEBP     vmovlhps, XMM1,  XMM2,  XMM3
     1028EMIT_INSTR_PLUS_ICEBP_C64 movlhps,  XMM8,  XMM12
     1029EMIT_INSTR_PLUS_ICEBP_C64 vmovlhps, XMM10, XMM14, XMM12
    10221030
    10231031;
     
    32763284
    32773285;
     3286; VPERMPS
     3287;
     3288EMIT_INSTR_PLUS_ICEBP     vpermps, YMM1, YMM2, YMM3
     3289EMIT_INSTR_PLUS_ICEBP     vpermps, YMM1, YMM2, FSxBX
     3290EMIT_INSTR_PLUS_ICEBP_C64 vpermps, YMM8, YMM9, YMM10
     3291EMIT_INSTR_PLUS_ICEBP_C64 vpermps, YMM8, YMM9, FSxBX
     3292EMIT_INSTR_PLUS_ICEBP     vpermps, YMM1, YMM2, YMM2
     3293EMIT_INSTR_PLUS_ICEBP     vpermps, YMM1, YMM1, YMM2
     3294EMIT_INSTR_PLUS_ICEBP     vpermps, YMM1, YMM2, YMM1
     3295EMIT_INSTR_PLUS_ICEBP     vpermps, YMM1, YMM1, YMM1
     3296EMIT_INSTR_PLUS_ICEBP     vpermps, YMM1, YMM1, FSxBX
     3297
     3298;
     3299; VPERMPD
     3300;
     3301EMIT_INSTR_PLUS_ICEBP     vpermpd, YMM1, YMM2,  000h
     3302EMIT_INSTR_PLUS_ICEBP     vpermpd, YMM1, YMM2,  0E7h
     3303EMIT_INSTR_PLUS_ICEBP     vpermpd, YMM1, YMM2,  091h
     3304EMIT_INSTR_PLUS_ICEBP     vpermpd, YMM1, FSxBX, 000h
     3305EMIT_INSTR_PLUS_ICEBP     vpermpd, YMM1, FSxBX, 0E7h
     3306EMIT_INSTR_PLUS_ICEBP     vpermpd, YMM1, FSxBX, 091h
     3307EMIT_INSTR_PLUS_ICEBP_C64 vpermpd, YMM8, YMM9,  000h
     3308EMIT_INSTR_PLUS_ICEBP_C64 vpermpd, YMM8, YMM9,  0E7h
     3309EMIT_INSTR_PLUS_ICEBP_C64 vpermpd, YMM8, YMM9,  091h
     3310EMIT_INSTR_PLUS_ICEBP_C64 vpermpd, YMM8, FSxBX, 000h
     3311EMIT_INSTR_PLUS_ICEBP_C64 vpermpd, YMM8, FSxBX, 0E7h
     3312EMIT_INSTR_PLUS_ICEBP_C64 vpermpd, YMM8, FSxBX, 091h
     3313EMIT_INSTR_PLUS_ICEBP     vpermpd, YMM1, YMM1,  000h
     3314EMIT_INSTR_PLUS_ICEBP     vpermpd, YMM1, YMM1,  0E7h
     3315EMIT_INSTR_PLUS_ICEBP     vpermpd, YMM1, YMM1,  091h
     3316
     3317;
    32783318; [V]PMADDUBSW
    32793319;
  • trunk/src/VBox/ValidationKit/bootsectors/bs3-cpu-instr-3.c32

    r106885 r106886  
    43724372        {  bs3CpuInstr3_vmovhlps_XMM1_XMM2_XMM3_icebp_c64,    255, RM_REG, T_AVX_128, XMM1,  XMM2,  XMM3,  PASS_ELEMENTS(s_aValues) },
    43734373        {  bs3CpuInstr3_vmovhlps_XMM10_XMM14_XMM12_icebp_c64, 255, RM_REG, T_AVX_128, XMM10, XMM14, XMM12, PASS_ELEMENTS(s_aValues) },
     4374    };
     4375    static BS3CPUINSTR3_TEST1_MODE_T const s_aTests[3] = BS3CPUINSTR3_TEST1_MODES_INIT(s_aTests16, s_aTests32, s_aTests64);
     4376    unsigned const                         iTest       = BS3CPUINSTR3_TEST_MODES_INDEX(bMode);
     4377    return bs3CpuInstr3_WorkerTestType1(bMode, s_aTests[iTest].paTests, s_aTests[iTest].cTests,
     4378                                        g_aXcptConfig5, RT_ELEMENTS(g_aXcptConfig5));
     4379}
     4380
     4381
     4382/*
     4383 * [V]MOVLHPS - Move high qword in source (2) to low qword in destination, leaving
     4384 *              the high qword in the destination as it was.  The VEX variant
     4385 *              takes the high qword from the first source operand.
     4386 */
     4387BS3_DECL_FAR(uint8_t) bs3CpuInstr3_v_movlhps(uint8_t bMode)
     4388{
     4389    static BS3CPUINSTR3_TEST1_VALUES_T const s_aValues[] =
     4390    {
     4391        {   /*src2*/ RTUINT256_INIT_C(0, 0, 0, 0),
     4392            /*src1*/ RTUINT256_INIT_C(0, 0, 0, 0),
     4393            /* => */ RTUINT256_INIT_C(0, 0, 0, 0) },
     4394        {   /*src2*/ RTUINT256_INIT_C(0xf1f2f3f4f5f6f7f8, 0xe1e2e3e4e5e6e7e8, 0xd1d2d3d4d5d6d7d8, 0xc1c2c3c4c5c6c7c8),
     4395            /*src1*/ RTUINT256_INIT_C(0xb1b2b3b4b5b6b7b8, 0xa1a2a3a4a5a6a7a8, 0x9192939495969798, 0x8182838485868788),
     4396            /* => */ RTUINT256_INIT_C(0x0000000000000000, 0x0000000000000000, 0xc1c2c3c4c5c6c7c8, 0x8182838485868788) },
     4397        {   /*src2*/ RTUINT256_INIT_C(0x5555666677778888, 0x1111222233334444, 0x1111222233334444, 0x81828384c5c6c7c8),
     4398            /*src1*/ RTUINT256_INIT_C(0xddddeeeeffff0000, 0x9999aaaabbbbcccc, 0x9999aaaabbbbcccc, 0xddddeeeeffff0000),
     4399            /* => */ RTUINT256_INIT_C(0x0000000000000000, 0x0000000000000000, 0x81828384c5c6c7c8, 0xddddeeeeffff0000) },
     4400        {   /*src2*/ RTUINT256_INIT_C(0x4d09f02a6cdc73d5, 0x3ef417c8666b3fe6, 0xb4212fa8564c9ba2, 0x9c5ce073930996bb),
     4401            /*src1*/ RTUINT256_INIT_C(0x1eddddac09633294, 0xf95c8eec40725633, 0x8800e95bbf9962c3, 0x43d3cda0238499fd),
     4402            /* => */ RTUINT256_INIT_C(0x0000000000000000, 0x0000000000000000, 0x9c5ce073930996bb, 0x43d3cda0238499fd) },
     4403    };
     4404
     4405    static BS3CPUINSTR3_TEST1_T const s_aTests16[] =
     4406    {
     4407        {  bs3CpuInstr3_movlhps_XMM1_XMM2_icebp_c16,          255, RM_REG, T_SSE,     XMM1,  XMM1,  XMM2,  PASS_ELEMENTS(s_aValues) },
     4408        {  bs3CpuInstr3_vmovlhps_XMM1_XMM2_XMM3_icebp_c16,    255, RM_REG, T_AVX_128, XMM1,  XMM2,  XMM3,  PASS_ELEMENTS(s_aValues) },
     4409    };
     4410    static BS3CPUINSTR3_TEST1_T const s_aTests32[] =
     4411    {
     4412        {  bs3CpuInstr3_movlhps_XMM1_XMM2_icebp_c32,          255, RM_REG, T_SSE,     XMM1,  XMM1,  XMM2,  PASS_ELEMENTS(s_aValues) },
     4413        {  bs3CpuInstr3_vmovlhps_XMM1_XMM2_XMM3_icebp_c32,    255, RM_REG, T_AVX_128, XMM1,  XMM2,  XMM3,  PASS_ELEMENTS(s_aValues) },
     4414    };
     4415    static BS3CPUINSTR3_TEST1_T const s_aTests64[] =
     4416    {
     4417        {  bs3CpuInstr3_movlhps_XMM1_XMM2_icebp_c64,          255, RM_REG, T_SSE,     XMM1,  XMM1,  XMM2,  PASS_ELEMENTS(s_aValues) },
     4418        {  bs3CpuInstr3_movlhps_XMM8_XMM12_icebp_c64,         255, RM_REG, T_SSE,     XMM8,  XMM8,  XMM12, PASS_ELEMENTS(s_aValues) },
     4419        {  bs3CpuInstr3_vmovlhps_XMM1_XMM2_XMM3_icebp_c64,    255, RM_REG, T_AVX_128, XMM1,  XMM2,  XMM3,  PASS_ELEMENTS(s_aValues) },
     4420        {  bs3CpuInstr3_vmovlhps_XMM10_XMM14_XMM12_icebp_c64, 255, RM_REG, T_AVX_128, XMM10, XMM14, XMM12, PASS_ELEMENTS(s_aValues) },
    43744421    };
    43754422    static BS3CPUINSTR3_TEST1_MODE_T const s_aTests[3] = BS3CPUINSTR3_TEST1_MODES_INIT(s_aTests16, s_aTests32, s_aTests64);
     
    93479394
    93489395/*
     9396 * VPERMPS - Permute Single Precision Floating-Point Values
     9397 */
     9398BS3_DECL_FAR(uint8_t) bs3CpuInstr3_vpermps(uint8_t bMode)
     9399{
     9400    static BS3CPUINSTR3_TEST1_VALUES_T const s_aValues[] =
     9401    {
     9402        {   /*src2*/ RTUINT256_INIT_C(0xf0e1d2c3eeddccbb, 0x1234567880806502, 0x6809400453589793, 0xfaf0f00f31415926),
     9403            /*src1*/ RTUINT256_INIT_C(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000),
     9404            /* => */ RTUINT256_INIT_C(0x3141592631415926, 0x3141592631415926, 0x3141592631415926, 0x3141592631415926) }, /* lo => all 8 slots */
     9405        {   /*src2*/ RTUINT256_INIT_C(0xf0e1d2c3eeddccbb, 0x1234567880806502, 0x6809400453589793, 0xfaf0f00f31415926),
     9406            /*src1*/ RTUINT256_INIT_C(0x0000000000000001, 0x0000000200000000, 0x0000000000000005, 0x0000000600000007),
     9407            /* => */ RTUINT256_INIT_C(0x31415926faf0f00f, 0x5358979331415926, 0x3141592612345678, 0xeeddccbbf0e1d2c3) }, /* backwards except middle 2 = lo */
     9408        {   /*src2*/ RTUINT256_INIT_C(0xf0e1d2c3eeddccbb, 0x1234567880806502, 0x6809400453589793, 0xfaf0f00f31415926),
     9409            /*src1*/ RTUINT256_INIT_C(0x013456789abcdef2, 0x1236789abcdef045, 0x23456abcdef01789, 0x345678def0129abc),
     9410            /* => */ RTUINT256_INIT_C(0x3141592653589793, 0x5358979312345678, 0x80806502faf0f00f, 0xeeddccbb80806502) }, /* assorted */
     9411    };
     9412    static BS3CPUINSTR3_TEST1_VALUES_T const s_aValuesSR[] =
     9413    {
     9414        {   /*igno*/ RTUINT256_INIT_C(0, 0, 0, 0),
     9415            /*src1*/ RTUINT256_INIT_C(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000),
     9416            /* => */ RTUINT256_INIT_C(0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000) },
     9417        {   /*igno*/ RTUINT256_INIT_C(0, 0, 0, 0),
     9418            /*src1*/ RTUINT256_INIT_C(0x0000000000000001, 0x0000000200000000, 0x0000000000000005, 0x0000000600000007),
     9419            /* => */ RTUINT256_INIT_C(0x0000000700000006, 0x0000000500000007, 0x0000000700000002, 0x0000000100000000) },
     9420        {   /*igno*/ RTUINT256_INIT_C(0, 0, 0, 0),
     9421            /*src1*/ RTUINT256_INIT_C(0x013456789abcdef2, 0x1236789abcdef045, 0x23456abcdef01789, 0x345678def0129abc),
     9422            /* => */ RTUINT256_INIT_C(0xf0129abcdef01789, 0xdef017891236789a, 0xbcdef045345678de, 0x9abcdef2bcdef045) },
     9423    };
     9424
     9425    static BS3CPUINSTR3_TEST1_T const s_aTests16[] =
     9426    {
     9427        {  bs3CpuInstr3_vpermps_YMM1_YMM2_YMM3_icebp_c16,  255,         RM_REG, T_AVX2_256, YMM1, YMM2, YMM3,  PASS_ELEMENTS(s_aValues)   },
     9428        {  bs3CpuInstr3_vpermps_YMM1_YMM2_FSxBX_icebp_c16, X86_XCPT_DB, RM_MEM, T_AVX2_256, YMM1, YMM2, FSxBX, PASS_ELEMENTS(s_aValues)   },
     9429
     9430        {  bs3CpuInstr3_vpermps_YMM1_YMM2_YMM2_icebp_c16,  255,         RM_REG, T_AVX2_256, YMM1, YMM2, NOREG, PASS_ELEMENTS(s_aValuesSR) },
     9431        {  bs3CpuInstr3_vpermps_YMM1_YMM1_YMM2_icebp_c16,  255,         RM_REG, T_AVX2_256, YMM1, YMM1, YMM2,  PASS_ELEMENTS(s_aValues)   },
     9432        {  bs3CpuInstr3_vpermps_YMM1_YMM2_YMM1_icebp_c16,  255,         RM_REG, T_AVX2_256, YMM1, YMM2, YMM1,  PASS_ELEMENTS(s_aValues)   },
     9433        {  bs3CpuInstr3_vpermps_YMM1_YMM1_YMM1_icebp_c16,  255,         RM_REG, T_AVX2_256, YMM1, YMM1, NOREG, PASS_ELEMENTS(s_aValuesSR) },
     9434        {  bs3CpuInstr3_vpermps_YMM1_YMM1_FSxBX_icebp_c16, X86_XCPT_DB, RM_MEM, T_AVX2_256, YMM1, YMM1, FSxBX, PASS_ELEMENTS(s_aValues)   },
     9435    };
     9436    static BS3CPUINSTR3_TEST1_T const s_aTests32[] =
     9437    {
     9438        {  bs3CpuInstr3_vpermps_YMM1_YMM2_YMM3_icebp_c32,  255,         RM_REG, T_AVX2_256, YMM1, YMM2, YMM3,  PASS_ELEMENTS(s_aValues)   },
     9439        {  bs3CpuInstr3_vpermps_YMM1_YMM2_FSxBX_icebp_c32, X86_XCPT_DB, RM_MEM, T_AVX2_256, YMM1, YMM2, FSxBX, PASS_ELEMENTS(s_aValues)   },
     9440
     9441        {  bs3CpuInstr3_vpermps_YMM1_YMM2_YMM2_icebp_c32,  255,         RM_REG, T_AVX2_256, YMM1, YMM2, NOREG, PASS_ELEMENTS(s_aValuesSR) },
     9442        {  bs3CpuInstr3_vpermps_YMM1_YMM1_YMM2_icebp_c32,  255,         RM_REG, T_AVX2_256, YMM1, YMM1, YMM2,  PASS_ELEMENTS(s_aValues)   },
     9443        {  bs3CpuInstr3_vpermps_YMM1_YMM2_YMM1_icebp_c32,  255,         RM_REG, T_AVX2_256, YMM1, YMM2, YMM1,  PASS_ELEMENTS(s_aValues)   },
     9444        {  bs3CpuInstr3_vpermps_YMM1_YMM1_YMM1_icebp_c32,  255,         RM_REG, T_AVX2_256, YMM1, YMM1, NOREG, PASS_ELEMENTS(s_aValuesSR) },
     9445        {  bs3CpuInstr3_vpermps_YMM1_YMM1_FSxBX_icebp_c32, X86_XCPT_DB, RM_MEM, T_AVX2_256, YMM1, YMM1, FSxBX, PASS_ELEMENTS(s_aValues)   },
     9446    };
     9447    static BS3CPUINSTR3_TEST1_T const s_aTests64[] =
     9448    {
     9449        {  bs3CpuInstr3_vpermps_YMM1_YMM2_YMM3_icebp_c64,  255,         RM_REG, T_AVX2_256, YMM1, YMM2, YMM3,  PASS_ELEMENTS(s_aValues)   },
     9450        {  bs3CpuInstr3_vpermps_YMM1_YMM2_FSxBX_icebp_c64, X86_XCPT_DB, RM_MEM, T_AVX2_256, YMM1, YMM2, FSxBX, PASS_ELEMENTS(s_aValues)   },
     9451
     9452        {  bs3CpuInstr3_vpermps_YMM8_YMM9_YMM10_icebp_c64, 255,         RM_REG, T_AVX2_256, YMM8, YMM9, YMM10, PASS_ELEMENTS(s_aValues)   },
     9453        {  bs3CpuInstr3_vpermps_YMM8_YMM9_FSxBX_icebp_c64, X86_XCPT_DB, RM_MEM, T_AVX2_256, YMM8, YMM9, FSxBX, PASS_ELEMENTS(s_aValues)   },
     9454
     9455        {  bs3CpuInstr3_vpermps_YMM1_YMM2_YMM2_icebp_c64,  255,         RM_REG, T_AVX2_256, YMM1, YMM2, NOREG, PASS_ELEMENTS(s_aValuesSR) },
     9456        {  bs3CpuInstr3_vpermps_YMM1_YMM1_YMM2_icebp_c64,  255,         RM_REG, T_AVX2_256, YMM1, YMM1, YMM2,  PASS_ELEMENTS(s_aValues)   },
     9457        {  bs3CpuInstr3_vpermps_YMM1_YMM2_YMM1_icebp_c64,  255,         RM_REG, T_AVX2_256, YMM1, YMM2, YMM1,  PASS_ELEMENTS(s_aValues)   },
     9458        {  bs3CpuInstr3_vpermps_YMM1_YMM1_YMM1_icebp_c64,  255,         RM_REG, T_AVX2_256, YMM1, YMM1, NOREG, PASS_ELEMENTS(s_aValuesSR) },
     9459        {  bs3CpuInstr3_vpermps_YMM1_YMM1_FSxBX_icebp_c64, X86_XCPT_DB, RM_MEM, T_AVX2_256, YMM1, YMM1, FSxBX, PASS_ELEMENTS(s_aValues)   },
     9460    };
     9461    static BS3CPUINSTR3_TEST1_MODE_T const s_aTests[3] = BS3CPUINSTR3_TEST1_MODES_INIT(s_aTests16, s_aTests32, s_aTests64);
     9462    unsigned const                         iTest       = BS3CPUINSTR3_TEST_MODES_INDEX(bMode);
     9463    return bs3CpuInstr3_WorkerTestType1(bMode, s_aTests[iTest].paTests, s_aTests[iTest].cTests,
     9464                                        g_aXcptConfig4, RT_ELEMENTS(g_aXcptConfig4));
     9465}
     9466
     9467
     9468/*
    93499469 * VPERMILPD - Permute In-Lane of Pairs of Double Precision Floating-Point Values
    93509470 *           - ('Double Precision Floating-Point Values' AKA 'uninterpreted strings of 64-bits')
     
    94609580    return bs3CpuInstr3_WorkerTestType1(bMode, s_aTests[iTest].paTests, s_aTests[iTest].cTests,
    94619581                                        g_aXcptConfig6, RT_ELEMENTS(g_aXcptConfig6));
     9582}
     9583
     9584
     9585/*
     9586 * VPERMPD - Permute Double Precision Floating-Point Values
     9587 */
     9588BS3_DECL_FAR(uint8_t) bs3CpuInstr3_vpermpd(uint8_t bMode)
     9589{
     9590    static BS3CPUINSTR3_TEST1_VALUES_T const s_aValues00[] =
     9591    {
     9592        {   /*igno*/ RTUINT256_INIT_C(0, 0, 0, 0),
     9593            /*src1*/ RTUINT256_INIT_C(0xf0e1d2c3eeddccbb, 0x1234567880806502, 0x6809400453589793, 0xfaf0f00f31415926),
     9594            /* => */ RTUINT256_INIT_C(0xfaf0f00f31415926, 0xfaf0f00f31415926, 0xfaf0f00f31415926, 0xfaf0f00f31415926) },
     9595        {   /*igno*/ RTUINT256_INIT_C(0, 0, 0, 0),
     9596            /*src1*/ RTUINT256_INIT_C(0x0000000000000001, 0x0000000200000000, 0x0000000000000005, 0x0000000600000007),
     9597            /* => */ RTUINT256_INIT_C(0x0000000600000007, 0x0000000600000007, 0x0000000600000007, 0x0000000600000007) },
     9598        {   /*igno*/ RTUINT256_INIT_C(0, 0, 0, 0),
     9599            /*src1*/ RTUINT256_INIT_C(0x013456789abcdef2, 0x1236789abcdef045, 0x23456abcdef01789, 0x345678def0129abc),
     9600            /* => */ RTUINT256_INIT_C(0x345678def0129abc, 0x345678def0129abc, 0x345678def0129abc, 0x345678def0129abc) },
     9601    };
     9602    static BS3CPUINSTR3_TEST1_VALUES_T const s_aValues91[] =
     9603    {
     9604        {   /*igno*/ RTUINT256_INIT_C(0, 0, 0, 0),
     9605            /*src1*/ RTUINT256_INIT_C(0xf0e1d2c3eeddccbb, 0x1234567880806502, 0x6809400453589793, 0xfaf0f00f31415926),
     9606            /* => */ RTUINT256_INIT_C(0x1234567880806502, 0x6809400453589793, 0xfaf0f00f31415926, 0x6809400453589793) },
     9607        {   /*igno*/ RTUINT256_INIT_C(0, 0, 0, 0),
     9608            /*src1*/ RTUINT256_INIT_C(0x0000000000000001, 0x0000000200000000, 0x0000000000000005, 0x0000000600000007),
     9609            /* => */ RTUINT256_INIT_C(0x0000000200000000, 0x0000000000000005, 0x0000000600000007, 0x0000000000000005) },
     9610        {   /*igno*/ RTUINT256_INIT_C(0, 0, 0, 0),
     9611            /*src1*/ RTUINT256_INIT_C(0x013456789abcdef2, 0x1236789abcdef045, 0x23456abcdef01789, 0x345678def0129abc),
     9612            /* => */ RTUINT256_INIT_C(0x1236789abcdef045, 0x23456abcdef01789, 0x345678def0129abc, 0x23456abcdef01789) },
     9613    };
     9614    static BS3CPUINSTR3_TEST1_VALUES_T const s_aValuesE7[] =
     9615    {
     9616        {   /*igno*/ RTUINT256_INIT_C(0, 0, 0, 0),
     9617            /*src1*/ RTUINT256_INIT_C(0xf0e1d2c3eeddccbb, 0x1234567880806502, 0x6809400453589793, 0xfaf0f00f31415926),
     9618            /* => */ RTUINT256_INIT_C(0xf0e1d2c3eeddccbb, 0x1234567880806502, 0x6809400453589793, 0xf0e1d2c3eeddccbb) },
     9619        {   /*igno*/ RTUINT256_INIT_C(0, 0, 0, 0),
     9620            /*src1*/ RTUINT256_INIT_C(0x0000000000000001, 0x0000000200000000, 0x0000000000000005, 0x0000000600000007),
     9621            /* => */ RTUINT256_INIT_C(0x0000000000000001, 0x0000000200000000, 0x0000000000000005, 0x0000000000000001) },
     9622        {   /*igno*/ RTUINT256_INIT_C(0, 0, 0, 0),
     9623            /*src1*/ RTUINT256_INIT_C(0x013456789abcdef2, 0x1236789abcdef045, 0x23456abcdef01789, 0x345678def0129abc),
     9624            /* => */ RTUINT256_INIT_C(0x013456789abcdef2, 0x1236789abcdef045, 0x23456abcdef01789, 0x013456789abcdef2) },
     9625    };
     9626
     9627    static BS3CPUINSTR3_TEST1_T const s_aTests16[] =
     9628    {
     9629        {  bs3CpuInstr3_vpermpd_YMM1_YMM2_000h_icebp_c16,  255,         RM_REG, T_AVX2_256, YMM1, YMM2,  NOREG, PASS_ELEMENTS(s_aValues00) },
     9630        {  bs3CpuInstr3_vpermpd_YMM1_FSxBX_000h_icebp_c16, X86_XCPT_DB, RM_MEM, T_AVX2_256, YMM1, FSxBX, NOREG, PASS_ELEMENTS(s_aValues00) },
     9631        {  bs3CpuInstr3_vpermpd_YMM1_YMM2_091h_icebp_c16,  255,         RM_REG, T_AVX2_256, YMM1, YMM2,  NOREG, PASS_ELEMENTS(s_aValues91) },
     9632        {  bs3CpuInstr3_vpermpd_YMM1_FSxBX_091h_icebp_c16, X86_XCPT_DB, RM_MEM, T_AVX2_256, YMM1, FSxBX, NOREG, PASS_ELEMENTS(s_aValues91) },
     9633        {  bs3CpuInstr3_vpermpd_YMM1_YMM2_0E7h_icebp_c16,  255,         RM_REG, T_AVX2_256, YMM1, YMM2,  NOREG, PASS_ELEMENTS(s_aValuesE7) },
     9634        {  bs3CpuInstr3_vpermpd_YMM1_FSxBX_0E7h_icebp_c16, X86_XCPT_DB, RM_MEM, T_AVX2_256, YMM1, FSxBX, NOREG, PASS_ELEMENTS(s_aValuesE7) },
     9635
     9636        {  bs3CpuInstr3_vpermpd_YMM1_YMM1_000h_icebp_c16,  255,         RM_REG, T_AVX2_256, YMM1, YMM1,  NOREG, PASS_ELEMENTS(s_aValues00) },
     9637        {  bs3CpuInstr3_vpermpd_YMM1_YMM1_091h_icebp_c16,  255,         RM_REG, T_AVX2_256, YMM1, YMM1,  NOREG, PASS_ELEMENTS(s_aValues91) },
     9638        {  bs3CpuInstr3_vpermpd_YMM1_YMM1_0E7h_icebp_c16,  255,         RM_REG, T_AVX2_256, YMM1, YMM1,  NOREG, PASS_ELEMENTS(s_aValuesE7) },
     9639    };
     9640    static BS3CPUINSTR3_TEST1_T const s_aTests32[] =
     9641    {
     9642        {  bs3CpuInstr3_vpermpd_YMM1_YMM2_000h_icebp_c32,  255,         RM_REG, T_AVX2_256, YMM1, YMM2,  NOREG, PASS_ELEMENTS(s_aValues00) },
     9643        {  bs3CpuInstr3_vpermpd_YMM1_FSxBX_000h_icebp_c32, X86_XCPT_DB, RM_MEM, T_AVX2_256, YMM1, FSxBX, NOREG, PASS_ELEMENTS(s_aValues00) },
     9644        {  bs3CpuInstr3_vpermpd_YMM1_YMM2_091h_icebp_c32,  255,         RM_REG, T_AVX2_256, YMM1, YMM2,  NOREG, PASS_ELEMENTS(s_aValues91) },
     9645        {  bs3CpuInstr3_vpermpd_YMM1_FSxBX_091h_icebp_c32, X86_XCPT_DB, RM_MEM, T_AVX2_256, YMM1, FSxBX, NOREG, PASS_ELEMENTS(s_aValues91) },
     9646        {  bs3CpuInstr3_vpermpd_YMM1_YMM2_0E7h_icebp_c32,  255,         RM_REG, T_AVX2_256, YMM1, YMM2,  NOREG, PASS_ELEMENTS(s_aValuesE7) },
     9647        {  bs3CpuInstr3_vpermpd_YMM1_FSxBX_0E7h_icebp_c32, X86_XCPT_DB, RM_MEM, T_AVX2_256, YMM1, FSxBX, NOREG, PASS_ELEMENTS(s_aValuesE7) },
     9648
     9649        {  bs3CpuInstr3_vpermpd_YMM1_YMM1_000h_icebp_c32,  255,         RM_REG, T_AVX2_256, YMM1, YMM1,  NOREG, PASS_ELEMENTS(s_aValues00) },
     9650        {  bs3CpuInstr3_vpermpd_YMM1_YMM1_091h_icebp_c32,  255,         RM_REG, T_AVX2_256, YMM1, YMM1,  NOREG, PASS_ELEMENTS(s_aValues91) },
     9651        {  bs3CpuInstr3_vpermpd_YMM1_YMM1_0E7h_icebp_c32,  255,         RM_REG, T_AVX2_256, YMM1, YMM1,  NOREG, PASS_ELEMENTS(s_aValuesE7) },
     9652    };
     9653    static BS3CPUINSTR3_TEST1_T const s_aTests64[] =
     9654    {
     9655        {  bs3CpuInstr3_vpermpd_YMM1_YMM2_000h_icebp_c64,  255,         RM_REG, T_AVX2_256, YMM1, YMM2,  NOREG, PASS_ELEMENTS(s_aValues00) },
     9656        {  bs3CpuInstr3_vpermpd_YMM1_FSxBX_000h_icebp_c64, X86_XCPT_DB, RM_MEM, T_AVX2_256, YMM1, FSxBX, NOREG, PASS_ELEMENTS(s_aValues00) },
     9657        {  bs3CpuInstr3_vpermpd_YMM1_YMM2_091h_icebp_c64,  255,         RM_REG, T_AVX2_256, YMM1, YMM2,  NOREG, PASS_ELEMENTS(s_aValues91) },
     9658        {  bs3CpuInstr3_vpermpd_YMM1_FSxBX_091h_icebp_c64, X86_XCPT_DB, RM_MEM, T_AVX2_256, YMM1, FSxBX, NOREG, PASS_ELEMENTS(s_aValues91) },
     9659        {  bs3CpuInstr3_vpermpd_YMM1_YMM2_0E7h_icebp_c64,  255,         RM_REG, T_AVX2_256, YMM1, YMM2,  NOREG, PASS_ELEMENTS(s_aValuesE7) },
     9660        {  bs3CpuInstr3_vpermpd_YMM1_FSxBX_0E7h_icebp_c64, X86_XCPT_DB, RM_MEM, T_AVX2_256, YMM1, FSxBX, NOREG, PASS_ELEMENTS(s_aValuesE7) },
     9661
     9662        {  bs3CpuInstr3_vpermpd_YMM8_YMM9_000h_icebp_c64,  255,         RM_REG, T_AVX2_256, YMM8, YMM9,  NOREG, PASS_ELEMENTS(s_aValues00) },
     9663        {  bs3CpuInstr3_vpermpd_YMM8_FSxBX_000h_icebp_c64, X86_XCPT_DB, RM_MEM, T_AVX2_256, YMM8, FSxBX, NOREG, PASS_ELEMENTS(s_aValues00) },
     9664        {  bs3CpuInstr3_vpermpd_YMM8_YMM9_091h_icebp_c64,  255,         RM_REG, T_AVX2_256, YMM8, YMM9,  NOREG, PASS_ELEMENTS(s_aValues91) },
     9665        {  bs3CpuInstr3_vpermpd_YMM8_FSxBX_091h_icebp_c64, X86_XCPT_DB, RM_MEM, T_AVX2_256, YMM8, FSxBX, NOREG, PASS_ELEMENTS(s_aValues91) },
     9666        {  bs3CpuInstr3_vpermpd_YMM8_YMM9_0E7h_icebp_c64,  255,         RM_REG, T_AVX2_256, YMM8, YMM9,  NOREG, PASS_ELEMENTS(s_aValuesE7) },
     9667        {  bs3CpuInstr3_vpermpd_YMM8_FSxBX_0E7h_icebp_c64, X86_XCPT_DB, RM_MEM, T_AVX2_256, YMM8, FSxBX, NOREG, PASS_ELEMENTS(s_aValuesE7) },
     9668
     9669        {  bs3CpuInstr3_vpermpd_YMM1_YMM1_000h_icebp_c64,  255,         RM_REG, T_AVX2_256, YMM1, YMM1,  NOREG, PASS_ELEMENTS(s_aValues00) },
     9670        {  bs3CpuInstr3_vpermpd_YMM1_YMM1_091h_icebp_c64,  255,         RM_REG, T_AVX2_256, YMM1, YMM1,  NOREG, PASS_ELEMENTS(s_aValues91) },
     9671        {  bs3CpuInstr3_vpermpd_YMM1_YMM1_0E7h_icebp_c64,  255,         RM_REG, T_AVX2_256, YMM1, YMM1,  NOREG, PASS_ELEMENTS(s_aValuesE7) },
     9672    };
     9673    static BS3CPUINSTR3_TEST1_MODE_T const s_aTests[3] = BS3CPUINSTR3_TEST1_MODES_INIT(s_aTests16, s_aTests32, s_aTests64);
     9674    unsigned const                         iTest       = BS3CPUINSTR3_TEST_MODES_INDEX(bMode);
     9675    return bs3CpuInstr3_WorkerTestType1(bMode, s_aTests[iTest].paTests, s_aTests[iTest].cTests,
     9676                                        g_aXcptConfig4, RT_ELEMENTS(g_aXcptConfig4));
    94629677}
    94639678
     
    1592516140        { "[v]movsd",                                       bs3CpuInstr3_v_movsd, 0 },
    1592616141        { "[v]movhlps",                                     bs3CpuInstr3_v_movhlps, 0 },
     16142        { "[v]movlhps",                                     bs3CpuInstr3_v_movlhps, 0 },
    1592716143        { "[v]movlps/[v]movlpd",                            bs3CpuInstr3_v_movlps_movlpd, 0 },
    1592816144        { "[v]movhps/[v]movhpd",                            bs3CpuInstr3_v_movhps_movhpd, 0 },
     
    1604616262        { "vpermilps",                                      bs3CpuInstr3_vpermilps, 0 },
    1604716263        { "vpermilpd",                                      bs3CpuInstr3_vpermilpd, 0 },
     16264        { "vpermps",                                        bs3CpuInstr3_vpermps, 0 },
     16265        { "vpermpd",                                        bs3CpuInstr3_vpermpd, 0 },
    1604816266#endif
    1604916267#if defined(ALL_TESTS)
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