VirtualBox

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


Ignore:
Timestamp:
Nov 11, 2022 11:46:02 AM (2 years ago)
Author:
vboxsync
Message:

ValKit/bs3-cpu-basic-2: More work on far jump tests (on AMD). bugref:9898

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

Legend:

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

    r97505 r97507  
    5353%endif
    5454
    55 %undef BS3_CPUBAS2_REF_LABLE_VIA_CS
     55%undef BS3_CPUBAS2_REF_LABEL_VIA_CS
    5656%if TMPL_BITS == 16
    57  %define BS3_CPUBAS2_REF_LABLE_VIA_CS(a_Label)     cs:a_Label
     57 %define BS3_CPUBAS2_REF_LABEL_VIA_CS(a_Label)     cs:a_Label
     58 %define BS3_CPUBAS2_JMP_FAR_MEM_LABEL(a_Label)    jmp far [BS3_CPUBAS2_REF_LABEL_VIA_CS(a_Label)]
    5859%elif TMPL_BITS == 32
    59  %define BS3_CPUBAS2_REF_LABLE_VIA_CS(a_Label)     cs:a_Label wrt FLAT
     60 %define BS3_CPUBAS2_REF_LABEL_VIA_CS(a_Label)     cs:a_Label wrt FLAT
     61 %define BS3_CPUBAS2_JMP_FAR_MEM_LABEL(a_Label)    jmp far [BS3_CPUBAS2_REF_LABEL_VIA_CS(a_Label)]
    6062%elif TMPL_BITS == 64
    61  %define BS3_CPUBAS2_REF_LABLE_VIA_CS(a_Label)     a_Label wrt FLAT
     63 %define BS3_CPUBAS2_REF_LABEL_VIA_CS(a_Label)     a_Label wrt FLAT
     64 %define BS3_CPUBAS2_JMP_FAR_MEM_LABEL(a_Label)    jmp far [BS3_CPUBAS2_REF_LABEL_VIA_CS(a_Label)]
    6265%else
    6366 %error TMPL_BITS
    6467%endif
     68
     69%ifndef BS3_CPUBAS2_JMP_FAR_MEM_LABEL_DEFINED
     70%define BS3_CPUBAS2_JMP_FAR_MEM_LABEL_DEFINED
     71%macro BS3_CPUBAS2_JMP_FAR_MEM_LABEL 2
     72 %if TMPL_BITS != 64
     73        jmp far [BS3_CPUBAS2_REF_LABEL_VIA_CS(%1)]
     74 %elif TMPL_BITS == 64
     75        ;  48FF2C25[040C0000]  <3>  jmp far [BS3_CPUBAS2_REF_LABLE_VIA_CS(.fpfn)]
     76  %if %2 != 0
     77        db      048h                        ; REX.W
     78  %endif
     79        db      0ffh, 02ch, 025h
     80        dd      %1 wrt FLAT
     81 %else
     82  %error TMPL_BITS
     83 %endif
     84%endmacro
     85%endif ; BS3_CPUBAS2_JMP_FAR_MEM_LABEL_DEFINED
    6586
    6687
     
    12321253BS3_CPUBAS2_UD_OFF bs3CpuBasic2_jmpf_mem_rm__ud2
    12331254BS3_PROC_BEGIN_CMN bs3CpuBasic2_jmpf_mem_rm__ud2, BS3_PBC_NEAR
    1234         jmp     far [BS3_CPUBAS2_REF_LABLE_VIA_CS(.fpfn)]
     1255        jmp     far [BS3_CPUBAS2_REF_LABEL_VIA_CS(.fpfn)]
    12351256        int3
    12361257.fpfn:
     
    12451266 %endif
    12461267
    1247 
    1248 BS3_CPUBAS2_UD_OFF bs3CpuBasic2_jmpf_mem_same_r0__ud2
    1249 BS3_PROC_BEGIN_CMN bs3CpuBasic2_jmpf_mem_same_r0__ud2, BS3_PBC_NEAR
    1250         jmp     far [BS3_CPUBAS2_REF_LABLE_VIA_CS(.fpfn)]
     1268; The first 64-bit versions follow AMD behaviour
     1269
     1270%ifndef jmpf_macro_defined
     1271%define jmpf_macro_defined
     1272%macro jmpf_macro 2
     1273
     1274BS3_CPUBAS2_UD_OFF bs3CpuBasic2_jmpf_mem_same_r0__ud2 %+ %1
     1275BS3_PROC_BEGIN_CMN bs3CpuBasic2_jmpf_mem_same_r0__ud2 %+ %1, BS3_PBC_NEAR
     1276        jmp     far [BS3_CPUBAS2_REF_LABEL_VIA_CS(.fpfn)]
    12511277.fpfn:
    12521278 %if TMPL_BITS == 16
     
    12571283        dw      BS3_SEL_R0_CS32
    12581284 %else
    1259         dd      .again wrt FLAT, 0fffff000h
     1285        dd      .again wrt FLAT
     1286  %if %2 != 0
     1287        dd      0fffff000h
     1288  %endif
    12601289        dw      BS3_SEL_R0_CS64
    12611290 %endif
     
    12651294        int3
    12661295        jmp     .again
    1267 BS3_PROC_END_CMN   bs3CpuBasic2_jmpf_mem_same_r0__ud2
    1268 
    1269 BS3_CPUBAS2_UD_OFF bs3CpuBasic2_jmpf_mem_same_r1__ud2
    1270 BS3_PROC_BEGIN_CMN bs3CpuBasic2_jmpf_mem_same_r1__ud2, BS3_PBC_NEAR
    1271         jmp     far [BS3_CPUBAS2_REF_LABLE_VIA_CS(.fpfn)]
     1296BS3_PROC_END_CMN   bs3CpuBasic2_jmpf_mem_same_r0__ud2 %+ %1
     1297
     1298BS3_CPUBAS2_UD_OFF bs3CpuBasic2_jmpf_mem_same_r1__ud2 %+ %1
     1299BS3_PROC_BEGIN_CMN bs3CpuBasic2_jmpf_mem_same_r1__ud2 %+ %1, BS3_PBC_NEAR
     1300        jmp     far [BS3_CPUBAS2_REF_LABEL_VIA_CS(.fpfn)]
    12721301.fpfn:
    12731302 %if TMPL_BITS == 16
     
    12781307        dw      BS3_SEL_R1_CS32 | 1
    12791308 %else
    1280         dd      .again wrt FLAT, 0fffff000h
     1309        dd      .again wrt FLAT
     1310  %if %2 != 0
     1311        dd      0fffff000h
     1312  %endif
    12811313        dw      BS3_SEL_R1_CS64 | 1
    12821314 %endif
    12831315.again: ud2
    12841316        jmp     .again
    1285 BS3_PROC_END_CMN   bs3CpuBasic2_jmpf_mem_same_r1__ud2
    1286 
    1287 BS3_CPUBAS2_UD_OFF bs3CpuBasic2_jmpf_mem_same_r2__ud2
    1288 BS3_PROC_BEGIN_CMN bs3CpuBasic2_jmpf_mem_same_r2__ud2, BS3_PBC_NEAR
    1289         jmp     far [BS3_CPUBAS2_REF_LABLE_VIA_CS(.fpfn)]
     1317BS3_PROC_END_CMN   bs3CpuBasic2_jmpf_mem_same_r1__ud2 %+ %1
     1318
     1319BS3_CPUBAS2_UD_OFF bs3CpuBasic2_jmpf_mem_same_r2__ud2 %+ %1
     1320BS3_PROC_BEGIN_CMN bs3CpuBasic2_jmpf_mem_same_r2__ud2 %+ %1, BS3_PBC_NEAR
     1321        BS3_CPUBAS2_JMP_FAR_MEM_LABEL   .fpfn, 0
    12901322.fpfn:
    12911323 %if TMPL_BITS == 16
     
    12961328        dw      BS3_SEL_R2_CS32 | 2
    12971329 %else
    1298         dd      .again wrt FLAT, 0fffff000h
     1330        dd      .again wrt FLAT
     1331  %if %2 != 0
     1332        dd      0fffff000h
     1333  %endif
    12991334        dw      BS3_SEL_R2_CS64 | 2
    13001335 %endif
    13011336.again: ud2
    13021337        jmp     .again
    1303 BS3_PROC_END_CMN   bs3CpuBasic2_jmpf_mem_same_r2__ud2
    1304 
    1305 BS3_CPUBAS2_UD_OFF bs3CpuBasic2_jmpf_mem_same_r3__ud2
    1306 BS3_PROC_BEGIN_CMN bs3CpuBasic2_jmpf_mem_same_r3__ud2, BS3_PBC_NEAR
    1307         jmp     far [BS3_CPUBAS2_REF_LABLE_VIA_CS(.fpfn)]
     1338BS3_PROC_END_CMN   bs3CpuBasic2_jmpf_mem_same_r2__ud2 %+ %1
     1339
     1340BS3_CPUBAS2_UD_OFF bs3CpuBasic2_jmpf_mem_same_r3__ud2 %+ %1
     1341BS3_PROC_BEGIN_CMN bs3CpuBasic2_jmpf_mem_same_r3__ud2 %+ %1, BS3_PBC_NEAR
     1342        BS3_CPUBAS2_JMP_FAR_MEM_LABEL   .fpfn, 1
    13081343.fpfn:
    13091344 %if TMPL_BITS == 16
     
    13141349        dw      BS3_SEL_R3_CS32 | 3
    13151350 %else
    1316         dd      .again wrt FLAT, 0fffff000h
     1351        dd      .again wrt FLAT
     1352  %if %2 != 0
     1353        dd      0fffff000h
     1354  %endif
    13171355        dw      BS3_SEL_R3_CS64 | 3
    13181356 %endif
    13191357.again: ud2
    13201358        jmp     .again
    1321 BS3_PROC_END_CMN   bs3CpuBasic2_jmpf_mem_same_r3__ud2
    1322 
    1323 BS3_CPUBAS2_UD_OFF bs3CpuBasic2_jmpf_mem_r0_cs16__ud2
    1324 BS3_PROC_BEGIN_CMN bs3CpuBasic2_jmpf_mem_r0_cs16__ud2, BS3_PBC_NEAR
     1359BS3_PROC_END_CMN   bs3CpuBasic2_jmpf_mem_same_r3__ud2 %+ %1
     1360
     1361BS3_CPUBAS2_UD_OFF bs3CpuBasic2_jmpf_mem_r0_cs16__ud2 %+ %1
     1362BS3_PROC_BEGIN_CMN bs3CpuBasic2_jmpf_mem_r0_cs16__ud2 %+ %1, BS3_PBC_NEAR
    13251363  %if TMPL_BITS != 16
    13261364        db      66h
    13271365  %endif
    1328         jmp     far [BS3_CPUBAS2_REF_LABLE_VIA_CS(.fpfn)]
     1366        BS3_CPUBAS2_JMP_FAR_MEM_LABEL   .fpfn, 0
     1367.fpfn:
     1368  %if TMPL_BITS != 64 || %2 == 0
     1369        dw      .again wrt CGROUP16
     1370  %else
     1371        dd      .again wrt CGROUP16, 0
     1372  %endif
     1373        dw      BS3_SEL_R0_CS16
     1374        times 4 int3
     1375.again: ud2
     1376        jmp     .again
     1377BS3_PROC_END_CMN   bs3CpuBasic2_jmpf_mem_r0_cs16__ud2 %+ %1
     1378
     1379BS3_CPUBAS2_UD_OFF bs3CpuBasic2_jmpf_mem_r0_cs32__ud2 %+ %1
     1380BS3_PROC_BEGIN_CMN bs3CpuBasic2_jmpf_mem_r0_cs32__ud2 %+ %1, BS3_PBC_NEAR
     1381  %if TMPL_BITS == 16
     1382        db      66h
     1383  %endif
     1384        BS3_CPUBAS2_JMP_FAR_MEM_LABEL   .fpfn, 0
    13291385.fpfn:
    13301386  %if TMPL_BITS != 64
    1331         dw      .again wrt CGROUP16
     1387        dd      .again wrt FLAT
    13321388  %else
    1333         dd      .again wrt CGROUP16, 0
    1334   %endif
    1335         dw      BS3_SEL_R0_CS16
    1336         times 4 int3
    1337 .again: ud2
    1338         jmp     .again
    1339 BS3_PROC_END_CMN   bs3CpuBasic2_jmpf_mem_r0_cs16__ud2
    1340 
    1341 BS3_CPUBAS2_UD_OFF bs3CpuBasic2_jmpf_mem_r0_cs32__ud2
    1342 BS3_PROC_BEGIN_CMN bs3CpuBasic2_jmpf_mem_r0_cs32__ud2, BS3_PBC_NEAR
    1343   %if TMPL_BITS == 16
    1344         db      66h
    1345   %endif
    1346         jmp     far [BS3_CPUBAS2_REF_LABLE_VIA_CS(.fpfn)]
    1347 .fpfn:
    1348   %if TMPL_BITS != 64
    1349         dd      .again wrt FLAT
    1350   %else
    1351         dd      .again wrt FLAT, 0
     1389        dd      .again wrt FLAT
     1390   %if %2 != 0
     1391        dd      0
     1392   %endif
    13521393  %endif
    13531394        dw      BS3_SEL_R0_CS32
     
    13551396.again: ud2
    13561397        jmp     .again
    1357 BS3_PROC_END_CMN   bs3CpuBasic2_jmpf_mem_r0_cs32__ud2
     1398BS3_PROC_END_CMN   bs3CpuBasic2_jmpf_mem_r0_cs32__ud2 %+ %1
    13581399
    13591400; Do a jmp to BS3_SEL_R0_CS64.  Except for when we're in long mode, this will
    13601401; result in a 16-bit CS with zero base and 4G limit.
    1361 BS3_CPUBAS2_UD_OFF bs3CpuBasic2_jmpf_mem_r0_cs64__ud2
    1362 BS3_PROC_BEGIN_CMN bs3CpuBasic2_jmpf_mem_r0_cs64__ud2, BS3_PBC_NEAR
     1402BS3_CPUBAS2_UD_OFF bs3CpuBasic2_jmpf_mem_r0_cs64__ud2 %+ %1
     1403BS3_PROC_BEGIN_CMN bs3CpuBasic2_jmpf_mem_r0_cs64__ud2 %+ %1, BS3_PBC_NEAR
    13631404 %if TMPL_BITS == 16
    13641405        db      066h
    13651406 %endif
    1366         jmp     far [BS3_CPUBAS2_REF_LABLE_VIA_CS(.fpfn)]
     1407        jmp     far [BS3_CPUBAS2_REF_LABEL_VIA_CS(.fpfn)]
    13671408.fpfn:
    13681409        dd      .jmp_target wrt FLAT
    1369  %if TMPL_BITS == 64
     1410 %if TMPL_BITS == 64 && %2 != 0
    13701411        dd      0fffff000h
    13711412 %endif
     
    13781419.again: ud2
    13791420        jmp     .again
    1380 BS3_PROC_END_CMN   bs3CpuBasic2_jmpf_mem_r0_cs64__ud2
     1421BS3_PROC_END_CMN   bs3CpuBasic2_jmpf_mem_r0_cs64__ud2 %+ %1
    13811422
    13821423; Variation of the previous with a CS16 copy that has the L bit set, emulating
     
    13841425; long mode w/o copying the 3 bytes to the 0xxxxh memory range.)
    13851426; The _c64 version will test that the base is ignored.
    1386 BS3_CPUBAS2_UD_OFF bs3CpuBasic2_jmpf_mem_r0_cs16l__ud2
    1387 BS3_PROC_BEGIN_CMN bs3CpuBasic2_jmpf_mem_r0_cs16l__ud2, BS3_PBC_NEAR
    1388  %if TMPL_BITS != 16
     1427BS3_CPUBAS2_UD_OFF bs3CpuBasic2_jmpf_mem_r0_cs16l__ud2 %+ %1
     1428BS3_PROC_BEGIN_CMN bs3CpuBasic2_jmpf_mem_r0_cs16l__ud2 %+ %1, BS3_PBC_NEAR
     1429 %if TMPL_BITS == 32
    13891430        db      066h
    13901431 %endif
    1391         jmp     far [BS3_CPUBAS2_REF_LABLE_VIA_CS(.fpfn)]
     1432        BS3_CPUBAS2_JMP_FAR_MEM_LABEL   .fpfn, 0
    13921433.fpfn:
    13931434 %if TMPL_BITS != 64
    13941435        dw      .jmp_target wrt CGROUP16
    13951436 %else
    1396         dd      .jmp_target wrt FLAT, 0fffff000h
     1437        dd      .jmp_target wrt FLAT
     1438  %if %2 != 0
     1439        dd      0fffff000h
     1440  %endif
    13971441 %endif
    13981442        dw      BS3_SEL_SPARE_00        ; ASSUMES this is set up as CGROUP16 but with L=1.
     
    14041448.again: ud2
    14051449        jmp     .again
    1406 BS3_PROC_END_CMN   bs3CpuBasic2_jmpf_mem_r0_cs16l__ud2
    1407 
     1450BS3_PROC_END_CMN   bs3CpuBasic2_jmpf_mem_r0_cs16l__ud2 %+ %1
     1451
     1452%endmacro
     1453%endif
     1454
     1455; Instantiate the above code
     1456jmpf_macro , 0
     1457 %if TMPL_BITS == 64
     1458jmpf_macro _intel, 1
     1459 %endif
    14081460
    14091461
  • trunk/src/VBox/ValidationKit/bootsectors/bs3-cpu-basic-2-x0.c

    r97505 r97507  
    41044104PROTO_ALL(bs3CpuBasic2_jmpf_mem_r0_cs16l__ud2);
    41054105
     4106FNBS3FAR  bs3CpuBasic2_jmpf_mem_same_r0__ud2_intel_c64;
     4107FNBS3FAR  bs3CpuBasic2_jmpf_mem_same_r1__ud2_intel_c64;
     4108FNBS3FAR  bs3CpuBasic2_jmpf_mem_same_r2__ud2_intel_c64;
     4109FNBS3FAR  bs3CpuBasic2_jmpf_mem_same_r3__ud2_intel_c64;
     4110FNBS3FAR  bs3CpuBasic2_jmpf_mem_r0_cs16__ud2_intel_c64;
     4111FNBS3FAR  bs3CpuBasic2_jmpf_mem_r0_cs32__ud2_intel_c64;
     4112FNBS3FAR  bs3CpuBasic2_jmpf_mem_r0_cs64__ud2_intel_c64;
     4113FNBS3FAR  bs3CpuBasic2_jmpf_mem_r0_cs16l__ud2_intel_c64;
     4114
    41064115#undef PROTO_ALL
    41074116
     
    43714380            uint8_t     uDstBits;
    43724381            bool        fOpSizePfx;
     4382            int8_t      fFix64OpSize;
    43734383            FPFNBS3FAR  pfnTest;
    43744384        }
     
    43764386        {
    43774387            /* invalid opcodes: */
    4378             {  true, false, BS3_SEL_R0_CS32,        64, false, bs3CpuBasic2_jmpf_ptr_same_r0__ud2_c32, },
    4379             {  true, false, BS3_SEL_R1_CS32 | 1,    64, false, bs3CpuBasic2_jmpf_ptr_same_r1__ud2_c32, },
    4380             {  true, false, BS3_SEL_R2_CS32 | 2,    64, false, bs3CpuBasic2_jmpf_ptr_same_r2__ud2_c32, },
    4381             {  true, false, BS3_SEL_R3_CS32 | 3,    64, false, bs3CpuBasic2_jmpf_ptr_same_r3__ud2_c32, },
    4382             {  true, false, BS3_SEL_R0_CS16,        64, false, bs3CpuBasic2_jmpf_ptr_opsize_flipbit_r0__ud2_c32, },
    4383             {  true, false, BS3_SEL_R0_CS64,        64, false, bs3CpuBasic2_jmpf_ptr_r0_cs64__ud2_c32, },
    4384             {  true, false, BS3_SEL_SPARE_00,       64, false, bs3CpuBasic2_jmpf_ptr_r0_cs16l__ud2_c32, },
    4385 
    4386             {  true,  true, BS3_SEL_R0_CS32,        64, false, bs3CpuBasic2_callf_ptr_same_r0__ud2_c32, },
    4387             {  true,  true, BS3_SEL_R1_CS32 | 1,    64, false, bs3CpuBasic2_callf_ptr_same_r1__ud2_c32, },
    4388             {  true,  true, BS3_SEL_R2_CS32 | 2,    64, false, bs3CpuBasic2_callf_ptr_same_r2__ud2_c32, },
    4389             {  true,  true, BS3_SEL_R3_CS32 | 3,    64, false, bs3CpuBasic2_callf_ptr_same_r3__ud2_c32, },
    4390             {  true,  true, BS3_SEL_R0_CS16,        64, false, bs3CpuBasic2_callf_ptr_opsize_flipbit_r0__ud2_c32, },
    4391             {  true,  true, BS3_SEL_R0_CS64,        64, false, bs3CpuBasic2_callf_ptr_r0_cs64__ud2_c32, },
    4392             {  true,  true, BS3_SEL_SPARE_00,       64, false, bs3CpuBasic2_callf_ptr_r0_cs16l__ud2_c32, },
    4393 
    4394             { false, false, BS3_SEL_R0_CS64,        64, false, bs3CpuBasic2_jmpf_mem_same_r0__ud2_c64, },
    4395             { false, false, BS3_SEL_R1_CS64 | 1,    64, false, bs3CpuBasic2_jmpf_mem_same_r1__ud2_c64, },
    4396             { false, false, BS3_SEL_R2_CS64 | 2,    64, false, bs3CpuBasic2_jmpf_mem_same_r2__ud2_c64, },
    4397             { false, false, BS3_SEL_R3_CS64 | 3,    64, false, bs3CpuBasic2_jmpf_mem_same_r3__ud2_c64, },
    4398             { false, false, BS3_SEL_R0_CS16,        16,  true, bs3CpuBasic2_jmpf_mem_r0_cs16__ud2_c64, },
    4399             { false, false, BS3_SEL_R0_CS32,        32, false, bs3CpuBasic2_jmpf_mem_r0_cs32__ud2_c64, },
    4400             { false, false, BS3_SEL_R0_CS64,        64, false, bs3CpuBasic2_jmpf_mem_r0_cs64__ud2_c64, },  /* 16-bit CS, except in LM. */
    4401             { false, false, BS3_SEL_SPARE_00,       64,  true, bs3CpuBasic2_jmpf_mem_r0_cs16l__ud2_c64, }, /* 16-bit CS, except in LM. */
     4388            {  true, false, BS3_SEL_R0_CS32,        64, false,    -1, bs3CpuBasic2_jmpf_ptr_same_r0__ud2_c32, },
     4389            {  true, false, BS3_SEL_R1_CS32 | 1,    64, false,    -1, bs3CpuBasic2_jmpf_ptr_same_r1__ud2_c32, },
     4390            {  true, false, BS3_SEL_R2_CS32 | 2,    64, false,    -1, bs3CpuBasic2_jmpf_ptr_same_r2__ud2_c32, },
     4391            {  true, false, BS3_SEL_R3_CS32 | 3,    64, false,    -1, bs3CpuBasic2_jmpf_ptr_same_r3__ud2_c32, },
     4392            {  true, false, BS3_SEL_R0_CS16,        64, false,    -1, bs3CpuBasic2_jmpf_ptr_opsize_flipbit_r0__ud2_c32, },
     4393            {  true, false, BS3_SEL_R0_CS64,        64, false,    -1, bs3CpuBasic2_jmpf_ptr_r0_cs64__ud2_c32, },
     4394            {  true, false, BS3_SEL_SPARE_00,       64, false,    -1, bs3CpuBasic2_jmpf_ptr_r0_cs16l__ud2_c32, },
     4395
     4396            {  true,  true, BS3_SEL_R0_CS32,        64, false,    -1, bs3CpuBasic2_callf_ptr_same_r0__ud2_c32, },
     4397            {  true,  true, BS3_SEL_R1_CS32 | 1,    64, false,    -1, bs3CpuBasic2_callf_ptr_same_r1__ud2_c32, },
     4398            {  true,  true, BS3_SEL_R2_CS32 | 2,    64, false,    -1, bs3CpuBasic2_callf_ptr_same_r2__ud2_c32, },
     4399            {  true,  true, BS3_SEL_R3_CS32 | 3,    64, false,    -1, bs3CpuBasic2_callf_ptr_same_r3__ud2_c32, },
     4400            {  true,  true, BS3_SEL_R0_CS16,        64, false,    -1, bs3CpuBasic2_callf_ptr_opsize_flipbit_r0__ud2_c32, },
     4401            {  true,  true, BS3_SEL_R0_CS64,        64, false,    -1, bs3CpuBasic2_callf_ptr_r0_cs64__ud2_c32, },
     4402            {  true,  true, BS3_SEL_SPARE_00,       64, false,    -1, bs3CpuBasic2_callf_ptr_r0_cs16l__ud2_c32, },
     4403
     4404            { false, false, BS3_SEL_R0_CS64,        64, false, false, bs3CpuBasic2_jmpf_mem_same_r0__ud2_c64, },
     4405            { false, false, BS3_SEL_R1_CS64 | 1,    64, false, false, bs3CpuBasic2_jmpf_mem_same_r1__ud2_c64, },
     4406            { false, false, BS3_SEL_R2_CS64 | 2,    64, false, false, bs3CpuBasic2_jmpf_mem_same_r2__ud2_c64, },
     4407            { false, false, BS3_SEL_R3_CS64 | 3,    64, false, false, bs3CpuBasic2_jmpf_mem_same_r3__ud2_c64, },
     4408            { false, false, BS3_SEL_R0_CS16,        16,  true, false, bs3CpuBasic2_jmpf_mem_r0_cs16__ud2_c64, },
     4409            { false, false, BS3_SEL_R0_CS32,        32, false, false, bs3CpuBasic2_jmpf_mem_r0_cs32__ud2_c64, },
     4410            { false, false, BS3_SEL_R0_CS64,        64, false, false, bs3CpuBasic2_jmpf_mem_r0_cs64__ud2_c64, },  /* 16-bit CS, except in LM. */
     4411            { false, false, BS3_SEL_SPARE_00,       64,  true, false, bs3CpuBasic2_jmpf_mem_r0_cs16l__ud2_c64, }, /* 16-bit CS, except in LM. */
     4412
     4413            { false, false, BS3_SEL_R0_CS64,        64, false,  true, bs3CpuBasic2_jmpf_mem_same_r0__ud2_intel_c64, },
     4414            { false, false, BS3_SEL_R1_CS64 | 1,    64, false,  true, bs3CpuBasic2_jmpf_mem_same_r1__ud2_intel_c64, },
     4415            { false, false, BS3_SEL_R2_CS64 | 2,    64, false,  true, bs3CpuBasic2_jmpf_mem_same_r2__ud2_intel_c64, },
     4416            { false, false, BS3_SEL_R3_CS64 | 3,    64, false,  true, bs3CpuBasic2_jmpf_mem_same_r3__ud2_intel_c64, },
     4417            { false, false, BS3_SEL_R0_CS16,        16,  true,  true, bs3CpuBasic2_jmpf_mem_r0_cs16__ud2_intel_c64, },
     4418            { false, false, BS3_SEL_R0_CS32,        32, false,  true, bs3CpuBasic2_jmpf_mem_r0_cs32__ud2_intel_c64, },
     4419            { false, false, BS3_SEL_R0_CS64,        64, false,  true, bs3CpuBasic2_jmpf_mem_r0_cs64__ud2_intel_c64, },  /* 16-bit CS, except in LM. */
     4420            { false, false, BS3_SEL_SPARE_00,       64,  true,  true, bs3CpuBasic2_jmpf_mem_r0_cs16l__ud2_intel_c64, }, /* 16-bit CS, except in LM. */
    44024421        };
     4422        BS3CPUVENDOR const enmCpuVendor = Bs3GetCpuVendor();
     4423        bool const         fFix64OpSize = enmCpuVendor == BS3CPUVENDOR_INTEL; /** @todo what does VIA do? */
    44034424
    44044425        for (iTest = 0; iTest < RT_ELEMENTS(s_aTests); iTest++)
     
    44084429            bool const             fGp       = !s_aTests[iTest].fCall && (s_aTests[iTest].uDstSel & X86_SEL_RPL) != 0;
    44094430            uint8_t const BS3_FAR *fpbCode   = Bs3SelLnkPtrToCurPtr(s_aTests[iTest].pfnTest);
     4431
     4432            if (s_aTests[iTest].fFix64OpSize != fFix64OpSize && s_aTests[iTest].fFix64OpSize >= 0)
     4433                continue;
    44104434
    44114435            Ctx.rip.u = Bs3SelLnkPtrToFlat(s_aTests[iTest].pfnTest);
     
    44144438            if (s_aTests[iTest].uDstBits == 16)
    44154439                CtxExpected.rip.u &= UINT16_MAX;
    4416             else if (s_aTests[iTest].uDstBits == 64)
     4440            else if (s_aTests[iTest].uDstBits == 64 && fFix64OpSize)
    44174441                CtxExpected.rip.u |= UINT64_C(0xfffff00000000000);
    44184442
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