VirtualBox

Changeset 106885 in vbox for trunk/src/VBox/ValidationKit


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

ValidationKit/bootsectors: steps towards consolidating instr-3 workers; bugref:9898; jiraref:VBP-1306

  • support FSxDI in all workers
  • regularize fMemOp, cMemOps and related assertions
  • fix incorrect use of cbMaxAlign by some worker #3 callers
  • fix missing 'NOREG' entries in vpermilps
  • (continuing fallout from the cvt instructions)
File:
1 edited

Legend:

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

    r106871 r106885  
    674674
    675675
     676#define BS3_XCPT_ALWAYS 0x80
     677#define BS3_XCPT_UD     (X86_XCPT_UD | BS3_XCPT_ALWAYS)
     678
     679
    676680/*
    677681 * Test type #1.
     
    865869                            /* Memory pointer. */
    866870                            if (fMemOp)
    867                                 if (paTests[iTest].enmRm != RM_MEM_DI)
    868                                     Bs3RegCtxSetGrpSegFromCurPtr(&Ctx, &Ctx.rbx, &Ctx.fs, puMemOp);
    869                                 else
    870                                     Bs3RegCtxSetGrpSegFromCurPtr(&Ctx, &Ctx.rdi, &Ctx.fs, puMemOp);
     871                                Bs3ExtCtxSetReg(&SetRegCtx, (paTests[iTest].enmRm == RM_MEM_DI) ? FSxDI : FSxBX, (void *)puMemOp);
    871872
    872873                            /*
     
    92539254        {  bs3CpuInstr3_vpermilps_XMM1_XMM2_XMM3_icebp_c16,  255,         RM_REG, T_AVX_128, XMM1, XMM2,  XMM3,  PASS_ELEMENTS(s_aValuesAll) },
    92549255        {  bs3CpuInstr3_vpermilps_XMM1_XMM2_FSxBX_icebp_c16, X86_XCPT_DB, RM_MEM, T_AVX_128, XMM1, XMM2,  FSxBX, PASS_ELEMENTS(s_aValuesAll) },
    9255         {  bs3CpuInstr3_vpermilps_XMM1_XMM2_000h_icebp_c16,  255,         RM_REG, T_AVX_128, XMM1, XMM2,  0,    PASS_ELEMENTS(s_aValues00)  },
    9256         {  bs3CpuInstr3_vpermilps_XMM1_XMM2_01Bh_icebp_c16,  255,         RM_REG, T_AVX_128, XMM1, XMM2,  0,    PASS_ELEMENTS(s_aValues1B)  },
    9257         {  bs3CpuInstr3_vpermilps_XMM1_XMM2_0E4h_icebp_c16,  255,         RM_REG, T_AVX_128, XMM1, XMM2,  0,    PASS_ELEMENTS(s_aValuesE4)  },
    9258         {  bs3CpuInstr3_vpermilps_XMM1_XMM2_03Dh_icebp_c16,  255,         RM_REG, T_AVX_128, XMM1, XMM2,  0,    PASS_ELEMENTS(s_aValues3D)  },
    9259         {  bs3CpuInstr3_vpermilps_XMM1_FSxBX_000h_icebp_c16, X86_XCPT_DB, RM_MEM, T_AVX_128, XMM1, FSxBX, 0,    PASS_ELEMENTS(s_aValues00)  },
    9260         {  bs3CpuInstr3_vpermilps_XMM1_FSxBX_01Bh_icebp_c16, X86_XCPT_DB, RM_MEM, T_AVX_128, XMM1, FSxBX, 0,    PASS_ELEMENTS(s_aValues1B)  },
    9261         {  bs3CpuInstr3_vpermilps_XMM1_FSxBX_0E4h_icebp_c16, X86_XCPT_DB, RM_MEM, T_AVX_128, XMM1, FSxBX, 0,    PASS_ELEMENTS(s_aValuesE4)  },
    9262         {  bs3CpuInstr3_vpermilps_XMM1_FSxBX_03Dh_icebp_c16, X86_XCPT_DB, RM_MEM, T_AVX_128, XMM1, FSxBX, 0,    PASS_ELEMENTS(s_aValues3D)  },
     9256        {  bs3CpuInstr3_vpermilps_XMM1_XMM2_000h_icebp_c16,  255,         RM_REG, T_AVX_128, XMM1, XMM2,  NOREG, PASS_ELEMENTS(s_aValues00)  },
     9257        {  bs3CpuInstr3_vpermilps_XMM1_XMM2_01Bh_icebp_c16,  255,         RM_REG, T_AVX_128, XMM1, XMM2,  NOREG, PASS_ELEMENTS(s_aValues1B)  },
     9258        {  bs3CpuInstr3_vpermilps_XMM1_XMM2_0E4h_icebp_c16,  255,         RM_REG, T_AVX_128, XMM1, XMM2,  NOREG, PASS_ELEMENTS(s_aValuesE4)  },
     9259        {  bs3CpuInstr3_vpermilps_XMM1_XMM2_03Dh_icebp_c16,  255,         RM_REG, T_AVX_128, XMM1, XMM2,  NOREG, PASS_ELEMENTS(s_aValues3D)  },
     9260        {  bs3CpuInstr3_vpermilps_XMM1_FSxBX_000h_icebp_c16, X86_XCPT_DB, RM_MEM, T_AVX_128, XMM1, FSxBX, NOREG, PASS_ELEMENTS(s_aValues00)  },
     9261        {  bs3CpuInstr3_vpermilps_XMM1_FSxBX_01Bh_icebp_c16, X86_XCPT_DB, RM_MEM, T_AVX_128, XMM1, FSxBX, NOREG, PASS_ELEMENTS(s_aValues1B)  },
     9262        {  bs3CpuInstr3_vpermilps_XMM1_FSxBX_0E4h_icebp_c16, X86_XCPT_DB, RM_MEM, T_AVX_128, XMM1, FSxBX, NOREG, PASS_ELEMENTS(s_aValuesE4)  },
     9263        {  bs3CpuInstr3_vpermilps_XMM1_FSxBX_03Dh_icebp_c16, X86_XCPT_DB, RM_MEM, T_AVX_128, XMM1, FSxBX, NOREG, PASS_ELEMENTS(s_aValues3D)  },
    92639264        {  bs3CpuInstr3_vpermilps_YMM1_YMM2_YMM3_icebp_c16,  255,         RM_REG, T_AVX_256, YMM1, YMM2,  YMM3,  PASS_ELEMENTS(s_aValuesAll) },
    92649265        {  bs3CpuInstr3_vpermilps_YMM1_YMM2_FSxBX_icebp_c16, X86_XCPT_DB, RM_MEM, T_AVX_256, YMM1, YMM2,  FSxBX, PASS_ELEMENTS(s_aValuesAll) },
    9265         {  bs3CpuInstr3_vpermilps_YMM1_YMM2_000h_icebp_c16,  255,         RM_REG, T_AVX_256, YMM1, YMM2,  0,    PASS_ELEMENTS(s_aValues00)  },
    9266         {  bs3CpuInstr3_vpermilps_YMM1_YMM2_01Bh_icebp_c16,  255,         RM_REG, T_AVX_256, YMM1, YMM2,  0,    PASS_ELEMENTS(s_aValues1B)  },
    9267         {  bs3CpuInstr3_vpermilps_YMM1_YMM2_0E4h_icebp_c16,  255,         RM_REG, T_AVX_256, YMM1, YMM2,  0,    PASS_ELEMENTS(s_aValuesE4)  },
    9268         {  bs3CpuInstr3_vpermilps_YMM1_YMM2_03Dh_icebp_c16,  255,         RM_REG, T_AVX_256, YMM1, YMM2,  0,    PASS_ELEMENTS(s_aValues3D)  },
    9269         {  bs3CpuInstr3_vpermilps_YMM1_FSxBX_000h_icebp_c16, X86_XCPT_DB, RM_MEM, T_AVX_256, YMM1, FSxBX, 0,    PASS_ELEMENTS(s_aValues00)  },
    9270         {  bs3CpuInstr3_vpermilps_YMM1_FSxBX_01Bh_icebp_c16, X86_XCPT_DB, RM_MEM, T_AVX_256, YMM1, FSxBX, 0,    PASS_ELEMENTS(s_aValues1B)  },
    9271         {  bs3CpuInstr3_vpermilps_YMM1_FSxBX_0E4h_icebp_c16, X86_XCPT_DB, RM_MEM, T_AVX_256, YMM1, FSxBX, 0,    PASS_ELEMENTS(s_aValuesE4)  },
    9272         {  bs3CpuInstr3_vpermilps_YMM1_FSxBX_03Dh_icebp_c16, X86_XCPT_DB, RM_MEM, T_AVX_256, YMM1, FSxBX, 0,    PASS_ELEMENTS(s_aValues3D)  },
     9266        {  bs3CpuInstr3_vpermilps_YMM1_YMM2_000h_icebp_c16,  255,         RM_REG, T_AVX_256, YMM1, YMM2,  NOREG, PASS_ELEMENTS(s_aValues00)  },
     9267        {  bs3CpuInstr3_vpermilps_YMM1_YMM2_01Bh_icebp_c16,  255,         RM_REG, T_AVX_256, YMM1, YMM2,  NOREG, PASS_ELEMENTS(s_aValues1B)  },
     9268        {  bs3CpuInstr3_vpermilps_YMM1_YMM2_0E4h_icebp_c16,  255,         RM_REG, T_AVX_256, YMM1, YMM2,  NOREG, PASS_ELEMENTS(s_aValuesE4)  },
     9269        {  bs3CpuInstr3_vpermilps_YMM1_YMM2_03Dh_icebp_c16,  255,         RM_REG, T_AVX_256, YMM1, YMM2,  NOREG, PASS_ELEMENTS(s_aValues3D)  },
     9270        {  bs3CpuInstr3_vpermilps_YMM1_FSxBX_000h_icebp_c16, X86_XCPT_DB, RM_MEM, T_AVX_256, YMM1, FSxBX, NOREG, PASS_ELEMENTS(s_aValues00)  },
     9271        {  bs3CpuInstr3_vpermilps_YMM1_FSxBX_01Bh_icebp_c16, X86_XCPT_DB, RM_MEM, T_AVX_256, YMM1, FSxBX, NOREG, PASS_ELEMENTS(s_aValues1B)  },
     9272        {  bs3CpuInstr3_vpermilps_YMM1_FSxBX_0E4h_icebp_c16, X86_XCPT_DB, RM_MEM, T_AVX_256, YMM1, FSxBX, NOREG, PASS_ELEMENTS(s_aValuesE4)  },
     9273        {  bs3CpuInstr3_vpermilps_YMM1_FSxBX_03Dh_icebp_c16, X86_XCPT_DB, RM_MEM, T_AVX_256, YMM1, FSxBX, NOREG, PASS_ELEMENTS(s_aValues3D)  },
    92739274    };
    92749275    static BS3CPUINSTR3_TEST1_T const s_aTests32[] =
     
    92769277        {  bs3CpuInstr3_vpermilps_XMM1_XMM2_XMM3_icebp_c32,  255,         RM_REG, T_AVX_128, XMM1, XMM2,  XMM3,  PASS_ELEMENTS(s_aValuesAll) },
    92779278        {  bs3CpuInstr3_vpermilps_XMM1_XMM2_FSxBX_icebp_c32, X86_XCPT_DB, RM_MEM, T_AVX_128, XMM1, XMM2,  FSxBX, PASS_ELEMENTS(s_aValuesAll) },
    9278         {  bs3CpuInstr3_vpermilps_XMM1_XMM2_000h_icebp_c32,  255,         RM_REG, T_AVX_128, XMM1, XMM2,  0,    PASS_ELEMENTS(s_aValues00)  },
    9279         {  bs3CpuInstr3_vpermilps_XMM1_XMM2_01Bh_icebp_c32,  255,         RM_REG, T_AVX_128, XMM1, XMM2,  0,    PASS_ELEMENTS(s_aValues1B)  },
    9280         {  bs3CpuInstr3_vpermilps_XMM1_XMM2_0E4h_icebp_c32,  255,         RM_REG, T_AVX_128, XMM1, XMM2,  0,    PASS_ELEMENTS(s_aValuesE4)  },
    9281         {  bs3CpuInstr3_vpermilps_XMM1_XMM2_03Dh_icebp_c32,  255,         RM_REG, T_AVX_128, XMM1, XMM2,  0,    PASS_ELEMENTS(s_aValues3D)  },
    9282         {  bs3CpuInstr3_vpermilps_XMM1_FSxBX_000h_icebp_c32, X86_XCPT_DB, RM_MEM, T_AVX_128, XMM1, FSxBX, 0,    PASS_ELEMENTS(s_aValues00)  },
    9283         {  bs3CpuInstr3_vpermilps_XMM1_FSxBX_01Bh_icebp_c32, X86_XCPT_DB, RM_MEM, T_AVX_128, XMM1, FSxBX, 0,    PASS_ELEMENTS(s_aValues1B)  },
    9284         {  bs3CpuInstr3_vpermilps_XMM1_FSxBX_0E4h_icebp_c32, X86_XCPT_DB, RM_MEM, T_AVX_128, XMM1, FSxBX, 0,    PASS_ELEMENTS(s_aValuesE4)  },
    9285         {  bs3CpuInstr3_vpermilps_XMM1_FSxBX_03Dh_icebp_c32, X86_XCPT_DB, RM_MEM, T_AVX_128, XMM1, FSxBX, 0,    PASS_ELEMENTS(s_aValues3D)  },
     9279        {  bs3CpuInstr3_vpermilps_XMM1_XMM2_000h_icebp_c32,  255,         RM_REG, T_AVX_128, XMM1, XMM2,  NOREG, PASS_ELEMENTS(s_aValues00)  },
     9280        {  bs3CpuInstr3_vpermilps_XMM1_XMM2_01Bh_icebp_c32,  255,         RM_REG, T_AVX_128, XMM1, XMM2,  NOREG, PASS_ELEMENTS(s_aValues1B)  },
     9281        {  bs3CpuInstr3_vpermilps_XMM1_XMM2_0E4h_icebp_c32,  255,         RM_REG, T_AVX_128, XMM1, XMM2,  NOREG, PASS_ELEMENTS(s_aValuesE4)  },
     9282        {  bs3CpuInstr3_vpermilps_XMM1_XMM2_03Dh_icebp_c32,  255,         RM_REG, T_AVX_128, XMM1, XMM2,  NOREG, PASS_ELEMENTS(s_aValues3D)  },
     9283        {  bs3CpuInstr3_vpermilps_XMM1_FSxBX_000h_icebp_c32, X86_XCPT_DB, RM_MEM, T_AVX_128, XMM1, FSxBX, NOREG, PASS_ELEMENTS(s_aValues00)  },
     9284        {  bs3CpuInstr3_vpermilps_XMM1_FSxBX_01Bh_icebp_c32, X86_XCPT_DB, RM_MEM, T_AVX_128, XMM1, FSxBX, NOREG, PASS_ELEMENTS(s_aValues1B)  },
     9285        {  bs3CpuInstr3_vpermilps_XMM1_FSxBX_0E4h_icebp_c32, X86_XCPT_DB, RM_MEM, T_AVX_128, XMM1, FSxBX, NOREG, PASS_ELEMENTS(s_aValuesE4)  },
     9286        {  bs3CpuInstr3_vpermilps_XMM1_FSxBX_03Dh_icebp_c32, X86_XCPT_DB, RM_MEM, T_AVX_128, XMM1, FSxBX, NOREG, PASS_ELEMENTS(s_aValues3D)  },
    92869287        {  bs3CpuInstr3_vpermilps_YMM1_YMM2_YMM3_icebp_c32,  255,         RM_REG, T_AVX_256, YMM1, YMM2,  YMM3,  PASS_ELEMENTS(s_aValuesAll) },
    92879288        {  bs3CpuInstr3_vpermilps_YMM1_YMM2_FSxBX_icebp_c32, X86_XCPT_DB, RM_MEM, T_AVX_256, YMM1, YMM2,  FSxBX, PASS_ELEMENTS(s_aValuesAll) },
    9288         {  bs3CpuInstr3_vpermilps_YMM1_YMM2_000h_icebp_c32,  255,         RM_REG, T_AVX_256, YMM1, YMM2,  0,    PASS_ELEMENTS(s_aValues00)  },
    9289         {  bs3CpuInstr3_vpermilps_YMM1_YMM2_01Bh_icebp_c32,  255,         RM_REG, T_AVX_256, YMM1, YMM2,  0,    PASS_ELEMENTS(s_aValues1B)  },
    9290         {  bs3CpuInstr3_vpermilps_YMM1_YMM2_0E4h_icebp_c32,  255,         RM_REG, T_AVX_256, YMM1, YMM2,  0,    PASS_ELEMENTS(s_aValuesE4)  },
    9291         {  bs3CpuInstr3_vpermilps_YMM1_YMM2_03Dh_icebp_c32,  255,         RM_REG, T_AVX_256, YMM1, YMM2,  0,    PASS_ELEMENTS(s_aValues3D)  },
    9292         {  bs3CpuInstr3_vpermilps_YMM1_FSxBX_000h_icebp_c32, X86_XCPT_DB, RM_MEM, T_AVX_256, YMM1, FSxBX, 0,    PASS_ELEMENTS(s_aValues00)  },
    9293         {  bs3CpuInstr3_vpermilps_YMM1_FSxBX_01Bh_icebp_c32, X86_XCPT_DB, RM_MEM, T_AVX_256, YMM1, FSxBX, 0,    PASS_ELEMENTS(s_aValues1B)  },
    9294         {  bs3CpuInstr3_vpermilps_YMM1_FSxBX_0E4h_icebp_c32, X86_XCPT_DB, RM_MEM, T_AVX_256, YMM1, FSxBX, 0,    PASS_ELEMENTS(s_aValuesE4)  },
    9295         {  bs3CpuInstr3_vpermilps_YMM1_FSxBX_03Dh_icebp_c32, X86_XCPT_DB, RM_MEM, T_AVX_256, YMM1, FSxBX, 0,    PASS_ELEMENTS(s_aValues3D)  },
     9289        {  bs3CpuInstr3_vpermilps_YMM1_YMM2_000h_icebp_c32,  255,         RM_REG, T_AVX_256, YMM1, YMM2,  NOREG, PASS_ELEMENTS(s_aValues00)  },
     9290        {  bs3CpuInstr3_vpermilps_YMM1_YMM2_01Bh_icebp_c32,  255,         RM_REG, T_AVX_256, YMM1, YMM2,  NOREG, PASS_ELEMENTS(s_aValues1B)  },
     9291        {  bs3CpuInstr3_vpermilps_YMM1_YMM2_0E4h_icebp_c32,  255,         RM_REG, T_AVX_256, YMM1, YMM2,  NOREG, PASS_ELEMENTS(s_aValuesE4)  },
     9292        {  bs3CpuInstr3_vpermilps_YMM1_YMM2_03Dh_icebp_c32,  255,         RM_REG, T_AVX_256, YMM1, YMM2,  NOREG, PASS_ELEMENTS(s_aValues3D)  },
     9293        {  bs3CpuInstr3_vpermilps_YMM1_FSxBX_000h_icebp_c32, X86_XCPT_DB, RM_MEM, T_AVX_256, YMM1, FSxBX, NOREG, PASS_ELEMENTS(s_aValues00)  },
     9294        {  bs3CpuInstr3_vpermilps_YMM1_FSxBX_01Bh_icebp_c32, X86_XCPT_DB, RM_MEM, T_AVX_256, YMM1, FSxBX, NOREG, PASS_ELEMENTS(s_aValues1B)  },
     9295        {  bs3CpuInstr3_vpermilps_YMM1_FSxBX_0E4h_icebp_c32, X86_XCPT_DB, RM_MEM, T_AVX_256, YMM1, FSxBX, NOREG, PASS_ELEMENTS(s_aValuesE4)  },
     9296        {  bs3CpuInstr3_vpermilps_YMM1_FSxBX_03Dh_icebp_c32, X86_XCPT_DB, RM_MEM, T_AVX_256, YMM1, FSxBX, NOREG, PASS_ELEMENTS(s_aValues3D)  },
    92969297    };
    92979298    static BS3CPUINSTR3_TEST1_T const s_aTests64[] =
     
    92999300        {  bs3CpuInstr3_vpermilps_XMM1_XMM2_XMM3_icebp_c64,  255,         RM_REG, T_AVX_128, XMM1, XMM2,  XMM3,  PASS_ELEMENTS(s_aValuesAll) },
    93009301        {  bs3CpuInstr3_vpermilps_XMM1_XMM2_FSxBX_icebp_c64, X86_XCPT_DB, RM_MEM, T_AVX_128, XMM1, XMM2,  FSxBX, PASS_ELEMENTS(s_aValuesAll) },
    9301         {  bs3CpuInstr3_vpermilps_XMM1_XMM2_000h_icebp_c64,  255,         RM_REG, T_AVX_128, XMM1, XMM2,  0,    PASS_ELEMENTS(s_aValues00)  },
    9302         {  bs3CpuInstr3_vpermilps_XMM1_XMM2_01Bh_icebp_c64,  255,         RM_REG, T_AVX_128, XMM1, XMM2,  0,    PASS_ELEMENTS(s_aValues1B)  },
    9303         {  bs3CpuInstr3_vpermilps_XMM1_XMM2_0E4h_icebp_c64,  255,         RM_REG, T_AVX_128, XMM1, XMM2,  0,    PASS_ELEMENTS(s_aValuesE4)  },
    9304         {  bs3CpuInstr3_vpermilps_XMM1_XMM2_03Dh_icebp_c64,  255,         RM_REG, T_AVX_128, XMM1, XMM2,  0,    PASS_ELEMENTS(s_aValues3D)  },
    9305         {  bs3CpuInstr3_vpermilps_XMM1_FSxBX_000h_icebp_c64, X86_XCPT_DB, RM_MEM, T_AVX_128, XMM1, FSxBX, 0,    PASS_ELEMENTS(s_aValues00)  },
    9306         {  bs3CpuInstr3_vpermilps_XMM1_FSxBX_01Bh_icebp_c64, X86_XCPT_DB, RM_MEM, T_AVX_128, XMM1, FSxBX, 0,    PASS_ELEMENTS(s_aValues1B)  },
    9307         {  bs3CpuInstr3_vpermilps_XMM1_FSxBX_0E4h_icebp_c64, X86_XCPT_DB, RM_MEM, T_AVX_128, XMM1, FSxBX, 0,    PASS_ELEMENTS(s_aValuesE4)  },
    9308         {  bs3CpuInstr3_vpermilps_XMM1_FSxBX_03Dh_icebp_c64, X86_XCPT_DB, RM_MEM, T_AVX_128, XMM1, FSxBX, 0,    PASS_ELEMENTS(s_aValues3D)  },
     9302        {  bs3CpuInstr3_vpermilps_XMM1_XMM2_000h_icebp_c64,  255,         RM_REG, T_AVX_128, XMM1, XMM2,  NOREG, PASS_ELEMENTS(s_aValues00)  },
     9303        {  bs3CpuInstr3_vpermilps_XMM1_XMM2_01Bh_icebp_c64,  255,         RM_REG, T_AVX_128, XMM1, XMM2,  NOREG, PASS_ELEMENTS(s_aValues1B)  },
     9304        {  bs3CpuInstr3_vpermilps_XMM1_XMM2_0E4h_icebp_c64,  255,         RM_REG, T_AVX_128, XMM1, XMM2,  NOREG, PASS_ELEMENTS(s_aValuesE4)  },
     9305        {  bs3CpuInstr3_vpermilps_XMM1_XMM2_03Dh_icebp_c64,  255,         RM_REG, T_AVX_128, XMM1, XMM2,  NOREG, PASS_ELEMENTS(s_aValues3D)  },
     9306        {  bs3CpuInstr3_vpermilps_XMM1_FSxBX_000h_icebp_c64, X86_XCPT_DB, RM_MEM, T_AVX_128, XMM1, FSxBX, NOREG, PASS_ELEMENTS(s_aValues00)  },
     9307        {  bs3CpuInstr3_vpermilps_XMM1_FSxBX_01Bh_icebp_c64, X86_XCPT_DB, RM_MEM, T_AVX_128, XMM1, FSxBX, NOREG, PASS_ELEMENTS(s_aValues1B)  },
     9308        {  bs3CpuInstr3_vpermilps_XMM1_FSxBX_0E4h_icebp_c64, X86_XCPT_DB, RM_MEM, T_AVX_128, XMM1, FSxBX, NOREG, PASS_ELEMENTS(s_aValuesE4)  },
     9309        {  bs3CpuInstr3_vpermilps_XMM1_FSxBX_03Dh_icebp_c64, X86_XCPT_DB, RM_MEM, T_AVX_128, XMM1, FSxBX, NOREG, PASS_ELEMENTS(s_aValues3D)  },
    93099310        {  bs3CpuInstr3_vpermilps_YMM1_YMM2_YMM3_icebp_c64,  255,         RM_REG, T_AVX_256, YMM1, YMM2,  YMM3,  PASS_ELEMENTS(s_aValuesAll) },
    93109311        {  bs3CpuInstr3_vpermilps_YMM1_YMM2_FSxBX_icebp_c64, X86_XCPT_DB, RM_MEM, T_AVX_256, YMM1, YMM2,  FSxBX, PASS_ELEMENTS(s_aValuesAll) },
    9311         {  bs3CpuInstr3_vpermilps_YMM1_YMM2_000h_icebp_c64,  255,         RM_REG, T_AVX_256, YMM1, YMM2,  0,    PASS_ELEMENTS(s_aValues00)  },
    9312         {  bs3CpuInstr3_vpermilps_YMM1_YMM2_01Bh_icebp_c64,  255,         RM_REG, T_AVX_256, YMM1, YMM2,  0,    PASS_ELEMENTS(s_aValues1B)  },
    9313         {  bs3CpuInstr3_vpermilps_YMM1_YMM2_0E4h_icebp_c64,  255,         RM_REG, T_AVX_256, YMM1, YMM2,  0,    PASS_ELEMENTS(s_aValuesE4)  },
    9314         {  bs3CpuInstr3_vpermilps_YMM1_YMM2_03Dh_icebp_c64,  255,         RM_REG, T_AVX_256, YMM1, YMM2,  0,    PASS_ELEMENTS(s_aValues3D)  },
    9315         {  bs3CpuInstr3_vpermilps_YMM1_FSxBX_000h_icebp_c64, X86_XCPT_DB, RM_MEM, T_AVX_256, YMM1, FSxBX, 0,    PASS_ELEMENTS(s_aValues00)  },
    9316         {  bs3CpuInstr3_vpermilps_YMM1_FSxBX_01Bh_icebp_c64, X86_XCPT_DB, RM_MEM, T_AVX_256, YMM1, FSxBX, 0,    PASS_ELEMENTS(s_aValues1B)  },
    9317         {  bs3CpuInstr3_vpermilps_YMM1_FSxBX_0E4h_icebp_c64, X86_XCPT_DB, RM_MEM, T_AVX_256, YMM1, FSxBX, 0,    PASS_ELEMENTS(s_aValuesE4)  },
    9318         {  bs3CpuInstr3_vpermilps_YMM1_FSxBX_03Dh_icebp_c64, X86_XCPT_DB, RM_MEM, T_AVX_256, YMM1, FSxBX, 0,    PASS_ELEMENTS(s_aValues3D)  },
     9312        {  bs3CpuInstr3_vpermilps_YMM1_YMM2_000h_icebp_c64,  255,         RM_REG, T_AVX_256, YMM1, YMM2,  NOREG, PASS_ELEMENTS(s_aValues00)  },
     9313        {  bs3CpuInstr3_vpermilps_YMM1_YMM2_01Bh_icebp_c64,  255,         RM_REG, T_AVX_256, YMM1, YMM2,  NOREG, PASS_ELEMENTS(s_aValues1B)  },
     9314        {  bs3CpuInstr3_vpermilps_YMM1_YMM2_0E4h_icebp_c64,  255,         RM_REG, T_AVX_256, YMM1, YMM2,  NOREG, PASS_ELEMENTS(s_aValuesE4)  },
     9315        {  bs3CpuInstr3_vpermilps_YMM1_YMM2_03Dh_icebp_c64,  255,         RM_REG, T_AVX_256, YMM1, YMM2,  NOREG, PASS_ELEMENTS(s_aValues3D)  },
     9316        {  bs3CpuInstr3_vpermilps_YMM1_FSxBX_000h_icebp_c64, X86_XCPT_DB, RM_MEM, T_AVX_256, YMM1, FSxBX, NOREG, PASS_ELEMENTS(s_aValues00)  },
     9317        {  bs3CpuInstr3_vpermilps_YMM1_FSxBX_01Bh_icebp_c64, X86_XCPT_DB, RM_MEM, T_AVX_256, YMM1, FSxBX, NOREG, PASS_ELEMENTS(s_aValues1B)  },
     9318        {  bs3CpuInstr3_vpermilps_YMM1_FSxBX_0E4h_icebp_c64, X86_XCPT_DB, RM_MEM, T_AVX_256, YMM1, FSxBX, NOREG, PASS_ELEMENTS(s_aValuesE4)  },
     9319        {  bs3CpuInstr3_vpermilps_YMM1_FSxBX_03Dh_icebp_c64, X86_XCPT_DB, RM_MEM, T_AVX_256, YMM1, FSxBX, NOREG, PASS_ELEMENTS(s_aValues3D)  },
    93199320        {  bs3CpuInstr3_vpermilps_XMM8_XMM9_XMM10_icebp_c64, 255,         RM_REG, T_AVX_128, XMM8, XMM9,  XMM10, PASS_ELEMENTS(s_aValuesAll) },
    93209321        {  bs3CpuInstr3_vpermilps_XMM8_XMM9_FSxBX_icebp_c64, X86_XCPT_DB, RM_MEM, T_AVX_128, XMM8, XMM9,  FSxBX, PASS_ELEMENTS(s_aValuesAll) },
    9321         {  bs3CpuInstr3_vpermilps_XMM8_XMM9_000h_icebp_c64,  255,         RM_REG, T_AVX_128, XMM8, XMM9,  0,    PASS_ELEMENTS(s_aValues00)  },
    9322         {  bs3CpuInstr3_vpermilps_XMM8_XMM9_01Bh_icebp_c64,  255,         RM_REG, T_AVX_128, XMM8, XMM9,  0,    PASS_ELEMENTS(s_aValues1B)  },
    9323         {  bs3CpuInstr3_vpermilps_XMM8_XMM9_0E4h_icebp_c64,  255,         RM_REG, T_AVX_128, XMM8, XMM9,  0,    PASS_ELEMENTS(s_aValuesE4)  },
    9324         {  bs3CpuInstr3_vpermilps_XMM8_XMM9_03Dh_icebp_c64,  255,         RM_REG, T_AVX_128, XMM8, XMM9,  0,    PASS_ELEMENTS(s_aValues3D)  },
    9325         {  bs3CpuInstr3_vpermilps_XMM8_FSxBX_000h_icebp_c64, X86_XCPT_DB, RM_MEM, T_AVX_128, XMM8, FSxBX, 0,    PASS_ELEMENTS(s_aValues00)  },
    9326         {  bs3CpuInstr3_vpermilps_XMM8_FSxBX_01Bh_icebp_c64, X86_XCPT_DB, RM_MEM, T_AVX_128, XMM8, FSxBX, 0,    PASS_ELEMENTS(s_aValues1B)  },
    9327         {  bs3CpuInstr3_vpermilps_XMM8_FSxBX_0E4h_icebp_c64, X86_XCPT_DB, RM_MEM, T_AVX_128, XMM8, FSxBX, 0,    PASS_ELEMENTS(s_aValuesE4)  },
    9328         {  bs3CpuInstr3_vpermilps_XMM8_FSxBX_03Dh_icebp_c64, X86_XCPT_DB, RM_MEM, T_AVX_128, XMM8, FSxBX, 0,    PASS_ELEMENTS(s_aValues3D)  },
     9322        {  bs3CpuInstr3_vpermilps_XMM8_XMM9_000h_icebp_c64,  255,         RM_REG, T_AVX_128, XMM8, XMM9,  NOREG, PASS_ELEMENTS(s_aValues00)  },
     9323        {  bs3CpuInstr3_vpermilps_XMM8_XMM9_01Bh_icebp_c64,  255,         RM_REG, T_AVX_128, XMM8, XMM9,  NOREG, PASS_ELEMENTS(s_aValues1B)  },
     9324        {  bs3CpuInstr3_vpermilps_XMM8_XMM9_0E4h_icebp_c64,  255,         RM_REG, T_AVX_128, XMM8, XMM9,  NOREG, PASS_ELEMENTS(s_aValuesE4)  },
     9325        {  bs3CpuInstr3_vpermilps_XMM8_XMM9_03Dh_icebp_c64,  255,         RM_REG, T_AVX_128, XMM8, XMM9,  NOREG, PASS_ELEMENTS(s_aValues3D)  },
     9326        {  bs3CpuInstr3_vpermilps_XMM8_FSxBX_000h_icebp_c64, X86_XCPT_DB, RM_MEM, T_AVX_128, XMM8, FSxBX, NOREG, PASS_ELEMENTS(s_aValues00)  },
     9327        {  bs3CpuInstr3_vpermilps_XMM8_FSxBX_01Bh_icebp_c64, X86_XCPT_DB, RM_MEM, T_AVX_128, XMM8, FSxBX, NOREG, PASS_ELEMENTS(s_aValues1B)  },
     9328        {  bs3CpuInstr3_vpermilps_XMM8_FSxBX_0E4h_icebp_c64, X86_XCPT_DB, RM_MEM, T_AVX_128, XMM8, FSxBX, NOREG, PASS_ELEMENTS(s_aValuesE4)  },
     9329        {  bs3CpuInstr3_vpermilps_XMM8_FSxBX_03Dh_icebp_c64, X86_XCPT_DB, RM_MEM, T_AVX_128, XMM8, FSxBX, NOREG, PASS_ELEMENTS(s_aValues3D)  },
    93299330        {  bs3CpuInstr3_vpermilps_YMM8_YMM9_YMM10_icebp_c64, 255,         RM_REG, T_AVX_256, YMM8, YMM9,  YMM10, PASS_ELEMENTS(s_aValuesAll) },
    93309331        {  bs3CpuInstr3_vpermilps_YMM8_YMM9_FSxBX_icebp_c64, X86_XCPT_DB, RM_MEM, T_AVX_256, YMM8, YMM9,  FSxBX, PASS_ELEMENTS(s_aValuesAll) },
    9331         {  bs3CpuInstr3_vpermilps_YMM8_YMM9_000h_icebp_c64,  255,         RM_REG, T_AVX_256, YMM8, YMM9,  0,    PASS_ELEMENTS(s_aValues00)  },
    9332         {  bs3CpuInstr3_vpermilps_YMM8_YMM9_01Bh_icebp_c64,  255,         RM_REG, T_AVX_256, YMM8, YMM9,  0,    PASS_ELEMENTS(s_aValues1B)  },
    9333         {  bs3CpuInstr3_vpermilps_YMM8_YMM9_0E4h_icebp_c64,  255,         RM_REG, T_AVX_256, YMM8, YMM9,  0,    PASS_ELEMENTS(s_aValuesE4)  },
    9334         {  bs3CpuInstr3_vpermilps_YMM8_YMM9_03Dh_icebp_c64,  255,         RM_REG, T_AVX_256, YMM8, YMM9,  0,    PASS_ELEMENTS(s_aValues3D)  },
    9335         {  bs3CpuInstr3_vpermilps_YMM8_FSxBX_000h_icebp_c64, X86_XCPT_DB, RM_MEM, T_AVX_256, YMM8, FSxBX, 0,    PASS_ELEMENTS(s_aValues00)  },
    9336         {  bs3CpuInstr3_vpermilps_YMM8_FSxBX_01Bh_icebp_c64, X86_XCPT_DB, RM_MEM, T_AVX_256, YMM8, FSxBX, 0,    PASS_ELEMENTS(s_aValues1B)  },
    9337         {  bs3CpuInstr3_vpermilps_YMM8_FSxBX_0E4h_icebp_c64, X86_XCPT_DB, RM_MEM, T_AVX_256, YMM8, FSxBX, 0,    PASS_ELEMENTS(s_aValuesE4)  },
    9338         {  bs3CpuInstr3_vpermilps_YMM8_FSxBX_03Dh_icebp_c64, X86_XCPT_DB, RM_MEM, T_AVX_256, YMM8, FSxBX, 0,    PASS_ELEMENTS(s_aValues3D)  },
     9332        {  bs3CpuInstr3_vpermilps_YMM8_YMM9_000h_icebp_c64,  255,         RM_REG, T_AVX_256, YMM8, YMM9,  NOREG, PASS_ELEMENTS(s_aValues00)  },
     9333        {  bs3CpuInstr3_vpermilps_YMM8_YMM9_01Bh_icebp_c64,  255,         RM_REG, T_AVX_256, YMM8, YMM9,  NOREG, PASS_ELEMENTS(s_aValues1B)  },
     9334        {  bs3CpuInstr3_vpermilps_YMM8_YMM9_0E4h_icebp_c64,  255,         RM_REG, T_AVX_256, YMM8, YMM9,  NOREG, PASS_ELEMENTS(s_aValuesE4)  },
     9335        {  bs3CpuInstr3_vpermilps_YMM8_YMM9_03Dh_icebp_c64,  255,         RM_REG, T_AVX_256, YMM8, YMM9,  NOREG, PASS_ELEMENTS(s_aValues3D)  },
     9336        {  bs3CpuInstr3_vpermilps_YMM8_FSxBX_000h_icebp_c64, X86_XCPT_DB, RM_MEM, T_AVX_256, YMM8, FSxBX, NOREG, PASS_ELEMENTS(s_aValues00)  },
     9337        {  bs3CpuInstr3_vpermilps_YMM8_FSxBX_01Bh_icebp_c64, X86_XCPT_DB, RM_MEM, T_AVX_256, YMM8, FSxBX, NOREG, PASS_ELEMENTS(s_aValues1B)  },
     9338        {  bs3CpuInstr3_vpermilps_YMM8_FSxBX_0E4h_icebp_c64, X86_XCPT_DB, RM_MEM, T_AVX_256, YMM8, FSxBX, NOREG, PASS_ELEMENTS(s_aValuesE4)  },
     9339        {  bs3CpuInstr3_vpermilps_YMM8_FSxBX_03Dh_icebp_c64, X86_XCPT_DB, RM_MEM, T_AVX_256, YMM8, FSxBX, NOREG, PASS_ELEMENTS(s_aValues3D)  },
    93399340    };
    93409341    static BS3CPUINSTR3_TEST1_MODE_T const s_aTests[3] = BS3CPUINSTR3_TEST1_MODES_INIT(s_aTests16, s_aTests32, s_aTests64);
     
    95999600 * Test type #2 - GPR <- MM/XMM/YMM, no VVVV.
    96009601 */
    9601 #define BS3_XCPT_ALWAYS 0x80
    9602 #define BS3_XCPT_UD     (X86_XCPT_UD | BS3_XCPT_ALWAYS)
    96039602
    96049603typedef struct BS3CPUINSTR3_TEST2_VALUES_T
     
    96929691                    bool const      fAvxInstr   = paTests[iTest].enmType >= T_AVX_128;
    96939692                    bool const      fMemOp      = paTests[iTest].enmRm >= RM_MEM;
     9693                    uint8_t const   cMemOps     = BS3_REGISTER_IS_MEMREF(paTests[iTest].iRegDst)
     9694                                                + BS3_REGISTER_IS_MEMREF(paTests[iTest].iRegSrc);
    96949695                    uint8_t const   cbOperand   = paTests[iTest].enmType < T_128BITS ? 64/8
    96959696                                                : paTests[iTest].enmType < T_256BITS ? 128/8 : 256/8;
     
    97089709                    unsigned        iVal;
    97099710
    9710                     /* If testing unaligned memory accesses (or #PFs), skip register-only tests.  This
     9711                    /* If testing unaligned memory accesses (or #PF), skip register-only tests.  This
    97119712                       allows setting bXcptMmx, bXcptSse and bXcptAvx to reflect the misaligned exceptions.  */
    97129713                    if ((paTests[iTest].enmRm == RM_REG || paTests[iTest].enmRm == RM_MEM8) && (!paConfigs[iCfg].fAligned || paConfigs[iCfg].fAlignCheck || fPf))
    97139714                        continue;
    97149715
    9715                     BS3_ASSERT(!fMemOp || BS3_REGISTER_IS_MEMREF(paTests[iTest].iRegDst) || BS3_REGISTER_IS_MEMREF(paTests[iTest].iRegSrc));
    9716                     BS3_ASSERT(!(BS3_REGISTER_IS_MEMREF(paTests[iTest].iRegDst) && BS3_REGISTER_IS_MEMREF(paTests[iTest].iRegSrc)));
     9716                    BS3_ASSERT((fMemOp && (cMemOps == 1)) || (!fMemOp && (cMemOps == 0)));
     9717                    NOREF(cMemOps);
    97179718
    97189719                    /* #AC is only raised in ring-3.: */
     
    97719772                            /* Memory pointer. */
    97729773                            if (fMemOp)
    9773                                 Bs3RegCtxSetGrpSegFromCurPtr(&Ctx, &Ctx.rbx, &Ctx.fs, puMemOp);
     9774                                Bs3ExtCtxSetReg(&SetRegCtx, (paTests[iTest].enmRm == RM_MEM_DI) ? FSxDI : FSxBX, (void *)puMemOp);
    97749775
    97759776                            /*
     
    98139814                            Ctx.cr2.u = 0;
    98149815
    9815                             if (   paTests[iTest].enmRm >= RM_MEM
     9816                            if (   fMemOp
    98169817                                && Bs3MemCmp(puMemOpAlias, &uMemOpExpect, cbMemOp) != 0)
    98179818                                Bs3TestFailedF("Expected uMemOp %.*Rhxs, got %.*Rhxs", cbMemOp, &uMemOpExpect, cbMemOp, puMemOpAlias);
     
    1067310674                    bool const      fAvxInstr   = paTests[iTest].enmType >= T_AVX_128;
    1067410675                    bool const      fMemOp      = paTests[iTest].enmRm >= RM_MEM;
     10676                    uint8_t const   cMemOps     = BS3_REGISTER_IS_MEMREF(paTests[iTest].iRegDst)
     10677                                                + BS3_REGISTER_IS_MEMREF(paTests[iTest].iRegSrc);
    1067510678                    uint8_t const   cbOperand   = paTests[iTest].enmType < T_128BITS ? 64/8
    1067610679                                                : paTests[iTest].enmType < T_256BITS ? 128/8 : 256/8;
     
    1068910692
    1069010693                    /* If testing unaligned memory accesses (or #PF), skip register-only tests.  This
    10691                         allows setting bXcptMmx, bXcptSse and bXcptAvx to reflect the misaligned exceptions.  */
     10694                       allows setting bXcptMmx, bXcptSse and bXcptAvx to reflect the misaligned exceptions.  */
    1069210695                    if ((paTests[iTest].enmRm == RM_REG || paTests[iTest].enmRm == RM_MEM8) && (!paConfigs[iCfg].fAligned || paConfigs[iCfg].fAlignCheck || fPf))
    1069310696                        continue;
    1069410697
    10695                     BS3_ASSERT(!fMemOp || BS3_REGISTER_IS_MEMREF(paTests[iTest].iRegDst) || BS3_REGISTER_IS_MEMREF(paTests[iTest].iRegSrc));
    10696                     BS3_ASSERT(!(BS3_REGISTER_IS_MEMREF(paTests[iTest].iRegDst) && BS3_REGISTER_IS_MEMREF(paTests[iTest].iRegSrc)));
     10698                    BS3_ASSERT((fMemOp && (cMemOps == 1)) || (!fMemOp && (cMemOps == 0)));
     10699                    NOREF(cMemOps);
    1069710700
    1069810701                    SetRegCtx.fZeroYMMHi = fSseInstr;
     
    1075510758                            /* Memory pointer. */
    1075610759                            if (fMemOp)
    10757                                 Bs3RegCtxSetGrpSegFromCurPtr(&Ctx, &Ctx.rbx, &Ctx.fs, puMemOp);
     10760                                Bs3ExtCtxSetReg(&SetRegCtx, (paTests[iTest].enmRm == RM_MEM_DI) ? FSxDI : FSxBX, (void *)puMemOp);
    1075810761
    1075910762                            /*
     
    1198911992    unsigned const                         iTest       = BS3CPUINSTR3_TEST_MODES_INDEX(bMode);
    1199011993    return bs3CpuInstr3_WorkerTestType3(bMode, s_aTests[iTest].paTests, s_aTests[iTest].cTests,
    11991                                         g_aXcptConfig4, RT_ELEMENTS(g_aXcptConfig4), X86_EFL_STATUS_BITS);
     11994                                        g_aXcptConfig4, RT_ELEMENTS(g_aXcptConfig4), 0 /*cbMaxAlign*/);
    1199211995}
    1199311996
     
    1223612239    unsigned const                         iTest       = BS3CPUINSTR3_TEST_MODES_INDEX(bMode);
    1223712240    return bs3CpuInstr3_WorkerTestType3(bMode, s_aTests[iTest].paTests, s_aTests[iTest].cTests,
    12238                                         g_aXcptConfig5, RT_ELEMENTS(g_aXcptConfig5), X86_EFL_STATUS_BITS);
     12241                                        g_aXcptConfig5, RT_ELEMENTS(g_aXcptConfig5), 0 /*cbMaxAlign*/);
    1223912242}
    1224012243
     
    1248312486    unsigned const                         iTest       = BS3CPUINSTR3_TEST_MODES_INDEX(bMode);
    1248412487    return bs3CpuInstr3_WorkerTestType3(bMode, s_aTests[iTest].paTests, s_aTests[iTest].cTests,
    12485                                         g_aXcptConfig5, RT_ELEMENTS(g_aXcptConfig5), X86_EFL_STATUS_BITS);
     12488                                        g_aXcptConfig5, RT_ELEMENTS(g_aXcptConfig5), 0 /*cbMaxAlign*/);
    1248612489}
    1248712490
     
    1257112574    unsigned const                         iTest       = BS3CPUINSTR3_TEST_MODES_INDEX(bMode);
    1257212575    return bs3CpuInstr3_WorkerTestType3(bMode, s_aTests[iTest].paTests, s_aTests[iTest].cTests,
    12573                                         g_aXcptConfig4, RT_ELEMENTS(g_aXcptConfig4), X86_EFL_STATUS_BITS);
     12576                                        g_aXcptConfig4, RT_ELEMENTS(g_aXcptConfig4), 0 /*cbMaxAlign*/);
    1257412577}
    1257512578
     
    1265012653    unsigned const                         iTest       = BS3CPUINSTR3_TEST_MODES_INDEX(bMode);
    1265112654    return bs3CpuInstr3_WorkerTestType3(bMode, s_aTests[iTest].paTests, s_aTests[iTest].cTests,
    12652                                         g_aXcptConfig4, RT_ELEMENTS(g_aXcptConfig4), X86_EFL_STATUS_BITS);
     12655                                        g_aXcptConfig4, RT_ELEMENTS(g_aXcptConfig4), 0 /*cbMaxAlign*/);
    1265312656}
    1265412657
     
    1279112794    unsigned const                         iTest       = BS3CPUINSTR3_TEST_MODES_INDEX(bMode);
    1279212795    return bs3CpuInstr3_WorkerTestType3(bMode, s_aTests[iTest].paTests, s_aTests[iTest].cTests,
    12793                                         g_aXcptConfig4, RT_ELEMENTS(g_aXcptConfig4), X86_EFL_STATUS_BITS);
     12796                                        g_aXcptConfig4, RT_ELEMENTS(g_aXcptConfig4), 0 /*cbMaxAlign*/);
    1279412797}
    1279512798
     
    1297212975                    bool const      fAvxInstr   = paTests[iTest].enmType >= T_AVX_128;
    1297312976                    bool const      fMemOp      = paTests[iTest].enmRm >= RM_MEM;
     12977                    uint8_t const   cMemOps     = BS3_REGISTER_IS_MEMREF(paTests[iTest].iRegSrc1)
     12978                                                + BS3_REGISTER_IS_MEMREF(paTests[iTest].iRegSrc2);
    1297412979                    uint8_t const   cbOperand   = paTests[iTest].enmType < T_128BITS ? 64/8
    1297512980                                                : paTests[iTest].enmType < T_256BITS ? 128/8 : 256/8;
     
    1299212997                        continue;
    1299312998
    12994                     BS3_ASSERT(fMemOp || !BS3_REGISTER_IS_MEMREF(paTests[iTest].iRegSrc2));
     12999                    BS3_ASSERT((fMemOp && (cMemOps == 1) && BS3_REGISTER_IS_MEMREF(paTests[iTest].iRegSrc2)) || (!fMemOp && (cMemOps == 0)));
     13000                    NOREF(cMemOps);
    1299513001
    1299613002                    SetRegCtx.fZeroYMMHi = fSseInstr;
     
    1304513051                                    Bs3MemCpy(puMemOpAlias, &paValues[iVal].uSrc2, cbMemOp);
    1304613052                                    uMemOpExpect = paValues[iVal].uSrc2;
    13047                                     Bs3RegCtxSetGrpSegFromCurPtr(&Ctx, &Ctx.rbx, &Ctx.fs, puMemOp);
     13053                                    Bs3ExtCtxSetReg(&SetRegCtx, (paTests[iTest].enmRm == RM_MEM_DI) ? FSxDI : FSxBX, (void *)puMemOp);
    1304813054                                }
    1304913055                                else
     
    1354313549                            /* Memory pointer. */
    1354413550                            if (fMemOp)
    13545                                 Bs3RegCtxSetGrpSegFromCurPtr(&Ctx, &Ctx.rbx, &Ctx.fs, puMemOp);
     13551                                Bs3ExtCtxSetReg(&SetRegCtx, (paTests[iTest].enmRm == RM_MEM_DI) ? FSxDI : FSxBX, (void *)puMemOp);
    1354613552
    1354713553                            /*
     
    1427314279                    bool const      fSseInstr   = paTests[iTest].enmType >= T_SSE && paTests[iTest].enmType < T_AVX_128;
    1427414280                    bool const      fAvxInstr   = paTests[iTest].enmType >= T_AVX_128;
     14281                    bool const      fMemOp      = paTests[iTest].enmRm >= RM_MEM;
     14282                    uint8_t const   cMemOps     = BS3_REGISTER_IS_MEMREF(paTests[iTest].iMediaRegDst)
     14283                                                + BS3_REGISTER_IS_MEMREF(paTests[iTest].iMediaRegSrc)
     14284                                                + BS3_REGISTER_IS_MEMREF(paTests[iTest].iGprReg);
    1427514285                    uint8_t const   cbOperand   = paTests[iTest].enmType < T_128BITS ? 64/8
    1427614286                                                : paTests[iTest].enmType < T_256BITS ? 128/8 : 256/8;
     
    1428814298                    unsigned        iVal;
    1428914299
    14290                     /* If testing unaligned memory accesses, skip register-only tests.  This allows
    14291                        setting bXcptMmx, bXcptSse and bXcptAvx to reflect the misaligned exceptions.  */
     14300                    /* If testing unaligned memory accesses (or #PF), skip register-only tests.  This
     14301                       allows setting bXcptMmx, bXcptSse and bXcptAvx to reflect the misaligned exceptions.  */
    1429214302                    if ((paTests[iTest].enmRm == RM_REG || paTests[iTest].enmRm == RM_MEM8) && (!paConfigs[iCfg].fAligned || paConfigs[iCfg].fAlignCheck || fPf))
    1429314303                        continue;
     14304
     14305                    BS3_ASSERT((fMemOp && (cMemOps == 1) && BS3_REGISTER_IS_MEMREF(paTests[iTest].iGprReg)) || (!fMemOp && (cMemOps == 0)));
     14306                    NOREF(cMemOps);
    1429414307
    1429514308                    SetRegCtx.fZeroYMMHi = fSseInstr;
     
    1433214345                            if (BS3_REGISTER_IS_MEMREF(paTests[iTest].iGprReg))
    1433314346                            {
    14334                                 BS3_ASSERT(paTests[iTest].enmRm >= RM_MEM);
    1433514347                                Bs3MemSet(&uMemOpExpect, 0xcc, sizeof(uMemOpExpect));
    1433614348                                if (bXcptExpect == X86_XCPT_DB)
     
    1434214354
    1434314355                            /* Memory pointer. */
    14344                             if (paTests[iTest].enmRm >= RM_MEM)
     14356                            if (fMemOp)
    1434514357                                Bs3ExtCtxSetReg(&SetRegCtx, paTests[iTest].iGprReg, (void *)puMemOp);
    1434614358
     
    1438514397                            Ctx.cr2.u = 0;
    1438614398
    14387                             if (   paTests[iTest].enmRm >= RM_MEM
     14399                            if (  fMemOp
    1438814400                                && Bs3MemCmp(puMemOpAlias, &uMemOpExpect, cbMemOp) != 0)
    1438914401                                Bs3TestFailedF("Expected uMemOp %.*Rhxs, got %.*Rhxs", cbMemOp, &uMemOpExpect, cbMemOp, puMemOpAlias);
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